{
  "version": 3,
  "sources": ["../node_modules/base64-js/index.js", "../node_modules/ieee754/index.js", "../node_modules/buffer/index.js", "../esbuild.inject.js", "../node_modules/@deepstream/client/dist/src/record/merge-strategy.js", "../node_modules/@deepstream/client/dist/src/client-options.js", "../node_modules/@deepstream/protobuf/types/general.ts", "../node_modules/@deepstream/protobuf/types/record.ts", "../node_modules/@deepstream/protobuf/types/auth.ts", "../node_modules/@deepstream/protobuf/types/event.ts", "../node_modules/@deepstream/protobuf/types/rpc.ts", "../node_modules/@deepstream/protobuf/types/presence.ts", "../node_modules/@deepstream/protobuf/types/connection.ts", "../node_modules/@deepstream/protobuf/types/cluster.ts", "../node_modules/@deepstream/protobuf/types/lock.ts", "../node_modules/@deepstream/protobuf/types/parser.ts", "../node_modules/@deepstream/protobuf/types/monitoring.ts", "../node_modules/@deepstream/protobuf/types/state.ts", "../node_modules/@deepstream/protobuf/types/all.ts", "../node_modules/@deepstream/protobuf/types/messages.ts", "../node_modules/@deepstream/client/dist/src/constants.js", "../node_modules/@deepstream/client/dist/src/util/logger.js", "../node_modules/@deepstream/client/dist/src/util/emitter.js", "../node_modules/@deepstream/client/dist/src/util/timeout-registry.js", "../node_modules/@deepstream/client/dist/src/util/interval-timer-registry.js", "../node_modules/@deepstream/client/dist/src/util/native-timer-registry.js", "../node_modules/@protobufjs/aspromise/index.js", "../node_modules/@protobufjs/base64/index.js", "../node_modules/@protobufjs/eventemitter/index.js", "../node_modules/@protobufjs/float/index.js", "../node_modules/@protobufjs/inquire/index.js", "../node_modules/@protobufjs/utf8/index.js", "../node_modules/@protobufjs/pool/index.js", "../node_modules/@deepstream/protobuf/node_modules/protobufjs/src/util/longbits.js", "../node_modules/@deepstream/protobuf/node_modules/protobufjs/src/util/minimal.js", "../node_modules/@deepstream/protobuf/node_modules/protobufjs/src/writer.js", "../node_modules/@deepstream/protobuf/node_modules/protobufjs/src/writer_buffer.js", "../node_modules/@deepstream/protobuf/node_modules/protobufjs/src/reader.js", "../node_modules/@deepstream/protobuf/node_modules/protobufjs/src/reader_buffer.js", "../node_modules/@deepstream/protobuf/node_modules/protobufjs/src/rpc/service.js", "../node_modules/@deepstream/protobuf/node_modules/protobufjs/src/rpc.js", "../node_modules/@deepstream/protobuf/node_modules/protobufjs/src/roots.js", "../node_modules/@deepstream/protobuf/node_modules/protobufjs/src/index-minimal.js", "../node_modules/@deepstream/protobuf/node_modules/protobufjs/minimal.js", "../node_modules/@deepstream/protobuf/dist/generated/protobuf.js", "../node_modules/@deepstream/protobuf/src/protobuf-map.ts", "../node_modules/@deepstream/protobuf/src/message-parser.ts", "../node_modules/@deepstream/client/dist/src/util/state-machine.js", "../node_modules/@deepstream/client/dist/src/util/utils.js", "../node_modules/@deepstream/client/dist/package.json", "../node_modules/@deepstream/client/dist/src/connection/connection.js", "../node_modules/@deepstream/protobuf/src/message-builder.ts", "../node_modules/@deepstream/client/dist/src/connection/socket-factory.js", "../node_modules/@deepstream/client/dist/src/util/listener.js", "../node_modules/@deepstream/client/dist/src/util/bulk-subscription-service.js", "../node_modules/@deepstream/client/dist/src/event/event-handler.js", "../node_modules/@deepstream/client/dist/src/rpc/rpc.js", "../node_modules/@deepstream/client/dist/src/rpc/rpc-response.js", "../node_modules/@deepstream/client/dist/src/rpc/rpc-handler.js", "../node_modules/@deepstream/client/dist/src/record/json-path.js", "../node_modules/@deepstream/client/dist/src/record/record-core.js", "../node_modules/@deepstream/client/dist/src/record/record.js", "../node_modules/@deepstream/client/dist/src/record/anonymous-record.js", "../node_modules/@deepstream/client/dist/src/record/list.js", "../node_modules/@deepstream/client/dist/src/record/dequeue.js", "../node_modules/@deepstream/client/dist/src/record/single-notifier.js", "../node_modules/@deepstream/client/dist/src/record/write-ack-service.js", "../node_modules/@deepstream/client/dist/src/record/dirty-service.js", "../node_modules/@deepstream/client/dist/src/record/merge-strategy-service.js", "../node_modules/@deepstream/client/dist/src/record/record-handler.js", "../node_modules/@deepstream/client/dist/src/presence/presence-handler.js", "../node_modules/@deepstream/client/dist/src/storage/indexdb-storage-service.js", "../node_modules/@deepstream/client/dist/src/storage/localstorage-storage-service.js", "../node_modules/@deepstream/client/dist/src/storage/noop-storage-service.js", "../node_modules/@deepstream/client/dist/src/deepstream-client.js", "../node_modules/@deepstream/client/dist/src/deepstream.js", "../src/index.ts", "../src/core.ts", "../version.js", "../src/log.ts", "../src/Room.ts", "../src/validate.ts", "../src/Record.ts", "../node_modules/on-change/index.js", "../node_modules/on-change/lib/constants.js", "../node_modules/on-change/lib/is-builtin.js", "../node_modules/on-change/lib/path.js", "../node_modules/on-change/lib/is-array.js", "../node_modules/on-change/lib/is-symbol.js", "../node_modules/on-change/lib/is-iterator.js", "../node_modules/on-change/lib/wrap-iterator.js", "../node_modules/on-change/lib/ignore-property.js", "../node_modules/on-change/lib/cache.js", "../node_modules/on-change/lib/smart-clone/smart-clone.js", "../node_modules/on-change/lib/is-object.js", "../node_modules/on-change/lib/smart-clone/clone/clone-object.js", "../node_modules/on-change/lib/smart-clone/methods/array.js", "../node_modules/on-change/lib/smart-clone/diff/is-diff-certain.js", "../node_modules/on-change/lib/smart-clone/diff/is-diff-arrays.js", "../node_modules/on-change/lib/smart-clone/methods/object.js", "../node_modules/on-change/lib/smart-clone/methods/set.js", "../node_modules/on-change/lib/smart-clone/diff/is-diff-sets.js", "../node_modules/on-change/lib/smart-clone/methods/map.js", "../node_modules/on-change/lib/smart-clone/diff/is-diff-maps.js", "../node_modules/on-change/lib/smart-clone/clone/clone-array.js", "../node_modules/on-change/lib/smart-clone/clone/clone-date.js", "../node_modules/on-change/lib/smart-clone/clone/clone-set.js", "../node_modules/on-change/lib/smart-clone/clone/clone-map.js", "../node_modules/on-change/lib/smart-clone/clone/clone-weakset.js", "../node_modules/on-change/lib/smart-clone/clone/clone-weakmap.js", "../src/patch.ts", "../src/addons/info_panel/index.js", "../node_modules/reefjs/src/components/utilities.js", "../node_modules/reefjs/src/components/signal.js", "../node_modules/reefjs/src/components/store.js", "../node_modules/reefjs/src/components/render.js", "../node_modules/reefjs/src/components/focus.js", "../node_modules/reefjs/src/components/component.js", "../src/addons/info_panel/info.css"],
  "sourcesContent": ["'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n  lookup[i] = code[i]\n  revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n  var len = b64.length\n\n  if (len % 4 > 0) {\n    throw new Error('Invalid string. Length must be a multiple of 4')\n  }\n\n  // Trim off extra bytes after placeholder bytes are found\n  // See: https://github.com/beatgammit/base64-js/issues/42\n  var validLen = b64.indexOf('=')\n  if (validLen === -1) validLen = len\n\n  var placeHoldersLen = validLen === len\n    ? 0\n    : 4 - (validLen % 4)\n\n  return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n  var lens = getLens(b64)\n  var validLen = lens[0]\n  var placeHoldersLen = lens[1]\n  return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n  return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n  var tmp\n  var lens = getLens(b64)\n  var validLen = lens[0]\n  var placeHoldersLen = lens[1]\n\n  var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n  var curByte = 0\n\n  // if there are placeholders, only get up to the last complete 4 chars\n  var len = placeHoldersLen > 0\n    ? validLen - 4\n    : validLen\n\n  var i\n  for (i = 0; i < len; i += 4) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 18) |\n      (revLookup[b64.charCodeAt(i + 1)] << 12) |\n      (revLookup[b64.charCodeAt(i + 2)] << 6) |\n      revLookup[b64.charCodeAt(i + 3)]\n    arr[curByte++] = (tmp >> 16) & 0xFF\n    arr[curByte++] = (tmp >> 8) & 0xFF\n    arr[curByte++] = tmp & 0xFF\n  }\n\n  if (placeHoldersLen === 2) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 2) |\n      (revLookup[b64.charCodeAt(i + 1)] >> 4)\n    arr[curByte++] = tmp & 0xFF\n  }\n\n  if (placeHoldersLen === 1) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 10) |\n      (revLookup[b64.charCodeAt(i + 1)] << 4) |\n      (revLookup[b64.charCodeAt(i + 2)] >> 2)\n    arr[curByte++] = (tmp >> 8) & 0xFF\n    arr[curByte++] = tmp & 0xFF\n  }\n\n  return arr\n}\n\nfunction tripletToBase64 (num) {\n  return lookup[num >> 18 & 0x3F] +\n    lookup[num >> 12 & 0x3F] +\n    lookup[num >> 6 & 0x3F] +\n    lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n  var tmp\n  var output = []\n  for (var i = start; i < end; i += 3) {\n    tmp =\n      ((uint8[i] << 16) & 0xFF0000) +\n      ((uint8[i + 1] << 8) & 0xFF00) +\n      (uint8[i + 2] & 0xFF)\n    output.push(tripletToBase64(tmp))\n  }\n  return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n  var tmp\n  var len = uint8.length\n  var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n  var parts = []\n  var maxChunkLength = 16383 // must be multiple of 3\n\n  // go through the array every three bytes, we'll deal with trailing stuff later\n  for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n    parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n  }\n\n  // pad the end with zeros, but make sure to not forget the extra bytes\n  if (extraBytes === 1) {\n    tmp = uint8[len - 1]\n    parts.push(\n      lookup[tmp >> 2] +\n      lookup[(tmp << 4) & 0x3F] +\n      '=='\n    )\n  } else if (extraBytes === 2) {\n    tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n    parts.push(\n      lookup[tmp >> 10] +\n      lookup[(tmp >> 4) & 0x3F] +\n      lookup[(tmp << 2) & 0x3F] +\n      '='\n    )\n  }\n\n  return parts.join('')\n}\n", "/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n  var e, m\n  var eLen = (nBytes * 8) - mLen - 1\n  var eMax = (1 << eLen) - 1\n  var eBias = eMax >> 1\n  var nBits = -7\n  var i = isLE ? (nBytes - 1) : 0\n  var d = isLE ? -1 : 1\n  var s = buffer[offset + i]\n\n  i += d\n\n  e = s & ((1 << (-nBits)) - 1)\n  s >>= (-nBits)\n  nBits += eLen\n  for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n  m = e & ((1 << (-nBits)) - 1)\n  e >>= (-nBits)\n  nBits += mLen\n  for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n  if (e === 0) {\n    e = 1 - eBias\n  } else if (e === eMax) {\n    return m ? NaN : ((s ? -1 : 1) * Infinity)\n  } else {\n    m = m + Math.pow(2, mLen)\n    e = e - eBias\n  }\n  return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n  var e, m, c\n  var eLen = (nBytes * 8) - mLen - 1\n  var eMax = (1 << eLen) - 1\n  var eBias = eMax >> 1\n  var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n  var i = isLE ? 0 : (nBytes - 1)\n  var d = isLE ? 1 : -1\n  var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n  value = Math.abs(value)\n\n  if (isNaN(value) || value === Infinity) {\n    m = isNaN(value) ? 1 : 0\n    e = eMax\n  } else {\n    e = Math.floor(Math.log(value) / Math.LN2)\n    if (value * (c = Math.pow(2, -e)) < 1) {\n      e--\n      c *= 2\n    }\n    if (e + eBias >= 1) {\n      value += rt / c\n    } else {\n      value += rt * Math.pow(2, 1 - eBias)\n    }\n    if (value * c >= 2) {\n      e++\n      c /= 2\n    }\n\n    if (e + eBias >= eMax) {\n      m = 0\n      e = eMax\n    } else if (e + eBias >= 1) {\n      m = ((value * c) - 1) * Math.pow(2, mLen)\n      e = e + eBias\n    } else {\n      m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n      e = 0\n    }\n  }\n\n  for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n  e = (e << mLen) | m\n  eLen += mLen\n  for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n  buffer[offset + i - d] |= s * 128\n}\n", "/*!\n * The buffer module from node.js, for the browser.\n *\n * @author   Feross Aboukhadijeh <https://feross.org>\n * @license  MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nconst base64 = require('base64-js')\nconst ieee754 = require('ieee754')\nconst customInspectSymbol =\n  (typeof Symbol === 'function' && typeof Symbol['for'] === 'function') // eslint-disable-line dot-notation\n    ? Symbol['for']('nodejs.util.inspect.custom') // eslint-disable-line dot-notation\n    : null\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\nconst K_MAX_LENGTH = 0x7fffffff\nexports.kMaxLength = K_MAX_LENGTH\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n *   === true    Use Uint8Array implementation (fastest)\n *   === false   Print warning and recommend using `buffer` v4.x which has an Object\n *               implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * We report that the browser does not support typed arrays if the are not subclassable\n * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`\n * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support\n * for __proto__ and has a buggy typed array implementation.\n */\nBuffer.TYPED_ARRAY_SUPPORT = typedArraySupport()\n\nif (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&\n    typeof console.error === 'function') {\n  console.error(\n    'This browser lacks typed array (Uint8Array) support which is required by ' +\n    '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'\n  )\n}\n\nfunction typedArraySupport () {\n  // Can typed array instances can be augmented?\n  try {\n    const arr = new Uint8Array(1)\n    const proto = { foo: function () { return 42 } }\n    Object.setPrototypeOf(proto, Uint8Array.prototype)\n    Object.setPrototypeOf(arr, proto)\n    return arr.foo() === 42\n  } catch (e) {\n    return false\n  }\n}\n\nObject.defineProperty(Buffer.prototype, 'parent', {\n  enumerable: true,\n  get: function () {\n    if (!Buffer.isBuffer(this)) return undefined\n    return this.buffer\n  }\n})\n\nObject.defineProperty(Buffer.prototype, 'offset', {\n  enumerable: true,\n  get: function () {\n    if (!Buffer.isBuffer(this)) return undefined\n    return this.byteOffset\n  }\n})\n\nfunction createBuffer (length) {\n  if (length > K_MAX_LENGTH) {\n    throw new RangeError('The value \"' + length + '\" is invalid for option \"size\"')\n  }\n  // Return an augmented `Uint8Array` instance\n  const buf = new Uint8Array(length)\n  Object.setPrototypeOf(buf, Buffer.prototype)\n  return buf\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n  // Common case.\n  if (typeof arg === 'number') {\n    if (typeof encodingOrOffset === 'string') {\n      throw new TypeError(\n        'The \"string\" argument must be of type string. Received type number'\n      )\n    }\n    return allocUnsafe(arg)\n  }\n  return from(arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\nfunction from (value, encodingOrOffset, length) {\n  if (typeof value === 'string') {\n    return fromString(value, encodingOrOffset)\n  }\n\n  if (ArrayBuffer.isView(value)) {\n    return fromArrayView(value)\n  }\n\n  if (value == null) {\n    throw new TypeError(\n      'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n      'or Array-like Object. Received type ' + (typeof value)\n    )\n  }\n\n  if (isInstance(value, ArrayBuffer) ||\n      (value && isInstance(value.buffer, ArrayBuffer))) {\n    return fromArrayBuffer(value, encodingOrOffset, length)\n  }\n\n  if (typeof SharedArrayBuffer !== 'undefined' &&\n      (isInstance(value, SharedArrayBuffer) ||\n      (value && isInstance(value.buffer, SharedArrayBuffer)))) {\n    return fromArrayBuffer(value, encodingOrOffset, length)\n  }\n\n  if (typeof value === 'number') {\n    throw new TypeError(\n      'The \"value\" argument must not be of type number. Received type number'\n    )\n  }\n\n  const valueOf = value.valueOf && value.valueOf()\n  if (valueOf != null && valueOf !== value) {\n    return Buffer.from(valueOf, encodingOrOffset, length)\n  }\n\n  const b = fromObject(value)\n  if (b) return b\n\n  if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null &&\n      typeof value[Symbol.toPrimitive] === 'function') {\n    return Buffer.from(value[Symbol.toPrimitive]('string'), encodingOrOffset, length)\n  }\n\n  throw new TypeError(\n    'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n    'or Array-like Object. Received type ' + (typeof value)\n  )\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n  return from(value, encodingOrOffset, length)\n}\n\n// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:\n// https://github.com/feross/buffer/pull/148\nObject.setPrototypeOf(Buffer.prototype, Uint8Array.prototype)\nObject.setPrototypeOf(Buffer, Uint8Array)\n\nfunction assertSize (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('\"size\" argument must be of type number')\n  } else if (size < 0) {\n    throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n  }\n}\n\nfunction alloc (size, fill, encoding) {\n  assertSize(size)\n  if (size <= 0) {\n    return createBuffer(size)\n  }\n  if (fill !== undefined) {\n    // Only pay attention to encoding if it's a string. This\n    // prevents accidentally sending in a number that would\n    // be interpreted as a start offset.\n    return typeof encoding === 'string'\n      ? createBuffer(size).fill(fill, encoding)\n      : createBuffer(size).fill(fill)\n  }\n  return createBuffer(size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n  return alloc(size, fill, encoding)\n}\n\nfunction allocUnsafe (size) {\n  assertSize(size)\n  return createBuffer(size < 0 ? 0 : checked(size) | 0)\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n  return allocUnsafe(size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n  return allocUnsafe(size)\n}\n\nfunction fromString (string, encoding) {\n  if (typeof encoding !== 'string' || encoding === '') {\n    encoding = 'utf8'\n  }\n\n  if (!Buffer.isEncoding(encoding)) {\n    throw new TypeError('Unknown encoding: ' + encoding)\n  }\n\n  const length = byteLength(string, encoding) | 0\n  let buf = createBuffer(length)\n\n  const actual = buf.write(string, encoding)\n\n  if (actual !== length) {\n    // Writing a hex string, for example, that contains invalid characters will\n    // cause everything after the first invalid character to be ignored. (e.g.\n    // 'abxxcd' will be treated as 'ab')\n    buf = buf.slice(0, actual)\n  }\n\n  return buf\n}\n\nfunction fromArrayLike (array) {\n  const length = array.length < 0 ? 0 : checked(array.length) | 0\n  const buf = createBuffer(length)\n  for (let i = 0; i < length; i += 1) {\n    buf[i] = array[i] & 255\n  }\n  return buf\n}\n\nfunction fromArrayView (arrayView) {\n  if (isInstance(arrayView, Uint8Array)) {\n    const copy = new Uint8Array(arrayView)\n    return fromArrayBuffer(copy.buffer, copy.byteOffset, copy.byteLength)\n  }\n  return fromArrayLike(arrayView)\n}\n\nfunction fromArrayBuffer (array, byteOffset, length) {\n  if (byteOffset < 0 || array.byteLength < byteOffset) {\n    throw new RangeError('\"offset\" is outside of buffer bounds')\n  }\n\n  if (array.byteLength < byteOffset + (length || 0)) {\n    throw new RangeError('\"length\" is outside of buffer bounds')\n  }\n\n  let buf\n  if (byteOffset === undefined && length === undefined) {\n    buf = new Uint8Array(array)\n  } else if (length === undefined) {\n    buf = new Uint8Array(array, byteOffset)\n  } else {\n    buf = new Uint8Array(array, byteOffset, length)\n  }\n\n  // Return an augmented `Uint8Array` instance\n  Object.setPrototypeOf(buf, Buffer.prototype)\n\n  return buf\n}\n\nfunction fromObject (obj) {\n  if (Buffer.isBuffer(obj)) {\n    const len = checked(obj.length) | 0\n    const buf = createBuffer(len)\n\n    if (buf.length === 0) {\n      return buf\n    }\n\n    obj.copy(buf, 0, 0, len)\n    return buf\n  }\n\n  if (obj.length !== undefined) {\n    if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {\n      return createBuffer(0)\n    }\n    return fromArrayLike(obj)\n  }\n\n  if (obj.type === 'Buffer' && Array.isArray(obj.data)) {\n    return fromArrayLike(obj.data)\n  }\n}\n\nfunction checked (length) {\n  // Note: cannot use `length < K_MAX_LENGTH` here because that fails when\n  // length is NaN (which is otherwise coerced to zero.)\n  if (length >= K_MAX_LENGTH) {\n    throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n                         'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')\n  }\n  return length | 0\n}\n\nfunction SlowBuffer (length) {\n  if (+length != length) { // eslint-disable-line eqeqeq\n    length = 0\n  }\n  return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n  return b != null && b._isBuffer === true &&\n    b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false\n}\n\nBuffer.compare = function compare (a, b) {\n  if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength)\n  if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength)\n  if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n    throw new TypeError(\n      'The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array'\n    )\n  }\n\n  if (a === b) return 0\n\n  let x = a.length\n  let y = b.length\n\n  for (let i = 0, len = Math.min(x, y); i < len; ++i) {\n    if (a[i] !== b[i]) {\n      x = a[i]\n      y = b[i]\n      break\n    }\n  }\n\n  if (x < y) return -1\n  if (y < x) return 1\n  return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n  switch (String(encoding).toLowerCase()) {\n    case 'hex':\n    case 'utf8':\n    case 'utf-8':\n    case 'ascii':\n    case 'latin1':\n    case 'binary':\n    case 'base64':\n    case 'ucs2':\n    case 'ucs-2':\n    case 'utf16le':\n    case 'utf-16le':\n      return true\n    default:\n      return false\n  }\n}\n\nBuffer.concat = function concat (list, length) {\n  if (!Array.isArray(list)) {\n    throw new TypeError('\"list\" argument must be an Array of Buffers')\n  }\n\n  if (list.length === 0) {\n    return Buffer.alloc(0)\n  }\n\n  let i\n  if (length === undefined) {\n    length = 0\n    for (i = 0; i < list.length; ++i) {\n      length += list[i].length\n    }\n  }\n\n  const buffer = Buffer.allocUnsafe(length)\n  let pos = 0\n  for (i = 0; i < list.length; ++i) {\n    let buf = list[i]\n    if (isInstance(buf, Uint8Array)) {\n      if (pos + buf.length > buffer.length) {\n        if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf)\n        buf.copy(buffer, pos)\n      } else {\n        Uint8Array.prototype.set.call(\n          buffer,\n          buf,\n          pos\n        )\n      }\n    } else if (!Buffer.isBuffer(buf)) {\n      throw new TypeError('\"list\" argument must be an Array of Buffers')\n    } else {\n      buf.copy(buffer, pos)\n    }\n    pos += buf.length\n  }\n  return buffer\n}\n\nfunction byteLength (string, encoding) {\n  if (Buffer.isBuffer(string)) {\n    return string.length\n  }\n  if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {\n    return string.byteLength\n  }\n  if (typeof string !== 'string') {\n    throw new TypeError(\n      'The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. ' +\n      'Received type ' + typeof string\n    )\n  }\n\n  const len = string.length\n  const mustMatch = (arguments.length > 2 && arguments[2] === true)\n  if (!mustMatch && len === 0) return 0\n\n  // Use a for loop to avoid recursion\n  let loweredCase = false\n  for (;;) {\n    switch (encoding) {\n      case 'ascii':\n      case 'latin1':\n      case 'binary':\n        return len\n      case 'utf8':\n      case 'utf-8':\n        return utf8ToBytes(string).length\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return len * 2\n      case 'hex':\n        return len >>> 1\n      case 'base64':\n        return base64ToBytes(string).length\n      default:\n        if (loweredCase) {\n          return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8\n        }\n        encoding = ('' + encoding).toLowerCase()\n        loweredCase = true\n    }\n  }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n  let loweredCase = false\n\n  // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n  // property of a typed array.\n\n  // This behaves neither like String nor Uint8Array in that we set start/end\n  // to their upper/lower bounds if the value passed is out of range.\n  // undefined is handled specially as per ECMA-262 6th Edition,\n  // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n  if (start === undefined || start < 0) {\n    start = 0\n  }\n  // Return early if start > this.length. Done here to prevent potential uint32\n  // coercion fail below.\n  if (start > this.length) {\n    return ''\n  }\n\n  if (end === undefined || end > this.length) {\n    end = this.length\n  }\n\n  if (end <= 0) {\n    return ''\n  }\n\n  // Force coercion to uint32. This will also coerce falsey/NaN values to 0.\n  end >>>= 0\n  start >>>= 0\n\n  if (end <= start) {\n    return ''\n  }\n\n  if (!encoding) encoding = 'utf8'\n\n  while (true) {\n    switch (encoding) {\n      case 'hex':\n        return hexSlice(this, start, end)\n\n      case 'utf8':\n      case 'utf-8':\n        return utf8Slice(this, start, end)\n\n      case 'ascii':\n        return asciiSlice(this, start, end)\n\n      case 'latin1':\n      case 'binary':\n        return latin1Slice(this, start, end)\n\n      case 'base64':\n        return base64Slice(this, start, end)\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return utf16leSlice(this, start, end)\n\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n        encoding = (encoding + '').toLowerCase()\n        loweredCase = true\n    }\n  }\n}\n\n// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)\n// to detect a Buffer instance. It's not possible to use `instanceof Buffer`\n// reliably in a browserify context because there could be multiple different\n// copies of the 'buffer' package in use. This method works even for Buffer\n// instances that were created from another copy of the `buffer` package.\n// See: https://github.com/feross/buffer/issues/154\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n  const i = b[n]\n  b[n] = b[m]\n  b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n  const len = this.length\n  if (len % 2 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 16-bits')\n  }\n  for (let i = 0; i < len; i += 2) {\n    swap(this, i, i + 1)\n  }\n  return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n  const len = this.length\n  if (len % 4 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 32-bits')\n  }\n  for (let i = 0; i < len; i += 4) {\n    swap(this, i, i + 3)\n    swap(this, i + 1, i + 2)\n  }\n  return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n  const len = this.length\n  if (len % 8 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 64-bits')\n  }\n  for (let i = 0; i < len; i += 8) {\n    swap(this, i, i + 7)\n    swap(this, i + 1, i + 6)\n    swap(this, i + 2, i + 5)\n    swap(this, i + 3, i + 4)\n  }\n  return this\n}\n\nBuffer.prototype.toString = function toString () {\n  const length = this.length\n  if (length === 0) return ''\n  if (arguments.length === 0) return utf8Slice(this, 0, length)\n  return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.toLocaleString = Buffer.prototype.toString\n\nBuffer.prototype.equals = function equals (b) {\n  if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n  if (this === b) return true\n  return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n  let str = ''\n  const max = exports.INSPECT_MAX_BYTES\n  str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim()\n  if (this.length > max) str += ' ... '\n  return '<Buffer ' + str + '>'\n}\nif (customInspectSymbol) {\n  Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n  if (isInstance(target, Uint8Array)) {\n    target = Buffer.from(target, target.offset, target.byteLength)\n  }\n  if (!Buffer.isBuffer(target)) {\n    throw new TypeError(\n      'The \"target\" argument must be one of type Buffer or Uint8Array. ' +\n      'Received type ' + (typeof target)\n    )\n  }\n\n  if (start === undefined) {\n    start = 0\n  }\n  if (end === undefined) {\n    end = target ? target.length : 0\n  }\n  if (thisStart === undefined) {\n    thisStart = 0\n  }\n  if (thisEnd === undefined) {\n    thisEnd = this.length\n  }\n\n  if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n    throw new RangeError('out of range index')\n  }\n\n  if (thisStart >= thisEnd && start >= end) {\n    return 0\n  }\n  if (thisStart >= thisEnd) {\n    return -1\n  }\n  if (start >= end) {\n    return 1\n  }\n\n  start >>>= 0\n  end >>>= 0\n  thisStart >>>= 0\n  thisEnd >>>= 0\n\n  if (this === target) return 0\n\n  let x = thisEnd - thisStart\n  let y = end - start\n  const len = Math.min(x, y)\n\n  const thisCopy = this.slice(thisStart, thisEnd)\n  const targetCopy = target.slice(start, end)\n\n  for (let i = 0; i < len; ++i) {\n    if (thisCopy[i] !== targetCopy[i]) {\n      x = thisCopy[i]\n      y = targetCopy[i]\n      break\n    }\n  }\n\n  if (x < y) return -1\n  if (y < x) return 1\n  return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n  // Empty buffer means no match\n  if (buffer.length === 0) return -1\n\n  // Normalize byteOffset\n  if (typeof byteOffset === 'string') {\n    encoding = byteOffset\n    byteOffset = 0\n  } else if (byteOffset > 0x7fffffff) {\n    byteOffset = 0x7fffffff\n  } else if (byteOffset < -0x80000000) {\n    byteOffset = -0x80000000\n  }\n  byteOffset = +byteOffset // Coerce to Number.\n  if (numberIsNaN(byteOffset)) {\n    // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n    byteOffset = dir ? 0 : (buffer.length - 1)\n  }\n\n  // Normalize byteOffset: negative offsets start from the end of the buffer\n  if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n  if (byteOffset >= buffer.length) {\n    if (dir) return -1\n    else byteOffset = buffer.length - 1\n  } else if (byteOffset < 0) {\n    if (dir) byteOffset = 0\n    else return -1\n  }\n\n  // Normalize val\n  if (typeof val === 'string') {\n    val = Buffer.from(val, encoding)\n  }\n\n  // Finally, search either indexOf (if dir is true) or lastIndexOf\n  if (Buffer.isBuffer(val)) {\n    // Special case: looking for empty string/buffer always fails\n    if (val.length === 0) {\n      return -1\n    }\n    return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n  } else if (typeof val === 'number') {\n    val = val & 0xFF // Search for a byte value [0-255]\n    if (typeof Uint8Array.prototype.indexOf === 'function') {\n      if (dir) {\n        return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n      } else {\n        return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n      }\n    }\n    return arrayIndexOf(buffer, [val], byteOffset, encoding, dir)\n  }\n\n  throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n  let indexSize = 1\n  let arrLength = arr.length\n  let valLength = val.length\n\n  if (encoding !== undefined) {\n    encoding = String(encoding).toLowerCase()\n    if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n        encoding === 'utf16le' || encoding === 'utf-16le') {\n      if (arr.length < 2 || val.length < 2) {\n        return -1\n      }\n      indexSize = 2\n      arrLength /= 2\n      valLength /= 2\n      byteOffset /= 2\n    }\n  }\n\n  function read (buf, i) {\n    if (indexSize === 1) {\n      return buf[i]\n    } else {\n      return buf.readUInt16BE(i * indexSize)\n    }\n  }\n\n  let i\n  if (dir) {\n    let foundIndex = -1\n    for (i = byteOffset; i < arrLength; i++) {\n      if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n        if (foundIndex === -1) foundIndex = i\n        if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n      } else {\n        if (foundIndex !== -1) i -= i - foundIndex\n        foundIndex = -1\n      }\n    }\n  } else {\n    if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n    for (i = byteOffset; i >= 0; i--) {\n      let found = true\n      for (let j = 0; j < valLength; j++) {\n        if (read(arr, i + j) !== read(val, j)) {\n          found = false\n          break\n        }\n      }\n      if (found) return i\n    }\n  }\n\n  return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n  return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n  return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n  return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n  offset = Number(offset) || 0\n  const remaining = buf.length - offset\n  if (!length) {\n    length = remaining\n  } else {\n    length = Number(length)\n    if (length > remaining) {\n      length = remaining\n    }\n  }\n\n  const strLen = string.length\n\n  if (length > strLen / 2) {\n    length = strLen / 2\n  }\n  let i\n  for (i = 0; i < length; ++i) {\n    const parsed = parseInt(string.substr(i * 2, 2), 16)\n    if (numberIsNaN(parsed)) return i\n    buf[offset + i] = parsed\n  }\n  return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n  return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n  return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n  return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n  return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n  // Buffer#write(string)\n  if (offset === undefined) {\n    encoding = 'utf8'\n    length = this.length\n    offset = 0\n  // Buffer#write(string, encoding)\n  } else if (length === undefined && typeof offset === 'string') {\n    encoding = offset\n    length = this.length\n    offset = 0\n  // Buffer#write(string, offset[, length][, encoding])\n  } else if (isFinite(offset)) {\n    offset = offset >>> 0\n    if (isFinite(length)) {\n      length = length >>> 0\n      if (encoding === undefined) encoding = 'utf8'\n    } else {\n      encoding = length\n      length = undefined\n    }\n  } else {\n    throw new Error(\n      'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n    )\n  }\n\n  const remaining = this.length - offset\n  if (length === undefined || length > remaining) length = remaining\n\n  if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n    throw new RangeError('Attempt to write outside buffer bounds')\n  }\n\n  if (!encoding) encoding = 'utf8'\n\n  let loweredCase = false\n  for (;;) {\n    switch (encoding) {\n      case 'hex':\n        return hexWrite(this, string, offset, length)\n\n      case 'utf8':\n      case 'utf-8':\n        return utf8Write(this, string, offset, length)\n\n      case 'ascii':\n      case 'latin1':\n      case 'binary':\n        return asciiWrite(this, string, offset, length)\n\n      case 'base64':\n        // Warning: maxLength not taken into account in base64Write\n        return base64Write(this, string, offset, length)\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return ucs2Write(this, string, offset, length)\n\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n        encoding = ('' + encoding).toLowerCase()\n        loweredCase = true\n    }\n  }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n  return {\n    type: 'Buffer',\n    data: Array.prototype.slice.call(this._arr || this, 0)\n  }\n}\n\nfunction base64Slice (buf, start, end) {\n  if (start === 0 && end === buf.length) {\n    return base64.fromByteArray(buf)\n  } else {\n    return base64.fromByteArray(buf.slice(start, end))\n  }\n}\n\nfunction utf8Slice (buf, start, end) {\n  end = Math.min(buf.length, end)\n  const res = []\n\n  let i = start\n  while (i < end) {\n    const firstByte = buf[i]\n    let codePoint = null\n    let bytesPerSequence = (firstByte > 0xEF)\n      ? 4\n      : (firstByte > 0xDF)\n          ? 3\n          : (firstByte > 0xBF)\n              ? 2\n              : 1\n\n    if (i + bytesPerSequence <= end) {\n      let secondByte, thirdByte, fourthByte, tempCodePoint\n\n      switch (bytesPerSequence) {\n        case 1:\n          if (firstByte < 0x80) {\n            codePoint = firstByte\n          }\n          break\n        case 2:\n          secondByte = buf[i + 1]\n          if ((secondByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n            if (tempCodePoint > 0x7F) {\n              codePoint = tempCodePoint\n            }\n          }\n          break\n        case 3:\n          secondByte = buf[i + 1]\n          thirdByte = buf[i + 2]\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n            if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n              codePoint = tempCodePoint\n            }\n          }\n          break\n        case 4:\n          secondByte = buf[i + 1]\n          thirdByte = buf[i + 2]\n          fourthByte = buf[i + 3]\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n            if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n              codePoint = tempCodePoint\n            }\n          }\n      }\n    }\n\n    if (codePoint === null) {\n      // we did not generate a valid codePoint so insert a\n      // replacement char (U+FFFD) and advance only 1 byte\n      codePoint = 0xFFFD\n      bytesPerSequence = 1\n    } else if (codePoint > 0xFFFF) {\n      // encode to utf16 (surrogate pair dance)\n      codePoint -= 0x10000\n      res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n      codePoint = 0xDC00 | codePoint & 0x3FF\n    }\n\n    res.push(codePoint)\n    i += bytesPerSequence\n  }\n\n  return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nconst MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n  const len = codePoints.length\n  if (len <= MAX_ARGUMENTS_LENGTH) {\n    return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n  }\n\n  // Decode in chunks to avoid \"call stack size exceeded\".\n  let res = ''\n  let i = 0\n  while (i < len) {\n    res += String.fromCharCode.apply(\n      String,\n      codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n    )\n  }\n  return res\n}\n\nfunction asciiSlice (buf, start, end) {\n  let ret = ''\n  end = Math.min(buf.length, end)\n\n  for (let i = start; i < end; ++i) {\n    ret += String.fromCharCode(buf[i] & 0x7F)\n  }\n  return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n  let ret = ''\n  end = Math.min(buf.length, end)\n\n  for (let i = start; i < end; ++i) {\n    ret += String.fromCharCode(buf[i])\n  }\n  return ret\n}\n\nfunction hexSlice (buf, start, end) {\n  const len = buf.length\n\n  if (!start || start < 0) start = 0\n  if (!end || end < 0 || end > len) end = len\n\n  let out = ''\n  for (let i = start; i < end; ++i) {\n    out += hexSliceLookupTable[buf[i]]\n  }\n  return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n  const bytes = buf.slice(start, end)\n  let res = ''\n  // If bytes.length is odd, the last 8 bits must be ignored (same as node.js)\n  for (let i = 0; i < bytes.length - 1; i += 2) {\n    res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))\n  }\n  return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n  const len = this.length\n  start = ~~start\n  end = end === undefined ? len : ~~end\n\n  if (start < 0) {\n    start += len\n    if (start < 0) start = 0\n  } else if (start > len) {\n    start = len\n  }\n\n  if (end < 0) {\n    end += len\n    if (end < 0) end = 0\n  } else if (end > len) {\n    end = len\n  }\n\n  if (end < start) end = start\n\n  const newBuf = this.subarray(start, end)\n  // Return an augmented `Uint8Array` instance\n  Object.setPrototypeOf(newBuf, Buffer.prototype)\n\n  return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n  if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n  if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUintLE =\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  let val = this[offset]\n  let mul = 1\n  let i = 0\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul\n  }\n\n  return val\n}\n\nBuffer.prototype.readUintBE =\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) {\n    checkOffset(offset, byteLength, this.length)\n  }\n\n  let val = this[offset + --byteLength]\n  let mul = 1\n  while (byteLength > 0 && (mul *= 0x100)) {\n    val += this[offset + --byteLength] * mul\n  }\n\n  return val\n}\n\nBuffer.prototype.readUint8 =\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 1, this.length)\n  return this[offset]\n}\n\nBuffer.prototype.readUint16LE =\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUint16BE =\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUint32LE =\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return ((this[offset]) |\n      (this[offset + 1] << 8) |\n      (this[offset + 2] << 16)) +\n      (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUint32BE =\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset] * 0x1000000) +\n    ((this[offset + 1] << 16) |\n    (this[offset + 2] << 8) |\n    this[offset + 3])\n}\n\nBuffer.prototype.readBigUInt64LE = defineBigIntMethod(function readBigUInt64LE (offset) {\n  offset = offset >>> 0\n  validateNumber(offset, 'offset')\n  const first = this[offset]\n  const last = this[offset + 7]\n  if (first === undefined || last === undefined) {\n    boundsError(offset, this.length - 8)\n  }\n\n  const lo = first +\n    this[++offset] * 2 ** 8 +\n    this[++offset] * 2 ** 16 +\n    this[++offset] * 2 ** 24\n\n  const hi = this[++offset] +\n    this[++offset] * 2 ** 8 +\n    this[++offset] * 2 ** 16 +\n    last * 2 ** 24\n\n  return BigInt(lo) + (BigInt(hi) << BigInt(32))\n})\n\nBuffer.prototype.readBigUInt64BE = defineBigIntMethod(function readBigUInt64BE (offset) {\n  offset = offset >>> 0\n  validateNumber(offset, 'offset')\n  const first = this[offset]\n  const last = this[offset + 7]\n  if (first === undefined || last === undefined) {\n    boundsError(offset, this.length - 8)\n  }\n\n  const hi = first * 2 ** 24 +\n    this[++offset] * 2 ** 16 +\n    this[++offset] * 2 ** 8 +\n    this[++offset]\n\n  const lo = this[++offset] * 2 ** 24 +\n    this[++offset] * 2 ** 16 +\n    this[++offset] * 2 ** 8 +\n    last\n\n  return (BigInt(hi) << BigInt(32)) + BigInt(lo)\n})\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  let val = this[offset]\n  let mul = 1\n  let i = 0\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul\n  }\n  mul *= 0x80\n\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n  return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  let i = byteLength\n  let mul = 1\n  let val = this[offset + --i]\n  while (i > 0 && (mul *= 0x100)) {\n    val += this[offset + --i] * mul\n  }\n  mul *= 0x80\n\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n  return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 1, this.length)\n  if (!(this[offset] & 0x80)) return (this[offset])\n  return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  const val = this[offset] | (this[offset + 1] << 8)\n  return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  const val = this[offset + 1] | (this[offset] << 8)\n  return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset]) |\n    (this[offset + 1] << 8) |\n    (this[offset + 2] << 16) |\n    (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset] << 24) |\n    (this[offset + 1] << 16) |\n    (this[offset + 2] << 8) |\n    (this[offset + 3])\n}\n\nBuffer.prototype.readBigInt64LE = defineBigIntMethod(function readBigInt64LE (offset) {\n  offset = offset >>> 0\n  validateNumber(offset, 'offset')\n  const first = this[offset]\n  const last = this[offset + 7]\n  if (first === undefined || last === undefined) {\n    boundsError(offset, this.length - 8)\n  }\n\n  const val = this[offset + 4] +\n    this[offset + 5] * 2 ** 8 +\n    this[offset + 6] * 2 ** 16 +\n    (last << 24) // Overflow\n\n  return (BigInt(val) << BigInt(32)) +\n    BigInt(first +\n    this[++offset] * 2 ** 8 +\n    this[++offset] * 2 ** 16 +\n    this[++offset] * 2 ** 24)\n})\n\nBuffer.prototype.readBigInt64BE = defineBigIntMethod(function readBigInt64BE (offset) {\n  offset = offset >>> 0\n  validateNumber(offset, 'offset')\n  const first = this[offset]\n  const last = this[offset + 7]\n  if (first === undefined || last === undefined) {\n    boundsError(offset, this.length - 8)\n  }\n\n  const val = (first << 24) + // Overflow\n    this[++offset] * 2 ** 16 +\n    this[++offset] * 2 ** 8 +\n    this[++offset]\n\n  return (BigInt(val) << BigInt(32)) +\n    BigInt(this[++offset] * 2 ** 24 +\n    this[++offset] * 2 ** 16 +\n    this[++offset] * 2 ** 8 +\n    last)\n})\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n  return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 4, this.length)\n  return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 8, this.length)\n  return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n  offset = offset >>> 0\n  if (!noAssert) checkOffset(offset, 8, this.length)\n  return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n  if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n  if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n  if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUintLE =\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) {\n    const maxBytes = Math.pow(2, 8 * byteLength) - 1\n    checkInt(this, value, offset, byteLength, maxBytes, 0)\n  }\n\n  let mul = 1\n  let i = 0\n  this[offset] = value & 0xFF\n  while (++i < byteLength && (mul *= 0x100)) {\n    this[offset + i] = (value / mul) & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeUintBE =\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  byteLength = byteLength >>> 0\n  if (!noAssert) {\n    const maxBytes = Math.pow(2, 8 * byteLength) - 1\n    checkInt(this, value, offset, byteLength, maxBytes, 0)\n  }\n\n  let i = byteLength - 1\n  let mul = 1\n  this[offset + i] = value & 0xFF\n  while (--i >= 0 && (mul *= 0x100)) {\n    this[offset + i] = (value / mul) & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeUint8 =\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n  this[offset] = (value & 0xff)\n  return offset + 1\n}\n\nBuffer.prototype.writeUint16LE =\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n  this[offset] = (value & 0xff)\n  this[offset + 1] = (value >>> 8)\n  return offset + 2\n}\n\nBuffer.prototype.writeUint16BE =\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n  this[offset] = (value >>> 8)\n  this[offset + 1] = (value & 0xff)\n  return offset + 2\n}\n\nBuffer.prototype.writeUint32LE =\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n  this[offset + 3] = (value >>> 24)\n  this[offset + 2] = (value >>> 16)\n  this[offset + 1] = (value >>> 8)\n  this[offset] = (value & 0xff)\n  return offset + 4\n}\n\nBuffer.prototype.writeUint32BE =\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n  this[offset] = (value >>> 24)\n  this[offset + 1] = (value >>> 16)\n  this[offset + 2] = (value >>> 8)\n  this[offset + 3] = (value & 0xff)\n  return offset + 4\n}\n\nfunction wrtBigUInt64LE (buf, value, offset, min, max) {\n  checkIntBI(value, min, max, buf, offset, 7)\n\n  let lo = Number(value & BigInt(0xffffffff))\n  buf[offset++] = lo\n  lo = lo >> 8\n  buf[offset++] = lo\n  lo = lo >> 8\n  buf[offset++] = lo\n  lo = lo >> 8\n  buf[offset++] = lo\n  let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n  buf[offset++] = hi\n  hi = hi >> 8\n  buf[offset++] = hi\n  hi = hi >> 8\n  buf[offset++] = hi\n  hi = hi >> 8\n  buf[offset++] = hi\n  return offset\n}\n\nfunction wrtBigUInt64BE (buf, value, offset, min, max) {\n  checkIntBI(value, min, max, buf, offset, 7)\n\n  let lo = Number(value & BigInt(0xffffffff))\n  buf[offset + 7] = lo\n  lo = lo >> 8\n  buf[offset + 6] = lo\n  lo = lo >> 8\n  buf[offset + 5] = lo\n  lo = lo >> 8\n  buf[offset + 4] = lo\n  let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n  buf[offset + 3] = hi\n  hi = hi >> 8\n  buf[offset + 2] = hi\n  hi = hi >> 8\n  buf[offset + 1] = hi\n  hi = hi >> 8\n  buf[offset] = hi\n  return offset + 8\n}\n\nBuffer.prototype.writeBigUInt64LE = defineBigIntMethod(function writeBigUInt64LE (value, offset = 0) {\n  return wrtBigUInt64LE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeBigUInt64BE = defineBigIntMethod(function writeBigUInt64BE (value, offset = 0) {\n  return wrtBigUInt64BE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) {\n    const limit = Math.pow(2, (8 * byteLength) - 1)\n\n    checkInt(this, value, offset, byteLength, limit - 1, -limit)\n  }\n\n  let i = 0\n  let mul = 1\n  let sub = 0\n  this[offset] = value & 0xFF\n  while (++i < byteLength && (mul *= 0x100)) {\n    if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n      sub = 1\n    }\n    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) {\n    const limit = Math.pow(2, (8 * byteLength) - 1)\n\n    checkInt(this, value, offset, byteLength, limit - 1, -limit)\n  }\n\n  let i = byteLength - 1\n  let mul = 1\n  let sub = 0\n  this[offset + i] = value & 0xFF\n  while (--i >= 0 && (mul *= 0x100)) {\n    if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n      sub = 1\n    }\n    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n  if (value < 0) value = 0xff + value + 1\n  this[offset] = (value & 0xff)\n  return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n  this[offset] = (value & 0xff)\n  this[offset + 1] = (value >>> 8)\n  return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n  this[offset] = (value >>> 8)\n  this[offset + 1] = (value & 0xff)\n  return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n  this[offset] = (value & 0xff)\n  this[offset + 1] = (value >>> 8)\n  this[offset + 2] = (value >>> 16)\n  this[offset + 3] = (value >>> 24)\n  return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n  if (value < 0) value = 0xffffffff + value + 1\n  this[offset] = (value >>> 24)\n  this[offset + 1] = (value >>> 16)\n  this[offset + 2] = (value >>> 8)\n  this[offset + 3] = (value & 0xff)\n  return offset + 4\n}\n\nBuffer.prototype.writeBigInt64LE = defineBigIntMethod(function writeBigInt64LE (value, offset = 0) {\n  return wrtBigUInt64LE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nBuffer.prototype.writeBigInt64BE = defineBigIntMethod(function writeBigInt64BE (value, offset = 0) {\n  return wrtBigUInt64BE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n  if (offset + ext > buf.length) throw new RangeError('Index out of range')\n  if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n  }\n  ieee754.write(buf, value, offset, littleEndian, 23, 4)\n  return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n  return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n  return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n  value = +value\n  offset = offset >>> 0\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n  }\n  ieee754.write(buf, value, offset, littleEndian, 52, 8)\n  return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n  return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n  return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n  if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer')\n  if (!start) start = 0\n  if (!end && end !== 0) end = this.length\n  if (targetStart >= target.length) targetStart = target.length\n  if (!targetStart) targetStart = 0\n  if (end > 0 && end < start) end = start\n\n  // Copy 0 bytes; we're done\n  if (end === start) return 0\n  if (target.length === 0 || this.length === 0) return 0\n\n  // Fatal error conditions\n  if (targetStart < 0) {\n    throw new RangeError('targetStart out of bounds')\n  }\n  if (start < 0 || start >= this.length) throw new RangeError('Index out of range')\n  if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n  // Are we oob?\n  if (end > this.length) end = this.length\n  if (target.length - targetStart < end - start) {\n    end = target.length - targetStart + start\n  }\n\n  const len = end - start\n\n  if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') {\n    // Use built-in when available, missing from IE11\n    this.copyWithin(targetStart, start, end)\n  } else {\n    Uint8Array.prototype.set.call(\n      target,\n      this.subarray(start, end),\n      targetStart\n    )\n  }\n\n  return len\n}\n\n// Usage:\n//    buffer.fill(number[, offset[, end]])\n//    buffer.fill(buffer[, offset[, end]])\n//    buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n  // Handle string cases:\n  if (typeof val === 'string') {\n    if (typeof start === 'string') {\n      encoding = start\n      start = 0\n      end = this.length\n    } else if (typeof end === 'string') {\n      encoding = end\n      end = this.length\n    }\n    if (encoding !== undefined && typeof encoding !== 'string') {\n      throw new TypeError('encoding must be a string')\n    }\n    if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n      throw new TypeError('Unknown encoding: ' + encoding)\n    }\n    if (val.length === 1) {\n      const code = val.charCodeAt(0)\n      if ((encoding === 'utf8' && code < 128) ||\n          encoding === 'latin1') {\n        // Fast path: If `val` fits into a single byte, use that numeric value.\n        val = code\n      }\n    }\n  } else if (typeof val === 'number') {\n    val = val & 255\n  } else if (typeof val === 'boolean') {\n    val = Number(val)\n  }\n\n  // Invalid ranges are not set to a default, so can range check early.\n  if (start < 0 || this.length < start || this.length < end) {\n    throw new RangeError('Out of range index')\n  }\n\n  if (end <= start) {\n    return this\n  }\n\n  start = start >>> 0\n  end = end === undefined ? this.length : end >>> 0\n\n  if (!val) val = 0\n\n  let i\n  if (typeof val === 'number') {\n    for (i = start; i < end; ++i) {\n      this[i] = val\n    }\n  } else {\n    const bytes = Buffer.isBuffer(val)\n      ? val\n      : Buffer.from(val, encoding)\n    const len = bytes.length\n    if (len === 0) {\n      throw new TypeError('The value \"' + val +\n        '\" is invalid for argument \"value\"')\n    }\n    for (i = 0; i < end - start; ++i) {\n      this[i + start] = bytes[i % len]\n    }\n  }\n\n  return this\n}\n\n// CUSTOM ERRORS\n// =============\n\n// Simplified versions from Node, changed for Buffer-only usage\nconst errors = {}\nfunction E (sym, getMessage, Base) {\n  errors[sym] = class NodeError extends Base {\n    constructor () {\n      super()\n\n      Object.defineProperty(this, 'message', {\n        value: getMessage.apply(this, arguments),\n        writable: true,\n        configurable: true\n      })\n\n      // Add the error code to the name to include it in the stack trace.\n      this.name = `${this.name} [${sym}]`\n      // Access the stack to generate the error message including the error code\n      // from the name.\n      this.stack // eslint-disable-line no-unused-expressions\n      // Reset the name to the actual name.\n      delete this.name\n    }\n\n    get code () {\n      return sym\n    }\n\n    set code (value) {\n      Object.defineProperty(this, 'code', {\n        configurable: true,\n        enumerable: true,\n        value,\n        writable: true\n      })\n    }\n\n    toString () {\n      return `${this.name} [${sym}]: ${this.message}`\n    }\n  }\n}\n\nE('ERR_BUFFER_OUT_OF_BOUNDS',\n  function (name) {\n    if (name) {\n      return `${name} is outside of buffer bounds`\n    }\n\n    return 'Attempt to access memory outside buffer bounds'\n  }, RangeError)\nE('ERR_INVALID_ARG_TYPE',\n  function (name, actual) {\n    return `The \"${name}\" argument must be of type number. Received type ${typeof actual}`\n  }, TypeError)\nE('ERR_OUT_OF_RANGE',\n  function (str, range, input) {\n    let msg = `The value of \"${str}\" is out of range.`\n    let received = input\n    if (Number.isInteger(input) && Math.abs(input) > 2 ** 32) {\n      received = addNumericalSeparator(String(input))\n    } else if (typeof input === 'bigint') {\n      received = String(input)\n      if (input > BigInt(2) ** BigInt(32) || input < -(BigInt(2) ** BigInt(32))) {\n        received = addNumericalSeparator(received)\n      }\n      received += 'n'\n    }\n    msg += ` It must be ${range}. Received ${received}`\n    return msg\n  }, RangeError)\n\nfunction addNumericalSeparator (val) {\n  let res = ''\n  let i = val.length\n  const start = val[0] === '-' ? 1 : 0\n  for (; i >= start + 4; i -= 3) {\n    res = `_${val.slice(i - 3, i)}${res}`\n  }\n  return `${val.slice(0, i)}${res}`\n}\n\n// CHECK FUNCTIONS\n// ===============\n\nfunction checkBounds (buf, offset, byteLength) {\n  validateNumber(offset, 'offset')\n  if (buf[offset] === undefined || buf[offset + byteLength] === undefined) {\n    boundsError(offset, buf.length - (byteLength + 1))\n  }\n}\n\nfunction checkIntBI (value, min, max, buf, offset, byteLength) {\n  if (value > max || value < min) {\n    const n = typeof min === 'bigint' ? 'n' : ''\n    let range\n    if (byteLength > 3) {\n      if (min === 0 || min === BigInt(0)) {\n        range = `>= 0${n} and < 2${n} ** ${(byteLength + 1) * 8}${n}`\n      } else {\n        range = `>= -(2${n} ** ${(byteLength + 1) * 8 - 1}${n}) and < 2 ** ` +\n                `${(byteLength + 1) * 8 - 1}${n}`\n      }\n    } else {\n      range = `>= ${min}${n} and <= ${max}${n}`\n    }\n    throw new errors.ERR_OUT_OF_RANGE('value', range, value)\n  }\n  checkBounds(buf, offset, byteLength)\n}\n\nfunction validateNumber (value, name) {\n  if (typeof value !== 'number') {\n    throw new errors.ERR_INVALID_ARG_TYPE(name, 'number', value)\n  }\n}\n\nfunction boundsError (value, length, type) {\n  if (Math.floor(value) !== value) {\n    validateNumber(value, type)\n    throw new errors.ERR_OUT_OF_RANGE(type || 'offset', 'an integer', value)\n  }\n\n  if (length < 0) {\n    throw new errors.ERR_BUFFER_OUT_OF_BOUNDS()\n  }\n\n  throw new errors.ERR_OUT_OF_RANGE(type || 'offset',\n                                    `>= ${type ? 1 : 0} and <= ${length}`,\n                                    value)\n}\n\n// HELPER FUNCTIONS\n// ================\n\nconst INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n  // Node takes equal signs as end of the Base64 encoding\n  str = str.split('=')[0]\n  // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n  str = str.trim().replace(INVALID_BASE64_RE, '')\n  // Node converts strings with length < 2 to ''\n  if (str.length < 2) return ''\n  // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n  while (str.length % 4 !== 0) {\n    str = str + '='\n  }\n  return str\n}\n\nfunction utf8ToBytes (string, units) {\n  units = units || Infinity\n  let codePoint\n  const length = string.length\n  let leadSurrogate = null\n  const bytes = []\n\n  for (let i = 0; i < length; ++i) {\n    codePoint = string.charCodeAt(i)\n\n    // is surrogate component\n    if (codePoint > 0xD7FF && codePoint < 0xE000) {\n      // last char was a lead\n      if (!leadSurrogate) {\n        // no lead yet\n        if (codePoint > 0xDBFF) {\n          // unexpected trail\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n          continue\n        } else if (i + 1 === length) {\n          // unpaired lead\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n          continue\n        }\n\n        // valid lead\n        leadSurrogate = codePoint\n\n        continue\n      }\n\n      // 2 leads in a row\n      if (codePoint < 0xDC00) {\n        if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n        leadSurrogate = codePoint\n        continue\n      }\n\n      // valid surrogate pair\n      codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n    } else if (leadSurrogate) {\n      // valid bmp char, but last char was a lead\n      if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n    }\n\n    leadSurrogate = null\n\n    // encode utf8\n    if (codePoint < 0x80) {\n      if ((units -= 1) < 0) break\n      bytes.push(codePoint)\n    } else if (codePoint < 0x800) {\n      if ((units -= 2) < 0) break\n      bytes.push(\n        codePoint >> 0x6 | 0xC0,\n        codePoint & 0x3F | 0x80\n      )\n    } else if (codePoint < 0x10000) {\n      if ((units -= 3) < 0) break\n      bytes.push(\n        codePoint >> 0xC | 0xE0,\n        codePoint >> 0x6 & 0x3F | 0x80,\n        codePoint & 0x3F | 0x80\n      )\n    } else if (codePoint < 0x110000) {\n      if ((units -= 4) < 0) break\n      bytes.push(\n        codePoint >> 0x12 | 0xF0,\n        codePoint >> 0xC & 0x3F | 0x80,\n        codePoint >> 0x6 & 0x3F | 0x80,\n        codePoint & 0x3F | 0x80\n      )\n    } else {\n      throw new Error('Invalid code point')\n    }\n  }\n\n  return bytes\n}\n\nfunction asciiToBytes (str) {\n  const byteArray = []\n  for (let i = 0; i < str.length; ++i) {\n    // Node's code seems to be doing this and not & 0x7F..\n    byteArray.push(str.charCodeAt(i) & 0xFF)\n  }\n  return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n  let c, hi, lo\n  const byteArray = []\n  for (let i = 0; i < str.length; ++i) {\n    if ((units -= 2) < 0) break\n\n    c = str.charCodeAt(i)\n    hi = c >> 8\n    lo = c % 256\n    byteArray.push(lo)\n    byteArray.push(hi)\n  }\n\n  return byteArray\n}\n\nfunction base64ToBytes (str) {\n  return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n  let i\n  for (i = 0; i < length; ++i) {\n    if ((i + offset >= dst.length) || (i >= src.length)) break\n    dst[i + offset] = src[i]\n  }\n  return i\n}\n\n// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass\n// the `instanceof` check but they should be treated as of that type.\n// See: https://github.com/feross/buffer/issues/166\nfunction isInstance (obj, type) {\n  return obj instanceof type ||\n    (obj != null && obj.constructor != null && obj.constructor.name != null &&\n      obj.constructor.name === type.name)\n}\nfunction numberIsNaN (obj) {\n  // For IE11 support\n  return obj !== obj // eslint-disable-line no-self-compare\n}\n\n// Create lookup table for `toString('hex')`\n// See: https://github.com/feross/buffer/issues/219\nconst hexSliceLookupTable = (function () {\n  const alphabet = '0123456789abcdef'\n  const table = new Array(256)\n  for (let i = 0; i < 16; ++i) {\n    const i16 = i * 16\n    for (let j = 0; j < 16; ++j) {\n      table[i16 + j] = alphabet[i] + alphabet[j]\n    }\n  }\n  return table\n})()\n\n// Return not function with Error if BigInt not supported\nfunction defineBigIntMethod (fn) {\n  return typeof BigInt === 'undefined' ? BufferBigIntNotDefined : fn\n}\n\nfunction BufferBigIntNotDefined () {\n  throw new Error('BigInt not supported')\n}\n", "// provides Node's Buffer API to the browser\nexport let Buffer = require(\"buffer\").Buffer;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.LOCAL_WINS = exports.REMOTE_WINS = void 0;\n/**\n *  Choose the server's state over the client's\n**/\nvar REMOTE_WINS = function (localValue, localVersion, remoteValue, remoteVersion, callback) {\n    callback(null, remoteValue);\n};\nexports.REMOTE_WINS = REMOTE_WINS;\n/**\n *  Choose the local state over the server's\n**/\nvar LOCAL_WINS = function (localValue, localVersion, remoteValue, remoteVersion, callback) {\n    callback(null, localValue);\n};\nexports.LOCAL_WINS = LOCAL_WINS;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DefaultOptions = void 0;\nvar merge_strategy_1 = require(\"./record/merge-strategy\");\nexports.DefaultOptions = {\n    nativeTimerRegistry: true,\n    intervalTimerResolution: 50,\n    subscriptionInterval: 100,\n    heartbeatInterval: 30000,\n    reconnectIntervalIncrement: 4000,\n    maxReconnectInterval: 180000,\n    maxReconnectAttempts: 5,\n    subscriptionTimeout: 2000,\n    recordReadAckTimeout: 15000,\n    recordReadTimeout: 15000,\n    recordDeleteTimeout: 15000,\n    offlineBufferTimeout: 2000,\n    recordDiscardTimeout: 5000,\n    offlineEnabled: false,\n    saveUpdatesOffline: false,\n    recordReadOnlyMode: false,\n    recordPrefixWriteWhitelist: [],\n    path: '/deepstream',\n    mergeStrategy: merge_strategy_1.REMOTE_WINS,\n    recordDeepCopy: true,\n    dirtyStorageName: '__ds__dirty_records',\n    ignorePrefixes: [],\n    storageName: 'indexdb',\n    indexdb: {\n        autoVersion: false,\n        dbVersion: 1,\n        primaryKey: 'id',\n        storageDatabaseName: 'deepstream',\n        defaultObjectStoreName: 'records',\n        objectStoreNames: [],\n        flushTimeout: 50,\n    },\n    localstorage: {\n        nodeStoragePath: './local-storage',\n        nodeStorageSize: 5\n    },\n    lazyConnect: false,\n    debug: false,\n    initialRecordVersion: 1\n};\n", "export enum TOPIC {\n  UNKNOWN = 0,\n  PARSER = 1,\n  CONNECTION = 2,\n  AUTH = 3,\n  EVENT = 4,\n  RECORD = 5,\n  RPC = 6,\n  PRESENCE = 7,\n  MONITORING = 8,\n  CLUSTER = 9,\n  LOCK = 10,\n  STATE_REGISTRY = 11,\n  ERROR = 100,\n}\n", "export enum RECORD_ACTION {\n    UNKNOWN = 0,\n\n    ERROR = 1,\n\n  NOTIFY = 2,\n\n  READ = 3,\n  READ_RESPONSE = 4,\n\n  HEAD = 5,\n  HEAD_RESPONSE = 6,\n\n  HEAD_BULK = 7,\n  HEAD_RESPONSE_BULK = 8,\n\n  DELETE = 9,\n  DELETE_SUCCESS = 10,\n\n  DELETE_BULK = 11,\n  DELETE_BULK_SUCCESS = 12,\n\n  DELETED = 13,\n\n  WRITE_ACKNOWLEDGEMENT = 14,\n\n  CREATE = 15,\n  CREATEANDUPDATE = 16,\n\n  CREATEANDPATCH = 17,\n\n  UPDATE = 18,\n\n  PATCH = 19,\n\n  ERASE = 20,\n\n  SUBSCRIBEANDHEAD = 21,\n\n  SUBSCRIBEANDREAD = 22,\n\n  SUBSCRIBECREATEANDREAD = 23,\n\n  SUBSCRIBECREATEANDUPDATE = 24,\n\n  SUBSCRIBE = 25,\n\n  UNSUBSCRIBE = 26,\n\n  LISTEN = 27,\n\n  UNLISTEN = 28,\n\n  LISTEN_ACCEPT = 29,\n  LISTEN_REJECT = 30,\n\n  SUBSCRIPTION_HAS_PROVIDER = 31,\n  SUBSCRIPTION_HAS_NO_PROVIDER = 32,\n  SUBSCRIPTION_FOR_PATTERN_FOUND = 33,\n  SUBSCRIPTION_FOR_PATTERN_REMOVED = 34,\n\n  CACHE_RETRIEVAL_TIMEOUT = 100,\n  STORAGE_RETRIEVAL_TIMEOUT  = 101,\n  VERSION_EXISTS  = 102,\n  RECORD_LOAD_ERROR  = 103,\n  RECORD_CREATE_ERROR  = 104,\n  RECORD_UPDATE_ERROR  = 105,\n  RECORD_DELETE_ERROR  = 106,\n  RECORD_NOT_FOUND  = 107,\n  INVALID_VERSION  = 108,\n  INVALID_PATCH_ON_HOTPATH  = 109,\n  INVALID_LISTEN_REGEX  = 110,\n  LISTEN_RESPONSE_TIMEOUT  = 111,\n  LISTEN_UNSUCCESSFUL  = 112,\n  RECORD_NOTIFY_ERROR  = 113,\n\n  MESSAGE_PERMISSION_ERROR  = 114,\n  MESSAGE_DENIED  = 115,\n  INVALID_MESSAGE_DATA  = 116,\n  MULTIPLE_SUBSCRIPTIONS  = 117,\n  NOT_SUBSCRIBED  = 118,\n}\n", "export enum AUTH_ACTION {\n  UNKNOWN = 0,\n\n  ERROR = 1,\n  REQUEST = 2,\n  AUTH_SUCCESSFUL = 3,\n  AUTH_UNSUCCESSFUL = 4,\n\n  TOO_MANY_AUTH_ATTEMPTS = 100,\n  INVALID_MESSAGE = 101,\n  INVALID_MESSAGE_DATA = 102,\n}\n", "export enum EVENT_ACTION {\n  UNKNOWN = 0,\n\n  ERROR = 1,\n  EMIT = 2,\n\n  SUBSCRIBE = 3,\n  UNSUBSCRIBE = 4,\n\n  LISTEN = 5,\n  UNLISTEN = 6,\n\n  LISTEN_ACCEPT = 7,\n  LISTEN_REJECT = 8,\n\n  SUBSCRIPTION_HAS_PROVIDER = 9,\n  SUBSCRIPTION_HAS_NO_PROVIDER = 10,\n  SUBSCRIPTION_FOR_PATTERN_FOUND = 11,\n  SUBSCRIPTION_FOR_PATTERN_REMOVED = 12,\n\n  INVALID_LISTEN_REGEX = 100,\n  LISTEN_RESPONSE_TIMEOUT = 101,\n  LISTEN_UNSUCCESSFUL = 102,\n\n  MESSAGE_PERMISSION_ERROR = 103,\n  MESSAGE_DENIED = 104,\n  INVALID_MESSAGE_DATA = 105,\n  MULTIPLE_SUBSCRIPTIONS = 106,\n  NOT_SUBSCRIBED = 107,\n}\n", "export enum RPC_ACTION {\n    UNKNOWN = 0,\n\n  ERROR = 1,\n  REQUEST = 2,\n  ACCEPT = 4,\n  RESPONSE = 5,\n  REJECT = 6,\n  REQUEST_ERROR = 7,\n  PROVIDE = 8,\n  UNPROVIDE = 9,\n\n  NO_RPC_PROVIDER = 100,\n  ACCEPT_TIMEOUT = 101,\n  MULTIPLE_ACCEPT = 102,\n  INVALID_RPC_CORRELATION_ID = 103,\n  RESPONSE_TIMEOUT = 104,\n  MULTIPLE_RESPONSE = 105,\n\n  MESSAGE_PERMISSION_ERROR = 106,\n  MESSAGE_DENIED = 107,\n  INVALID_MESSAGE_DATA = 108,\n  MULTIPLE_PROVIDERS = 109,\n  NOT_PROVIDED = 110,\n}\n", "export enum PRESENCE_ACTION {\n  UNKNOWN = 0,\n  ERROR = 1,\n\n  QUERY_ALL = 2,\n  QUERY_ALL_RESPONSE = 3,\n  QUERY = 4,\n  QUERY_RESPONSE = 5,\n  PRESENCE_JOIN = 6,\n  PRESENCE_JOIN_ALL = 7,\n  PRESENCE_LEAVE = 8,\n  PRESENCE_LEAVE_ALL = 9,\n\n  SUBSCRIBE = 10,\n  UNSUBSCRIBE = 11,\n  SUBSCRIBE_ALL = 12,\n  UNSUBSCRIBE_ALL = 13,\n\n  INVALID_PRESENCE_USERS = 100,\n\n  MESSAGE_PERMISSION_ERROR = 101,\n  MESSAGE_DENIED = 102,\n  MULTIPLE_SUBSCRIPTIONS = 103,\n  NOT_SUBSCRIBED = 104,\n}\n", "export enum CONNECTION_ACTION {\n  UNKNOWN = 0,\n\n  ERROR = 1,\n  PING = 2,\n  PONG = 3,\n  ACCEPT = 4,\n  CHALLENGE = 5,\n  REJECT = 6,\n  REDIRECT = 7,\n  CLOSING = 8,\n  CLOSED = 9,\n\n  AUTHENTICATION_TIMEOUT = 100,\n  INVALID_MESSAGE = 101,\n}\n", "export enum CLUSTER_ACTION {\n    REMOVE = 1,\n    STATUS = 2,\n}\n", "export enum LOCK_ACTION {\n  UNKNOWN = 0,\n  ERROR = 1,\n  REQUEST = 2,\n  RESPONSE = 3,\n  RELEASE = 4,\n}\n", "export enum PARSER_ACTION {\n    UNKNOWN = 0,\n    UNKNOWN_TOPIC = 1,\n    UNKNOWN_ACTION = 2,\n    INVALID_MESSAGE = 3,\n    MESSAGE_PARSE_ERROR = 4,\n    MAXIMUM_MESSAGE_SIZE_EXCEEDED = 5,\n    ERROR = 6,\n    INVALID_META_PARAMS = 7,\n}\n", "export enum MONITORING_ACTION {\n\n}\n", "export enum STATE_REGISTRY_TOPIC {\n    EVENT_SUBSCRIPTIONS = 11,\n    RECORD_SUBSCRIPTIONS = 12,\n    SUBSCRIPTIONS = 9,\n    ONLINE_USERS = 10,\n    MONITORING_SUBSCRIPTIONS = 24,\n    RPC_SUBSCRIPTIONS = 13,\n    PRESENCE_SUBSCRIPTIONS = 14,\n    RECORD_LISTEN_PATTERNS = 15,\n    EVENT_LISTEN_PATTERNS = 16,\n    RECORD_PUBLISHED_SUBSCRIPTIONS = 17,\n    EVENT_PUBLISHED_SUBSCRIPTIONS = 18,\n    RECORD_LISTENING = 19,\n    EVENT_LISTENING = 20,\n    STATE_REGISTRY = 21,\n  }\n\nexport enum STATE_ACTION {\n    UNKNOWN = 0,\n    ERROR = 1,\n    ADD = 2,\n    REMOVE = 3,\n    REQUEST_FULL_STATE = 4,\n    FULL_STATE = 5,\n    CHECKSUM = 6,\n}\n", "export { TOPIC } from '../types/general'\nexport { RECORD_ACTION } from '../types/record'\nexport { AUTH_ACTION } from '../types/auth'\nexport { EVENT_ACTION } from '../types/event'\nexport { RPC_ACTION } from '../types/rpc'\nexport { PRESENCE_ACTION } from '../types/presence'\nexport { CONNECTION_ACTION } from '../types/connection'\nexport { CLUSTER_ACTION } from '../types/cluster'\nexport { LOCK_ACTION } from '../types/lock'\nexport { PARSER_ACTION } from '../types/parser'\nexport { MONITORING_ACTION } from '../types/monitoring'\nexport { STATE_ACTION, STATE_REGISTRY_TOPIC } from '../types/state'\n\nexport type JSONPrimitive = string | number | boolean | null\nexport interface JSONObject {\n    [member: string]: JSONValue\n}\nexport interface JSONArray extends Array<JSONValue> {}\nexport type JSONValue = JSONPrimitive | JSONObject | JSONArray\n\nexport type RecordPathData = JSONValue\nexport type RecordData = JSONObject | Array<string> | null | undefined\nexport type RPCResult = JSONValue\nexport type EventData = JSONValue\nexport type AuthData = JSONObject\n", "import { TOPIC, STATE_REGISTRY_TOPIC, MONITORING_ACTION, STATE_ACTION, CONNECTION_ACTION, AUTH_ACTION, EVENT_ACTION, RPC_ACTION, PRESENCE_ACTION, RECORD_ACTION, LOCK_ACTION, CLUSTER_ACTION, RecordData, RPCResult, EventData, AuthData, PARSER_ACTION } from './all'\n\nexport type ALL_ACTIONS = MONITORING_ACTION | STATE_ACTION | CLUSTER_ACTION | LOCK_ACTION | RPC_ACTION | EVENT_ACTION | RECORD_ACTION | PRESENCE_ACTION | CONNECTION_ACTION | AUTH_ACTION | PARSER_ACTION\n\nexport const ACTIONS: { [index: number]: any } = {\n        [TOPIC.PARSER]: PARSER_ACTION,\n        [TOPIC.CONNECTION]: CONNECTION_ACTION,\n        [TOPIC.AUTH]: AUTH_ACTION,\n        [TOPIC.EVENT]: EVENT_ACTION,\n        [TOPIC.RECORD]: RECORD_ACTION,\n        [TOPIC.RPC]: RPC_ACTION,\n        [TOPIC.PRESENCE]: PRESENCE_ACTION,\n        [TOPIC.LOCK]: LOCK_ACTION,\n        [TOPIC.STATE_REGISTRY]: STATE_ACTION,\n        [TOPIC.CLUSTER]: CLUSTER_ACTION,\n        [TOPIC.MONITORING]: MONITORING_ACTION\n}\n\nexport interface Message {\n    topic: TOPIC | STATE_REGISTRY_TOPIC\n    action: ALL_ACTIONS\n    name?: string\n\n    isError?: boolean\n    isAck?: boolean\n\n    data?: string | Buffer\n    parsedData?: RecordData | RPCResult | EventData | AuthData\n\n    parseError?: false\n\n    // listen\n    subscription?: string\n\n    originalTopic?: TOPIC | STATE_REGISTRY_TOPIC\n    originalAction?: ALL_ACTIONS\n    names?: Array<string>\n    reason?: string\n\n    // connection\n    url?: string\n    protocolVersion?: string\n    sdkVersion?: string\n    sdkType?: string\n\n    // record\n    isWriteAck?: boolean\n    correlationId?: string\n    path?: string\n    version?: number\n    versions?: { [index: string]: number }\n\n    // state\n    checksum?: number\n    fullState?: Array<string>\n    serverName?: string\n    registryTopic?: TOPIC\n\n    // cluster\n    leaderScore?: number\n    role?: string\n\n    // lock\n    locked?: boolean\n}\n\nexport interface StateMessage extends Message {\n    topic: TOPIC.STATE_REGISTRY,\n    registryTopic: TOPIC\n}\n\nexport interface BulkSubscriptionMessage extends Message {\n    names: Array<string>,\n    correlationId: string\n}\n\nexport interface SubscriptionMessage extends Message {\n    name: string\n}\n\nexport interface EventMessage extends SubscriptionMessage {\n    topic: TOPIC.EVENT\n    action: EVENT_ACTION\n}\n\nexport interface RPCMessage extends SubscriptionMessage {\n    topic: TOPIC.RPC\n    action: RPC_ACTION\n    correlationId: string\n    requestorName?: string\n    requestorData?: string\n}\n\nexport interface PresenceMessage extends Message {\n    topic: TOPIC.PRESENCE\n    action: PRESENCE_ACTION\n    correlationId: string\n}\n\nexport interface ListenMessage extends SubscriptionMessage {\n    topic: TOPIC.RECORD | TOPIC.EVENT\n    action: RECORD_ACTION | EVENT_ACTION\n    subscription: string\n    raw?: string\n}\n\nexport interface RecordMessage extends SubscriptionMessage {\n    topic: TOPIC.RECORD\n    action: RECORD_ACTION\n}\n\nexport interface RecordWriteMessage extends RecordMessage {\n    topic: TOPIC.RECORD\n    version: number\n    isWriteAck: boolean\n    path?: string\n    name: string\n}\n\nexport interface RecordAckMessage extends RecordMessage {\n    topic: TOPIC.RECORD\n    path?: string\n    data: any\n}\n\nexport interface MonitoringMessage extends Message {\n    topic: TOPIC.MONITORING\n}\n\nexport interface LockMessage extends Message {\n    topic: TOPIC.LOCK\n    action: LOCK_ACTION\n    name: string\n    locked: boolean\n}\n\nexport interface ClusterMessage extends Message {\n    topic: TOPIC.CLUSTER\n    action: CLUSTER_ACTION\n    serverName: string,\n}\n\nexport interface ParseError {\n    parseError: boolean\n    action: PRESENCE_ACTION\n\n    parsedMessage: Message\n\n    raw?: Buffer\n\n    description?: string\n}\n\nexport type ParseResult = Message | ParseError\n", "\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n    for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nvar _a, _b, _c, _d;\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.CONNECTION_STATE = exports.EVENT = exports.RESPONSE_TO_REQUEST = void 0;\nvar all_1 = require(\"@deepstream/protobuf/dist/types/all\");\n__exportStar(require(\"@deepstream/protobuf/dist/types/all\"), exports);\n__exportStar(require(\"@deepstream/protobuf/dist/types/messages\"), exports);\nexports.RESPONSE_TO_REQUEST = (_a = {},\n    _a[all_1.TOPIC.RECORD] = (_b = {},\n        _b[all_1.RECORD_ACTION.HEAD_RESPONSE] = all_1.RECORD_ACTION.HEAD,\n        _b[all_1.RECORD_ACTION.READ_RESPONSE] = all_1.RECORD_ACTION.READ,\n        _b[all_1.RECORD_ACTION.DELETE_SUCCESS] = all_1.RECORD_ACTION.DELETE,\n        _b),\n    _a[all_1.TOPIC.PRESENCE] = (_c = {},\n        _c[all_1.PRESENCE_ACTION.QUERY_RESPONSE] = all_1.PRESENCE_ACTION.QUERY,\n        _c[all_1.PRESENCE_ACTION.QUERY_ALL_RESPONSE] = all_1.PRESENCE_ACTION.QUERY_ALL,\n        _c),\n    _a[all_1.TOPIC.RPC] = (_d = {},\n        _d[all_1.RPC_ACTION.ACCEPT] = all_1.RPC_ACTION.REQUEST,\n        _d[all_1.RPC_ACTION.ERROR] = all_1.RPC_ACTION.REQUEST,\n        _d),\n    _a[all_1.TOPIC.EVENT] = {},\n    _a);\nvar EVENT;\n(function (EVENT) {\n    EVENT[\"RECORD_READ_ONLY_MODE\"] = \"RECORD_READ_ONLY_MODE\";\n    EVENT[\"UNSOLICITED_MESSAGE\"] = \"UNSOLICITED_MESSAGE\";\n    EVENT[\"IS_CLOSED\"] = \"IS_CLOSED\";\n    EVENT[\"MAX_RECONNECTION_ATTEMPTS_REACHED\"] = \"MAX_RECONNECTION_ATTEMPTS_REACHED\";\n    EVENT[\"CONNECTION_ERROR\"] = \"CONNECTION_ERROR\";\n    EVENT[\"ACK_TIMEOUT\"] = \"ACK_TIMEOUT\";\n    EVENT[\"UNKNOWN_CORRELATION_ID\"] = \"UNKNOWN_CORRELATION_ID\";\n    EVENT[\"HEARTBEAT_TIMEOUT\"] = \"HEARTBEAT_TIMEOUT\";\n    EVENT[\"LISTENER_EXISTS\"] = \"LISTENER_EXISTS\";\n    EVENT[\"NOT_LISTENING\"] = \"NOT_LISTENING\";\n    EVENT[\"RECORD_ALREADY_DESTROYED\"] = \"RECORD_ALREADY_DESTROYED\";\n    EVENT[\"RECORD_DELETE_TIMEOUT\"] = \"RECORD_DELETE_TIMEOUT\";\n    EVENT[\"CLIENT_OFFLINE\"] = \"client offline\";\n    EVENT[\"INVALID_AUTHENTICATION_DETAILS\"] = \"INVALID_AUTHENTICATION_DETAILS\";\n    EVENT[\"CONNECTION_LOST\"] = \"connectionLost\";\n    EVENT[\"CONNECTION_REESTABLISHED\"] = \"connectionReestablished\";\n    EVENT[\"EXIT_LIMBO\"] = \"exitLimbo\";\n    EVENT[\"CONNECTION_STATE_CHANGED\"] = \"connectionStateChanged\";\n    EVENT[\"CLIENT_DATA_CHANGED\"] = \"clientDataChanged\";\n    EVENT[\"REAUTHENTICATION_FAILURE\"] = \"reauthenticationFailure\";\n    EVENT[\"AUTHENTICATION_TIMEOUT\"] = \"AUTHENTICATION_TIMEOUT\";\n    EVENT[\"RECORD_ERROR\"] = \"error\";\n    EVENT[\"RECORD_READY\"] = \"ready\";\n    EVENT[\"RECORD_DELETED\"] = \"delete\";\n    EVENT[\"RECORD_DISCARDED\"] = \"discard\";\n    EVENT[\"RECORD_VERSION_EXISTS\"] = \"versionExists\";\n    EVENT[\"RECORD_HAS_PROVIDER_CHANGED\"] = \"hasProviderChanged\";\n    EVENT[\"RECORD_STATE_CHANGED\"] = \"onRecordStateChanged\";\n    EVENT[\"ENTRY_ADDED_EVENT\"] = \"entry-added\";\n    EVENT[\"ENTRY_REMOVED_EVENT\"] = \"entry-removed\";\n    EVENT[\"ENTRY_MOVED_EVENT\"] = \"entry-moved\";\n})(EVENT = exports.EVENT || (exports.EVENT = {}));\nvar CONNECTION_STATE;\n(function (CONNECTION_STATE) {\n    CONNECTION_STATE[\"CLOSING\"] = \"CLOSING\";\n    CONNECTION_STATE[\"CLOSED\"] = \"CLOSED\";\n    CONNECTION_STATE[\"INITIALISING\"] = \"INITIALISING\";\n    CONNECTION_STATE[\"AWAITING_CONNECTION\"] = \"AWAITING_CONNECTION\";\n    CONNECTION_STATE[\"CHALLENGING\"] = \"CHALLENGING\";\n    CONNECTION_STATE[\"AWAITING_AUTHENTICATION\"] = \"AWAITING_AUTHENTICATION\";\n    CONNECTION_STATE[\"AUTHENTICATING\"] = \"AUTHENTICATING\";\n    CONNECTION_STATE[\"OPEN\"] = \"OPEN\";\n    CONNECTION_STATE[\"ERROR\"] = \"ERROR\";\n    CONNECTION_STATE[\"RECONNECTING\"] = \"RECONNECTING\";\n    CONNECTION_STATE[\"REDIRECTING\"] = \"REDIRECTING\";\n    CONNECTION_STATE[\"CHALLENGE_DENIED\"] = \"CHALLENGE_DENIED\";\n    CONNECTION_STATE[\"TOO_MANY_AUTH_ATTEMPTS\"] = \"TOO_MANY_AUTH_ATTEMPTS\";\n    CONNECTION_STATE[\"AUTHENTICATION_TIMEOUT\"] = \"AUTHENTICATION_TIMEOUT\";\n    CONNECTION_STATE[\"PAUSING\"] = \"PAUSING\";\n    CONNECTION_STATE[\"OFFLINE\"] = \"OFFLINE\";\n})(CONNECTION_STATE = exports.CONNECTION_STATE || (exports.CONNECTION_STATE = {}));\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Logger = void 0;\nvar constants_1 = require(\"../constants\");\nvar messages_1 = require(\"@deepstream/protobuf/dist/types/messages\");\nvar all_1 = require(\"@deepstream/protobuf/dist/types/all\");\nfunction isEvent(action) {\n    // @ts-ignore\n    return constants_1.EVENT[action] !== undefined;\n}\nvar Logger = /** @class */ (function () {\n    function Logger(emitter) {\n        this.emitter = emitter;\n    }\n    Logger.prototype.warn = function (message, event, meta) {\n        var warnMessage = \"Warning: \".concat(all_1.TOPIC[message.topic]);\n        var action = message.action;\n        if (action) {\n            warnMessage += \" (\".concat(messages_1.ACTIONS[message.topic][action], \")\");\n        }\n        if (event) {\n            warnMessage += \": \".concat(constants_1.EVENT[event]);\n        }\n        if (meta) {\n            warnMessage += \" \\u2013 \".concat(typeof meta === 'string' ? meta : JSON.stringify(meta));\n        }\n        // tslint:disable-next-line:no-console\n        console.warn(warnMessage);\n    };\n    Logger.prototype.error = function (message, event, meta) {\n        if (isEvent(event)) {\n            if (event === constants_1.EVENT.IS_CLOSED || event === constants_1.EVENT.CONNECTION_ERROR) {\n                this.emitter.emit('error', meta, constants_1.EVENT[event], all_1.TOPIC[all_1.TOPIC.CONNECTION]);\n            }\n            else {\n                // @ts-ignore\n                this.emitter.emit('error', meta, constants_1.EVENT[event], all_1.TOPIC[message.topic]);\n            }\n        }\n        else {\n            var action = event ? event : message.action;\n            this.emitter.emit('error', meta || message, messages_1.ACTIONS[message.topic][action], all_1.TOPIC[message.topic]);\n        }\n    };\n    return Logger;\n}());\nexports.Logger = Logger;\n", "\"use strict\";\nvar __values = (this && this.__values) || function(o) {\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n    if (m) return m.call(o);\n    if (o && typeof o.length === \"number\") return {\n        next: function () {\n            if (o && i >= o.length) o = void 0;\n            return { value: o && o[i++], done: !o };\n        }\n    };\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nvar __read = (this && this.__read) || function (o, n) {\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n    if (!m) return o;\n    var i = m.call(o), r, ar = [], e;\n    try {\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n    }\n    catch (error) { e = { error: error }; }\n    finally {\n        try {\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\n        }\n        finally { if (e) throw e.error; }\n    }\n    return ar;\n};\nvar __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n    if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n        if (ar || !(i in from)) {\n            if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n            ar[i] = from[i];\n        }\n    }\n    return to.concat(ar || Array.prototype.slice.call(from));\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Emitter = void 0;\nvar Emitter = /** @class */ (function () {\n    function Emitter() {\n        this.callbacks = null;\n    }\n    /**\n     * Listen on the given `event` with `fn`.\n     */\n    Emitter.prototype.on = function (event, fn, scope) {\n        if (scope === void 0) { scope = this; }\n        this.callbacks = this.callbacks || new Map();\n        var callbacks = this.callbacks.get(event);\n        if (!callbacks) {\n            callbacks = [{ fn: fn, scope: scope }];\n            this.callbacks.set(event, callbacks);\n        }\n        else {\n            callbacks.push({ fn: fn, scope: scope });\n        }\n        return this;\n    };\n    Emitter.prototype.once = function (event, fn, scope) {\n        var _this = this;\n        if (scope === void 0) { scope = this; }\n        var on = function () {\n            var args = [];\n            for (var _i = 0; _i < arguments.length; _i++) {\n                args[_i] = arguments[_i];\n            }\n            _this.off(event, on, _this);\n            fn.apply(_this, args);\n        };\n        on.fn = fn;\n        this.on(event, on, scope);\n        return this;\n    };\n    /**\n     * Remove the given callback for `event` or all\n     * registered callbacks.\n     */\n    Emitter.prototype.off = function (event, fn, scope) {\n        // all\n        if (event === undefined && fn === undefined && scope === undefined) {\n            this.callbacks = null;\n        }\n        if (this.callbacks === null) {\n            return this;\n        }\n        // specific event\n        var callbacks = this.callbacks.get(event);\n        if (!callbacks) {\n            return this;\n        }\n        // remove all handlers\n        if (fn === undefined && scope === undefined) {\n            this.callbacks.delete(event);\n            return this;\n        }\n        // remove specific handler\n        callbacks = callbacks.filter(function (item) {\n            var cb = item.fn, context = item.scope;\n            // handle unsubscribing from all callbacks for a given record path\n            if (event !== '' && fn === undefined && scope === context) {\n                return false;\n            }\n            if (cb === fn || cb.fn === fn) {\n                if (scope === undefined || scope === context) {\n                    return false;\n                }\n            }\n            return true;\n        });\n        if (callbacks.length === 0) {\n            this.callbacks.delete(event);\n        }\n        else {\n            this.callbacks.set(event, callbacks);\n        }\n        return this;\n    };\n    Emitter.prototype.removeContext = function (context) {\n        var e_1, _a;\n        if (this.callbacks === null) {\n            return;\n        }\n        try {\n            for (var _b = __values(this.callbacks), _c = _b.next(); !_c.done; _c = _b.next()) {\n                var _d = __read(_c.value, 2), eventName = _d[0], callbacks = _d[1];\n                this.callbacks.set(eventName, callbacks.filter(function (_a) {\n                    var scope = _a.scope;\n                    return scope === context;\n                }));\n            }\n        }\n        catch (e_1_1) { e_1 = { error: e_1_1 }; }\n        finally {\n            try {\n                if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n            }\n            finally { if (e_1) throw e_1.error; }\n        }\n    };\n    Emitter.prototype.emit = function (event) {\n        var args = [];\n        for (var _i = 1; _i < arguments.length; _i++) {\n            args[_i - 1] = arguments[_i];\n        }\n        if (this.callbacks === null) {\n            return this;\n        }\n        var callbacks = this.callbacks.get(event);\n        if (!callbacks || callbacks.length === 0) {\n            return this;\n        }\n        // We slice them here incase they are 'once' which would shift the array\n        callbacks = callbacks.slice(0);\n        callbacks.forEach(function (_a) {\n            var fn = _a.fn, scope = _a.scope;\n            return fn.apply(scope, args);\n        });\n        return this;\n    };\n    /**\n     * Check if this emitter has `event` handlers.\n     */\n    Emitter.prototype.hasListeners = function (event) {\n        if (this.callbacks === null) {\n            return false;\n        }\n        return this.callbacks.has(event);\n    };\n    /**\n     * Returns an array listing the events for which the emitter has registered listeners.\n     */\n    Emitter.prototype.eventNames = function () {\n        if (this.callbacks === null) {\n            return [];\n        }\n        return __spreadArray([], __read(this.callbacks.keys()), false);\n    };\n    return Emitter;\n}());\nexports.Emitter = Emitter;\n", "\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __assign = (this && this.__assign) || function () {\n    __assign = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign.apply(this, arguments);\n};\nvar __values = (this && this.__values) || function(o) {\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n    if (m) return m.call(o);\n    if (o && typeof o.length === \"number\") return {\n        next: function () {\n            if (o && i >= o.length) o = void 0;\n            return { value: o && o[i++], done: !o };\n        }\n    };\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nvar __read = (this && this.__read) || function (o, n) {\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n    if (!m) return o;\n    var i = m.call(o), r, ar = [], e;\n    try {\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n    }\n    catch (error) { e = { error: error }; }\n    finally {\n        try {\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\n        }\n        finally { if (e) throw e.error; }\n    }\n    return ar;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.TimeoutRegistry = void 0;\nvar constants_1 = require(\"../constants\");\nvar emitter_1 = require(\"../util/emitter\");\n/**\n * Subscriptions to events are in a pending state until deepstream acknowledges\n * them. This is a pattern that's used by numerour classes. This registry aims\n * to centralise the functionality necessary to keep track of subscriptions and\n * their respective timeouts.\n */\nvar TimeoutRegistry = /** @class */ (function (_super) {\n    __extends(TimeoutRegistry, _super);\n    function TimeoutRegistry(services, options) {\n        var _this = _super.call(this) || this;\n        _this.services = services;\n        _this.options = options;\n        _this.register = new Map();\n        return _this;\n    }\n    /**\n     * Add an entry\n     */\n    TimeoutRegistry.prototype.add = function (timeout) {\n        if (timeout.duration === undefined) {\n            timeout.duration = this.options.subscriptionTimeout;\n        }\n        if (timeout.event === undefined) {\n            timeout.event = constants_1.EVENT.ACK_TIMEOUT;\n        }\n        /*\n        if (timeout.duration < 1) {\n          should we throw an error?\n          return -1\n        }\n        */\n        if (!this.services.connection.isConnected) {\n            return null;\n        }\n        this.remove(timeout.message);\n        var internalTimeout = {\n            timerId: -1,\n            uniqueName: this.getUniqueName(timeout.message),\n            // event: timeout.event,\n            timeout: timeout\n        };\n        internalTimeout.timerId = this.services.timerRegistry.add({\n            context: this,\n            callback: this.onTimeout,\n            duration: timeout.duration,\n            data: internalTimeout\n        });\n        this.register.set(internalTimeout.uniqueName, internalTimeout);\n        return internalTimeout.uniqueName;\n    };\n    /**\n     * Remove an entry\n     */\n    TimeoutRegistry.prototype.remove = function (message) {\n        var requestMsg;\n        var action = constants_1.RESPONSE_TO_REQUEST[message.topic][message.action];\n        if (!action) {\n            requestMsg = message;\n        }\n        else {\n            requestMsg = __assign(__assign({}, message), { action: action });\n        }\n        var uniqueName = this.getUniqueName(requestMsg);\n        this.clear(uniqueName);\n    };\n    /**\n     * Processes an incoming ACK-message and removes the corresponding subscription\n     */\n    TimeoutRegistry.prototype.clear = function (uniqueName) {\n        var timeout = this.register.get(uniqueName);\n        if (timeout) {\n            this.register.delete(uniqueName);\n            this.services.timerRegistry.remove(timeout.timerId);\n        }\n    };\n    /**\n     * Will be invoked if the timeout has occured before the ack message was received\n     */\n    TimeoutRegistry.prototype.onTimeout = function (internalTimeout) {\n        this.register.delete(internalTimeout.uniqueName);\n        var timeout = internalTimeout.timeout;\n        if (timeout.callback) {\n            timeout.callback(timeout.event, timeout.message);\n        }\n        else {\n            this.services.logger.warn(timeout.message, timeout.event);\n        }\n    };\n    /**\n     * Returns a unique name from the timeout\n     */\n    TimeoutRegistry.prototype.getUniqueName = function (message) {\n        var action = message.originalAction || message.action;\n        var name = \"\".concat(message.topic).concat(action, \"_\");\n        if (message.correlationId) {\n            name += message.correlationId;\n        }\n        else if (message.name) {\n            name += message.name;\n        }\n        return name;\n    };\n    /**\n     * Remote all timeouts when connection disconnects\n     */\n    TimeoutRegistry.prototype.onConnectionLost = function () {\n        var e_1, _a;\n        try {\n            for (var _b = __values(this.register), _c = _b.next(); !_c.done; _c = _b.next()) {\n                var _d = __read(_c.value, 2), uniqueName = _d[0], timeout = _d[1];\n                this.services.timerRegistry.remove(timeout.timerId);\n                this.register.delete(uniqueName);\n            }\n        }\n        catch (e_1_1) { e_1 = { error: e_1_1 }; }\n        finally {\n            try {\n                if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n            }\n            finally { if (e_1) throw e_1.error; }\n        }\n    };\n    return TimeoutRegistry;\n}(emitter_1.Emitter));\nexports.TimeoutRegistry = TimeoutRegistry;\n", "\"use strict\";\nvar __values = (this && this.__values) || function(o) {\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n    if (m) return m.call(o);\n    if (o && typeof o.length === \"number\") return {\n        next: function () {\n            if (o && i >= o.length) o = void 0;\n            return { value: o && o[i++], done: !o };\n        }\n    };\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nvar __read = (this && this.__read) || function (o, n) {\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n    if (!m) return o;\n    var i = m.call(o), r, ar = [], e;\n    try {\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n    }\n    catch (error) { e = { error: error }; }\n    finally {\n        try {\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\n        }\n        finally { if (e) throw e.error; }\n    }\n    return ar;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.IntervalTimerRegistry = void 0;\nvar IntervalTimerRegistry = /** @class */ (function () {\n    function IntervalTimerRegistry(timerResolution) {\n        this.timerResolution = timerResolution;\n        this.registry = new Map();\n        this.timerIdCounter = 0;\n        this.timerId = setTimeout(this.triggerTimeouts.bind(this), this.timerResolution);\n    }\n    IntervalTimerRegistry.prototype.close = function () {\n        clearInterval(this.timerId);\n    };\n    IntervalTimerRegistry.prototype.triggerTimeouts = function () {\n        var e_1, _a;\n        var now = Date.now();\n        try {\n            for (var _b = __values(this.registry), _c = _b.next(); !_c.done; _c = _b.next()) {\n                var _d = __read(_c.value, 2), timerId = _d[0], timeout = _d[1];\n                if (now - timeout.created > timeout.duration) {\n                    timeout.callback.call(timeout.context, timeout.data);\n                    this.registry.delete(timerId);\n                }\n            }\n        }\n        catch (e_1_1) { e_1 = { error: e_1_1 }; }\n        finally {\n            try {\n                if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n            }\n            finally { if (e_1) throw e_1.error; }\n        }\n        this.timerId = setTimeout(this.triggerTimeouts.bind(this), this.timerResolution);\n    };\n    IntervalTimerRegistry.prototype.has = function (timerId) {\n        return this.registry.has(timerId);\n    };\n    IntervalTimerRegistry.prototype.add = function (timeout) {\n        this.timerIdCounter++;\n        timeout.created = Date.now();\n        this.registry.set(this.timerIdCounter, timeout);\n        return this.timerIdCounter;\n    };\n    IntervalTimerRegistry.prototype.remove = function (timerId) {\n        return this.registry.delete(timerId);\n    };\n    IntervalTimerRegistry.prototype.requestIdleCallback = function (callback) {\n        setTimeout(callback, 0);\n    };\n    return IntervalTimerRegistry;\n}());\nexports.IntervalTimerRegistry = IntervalTimerRegistry;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.NativeTimerRegistry = void 0;\nvar NativeTimerRegistry = /** @class */ (function () {\n    function NativeTimerRegistry() {\n        this.registry = new Set();\n    }\n    NativeTimerRegistry.prototype.close = function () {\n        this.registry.forEach(clearTimeout);\n        this.registry.clear();\n    };\n    NativeTimerRegistry.prototype.has = function (timerId) {\n        return this.registry.has(timerId);\n    };\n    NativeTimerRegistry.prototype.add = function (timeout) {\n        var _this = this;\n        var id = setTimeout(function () {\n            _this.remove(id);\n            timeout.callback.call(timeout.context, timeout.data);\n        }, timeout.duration);\n        this.registry.add(id);\n        return id;\n    };\n    NativeTimerRegistry.prototype.remove = function (timerId) {\n        clearTimeout(timerId);\n        return this.registry.delete(timerId);\n    };\n    NativeTimerRegistry.prototype.requestIdleCallback = function (callback) {\n        setTimeout(callback, 0);\n    };\n    return NativeTimerRegistry;\n}());\nexports.NativeTimerRegistry = NativeTimerRegistry;\n", "\"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 = 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.<string,*>}\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\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 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", "\"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\";\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<Buffer>}\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<Uint8Array>}\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<Long>}\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.<string,*>} dst Destination object\n * @param {Object.<string,*>} src Source object\n * @param {boolean} [ifNotSet=false] Merges only if the key is not already set\n * @returns {Object.<string,*>} 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<Error>} 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<T>\n * @constructor\n * @param {string} message Error message\n * @param {Object.<string,*>} [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<T>}\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 = 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", "\"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 = 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<TRes>\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<TReq>\n * @template TRes extends Message<TRes>\n * @type {function}\n * @param {TReq|Properties<TReq>} request Request message or plain object\n * @param {rpc.ServiceMethodCallback<TRes>} [callback] Node-style callback called with the error, if any, and the response message\n * @returns {Promise<Message<TRes>>} 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<TReq,TRes>} method Reflected or static method\n * @param {Constructor<TReq>} requestCtor Request constructor\n * @param {Constructor<TRes>} responseCtor Response constructor\n * @param {TReq|Properties<TReq>} request Request message or plain object\n * @param {rpc.ServiceMethodCallback<TRes>} callback Service callback\n * @returns {undefined}\n * @template TReq extends Message<TReq>\n * @template TRes extends Message<TRes>\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\";\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<{}>,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 = {};\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.<string,Root>}\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\";\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", "// minimal library entry point.\n\n\"use strict\";\nmodule.exports = require(\"./src/index-minimal\");\n", "/*eslint-disable block-scoped-var, id-length, no-control-regex, no-magic-numbers, no-prototype-builtins, no-redeclare, no-shadow, no-var, sort-vars*/\n\"use strict\";\n\nvar $protobuf = require(\"protobufjs/minimal\");\n\n// Common aliases\nvar $Reader = $protobuf.Reader, $Writer = $protobuf.Writer, $util = $protobuf.util;\n\n// Exported root namespace\nvar $root = $protobuf.roots[\"default\"] || ($protobuf.roots[\"default\"] = {});\n\n/**\n * AUTH_ACTION enum.\n * @exports AUTH_ACTION\n * @enum {number}\n * @property {number} AUTH_UNKNOWN=0 AUTH_UNKNOWN value\n * @property {number} AUTH_ERROR=1 AUTH_ERROR value\n * @property {number} AUTH_REQUEST=2 AUTH_REQUEST value\n * @property {number} AUTH_AUTH_SUCCESSFUL=3 AUTH_AUTH_SUCCESSFUL value\n * @property {number} AUTH_AUTH_UNSUCCESSFUL=4 AUTH_AUTH_UNSUCCESSFUL value\n * @property {number} AUTH_TOO_MANY_AUTH_ATTEMPTS=100 AUTH_TOO_MANY_AUTH_ATTEMPTS value\n * @property {number} AUTH_INVALID_MESSAGE=101 AUTH_INVALID_MESSAGE value\n * @property {number} AUTH_INVALID_MESSAGE_DATA=102 AUTH_INVALID_MESSAGE_DATA value\n */\n$root.AUTH_ACTION = (function() {\n    var valuesById = {}, values = Object.create(valuesById);\n    values[valuesById[0] = \"AUTH_UNKNOWN\"] = 0;\n    values[valuesById[1] = \"AUTH_ERROR\"] = 1;\n    values[valuesById[2] = \"AUTH_REQUEST\"] = 2;\n    values[valuesById[3] = \"AUTH_AUTH_SUCCESSFUL\"] = 3;\n    values[valuesById[4] = \"AUTH_AUTH_UNSUCCESSFUL\"] = 4;\n    values[valuesById[100] = \"AUTH_TOO_MANY_AUTH_ATTEMPTS\"] = 100;\n    values[valuesById[101] = \"AUTH_INVALID_MESSAGE\"] = 101;\n    values[valuesById[102] = \"AUTH_INVALID_MESSAGE_DATA\"] = 102;\n    return values;\n})();\n\n$root.AuthMessage = (function() {\n\n    /**\n     * Properties of an AuthMessage.\n     * @exports IAuthMessage\n     * @interface IAuthMessage\n     * @property {AUTH_ACTION|null} [action] AuthMessage action\n     * @property {string|null} [data] AuthMessage data\n     * @property {boolean|null} [isError] AuthMessage isError\n     * @property {boolean|null} [isAck] AuthMessage isAck\n     */\n\n    /**\n     * Constructs a new AuthMessage.\n     * @exports AuthMessage\n     * @classdesc Represents an AuthMessage.\n     * @implements IAuthMessage\n     * @constructor\n     * @param {IAuthMessage=} [properties] Properties to set\n     */\n    function AuthMessage(properties) {\n        if (properties)\n            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n                if (properties[keys[i]] != null)\n                    this[keys[i]] = properties[keys[i]];\n    }\n\n    /**\n     * AuthMessage action.\n     * @member {AUTH_ACTION} action\n     * @memberof AuthMessage\n     * @instance\n     */\n    AuthMessage.prototype.action = 0;\n\n    /**\n     * AuthMessage data.\n     * @member {string} data\n     * @memberof AuthMessage\n     * @instance\n     */\n    AuthMessage.prototype.data = \"\";\n\n    /**\n     * AuthMessage isError.\n     * @member {boolean} isError\n     * @memberof AuthMessage\n     * @instance\n     */\n    AuthMessage.prototype.isError = false;\n\n    /**\n     * AuthMessage isAck.\n     * @member {boolean} isAck\n     * @memberof AuthMessage\n     * @instance\n     */\n    AuthMessage.prototype.isAck = false;\n\n    /**\n     * Encodes the specified AuthMessage message. Does not implicitly {@link AuthMessage.verify|verify} messages.\n     * @function encode\n     * @memberof AuthMessage\n     * @static\n     * @param {IAuthMessage} message AuthMessage message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    AuthMessage.encode = function encode(message, writer) {\n        if (!writer)\n            writer = $Writer.create();\n        if (message.action != null && Object.hasOwnProperty.call(message, \"action\"))\n            writer.uint32(/* id 1, wireType 0 =*/8).int32(message.action);\n        if (message.data != null && Object.hasOwnProperty.call(message, \"data\"))\n            writer.uint32(/* id 2, wireType 2 =*/18).string(message.data);\n        if (message.isError != null && Object.hasOwnProperty.call(message, \"isError\"))\n            writer.uint32(/* id 3, wireType 0 =*/24).bool(message.isError);\n        if (message.isAck != null && Object.hasOwnProperty.call(message, \"isAck\"))\n            writer.uint32(/* id 4, wireType 0 =*/32).bool(message.isAck);\n        return writer;\n    };\n\n    /**\n     * Encodes the specified AuthMessage message, length delimited. Does not implicitly {@link AuthMessage.verify|verify} messages.\n     * @function encodeDelimited\n     * @memberof AuthMessage\n     * @static\n     * @param {IAuthMessage} message AuthMessage message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    AuthMessage.encodeDelimited = function encodeDelimited(message, writer) {\n        return this.encode(message, writer).ldelim();\n    };\n\n    /**\n     * Decodes an AuthMessage message from the specified reader or buffer.\n     * @function decode\n     * @memberof AuthMessage\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @param {number} [length] Message length if known beforehand\n     * @returns {AuthMessage} AuthMessage\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    AuthMessage.decode = function decode(reader, length) {\n        if (!(reader instanceof $Reader))\n            reader = $Reader.create(reader);\n        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.AuthMessage();\n        while (reader.pos < end) {\n            var tag = reader.uint32();\n            switch (tag >>> 3) {\n            case 1:\n                message.action = reader.int32();\n                break;\n            case 2:\n                message.data = reader.string();\n                break;\n            case 3:\n                message.isError = reader.bool();\n                break;\n            case 4:\n                message.isAck = reader.bool();\n                break;\n            default:\n                reader.skipType(tag & 7);\n                break;\n            }\n        }\n        return message;\n    };\n\n    /**\n     * Decodes an AuthMessage message from the specified reader or buffer, length delimited.\n     * @function decodeDelimited\n     * @memberof AuthMessage\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @returns {AuthMessage} AuthMessage\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    AuthMessage.decodeDelimited = function decodeDelimited(reader) {\n        if (!(reader instanceof $Reader))\n            reader = new $Reader(reader);\n        return this.decode(reader, reader.uint32());\n    };\n\n    return AuthMessage;\n})();\n\n/**\n * CLUSTER_ACTION enum.\n * @exports CLUSTER_ACTION\n * @enum {number}\n * @property {number} CLUSTER_UNKNOWN=0 CLUSTER_UNKNOWN value\n * @property {number} CLUSTER_REMOVE=1 CLUSTER_REMOVE value\n * @property {number} CLUSTER_STATUS=2 CLUSTER_STATUS value\n */\n$root.CLUSTER_ACTION = (function() {\n    var valuesById = {}, values = Object.create(valuesById);\n    values[valuesById[0] = \"CLUSTER_UNKNOWN\"] = 0;\n    values[valuesById[1] = \"CLUSTER_REMOVE\"] = 1;\n    values[valuesById[2] = \"CLUSTER_STATUS\"] = 2;\n    return values;\n})();\n\n$root.ClusterMessage = (function() {\n\n    /**\n     * Properties of a ClusterMessage.\n     * @exports IClusterMessage\n     * @interface IClusterMessage\n     * @property {CLUSTER_ACTION|null} [action] ClusterMessage action\n     * @property {string|null} [data] ClusterMessage data\n     * @property {boolean|null} [isError] ClusterMessage isError\n     * @property {boolean|null} [isAck] ClusterMessage isAck\n     * @property {number|null} [leaderScore] ClusterMessage leaderScore\n     * @property {string|null} [role] ClusterMessage role\n     */\n\n    /**\n     * Constructs a new ClusterMessage.\n     * @exports ClusterMessage\n     * @classdesc Represents a ClusterMessage.\n     * @implements IClusterMessage\n     * @constructor\n     * @param {IClusterMessage=} [properties] Properties to set\n     */\n    function ClusterMessage(properties) {\n        if (properties)\n            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n                if (properties[keys[i]] != null)\n                    this[keys[i]] = properties[keys[i]];\n    }\n\n    /**\n     * ClusterMessage action.\n     * @member {CLUSTER_ACTION} action\n     * @memberof ClusterMessage\n     * @instance\n     */\n    ClusterMessage.prototype.action = 0;\n\n    /**\n     * ClusterMessage data.\n     * @member {string} data\n     * @memberof ClusterMessage\n     * @instance\n     */\n    ClusterMessage.prototype.data = \"\";\n\n    /**\n     * ClusterMessage isError.\n     * @member {boolean} isError\n     * @memberof ClusterMessage\n     * @instance\n     */\n    ClusterMessage.prototype.isError = false;\n\n    /**\n     * ClusterMessage isAck.\n     * @member {boolean} isAck\n     * @memberof ClusterMessage\n     * @instance\n     */\n    ClusterMessage.prototype.isAck = false;\n\n    /**\n     * ClusterMessage leaderScore.\n     * @member {number} leaderScore\n     * @memberof ClusterMessage\n     * @instance\n     */\n    ClusterMessage.prototype.leaderScore = 0;\n\n    /**\n     * ClusterMessage role.\n     * @member {string} role\n     * @memberof ClusterMessage\n     * @instance\n     */\n    ClusterMessage.prototype.role = \"\";\n\n    /**\n     * Encodes the specified ClusterMessage message. Does not implicitly {@link ClusterMessage.verify|verify} messages.\n     * @function encode\n     * @memberof ClusterMessage\n     * @static\n     * @param {IClusterMessage} message ClusterMessage message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    ClusterMessage.encode = function encode(message, writer) {\n        if (!writer)\n            writer = $Writer.create();\n        if (message.action != null && Object.hasOwnProperty.call(message, \"action\"))\n            writer.uint32(/* id 1, wireType 0 =*/8).int32(message.action);\n        if (message.data != null && Object.hasOwnProperty.call(message, \"data\"))\n            writer.uint32(/* id 2, wireType 2 =*/18).string(message.data);\n        if (message.isError != null && Object.hasOwnProperty.call(message, \"isError\"))\n            writer.uint32(/* id 3, wireType 0 =*/24).bool(message.isError);\n        if (message.isAck != null && Object.hasOwnProperty.call(message, \"isAck\"))\n            writer.uint32(/* id 4, wireType 0 =*/32).bool(message.isAck);\n        if (message.leaderScore != null && Object.hasOwnProperty.call(message, \"leaderScore\"))\n            writer.uint32(/* id 5, wireType 0 =*/40).int32(message.leaderScore);\n        if (message.role != null && Object.hasOwnProperty.call(message, \"role\"))\n            writer.uint32(/* id 7, wireType 2 =*/58).string(message.role);\n        return writer;\n    };\n\n    /**\n     * Encodes the specified ClusterMessage message, length delimited. Does not implicitly {@link ClusterMessage.verify|verify} messages.\n     * @function encodeDelimited\n     * @memberof ClusterMessage\n     * @static\n     * @param {IClusterMessage} message ClusterMessage message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    ClusterMessage.encodeDelimited = function encodeDelimited(message, writer) {\n        return this.encode(message, writer).ldelim();\n    };\n\n    /**\n     * Decodes a ClusterMessage message from the specified reader or buffer.\n     * @function decode\n     * @memberof ClusterMessage\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @param {number} [length] Message length if known beforehand\n     * @returns {ClusterMessage} ClusterMessage\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    ClusterMessage.decode = function decode(reader, length) {\n        if (!(reader instanceof $Reader))\n            reader = $Reader.create(reader);\n        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.ClusterMessage();\n        while (reader.pos < end) {\n            var tag = reader.uint32();\n            switch (tag >>> 3) {\n            case 1:\n                message.action = reader.int32();\n                break;\n            case 2:\n                message.data = reader.string();\n                break;\n            case 3:\n                message.isError = reader.bool();\n                break;\n            case 4:\n                message.isAck = reader.bool();\n                break;\n            case 5:\n                message.leaderScore = reader.int32();\n                break;\n            case 7:\n                message.role = reader.string();\n                break;\n            default:\n                reader.skipType(tag & 7);\n                break;\n            }\n        }\n        return message;\n    };\n\n    /**\n     * Decodes a ClusterMessage message from the specified reader or buffer, length delimited.\n     * @function decodeDelimited\n     * @memberof ClusterMessage\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @returns {ClusterMessage} ClusterMessage\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    ClusterMessage.decodeDelimited = function decodeDelimited(reader) {\n        if (!(reader instanceof $Reader))\n            reader = new $Reader(reader);\n        return this.decode(reader, reader.uint32());\n    };\n\n    return ClusterMessage;\n})();\n\n/**\n * CONNECTION_ACTION enum.\n * @exports CONNECTION_ACTION\n * @enum {number}\n * @property {number} CONNECTION_UNKNOWN=0 CONNECTION_UNKNOWN value\n * @property {number} CONNECTION_ERROR=1 CONNECTION_ERROR value\n * @property {number} CONNECTION_PING=2 CONNECTION_PING value\n * @property {number} CONNECTION_PONG=3 CONNECTION_PONG value\n * @property {number} CONNECTION_ACCEPT=4 CONNECTION_ACCEPT value\n * @property {number} CONNECTION_CHALLENGE=5 CONNECTION_CHALLENGE value\n * @property {number} CONNECTION_REJECT=6 CONNECTION_REJECT value\n * @property {number} CONNECTION_REDIRECT=7 CONNECTION_REDIRECT value\n * @property {number} CONNECTION_CLOSING=8 CONNECTION_CLOSING value\n * @property {number} CONNECTION_CLOSED=9 CONNECTION_CLOSED value\n * @property {number} CONNECTION_AUTHENTICATION_TIMEOUT=100 CONNECTION_AUTHENTICATION_TIMEOUT value\n * @property {number} CONNECTION_INVALID_MESSAGE=101 CONNECTION_INVALID_MESSAGE value\n */\n$root.CONNECTION_ACTION = (function() {\n    var valuesById = {}, values = Object.create(valuesById);\n    values[valuesById[0] = \"CONNECTION_UNKNOWN\"] = 0;\n    values[valuesById[1] = \"CONNECTION_ERROR\"] = 1;\n    values[valuesById[2] = \"CONNECTION_PING\"] = 2;\n    values[valuesById[3] = \"CONNECTION_PONG\"] = 3;\n    values[valuesById[4] = \"CONNECTION_ACCEPT\"] = 4;\n    values[valuesById[5] = \"CONNECTION_CHALLENGE\"] = 5;\n    values[valuesById[6] = \"CONNECTION_REJECT\"] = 6;\n    values[valuesById[7] = \"CONNECTION_REDIRECT\"] = 7;\n    values[valuesById[8] = \"CONNECTION_CLOSING\"] = 8;\n    values[valuesById[9] = \"CONNECTION_CLOSED\"] = 9;\n    values[valuesById[100] = \"CONNECTION_AUTHENTICATION_TIMEOUT\"] = 100;\n    values[valuesById[101] = \"CONNECTION_INVALID_MESSAGE\"] = 101;\n    return values;\n})();\n\n$root.ConnectionMessage = (function() {\n\n    /**\n     * Properties of a ConnectionMessage.\n     * @exports IConnectionMessage\n     * @interface IConnectionMessage\n     * @property {CONNECTION_ACTION|null} [action] ConnectionMessage action\n     * @property {string|null} [data] ConnectionMessage data\n     * @property {boolean|null} [isError] ConnectionMessage isError\n     * @property {boolean|null} [isAck] ConnectionMessage isAck\n     * @property {string|null} [url] ConnectionMessage url\n     * @property {string|null} [protocolVersion] ConnectionMessage protocolVersion\n     * @property {string|null} [sdkType] ConnectionMessage sdkType\n     * @property {string|null} [sdkVersion] ConnectionMessage sdkVersion\n     */\n\n    /**\n     * Constructs a new ConnectionMessage.\n     * @exports ConnectionMessage\n     * @classdesc Represents a ConnectionMessage.\n     * @implements IConnectionMessage\n     * @constructor\n     * @param {IConnectionMessage=} [properties] Properties to set\n     */\n    function ConnectionMessage(properties) {\n        if (properties)\n            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n                if (properties[keys[i]] != null)\n                    this[keys[i]] = properties[keys[i]];\n    }\n\n    /**\n     * ConnectionMessage action.\n     * @member {CONNECTION_ACTION} action\n     * @memberof ConnectionMessage\n     * @instance\n     */\n    ConnectionMessage.prototype.action = 0;\n\n    /**\n     * ConnectionMessage data.\n     * @member {string} data\n     * @memberof ConnectionMessage\n     * @instance\n     */\n    ConnectionMessage.prototype.data = \"\";\n\n    /**\n     * ConnectionMessage isError.\n     * @member {boolean} isError\n     * @memberof ConnectionMessage\n     * @instance\n     */\n    ConnectionMessage.prototype.isError = false;\n\n    /**\n     * ConnectionMessage isAck.\n     * @member {boolean} isAck\n     * @memberof ConnectionMessage\n     * @instance\n     */\n    ConnectionMessage.prototype.isAck = false;\n\n    /**\n     * ConnectionMessage url.\n     * @member {string} url\n     * @memberof ConnectionMessage\n     * @instance\n     */\n    ConnectionMessage.prototype.url = \"\";\n\n    /**\n     * ConnectionMessage protocolVersion.\n     * @member {string} protocolVersion\n     * @memberof ConnectionMessage\n     * @instance\n     */\n    ConnectionMessage.prototype.protocolVersion = \"\";\n\n    /**\n     * ConnectionMessage sdkType.\n     * @member {string} sdkType\n     * @memberof ConnectionMessage\n     * @instance\n     */\n    ConnectionMessage.prototype.sdkType = \"\";\n\n    /**\n     * ConnectionMessage sdkVersion.\n     * @member {string} sdkVersion\n     * @memberof ConnectionMessage\n     * @instance\n     */\n    ConnectionMessage.prototype.sdkVersion = \"\";\n\n    /**\n     * Encodes the specified ConnectionMessage message. Does not implicitly {@link ConnectionMessage.verify|verify} messages.\n     * @function encode\n     * @memberof ConnectionMessage\n     * @static\n     * @param {IConnectionMessage} message ConnectionMessage message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    ConnectionMessage.encode = function encode(message, writer) {\n        if (!writer)\n            writer = $Writer.create();\n        if (message.action != null && Object.hasOwnProperty.call(message, \"action\"))\n            writer.uint32(/* id 1, wireType 0 =*/8).int32(message.action);\n        if (message.data != null && Object.hasOwnProperty.call(message, \"data\"))\n            writer.uint32(/* id 2, wireType 2 =*/18).string(message.data);\n        if (message.isError != null && Object.hasOwnProperty.call(message, \"isError\"))\n            writer.uint32(/* id 3, wireType 0 =*/24).bool(message.isError);\n        if (message.isAck != null && Object.hasOwnProperty.call(message, \"isAck\"))\n            writer.uint32(/* id 4, wireType 0 =*/32).bool(message.isAck);\n        if (message.url != null && Object.hasOwnProperty.call(message, \"url\"))\n            writer.uint32(/* id 5, wireType 2 =*/42).string(message.url);\n        if (message.protocolVersion != null && Object.hasOwnProperty.call(message, \"protocolVersion\"))\n            writer.uint32(/* id 6, wireType 2 =*/50).string(message.protocolVersion);\n        if (message.sdkVersion != null && Object.hasOwnProperty.call(message, \"sdkVersion\"))\n            writer.uint32(/* id 7, wireType 2 =*/58).string(message.sdkVersion);\n        if (message.sdkType != null && Object.hasOwnProperty.call(message, \"sdkType\"))\n            writer.uint32(/* id 8, wireType 2 =*/66).string(message.sdkType);\n        return writer;\n    };\n\n    /**\n     * Encodes the specified ConnectionMessage message, length delimited. Does not implicitly {@link ConnectionMessage.verify|verify} messages.\n     * @function encodeDelimited\n     * @memberof ConnectionMessage\n     * @static\n     * @param {IConnectionMessage} message ConnectionMessage message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    ConnectionMessage.encodeDelimited = function encodeDelimited(message, writer) {\n        return this.encode(message, writer).ldelim();\n    };\n\n    /**\n     * Decodes a ConnectionMessage message from the specified reader or buffer.\n     * @function decode\n     * @memberof ConnectionMessage\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @param {number} [length] Message length if known beforehand\n     * @returns {ConnectionMessage} ConnectionMessage\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    ConnectionMessage.decode = function decode(reader, length) {\n        if (!(reader instanceof $Reader))\n            reader = $Reader.create(reader);\n        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.ConnectionMessage();\n        while (reader.pos < end) {\n            var tag = reader.uint32();\n            switch (tag >>> 3) {\n            case 1:\n                message.action = reader.int32();\n                break;\n            case 2:\n                message.data = reader.string();\n                break;\n            case 3:\n                message.isError = reader.bool();\n                break;\n            case 4:\n                message.isAck = reader.bool();\n                break;\n            case 5:\n                message.url = reader.string();\n                break;\n            case 6:\n                message.protocolVersion = reader.string();\n                break;\n            case 8:\n                message.sdkType = reader.string();\n                break;\n            case 7:\n                message.sdkVersion = reader.string();\n                break;\n            default:\n                reader.skipType(tag & 7);\n                break;\n            }\n        }\n        return message;\n    };\n\n    /**\n     * Decodes a ConnectionMessage message from the specified reader or buffer, length delimited.\n     * @function decodeDelimited\n     * @memberof ConnectionMessage\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @returns {ConnectionMessage} ConnectionMessage\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    ConnectionMessage.decodeDelimited = function decodeDelimited(reader) {\n        if (!(reader instanceof $Reader))\n            reader = new $Reader(reader);\n        return this.decode(reader, reader.uint32());\n    };\n\n    return ConnectionMessage;\n})();\n\n/**\n * EVENT_ACTION enum.\n * @exports EVENT_ACTION\n * @enum {number}\n * @property {number} EVENT_UNKNOWN=0 EVENT_UNKNOWN value\n * @property {number} EVENT_ERROR=1 EVENT_ERROR value\n * @property {number} EVENT_EMIT=2 EVENT_EMIT value\n * @property {number} EVENT_SUBSCRIBE=3 EVENT_SUBSCRIBE value\n * @property {number} EVENT_UNSUBSCRIBE=4 EVENT_UNSUBSCRIBE value\n * @property {number} EVENT_LISTEN=5 EVENT_LISTEN value\n * @property {number} EVENT_UNLISTEN=6 EVENT_UNLISTEN value\n * @property {number} EVENT_LISTEN_ACCEPT=7 EVENT_LISTEN_ACCEPT value\n * @property {number} EVENT_LISTEN_REJECT=8 EVENT_LISTEN_REJECT value\n * @property {number} EVENT_SUBSCRIPTION_HAS_PROVIDER=9 EVENT_SUBSCRIPTION_HAS_PROVIDER value\n * @property {number} EVENT_SUBSCRIPTION_HAS_NO_PROVIDER=10 EVENT_SUBSCRIPTION_HAS_NO_PROVIDER value\n * @property {number} EVENT_SUBSCRIPTION_FOR_PATTERN_FOUND=11 EVENT_SUBSCRIPTION_FOR_PATTERN_FOUND value\n * @property {number} EVENT_SUBSCRIPTION_FOR_PATTERN_REMOVED=12 EVENT_SUBSCRIPTION_FOR_PATTERN_REMOVED value\n * @property {number} EVENT_INVALID_LISTEN_REGEX=100 EVENT_INVALID_LISTEN_REGEX value\n * @property {number} EVENT_LISTEN_RESPONSE_TIMEOUT=101 EVENT_LISTEN_RESPONSE_TIMEOUT value\n * @property {number} EVENT_LISTEN_UNSUCCESSFUL=102 EVENT_LISTEN_UNSUCCESSFUL value\n * @property {number} EVENT_MESSAGE_PERMISSION_ERROR=103 EVENT_MESSAGE_PERMISSION_ERROR value\n * @property {number} EVENT_MESSAGE_DENIED=104 EVENT_MESSAGE_DENIED value\n * @property {number} EVENT_INVALID_MESSAGE_DATA=105 EVENT_INVALID_MESSAGE_DATA value\n * @property {number} EVENT_MULTIPLE_SUBSCRIPTIONS=106 EVENT_MULTIPLE_SUBSCRIPTIONS value\n * @property {number} EVENT_NOT_SUBSCRIBED=107 EVENT_NOT_SUBSCRIBED value\n */\n$root.EVENT_ACTION = (function() {\n    var valuesById = {}, values = Object.create(valuesById);\n    values[valuesById[0] = \"EVENT_UNKNOWN\"] = 0;\n    values[valuesById[1] = \"EVENT_ERROR\"] = 1;\n    values[valuesById[2] = \"EVENT_EMIT\"] = 2;\n    values[valuesById[3] = \"EVENT_SUBSCRIBE\"] = 3;\n    values[valuesById[4] = \"EVENT_UNSUBSCRIBE\"] = 4;\n    values[valuesById[5] = \"EVENT_LISTEN\"] = 5;\n    values[valuesById[6] = \"EVENT_UNLISTEN\"] = 6;\n    values[valuesById[7] = \"EVENT_LISTEN_ACCEPT\"] = 7;\n    values[valuesById[8] = \"EVENT_LISTEN_REJECT\"] = 8;\n    values[valuesById[9] = \"EVENT_SUBSCRIPTION_HAS_PROVIDER\"] = 9;\n    values[valuesById[10] = \"EVENT_SUBSCRIPTION_HAS_NO_PROVIDER\"] = 10;\n    values[valuesById[11] = \"EVENT_SUBSCRIPTION_FOR_PATTERN_FOUND\"] = 11;\n    values[valuesById[12] = \"EVENT_SUBSCRIPTION_FOR_PATTERN_REMOVED\"] = 12;\n    values[valuesById[100] = \"EVENT_INVALID_LISTEN_REGEX\"] = 100;\n    values[valuesById[101] = \"EVENT_LISTEN_RESPONSE_TIMEOUT\"] = 101;\n    values[valuesById[102] = \"EVENT_LISTEN_UNSUCCESSFUL\"] = 102;\n    values[valuesById[103] = \"EVENT_MESSAGE_PERMISSION_ERROR\"] = 103;\n    values[valuesById[104] = \"EVENT_MESSAGE_DENIED\"] = 104;\n    values[valuesById[105] = \"EVENT_INVALID_MESSAGE_DATA\"] = 105;\n    values[valuesById[106] = \"EVENT_MULTIPLE_SUBSCRIPTIONS\"] = 106;\n    values[valuesById[107] = \"EVENT_NOT_SUBSCRIBED\"] = 107;\n    return values;\n})();\n\n$root.EventMessage = (function() {\n\n    /**\n     * Properties of an EventMessage.\n     * @exports IEventMessage\n     * @interface IEventMessage\n     * @property {EVENT_ACTION|null} [action] EventMessage action\n     * @property {string|null} [data] EventMessage data\n     * @property {string|null} [correlationId] EventMessage correlationId\n     * @property {boolean|null} [isError] EventMessage isError\n     * @property {boolean|null} [isAck] EventMessage isAck\n     * @property {string|null} [name] EventMessage name\n     * @property {Array.<string>|null} [names] EventMessage names\n     * @property {string|null} [subscription] EventMessage subscription\n     * @property {TOPIC|null} [originalTOPIC] EventMessage originalTOPIC\n     * @property {EVENT_ACTION|null} [originalAction] EventMessage originalAction\n     */\n\n    /**\n     * Constructs a new EventMessage.\n     * @exports EventMessage\n     * @classdesc Represents an EventMessage.\n     * @implements IEventMessage\n     * @constructor\n     * @param {IEventMessage=} [properties] Properties to set\n     */\n    function EventMessage(properties) {\n        this.names = [];\n        if (properties)\n            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n                if (properties[keys[i]] != null)\n                    this[keys[i]] = properties[keys[i]];\n    }\n\n    /**\n     * EventMessage action.\n     * @member {EVENT_ACTION} action\n     * @memberof EventMessage\n     * @instance\n     */\n    EventMessage.prototype.action = 0;\n\n    /**\n     * EventMessage data.\n     * @member {string} data\n     * @memberof EventMessage\n     * @instance\n     */\n    EventMessage.prototype.data = \"\";\n\n    /**\n     * EventMessage correlationId.\n     * @member {string} correlationId\n     * @memberof EventMessage\n     * @instance\n     */\n    EventMessage.prototype.correlationId = \"\";\n\n    /**\n     * EventMessage isError.\n     * @member {boolean} isError\n     * @memberof EventMessage\n     * @instance\n     */\n    EventMessage.prototype.isError = false;\n\n    /**\n     * EventMessage isAck.\n     * @member {boolean} isAck\n     * @memberof EventMessage\n     * @instance\n     */\n    EventMessage.prototype.isAck = false;\n\n    /**\n     * EventMessage name.\n     * @member {string} name\n     * @memberof EventMessage\n     * @instance\n     */\n    EventMessage.prototype.name = \"\";\n\n    /**\n     * EventMessage names.\n     * @member {Array.<string>} names\n     * @memberof EventMessage\n     * @instance\n     */\n    EventMessage.prototype.names = $util.emptyArray;\n\n    /**\n     * EventMessage subscription.\n     * @member {string} subscription\n     * @memberof EventMessage\n     * @instance\n     */\n    EventMessage.prototype.subscription = \"\";\n\n    /**\n     * EventMessage originalTOPIC.\n     * @member {TOPIC} originalTOPIC\n     * @memberof EventMessage\n     * @instance\n     */\n    EventMessage.prototype.originalTOPIC = 0;\n\n    /**\n     * EventMessage originalAction.\n     * @member {EVENT_ACTION} originalAction\n     * @memberof EventMessage\n     * @instance\n     */\n    EventMessage.prototype.originalAction = 0;\n\n    /**\n     * Encodes the specified EventMessage message. Does not implicitly {@link EventMessage.verify|verify} messages.\n     * @function encode\n     * @memberof EventMessage\n     * @static\n     * @param {IEventMessage} message EventMessage message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    EventMessage.encode = function encode(message, writer) {\n        if (!writer)\n            writer = $Writer.create();\n        if (message.action != null && Object.hasOwnProperty.call(message, \"action\"))\n            writer.uint32(/* id 1, wireType 0 =*/8).int32(message.action);\n        if (message.data != null && Object.hasOwnProperty.call(message, \"data\"))\n            writer.uint32(/* id 2, wireType 2 =*/18).string(message.data);\n        if (message.correlationId != null && Object.hasOwnProperty.call(message, \"correlationId\"))\n            writer.uint32(/* id 3, wireType 2 =*/26).string(message.correlationId);\n        if (message.isError != null && Object.hasOwnProperty.call(message, \"isError\"))\n            writer.uint32(/* id 4, wireType 0 =*/32).bool(message.isError);\n        if (message.isAck != null && Object.hasOwnProperty.call(message, \"isAck\"))\n            writer.uint32(/* id 5, wireType 0 =*/40).bool(message.isAck);\n        if (message.name != null && Object.hasOwnProperty.call(message, \"name\"))\n            writer.uint32(/* id 6, wireType 2 =*/50).string(message.name);\n        if (message.names != null && message.names.length)\n            for (var i = 0; i < message.names.length; ++i)\n                writer.uint32(/* id 7, wireType 2 =*/58).string(message.names[i]);\n        if (message.subscription != null && Object.hasOwnProperty.call(message, \"subscription\"))\n            writer.uint32(/* id 8, wireType 2 =*/66).string(message.subscription);\n        if (message.originalTOPIC != null && Object.hasOwnProperty.call(message, \"originalTOPIC\"))\n            writer.uint32(/* id 10, wireType 0 =*/80).int32(message.originalTOPIC);\n        if (message.originalAction != null && Object.hasOwnProperty.call(message, \"originalAction\"))\n            writer.uint32(/* id 11, wireType 0 =*/88).int32(message.originalAction);\n        return writer;\n    };\n\n    /**\n     * Encodes the specified EventMessage message, length delimited. Does not implicitly {@link EventMessage.verify|verify} messages.\n     * @function encodeDelimited\n     * @memberof EventMessage\n     * @static\n     * @param {IEventMessage} message EventMessage message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    EventMessage.encodeDelimited = function encodeDelimited(message, writer) {\n        return this.encode(message, writer).ldelim();\n    };\n\n    /**\n     * Decodes an EventMessage message from the specified reader or buffer.\n     * @function decode\n     * @memberof EventMessage\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @param {number} [length] Message length if known beforehand\n     * @returns {EventMessage} EventMessage\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    EventMessage.decode = function decode(reader, length) {\n        if (!(reader instanceof $Reader))\n            reader = $Reader.create(reader);\n        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.EventMessage();\n        while (reader.pos < end) {\n            var tag = reader.uint32();\n            switch (tag >>> 3) {\n            case 1:\n                message.action = reader.int32();\n                break;\n            case 2:\n                message.data = reader.string();\n                break;\n            case 3:\n                message.correlationId = reader.string();\n                break;\n            case 4:\n                message.isError = reader.bool();\n                break;\n            case 5:\n                message.isAck = reader.bool();\n                break;\n            case 6:\n                message.name = reader.string();\n                break;\n            case 7:\n                if (!(message.names && message.names.length))\n                    message.names = [];\n                message.names.push(reader.string());\n                break;\n            case 8:\n                message.subscription = reader.string();\n                break;\n            case 10:\n                message.originalTOPIC = reader.int32();\n                break;\n            case 11:\n                message.originalAction = reader.int32();\n                break;\n            default:\n                reader.skipType(tag & 7);\n                break;\n            }\n        }\n        return message;\n    };\n\n    /**\n     * Decodes an EventMessage message from the specified reader or buffer, length delimited.\n     * @function decodeDelimited\n     * @memberof EventMessage\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @returns {EventMessage} EventMessage\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    EventMessage.decodeDelimited = function decodeDelimited(reader) {\n        if (!(reader instanceof $Reader))\n            reader = new $Reader(reader);\n        return this.decode(reader, reader.uint32());\n    };\n\n    return EventMessage;\n})();\n\n/**\n * TOPIC enum.\n * @exports TOPIC\n * @enum {number}\n * @property {number} UNKNOWN=0 UNKNOWN value\n * @property {number} PARSER=1 PARSER value\n * @property {number} CONNECTION=2 CONNECTION value\n * @property {number} AUTH=3 AUTH value\n * @property {number} EVENT=4 EVENT value\n * @property {number} RECORD=5 RECORD value\n * @property {number} RPC=6 RPC value\n * @property {number} PRESENCE=7 PRESENCE value\n * @property {number} MONITORING=8 MONITORING value\n * @property {number} CLUSTER=9 CLUSTER value\n * @property {number} LOCK=10 LOCK value\n * @property {number} STATE_REGISTRY=11 STATE_REGISTRY value\n * @property {number} ERROR=100 ERROR value\n */\n$root.TOPIC = (function() {\n    var valuesById = {}, values = Object.create(valuesById);\n    values[valuesById[0] = \"UNKNOWN\"] = 0;\n    values[valuesById[1] = \"PARSER\"] = 1;\n    values[valuesById[2] = \"CONNECTION\"] = 2;\n    values[valuesById[3] = \"AUTH\"] = 3;\n    values[valuesById[4] = \"EVENT\"] = 4;\n    values[valuesById[5] = \"RECORD\"] = 5;\n    values[valuesById[6] = \"RPC\"] = 6;\n    values[valuesById[7] = \"PRESENCE\"] = 7;\n    values[valuesById[8] = \"MONITORING\"] = 8;\n    values[valuesById[9] = \"CLUSTER\"] = 9;\n    values[valuesById[10] = \"LOCK\"] = 10;\n    values[valuesById[11] = \"STATE_REGISTRY\"] = 11;\n    values[valuesById[100] = \"ERROR\"] = 100;\n    return values;\n})();\n\n$root.Message = (function() {\n\n    /**\n     * Properties of a Message.\n     * @exports IMessage\n     * @interface IMessage\n     * @property {TOPIC|null} [topic] Message topic\n     * @property {Uint8Array|null} [message] Message message\n     */\n\n    /**\n     * Constructs a new Message.\n     * @exports Message\n     * @classdesc Represents a Message.\n     * @implements IMessage\n     * @constructor\n     * @param {IMessage=} [properties] Properties to set\n     */\n    function Message(properties) {\n        if (properties)\n            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n                if (properties[keys[i]] != null)\n                    this[keys[i]] = properties[keys[i]];\n    }\n\n    /**\n     * Message topic.\n     * @member {TOPIC} topic\n     * @memberof Message\n     * @instance\n     */\n    Message.prototype.topic = 0;\n\n    /**\n     * Message message.\n     * @member {Uint8Array} message\n     * @memberof Message\n     * @instance\n     */\n    Message.prototype.message = $util.newBuffer([]);\n\n    /**\n     * Encodes the specified Message message. Does not implicitly {@link Message.verify|verify} messages.\n     * @function encode\n     * @memberof Message\n     * @static\n     * @param {IMessage} message Message message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    Message.encode = function encode(message, writer) {\n        if (!writer)\n            writer = $Writer.create();\n        if (message.topic != null && Object.hasOwnProperty.call(message, \"topic\"))\n            writer.uint32(/* id 2, wireType 0 =*/16).int32(message.topic);\n        if (message.message != null && Object.hasOwnProperty.call(message, \"message\"))\n            writer.uint32(/* id 3, wireType 2 =*/26).bytes(message.message);\n        return writer;\n    };\n\n    /**\n     * Encodes the specified Message message, length delimited. Does not implicitly {@link Message.verify|verify} messages.\n     * @function encodeDelimited\n     * @memberof Message\n     * @static\n     * @param {IMessage} message Message message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    Message.encodeDelimited = function encodeDelimited(message, writer) {\n        return this.encode(message, writer).ldelim();\n    };\n\n    /**\n     * Decodes a Message message from the specified reader or buffer.\n     * @function decode\n     * @memberof Message\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @param {number} [length] Message length if known beforehand\n     * @returns {Message} Message\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    Message.decode = function decode(reader, length) {\n        if (!(reader instanceof $Reader))\n            reader = $Reader.create(reader);\n        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.Message();\n        while (reader.pos < end) {\n            var tag = reader.uint32();\n            switch (tag >>> 3) {\n            case 2:\n                message.topic = reader.int32();\n                break;\n            case 3:\n                message.message = reader.bytes();\n                break;\n            default:\n                reader.skipType(tag & 7);\n                break;\n            }\n        }\n        return message;\n    };\n\n    /**\n     * Decodes a Message message from the specified reader or buffer, length delimited.\n     * @function decodeDelimited\n     * @memberof Message\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @returns {Message} Message\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    Message.decodeDelimited = function decodeDelimited(reader) {\n        if (!(reader instanceof $Reader))\n            reader = new $Reader(reader);\n        return this.decode(reader, reader.uint32());\n    };\n\n    return Message;\n})();\n\n/**\n * LOCK_ACTION enum.\n * @exports LOCK_ACTION\n * @enum {number}\n * @property {number} LOCK_UNKNOWN=0 LOCK_UNKNOWN value\n * @property {number} LOCK_ERROR=1 LOCK_ERROR value\n * @property {number} LOCK_REQUEST=2 LOCK_REQUEST value\n * @property {number} LOCK_RESPONSE=3 LOCK_RESPONSE value\n * @property {number} LOCK_RELEASE=4 LOCK_RELEASE value\n */\n$root.LOCK_ACTION = (function() {\n    var valuesById = {}, values = Object.create(valuesById);\n    values[valuesById[0] = \"LOCK_UNKNOWN\"] = 0;\n    values[valuesById[1] = \"LOCK_ERROR\"] = 1;\n    values[valuesById[2] = \"LOCK_REQUEST\"] = 2;\n    values[valuesById[3] = \"LOCK_RESPONSE\"] = 3;\n    values[valuesById[4] = \"LOCK_RELEASE\"] = 4;\n    return values;\n})();\n\n$root.LockMessage = (function() {\n\n    /**\n     * Properties of a LockMessage.\n     * @exports ILockMessage\n     * @interface ILockMessage\n     * @property {LOCK_ACTION|null} [action] LockMessage action\n     * @property {boolean|null} [locked] LockMessage locked\n     */\n\n    /**\n     * Constructs a new LockMessage.\n     * @exports LockMessage\n     * @classdesc Represents a LockMessage.\n     * @implements ILockMessage\n     * @constructor\n     * @param {ILockMessage=} [properties] Properties to set\n     */\n    function LockMessage(properties) {\n        if (properties)\n            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n                if (properties[keys[i]] != null)\n                    this[keys[i]] = properties[keys[i]];\n    }\n\n    /**\n     * LockMessage action.\n     * @member {LOCK_ACTION} action\n     * @memberof LockMessage\n     * @instance\n     */\n    LockMessage.prototype.action = 0;\n\n    /**\n     * LockMessage locked.\n     * @member {boolean} locked\n     * @memberof LockMessage\n     * @instance\n     */\n    LockMessage.prototype.locked = false;\n\n    /**\n     * Encodes the specified LockMessage message. Does not implicitly {@link LockMessage.verify|verify} messages.\n     * @function encode\n     * @memberof LockMessage\n     * @static\n     * @param {ILockMessage} message LockMessage message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    LockMessage.encode = function encode(message, writer) {\n        if (!writer)\n            writer = $Writer.create();\n        if (message.action != null && Object.hasOwnProperty.call(message, \"action\"))\n            writer.uint32(/* id 1, wireType 0 =*/8).int32(message.action);\n        if (message.locked != null && Object.hasOwnProperty.call(message, \"locked\"))\n            writer.uint32(/* id 3, wireType 0 =*/24).bool(message.locked);\n        return writer;\n    };\n\n    /**\n     * Encodes the specified LockMessage message, length delimited. Does not implicitly {@link LockMessage.verify|verify} messages.\n     * @function encodeDelimited\n     * @memberof LockMessage\n     * @static\n     * @param {ILockMessage} message LockMessage message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    LockMessage.encodeDelimited = function encodeDelimited(message, writer) {\n        return this.encode(message, writer).ldelim();\n    };\n\n    /**\n     * Decodes a LockMessage message from the specified reader or buffer.\n     * @function decode\n     * @memberof LockMessage\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @param {number} [length] Message length if known beforehand\n     * @returns {LockMessage} LockMessage\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    LockMessage.decode = function decode(reader, length) {\n        if (!(reader instanceof $Reader))\n            reader = $Reader.create(reader);\n        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.LockMessage();\n        while (reader.pos < end) {\n            var tag = reader.uint32();\n            switch (tag >>> 3) {\n            case 1:\n                message.action = reader.int32();\n                break;\n            case 3:\n                message.locked = reader.bool();\n                break;\n            default:\n                reader.skipType(tag & 7);\n                break;\n            }\n        }\n        return message;\n    };\n\n    /**\n     * Decodes a LockMessage message from the specified reader or buffer, length delimited.\n     * @function decodeDelimited\n     * @memberof LockMessage\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @returns {LockMessage} LockMessage\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    LockMessage.decodeDelimited = function decodeDelimited(reader) {\n        if (!(reader instanceof $Reader))\n            reader = new $Reader(reader);\n        return this.decode(reader, reader.uint32());\n    };\n\n    return LockMessage;\n})();\n\n/**\n * MONITORING_ACTION enum.\n * @exports MONITORING_ACTION\n * @enum {number}\n * @property {number} MONITORING_UNKNOWN=0 MONITORING_UNKNOWN value\n */\n$root.MONITORING_ACTION = (function() {\n    var valuesById = {}, values = Object.create(valuesById);\n    values[valuesById[0] = \"MONITORING_UNKNOWN\"] = 0;\n    return values;\n})();\n\n$root.MonitoringMessage = (function() {\n\n    /**\n     * Properties of a MonitoringMessage.\n     * @exports IMonitoringMessage\n     * @interface IMonitoringMessage\n     * @property {MONITORING_ACTION|null} [action] MonitoringMessage action\n     * @property {string|null} [data] MonitoringMessage data\n     * @property {string|null} [correlationId] MonitoringMessage correlationId\n     * @property {boolean|null} [isError] MonitoringMessage isError\n     * @property {boolean|null} [isAck] MonitoringMessage isAck\n     */\n\n    /**\n     * Constructs a new MonitoringMessage.\n     * @exports MonitoringMessage\n     * @classdesc Represents a MonitoringMessage.\n     * @implements IMonitoringMessage\n     * @constructor\n     * @param {IMonitoringMessage=} [properties] Properties to set\n     */\n    function MonitoringMessage(properties) {\n        if (properties)\n            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n                if (properties[keys[i]] != null)\n                    this[keys[i]] = properties[keys[i]];\n    }\n\n    /**\n     * MonitoringMessage action.\n     * @member {MONITORING_ACTION} action\n     * @memberof MonitoringMessage\n     * @instance\n     */\n    MonitoringMessage.prototype.action = 0;\n\n    /**\n     * MonitoringMessage data.\n     * @member {string} data\n     * @memberof MonitoringMessage\n     * @instance\n     */\n    MonitoringMessage.prototype.data = \"\";\n\n    /**\n     * MonitoringMessage correlationId.\n     * @member {string} correlationId\n     * @memberof MonitoringMessage\n     * @instance\n     */\n    MonitoringMessage.prototype.correlationId = \"\";\n\n    /**\n     * MonitoringMessage isError.\n     * @member {boolean} isError\n     * @memberof MonitoringMessage\n     * @instance\n     */\n    MonitoringMessage.prototype.isError = false;\n\n    /**\n     * MonitoringMessage isAck.\n     * @member {boolean} isAck\n     * @memberof MonitoringMessage\n     * @instance\n     */\n    MonitoringMessage.prototype.isAck = false;\n\n    /**\n     * Encodes the specified MonitoringMessage message. Does not implicitly {@link MonitoringMessage.verify|verify} messages.\n     * @function encode\n     * @memberof MonitoringMessage\n     * @static\n     * @param {IMonitoringMessage} message MonitoringMessage message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    MonitoringMessage.encode = function encode(message, writer) {\n        if (!writer)\n            writer = $Writer.create();\n        if (message.action != null && Object.hasOwnProperty.call(message, \"action\"))\n            writer.uint32(/* id 1, wireType 0 =*/8).int32(message.action);\n        if (message.data != null && Object.hasOwnProperty.call(message, \"data\"))\n            writer.uint32(/* id 2, wireType 2 =*/18).string(message.data);\n        if (message.correlationId != null && Object.hasOwnProperty.call(message, \"correlationId\"))\n            writer.uint32(/* id 3, wireType 2 =*/26).string(message.correlationId);\n        if (message.isError != null && Object.hasOwnProperty.call(message, \"isError\"))\n            writer.uint32(/* id 4, wireType 0 =*/32).bool(message.isError);\n        if (message.isAck != null && Object.hasOwnProperty.call(message, \"isAck\"))\n            writer.uint32(/* id 5, wireType 0 =*/40).bool(message.isAck);\n        return writer;\n    };\n\n    /**\n     * Encodes the specified MonitoringMessage message, length delimited. Does not implicitly {@link MonitoringMessage.verify|verify} messages.\n     * @function encodeDelimited\n     * @memberof MonitoringMessage\n     * @static\n     * @param {IMonitoringMessage} message MonitoringMessage message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    MonitoringMessage.encodeDelimited = function encodeDelimited(message, writer) {\n        return this.encode(message, writer).ldelim();\n    };\n\n    /**\n     * Decodes a MonitoringMessage message from the specified reader or buffer.\n     * @function decode\n     * @memberof MonitoringMessage\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @param {number} [length] Message length if known beforehand\n     * @returns {MonitoringMessage} MonitoringMessage\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    MonitoringMessage.decode = function decode(reader, length) {\n        if (!(reader instanceof $Reader))\n            reader = $Reader.create(reader);\n        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.MonitoringMessage();\n        while (reader.pos < end) {\n            var tag = reader.uint32();\n            switch (tag >>> 3) {\n            case 1:\n                message.action = reader.int32();\n                break;\n            case 2:\n                message.data = reader.string();\n                break;\n            case 3:\n                message.correlationId = reader.string();\n                break;\n            case 4:\n                message.isError = reader.bool();\n                break;\n            case 5:\n                message.isAck = reader.bool();\n                break;\n            default:\n                reader.skipType(tag & 7);\n                break;\n            }\n        }\n        return message;\n    };\n\n    /**\n     * Decodes a MonitoringMessage message from the specified reader or buffer, length delimited.\n     * @function decodeDelimited\n     * @memberof MonitoringMessage\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @returns {MonitoringMessage} MonitoringMessage\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    MonitoringMessage.decodeDelimited = function decodeDelimited(reader) {\n        if (!(reader instanceof $Reader))\n            reader = new $Reader(reader);\n        return this.decode(reader, reader.uint32());\n    };\n\n    return MonitoringMessage;\n})();\n\n/**\n * PARSER_ACTION enum.\n * @exports PARSER_ACTION\n * @enum {number}\n * @property {number} PARSER_UNKNOWN=0 PARSER_UNKNOWN value\n * @property {number} PARSER_UNKNOWN_TOPIC=1 PARSER_UNKNOWN_TOPIC value\n * @property {number} PARSER_UNKNOWN_ACTION=2 PARSER_UNKNOWN_ACTION value\n * @property {number} PARSER_INVALID_MESSAGE=3 PARSER_INVALID_MESSAGE value\n * @property {number} PARSER_MESSAGE_PARSE_ERROR=4 PARSER_MESSAGE_PARSE_ERROR value\n * @property {number} PARSER_MAXIMUM_MESSAGE_SIZE_EXCEEDED=5 PARSER_MAXIMUM_MESSAGE_SIZE_EXCEEDED value\n * @property {number} PARSER_ERROR=6 PARSER_ERROR value\n * @property {number} PARSER_INVALID_META_PARAMS=7 PARSER_INVALID_META_PARAMS value\n */\n$root.PARSER_ACTION = (function() {\n    var valuesById = {}, values = Object.create(valuesById);\n    values[valuesById[0] = \"PARSER_UNKNOWN\"] = 0;\n    values[valuesById[1] = \"PARSER_UNKNOWN_TOPIC\"] = 1;\n    values[valuesById[2] = \"PARSER_UNKNOWN_ACTION\"] = 2;\n    values[valuesById[3] = \"PARSER_INVALID_MESSAGE\"] = 3;\n    values[valuesById[4] = \"PARSER_MESSAGE_PARSE_ERROR\"] = 4;\n    values[valuesById[5] = \"PARSER_MAXIMUM_MESSAGE_SIZE_EXCEEDED\"] = 5;\n    values[valuesById[6] = \"PARSER_ERROR\"] = 6;\n    values[valuesById[7] = \"PARSER_INVALID_META_PARAMS\"] = 7;\n    return values;\n})();\n\n$root.ParserMessage = (function() {\n\n    /**\n     * Properties of a ParserMessage.\n     * @exports IParserMessage\n     * @interface IParserMessage\n     * @property {PARSER_ACTION|null} [action] ParserMessage action\n     * @property {string|null} [data] ParserMessage data\n     * @property {TOPIC|null} [originalTOPIC] ParserMessage originalTOPIC\n     * @property {number|null} [originalAction] ParserMessage originalAction\n     */\n\n    /**\n     * Constructs a new ParserMessage.\n     * @exports ParserMessage\n     * @classdesc Represents a ParserMessage.\n     * @implements IParserMessage\n     * @constructor\n     * @param {IParserMessage=} [properties] Properties to set\n     */\n    function ParserMessage(properties) {\n        if (properties)\n            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n                if (properties[keys[i]] != null)\n                    this[keys[i]] = properties[keys[i]];\n    }\n\n    /**\n     * ParserMessage action.\n     * @member {PARSER_ACTION} action\n     * @memberof ParserMessage\n     * @instance\n     */\n    ParserMessage.prototype.action = 0;\n\n    /**\n     * ParserMessage data.\n     * @member {string} data\n     * @memberof ParserMessage\n     * @instance\n     */\n    ParserMessage.prototype.data = \"\";\n\n    /**\n     * ParserMessage originalTOPIC.\n     * @member {TOPIC} originalTOPIC\n     * @memberof ParserMessage\n     * @instance\n     */\n    ParserMessage.prototype.originalTOPIC = 0;\n\n    /**\n     * ParserMessage originalAction.\n     * @member {number} originalAction\n     * @memberof ParserMessage\n     * @instance\n     */\n    ParserMessage.prototype.originalAction = 0;\n\n    /**\n     * Encodes the specified ParserMessage message. Does not implicitly {@link ParserMessage.verify|verify} messages.\n     * @function encode\n     * @memberof ParserMessage\n     * @static\n     * @param {IParserMessage} message ParserMessage message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    ParserMessage.encode = function encode(message, writer) {\n        if (!writer)\n            writer = $Writer.create();\n        if (message.action != null && Object.hasOwnProperty.call(message, \"action\"))\n            writer.uint32(/* id 1, wireType 0 =*/8).int32(message.action);\n        if (message.data != null && Object.hasOwnProperty.call(message, \"data\"))\n            writer.uint32(/* id 2, wireType 2 =*/18).string(message.data);\n        if (message.originalTOPIC != null && Object.hasOwnProperty.call(message, \"originalTOPIC\"))\n            writer.uint32(/* id 8, wireType 0 =*/64).int32(message.originalTOPIC);\n        if (message.originalAction != null && Object.hasOwnProperty.call(message, \"originalAction\"))\n            writer.uint32(/* id 9, wireType 0 =*/72).int32(message.originalAction);\n        return writer;\n    };\n\n    /**\n     * Encodes the specified ParserMessage message, length delimited. Does not implicitly {@link ParserMessage.verify|verify} messages.\n     * @function encodeDelimited\n     * @memberof ParserMessage\n     * @static\n     * @param {IParserMessage} message ParserMessage message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    ParserMessage.encodeDelimited = function encodeDelimited(message, writer) {\n        return this.encode(message, writer).ldelim();\n    };\n\n    /**\n     * Decodes a ParserMessage message from the specified reader or buffer.\n     * @function decode\n     * @memberof ParserMessage\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @param {number} [length] Message length if known beforehand\n     * @returns {ParserMessage} ParserMessage\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    ParserMessage.decode = function decode(reader, length) {\n        if (!(reader instanceof $Reader))\n            reader = $Reader.create(reader);\n        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.ParserMessage();\n        while (reader.pos < end) {\n            var tag = reader.uint32();\n            switch (tag >>> 3) {\n            case 1:\n                message.action = reader.int32();\n                break;\n            case 2:\n                message.data = reader.string();\n                break;\n            case 8:\n                message.originalTOPIC = reader.int32();\n                break;\n            case 9:\n                message.originalAction = reader.int32();\n                break;\n            default:\n                reader.skipType(tag & 7);\n                break;\n            }\n        }\n        return message;\n    };\n\n    /**\n     * Decodes a ParserMessage message from the specified reader or buffer, length delimited.\n     * @function decodeDelimited\n     * @memberof ParserMessage\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @returns {ParserMessage} ParserMessage\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    ParserMessage.decodeDelimited = function decodeDelimited(reader) {\n        if (!(reader instanceof $Reader))\n            reader = new $Reader(reader);\n        return this.decode(reader, reader.uint32());\n    };\n\n    return ParserMessage;\n})();\n\n/**\n * PRESENCE_ACTION enum.\n * @exports PRESENCE_ACTION\n * @enum {number}\n * @property {number} PRESENCE_UNKNOWN=0 PRESENCE_UNKNOWN value\n * @property {number} PRESENCE_ERROR=1 PRESENCE_ERROR value\n * @property {number} PRESENCE_QUERY_ALL=2 PRESENCE_QUERY_ALL value\n * @property {number} PRESENCE_QUERY_ALL_RESPONSE=3 PRESENCE_QUERY_ALL_RESPONSE value\n * @property {number} PRESENCE_QUERY=4 PRESENCE_QUERY value\n * @property {number} PRESENCE_QUERY_RESPONSE=5 PRESENCE_QUERY_RESPONSE value\n * @property {number} PRESENCE_PRESENCE_JOIN=6 PRESENCE_PRESENCE_JOIN value\n * @property {number} PRESENCE_PRESENCE_JOIN_ALL=7 PRESENCE_PRESENCE_JOIN_ALL value\n * @property {number} PRESENCE_PRESENCE_LEAVE=8 PRESENCE_PRESENCE_LEAVE value\n * @property {number} PRESENCE_PRESENCE_LEAVE_ALL=9 PRESENCE_PRESENCE_LEAVE_ALL value\n * @property {number} PRESENCE_SUBSCRIBE=10 PRESENCE_SUBSCRIBE value\n * @property {number} PRESENCE_UNSUBSCRIBE=11 PRESENCE_UNSUBSCRIBE value\n * @property {number} PRESENCE_SUBSCRIBE_ALL=12 PRESENCE_SUBSCRIBE_ALL value\n * @property {number} PRESENCE_UNSUBSCRIBE_ALL=13 PRESENCE_UNSUBSCRIBE_ALL value\n * @property {number} PRESENCE_INVALID_PRESENCE_USERS=100 PRESENCE_INVALID_PRESENCE_USERS value\n * @property {number} PRESENCE_MESSAGE_PERMISSION_ERROR=101 PRESENCE_MESSAGE_PERMISSION_ERROR value\n * @property {number} PRESENCE_MESSAGE_DENIED=102 PRESENCE_MESSAGE_DENIED value\n * @property {number} PRESENCE_MULTIPLE_SUBSCRIPTIONS=103 PRESENCE_MULTIPLE_SUBSCRIPTIONS value\n * @property {number} PRESENCE_NOT_SUBSCRIBED=104 PRESENCE_NOT_SUBSCRIBED value\n */\n$root.PRESENCE_ACTION = (function() {\n    var valuesById = {}, values = Object.create(valuesById);\n    values[valuesById[0] = \"PRESENCE_UNKNOWN\"] = 0;\n    values[valuesById[1] = \"PRESENCE_ERROR\"] = 1;\n    values[valuesById[2] = \"PRESENCE_QUERY_ALL\"] = 2;\n    values[valuesById[3] = \"PRESENCE_QUERY_ALL_RESPONSE\"] = 3;\n    values[valuesById[4] = \"PRESENCE_QUERY\"] = 4;\n    values[valuesById[5] = \"PRESENCE_QUERY_RESPONSE\"] = 5;\n    values[valuesById[6] = \"PRESENCE_PRESENCE_JOIN\"] = 6;\n    values[valuesById[7] = \"PRESENCE_PRESENCE_JOIN_ALL\"] = 7;\n    values[valuesById[8] = \"PRESENCE_PRESENCE_LEAVE\"] = 8;\n    values[valuesById[9] = \"PRESENCE_PRESENCE_LEAVE_ALL\"] = 9;\n    values[valuesById[10] = \"PRESENCE_SUBSCRIBE\"] = 10;\n    values[valuesById[11] = \"PRESENCE_UNSUBSCRIBE\"] = 11;\n    values[valuesById[12] = \"PRESENCE_SUBSCRIBE_ALL\"] = 12;\n    values[valuesById[13] = \"PRESENCE_UNSUBSCRIBE_ALL\"] = 13;\n    values[valuesById[100] = \"PRESENCE_INVALID_PRESENCE_USERS\"] = 100;\n    values[valuesById[101] = \"PRESENCE_MESSAGE_PERMISSION_ERROR\"] = 101;\n    values[valuesById[102] = \"PRESENCE_MESSAGE_DENIED\"] = 102;\n    values[valuesById[103] = \"PRESENCE_MULTIPLE_SUBSCRIPTIONS\"] = 103;\n    values[valuesById[104] = \"PRESENCE_NOT_SUBSCRIBED\"] = 104;\n    return values;\n})();\n\n$root.PresenceMessage = (function() {\n\n    /**\n     * Properties of a PresenceMessage.\n     * @exports IPresenceMessage\n     * @interface IPresenceMessage\n     * @property {PRESENCE_ACTION|null} [action] PresenceMessage action\n     * @property {TOPIC|null} [originalTOPIC] PresenceMessage originalTOPIC\n     * @property {number|null} [originalAction] PresenceMessage originalAction\n     * @property {string|null} [data] PresenceMessage data\n     * @property {string|null} [correlationId] PresenceMessage correlationId\n     * @property {boolean|null} [isError] PresenceMessage isError\n     * @property {boolean|null} [isAck] PresenceMessage isAck\n     * @property {string|null} [name] PresenceMessage name\n     * @property {Array.<string>|null} [names] PresenceMessage names\n     */\n\n    /**\n     * Constructs a new PresenceMessage.\n     * @exports PresenceMessage\n     * @classdesc Represents a PresenceMessage.\n     * @implements IPresenceMessage\n     * @constructor\n     * @param {IPresenceMessage=} [properties] Properties to set\n     */\n    function PresenceMessage(properties) {\n        this.names = [];\n        if (properties)\n            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n                if (properties[keys[i]] != null)\n                    this[keys[i]] = properties[keys[i]];\n    }\n\n    /**\n     * PresenceMessage action.\n     * @member {PRESENCE_ACTION} action\n     * @memberof PresenceMessage\n     * @instance\n     */\n    PresenceMessage.prototype.action = 0;\n\n    /**\n     * PresenceMessage originalTOPIC.\n     * @member {TOPIC} originalTOPIC\n     * @memberof PresenceMessage\n     * @instance\n     */\n    PresenceMessage.prototype.originalTOPIC = 0;\n\n    /**\n     * PresenceMessage originalAction.\n     * @member {number} originalAction\n     * @memberof PresenceMessage\n     * @instance\n     */\n    PresenceMessage.prototype.originalAction = 0;\n\n    /**\n     * PresenceMessage data.\n     * @member {string} data\n     * @memberof PresenceMessage\n     * @instance\n     */\n    PresenceMessage.prototype.data = \"\";\n\n    /**\n     * PresenceMessage correlationId.\n     * @member {string} correlationId\n     * @memberof PresenceMessage\n     * @instance\n     */\n    PresenceMessage.prototype.correlationId = \"\";\n\n    /**\n     * PresenceMessage isError.\n     * @member {boolean} isError\n     * @memberof PresenceMessage\n     * @instance\n     */\n    PresenceMessage.prototype.isError = false;\n\n    /**\n     * PresenceMessage isAck.\n     * @member {boolean} isAck\n     * @memberof PresenceMessage\n     * @instance\n     */\n    PresenceMessage.prototype.isAck = false;\n\n    /**\n     * PresenceMessage name.\n     * @member {string} name\n     * @memberof PresenceMessage\n     * @instance\n     */\n    PresenceMessage.prototype.name = \"\";\n\n    /**\n     * PresenceMessage names.\n     * @member {Array.<string>} names\n     * @memberof PresenceMessage\n     * @instance\n     */\n    PresenceMessage.prototype.names = $util.emptyArray;\n\n    /**\n     * Encodes the specified PresenceMessage message. Does not implicitly {@link PresenceMessage.verify|verify} messages.\n     * @function encode\n     * @memberof PresenceMessage\n     * @static\n     * @param {IPresenceMessage} message PresenceMessage message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    PresenceMessage.encode = function encode(message, writer) {\n        if (!writer)\n            writer = $Writer.create();\n        if (message.action != null && Object.hasOwnProperty.call(message, \"action\"))\n            writer.uint32(/* id 1, wireType 0 =*/8).int32(message.action);\n        if (message.originalTOPIC != null && Object.hasOwnProperty.call(message, \"originalTOPIC\"))\n            writer.uint32(/* id 2, wireType 0 =*/16).int32(message.originalTOPIC);\n        if (message.originalAction != null && Object.hasOwnProperty.call(message, \"originalAction\"))\n            writer.uint32(/* id 3, wireType 0 =*/24).int32(message.originalAction);\n        if (message.data != null && Object.hasOwnProperty.call(message, \"data\"))\n            writer.uint32(/* id 4, wireType 2 =*/34).string(message.data);\n        if (message.correlationId != null && Object.hasOwnProperty.call(message, \"correlationId\"))\n            writer.uint32(/* id 5, wireType 2 =*/42).string(message.correlationId);\n        if (message.isError != null && Object.hasOwnProperty.call(message, \"isError\"))\n            writer.uint32(/* id 6, wireType 0 =*/48).bool(message.isError);\n        if (message.isAck != null && Object.hasOwnProperty.call(message, \"isAck\"))\n            writer.uint32(/* id 7, wireType 0 =*/56).bool(message.isAck);\n        if (message.name != null && Object.hasOwnProperty.call(message, \"name\"))\n            writer.uint32(/* id 8, wireType 2 =*/66).string(message.name);\n        if (message.names != null && message.names.length)\n            for (var i = 0; i < message.names.length; ++i)\n                writer.uint32(/* id 9, wireType 2 =*/74).string(message.names[i]);\n        return writer;\n    };\n\n    /**\n     * Encodes the specified PresenceMessage message, length delimited. Does not implicitly {@link PresenceMessage.verify|verify} messages.\n     * @function encodeDelimited\n     * @memberof PresenceMessage\n     * @static\n     * @param {IPresenceMessage} message PresenceMessage message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    PresenceMessage.encodeDelimited = function encodeDelimited(message, writer) {\n        return this.encode(message, writer).ldelim();\n    };\n\n    /**\n     * Decodes a PresenceMessage message from the specified reader or buffer.\n     * @function decode\n     * @memberof PresenceMessage\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @param {number} [length] Message length if known beforehand\n     * @returns {PresenceMessage} PresenceMessage\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    PresenceMessage.decode = function decode(reader, length) {\n        if (!(reader instanceof $Reader))\n            reader = $Reader.create(reader);\n        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.PresenceMessage();\n        while (reader.pos < end) {\n            var tag = reader.uint32();\n            switch (tag >>> 3) {\n            case 1:\n                message.action = reader.int32();\n                break;\n            case 2:\n                message.originalTOPIC = reader.int32();\n                break;\n            case 3:\n                message.originalAction = reader.int32();\n                break;\n            case 4:\n                message.data = reader.string();\n                break;\n            case 5:\n                message.correlationId = reader.string();\n                break;\n            case 6:\n                message.isError = reader.bool();\n                break;\n            case 7:\n                message.isAck = reader.bool();\n                break;\n            case 8:\n                message.name = reader.string();\n                break;\n            case 9:\n                if (!(message.names && message.names.length))\n                    message.names = [];\n                message.names.push(reader.string());\n                break;\n            default:\n                reader.skipType(tag & 7);\n                break;\n            }\n        }\n        return message;\n    };\n\n    /**\n     * Decodes a PresenceMessage message from the specified reader or buffer, length delimited.\n     * @function decodeDelimited\n     * @memberof PresenceMessage\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @returns {PresenceMessage} PresenceMessage\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    PresenceMessage.decodeDelimited = function decodeDelimited(reader) {\n        if (!(reader instanceof $Reader))\n            reader = new $Reader(reader);\n        return this.decode(reader, reader.uint32());\n    };\n\n    return PresenceMessage;\n})();\n\n/**\n * RECORD_ACTION enum.\n * @exports RECORD_ACTION\n * @enum {number}\n * @property {number} RECORD_UNKNOWN=0 RECORD_UNKNOWN value\n * @property {number} RECORD_ERROR=1 RECORD_ERROR value\n * @property {number} RECORD_NOTIFY=2 RECORD_NOTIFY value\n * @property {number} RECORD_READ=3 RECORD_READ value\n * @property {number} RECORD_READ_RESPONSE=4 RECORD_READ_RESPONSE value\n * @property {number} RECORD_HEAD=5 RECORD_HEAD value\n * @property {number} RECORD_HEAD_RESPONSE=6 RECORD_HEAD_RESPONSE value\n * @property {number} RECORD_HEAD_BULK=7 RECORD_HEAD_BULK value\n * @property {number} RECORD_HEAD_RESPONSE_BULK=8 RECORD_HEAD_RESPONSE_BULK value\n * @property {number} RECORD_DELETE=9 RECORD_DELETE value\n * @property {number} RECORD_DELETE_SUCCESS=10 RECORD_DELETE_SUCCESS value\n * @property {number} RECORD_DELETE_BULK=11 RECORD_DELETE_BULK value\n * @property {number} RECORD_DELETE_BULK_SUCCESS=12 RECORD_DELETE_BULK_SUCCESS value\n * @property {number} RECORD_DELETED=13 RECORD_DELETED value\n * @property {number} RECORD_WRITE_ACKNOWLEDGEMENT=14 RECORD_WRITE_ACKNOWLEDGEMENT value\n * @property {number} RECORD_CREATE=15 RECORD_CREATE value\n * @property {number} RECORD_CREATEANDUPDATE=16 RECORD_CREATEANDUPDATE value\n * @property {number} RECORD_CREATEANDPATCH=17 RECORD_CREATEANDPATCH value\n * @property {number} RECORD_UPDATE=18 RECORD_UPDATE value\n * @property {number} RECORD_PATCH=19 RECORD_PATCH value\n * @property {number} RECORD_ERASE=20 RECORD_ERASE value\n * @property {number} RECORD_SUBSCRIBEANDHEAD=21 RECORD_SUBSCRIBEANDHEAD value\n * @property {number} RECORD_SUBSCRIBEANDREAD=22 RECORD_SUBSCRIBEANDREAD value\n * @property {number} RECORD_SUBSCRIBECREATEANDREAD=23 RECORD_SUBSCRIBECREATEANDREAD value\n * @property {number} RECORD_SUBSCRIBECREATEANDUPDATE=24 RECORD_SUBSCRIBECREATEANDUPDATE value\n * @property {number} RECORD_SUBSCRIBE=25 RECORD_SUBSCRIBE value\n * @property {number} RECORD_UNSUBSCRIBE=26 RECORD_UNSUBSCRIBE value\n * @property {number} RECORD_LISTEN=27 RECORD_LISTEN value\n * @property {number} RECORD_UNLISTEN=28 RECORD_UNLISTEN value\n * @property {number} RECORD_LISTEN_ACCEPT=29 RECORD_LISTEN_ACCEPT value\n * @property {number} RECORD_LISTEN_REJECT=30 RECORD_LISTEN_REJECT value\n * @property {number} RECORD_SUBSCRIPTION_HAS_PROVIDER=31 RECORD_SUBSCRIPTION_HAS_PROVIDER value\n * @property {number} RECORD_SUBSCRIPTION_HAS_NO_PROVIDER=32 RECORD_SUBSCRIPTION_HAS_NO_PROVIDER value\n * @property {number} RECORD_SUBSCRIPTION_FOR_PATTERN_FOUND=33 RECORD_SUBSCRIPTION_FOR_PATTERN_FOUND value\n * @property {number} RECORD_SUBSCRIPTION_FOR_PATTERN_REMOVED=34 RECORD_SUBSCRIPTION_FOR_PATTERN_REMOVED value\n * @property {number} RECORD_CACHE_RETRIEVAL_TIMEOUT=100 RECORD_CACHE_RETRIEVAL_TIMEOUT value\n * @property {number} RECORD_STORAGE_RETRIEVAL_TIMEOUT=101 RECORD_STORAGE_RETRIEVAL_TIMEOUT value\n * @property {number} RECORD_VERSION_EXISTS=102 RECORD_VERSION_EXISTS value\n * @property {number} RECORD_RECORD_LOAD_ERROR=103 RECORD_RECORD_LOAD_ERROR value\n * @property {number} RECORD_RECORD_CREATE_ERROR=104 RECORD_RECORD_CREATE_ERROR value\n * @property {number} RECORD_RECORD_UPDATE_ERROR=105 RECORD_RECORD_UPDATE_ERROR value\n * @property {number} RECORD_RECORD_DELETE_ERROR=106 RECORD_RECORD_DELETE_ERROR value\n * @property {number} RECORD_RECORD_NOT_FOUND=107 RECORD_RECORD_NOT_FOUND value\n * @property {number} RECORD_INVALID_VERSION=108 RECORD_INVALID_VERSION value\n * @property {number} RECORD_INVALID_PATCH_ON_HOTPATH=109 RECORD_INVALID_PATCH_ON_HOTPATH value\n * @property {number} RECORD_INVALID_LISTEN_REGEX=110 RECORD_INVALID_LISTEN_REGEX value\n * @property {number} RECORD_LISTEN_RESPONSE_TIMEOUT=111 RECORD_LISTEN_RESPONSE_TIMEOUT value\n * @property {number} RECORD_LISTEN_UNSUCCESSFUL=112 RECORD_LISTEN_UNSUCCESSFUL value\n * @property {number} RECORD_RECORD_NOTIFY_ERROR=113 RECORD_RECORD_NOTIFY_ERROR value\n * @property {number} RECORD_MESSAGE_PERMISSION_ERROR=114 RECORD_MESSAGE_PERMISSION_ERROR value\n * @property {number} RECORD_MESSAGE_DENIED=115 RECORD_MESSAGE_DENIED value\n * @property {number} RECORD_INVALID_MESSAGE_DATA=116 RECORD_INVALID_MESSAGE_DATA value\n * @property {number} RECORD_MULTIPLE_SUBSCRIPTIONS=117 RECORD_MULTIPLE_SUBSCRIPTIONS value\n * @property {number} RECORD_NOT_SUBSCRIBED=118 RECORD_NOT_SUBSCRIBED value\n */\n$root.RECORD_ACTION = (function() {\n    var valuesById = {}, values = Object.create(valuesById);\n    values[valuesById[0] = \"RECORD_UNKNOWN\"] = 0;\n    values[valuesById[1] = \"RECORD_ERROR\"] = 1;\n    values[valuesById[2] = \"RECORD_NOTIFY\"] = 2;\n    values[valuesById[3] = \"RECORD_READ\"] = 3;\n    values[valuesById[4] = \"RECORD_READ_RESPONSE\"] = 4;\n    values[valuesById[5] = \"RECORD_HEAD\"] = 5;\n    values[valuesById[6] = \"RECORD_HEAD_RESPONSE\"] = 6;\n    values[valuesById[7] = \"RECORD_HEAD_BULK\"] = 7;\n    values[valuesById[8] = \"RECORD_HEAD_RESPONSE_BULK\"] = 8;\n    values[valuesById[9] = \"RECORD_DELETE\"] = 9;\n    values[valuesById[10] = \"RECORD_DELETE_SUCCESS\"] = 10;\n    values[valuesById[11] = \"RECORD_DELETE_BULK\"] = 11;\n    values[valuesById[12] = \"RECORD_DELETE_BULK_SUCCESS\"] = 12;\n    values[valuesById[13] = \"RECORD_DELETED\"] = 13;\n    values[valuesById[14] = \"RECORD_WRITE_ACKNOWLEDGEMENT\"] = 14;\n    values[valuesById[15] = \"RECORD_CREATE\"] = 15;\n    values[valuesById[16] = \"RECORD_CREATEANDUPDATE\"] = 16;\n    values[valuesById[17] = \"RECORD_CREATEANDPATCH\"] = 17;\n    values[valuesById[18] = \"RECORD_UPDATE\"] = 18;\n    values[valuesById[19] = \"RECORD_PATCH\"] = 19;\n    values[valuesById[20] = \"RECORD_ERASE\"] = 20;\n    values[valuesById[21] = \"RECORD_SUBSCRIBEANDHEAD\"] = 21;\n    values[valuesById[22] = \"RECORD_SUBSCRIBEANDREAD\"] = 22;\n    values[valuesById[23] = \"RECORD_SUBSCRIBECREATEANDREAD\"] = 23;\n    values[valuesById[24] = \"RECORD_SUBSCRIBECREATEANDUPDATE\"] = 24;\n    values[valuesById[25] = \"RECORD_SUBSCRIBE\"] = 25;\n    values[valuesById[26] = \"RECORD_UNSUBSCRIBE\"] = 26;\n    values[valuesById[27] = \"RECORD_LISTEN\"] = 27;\n    values[valuesById[28] = \"RECORD_UNLISTEN\"] = 28;\n    values[valuesById[29] = \"RECORD_LISTEN_ACCEPT\"] = 29;\n    values[valuesById[30] = \"RECORD_LISTEN_REJECT\"] = 30;\n    values[valuesById[31] = \"RECORD_SUBSCRIPTION_HAS_PROVIDER\"] = 31;\n    values[valuesById[32] = \"RECORD_SUBSCRIPTION_HAS_NO_PROVIDER\"] = 32;\n    values[valuesById[33] = \"RECORD_SUBSCRIPTION_FOR_PATTERN_FOUND\"] = 33;\n    values[valuesById[34] = \"RECORD_SUBSCRIPTION_FOR_PATTERN_REMOVED\"] = 34;\n    values[valuesById[100] = \"RECORD_CACHE_RETRIEVAL_TIMEOUT\"] = 100;\n    values[valuesById[101] = \"RECORD_STORAGE_RETRIEVAL_TIMEOUT\"] = 101;\n    values[valuesById[102] = \"RECORD_VERSION_EXISTS\"] = 102;\n    values[valuesById[103] = \"RECORD_RECORD_LOAD_ERROR\"] = 103;\n    values[valuesById[104] = \"RECORD_RECORD_CREATE_ERROR\"] = 104;\n    values[valuesById[105] = \"RECORD_RECORD_UPDATE_ERROR\"] = 105;\n    values[valuesById[106] = \"RECORD_RECORD_DELETE_ERROR\"] = 106;\n    values[valuesById[107] = \"RECORD_RECORD_NOT_FOUND\"] = 107;\n    values[valuesById[108] = \"RECORD_INVALID_VERSION\"] = 108;\n    values[valuesById[109] = \"RECORD_INVALID_PATCH_ON_HOTPATH\"] = 109;\n    values[valuesById[110] = \"RECORD_INVALID_LISTEN_REGEX\"] = 110;\n    values[valuesById[111] = \"RECORD_LISTEN_RESPONSE_TIMEOUT\"] = 111;\n    values[valuesById[112] = \"RECORD_LISTEN_UNSUCCESSFUL\"] = 112;\n    values[valuesById[113] = \"RECORD_RECORD_NOTIFY_ERROR\"] = 113;\n    values[valuesById[114] = \"RECORD_MESSAGE_PERMISSION_ERROR\"] = 114;\n    values[valuesById[115] = \"RECORD_MESSAGE_DENIED\"] = 115;\n    values[valuesById[116] = \"RECORD_INVALID_MESSAGE_DATA\"] = 116;\n    values[valuesById[117] = \"RECORD_MULTIPLE_SUBSCRIPTIONS\"] = 117;\n    values[valuesById[118] = \"RECORD_NOT_SUBSCRIBED\"] = 118;\n    return values;\n})();\n\n$root.RecordMessage = (function() {\n\n    /**\n     * Properties of a RecordMessage.\n     * @exports IRecordMessage\n     * @interface IRecordMessage\n     * @property {RECORD_ACTION|null} [action] RecordMessage action\n     * @property {string|null} [data] RecordMessage data\n     * @property {string|null} [correlationId] RecordMessage correlationId\n     * @property {boolean|null} [isError] RecordMessage isError\n     * @property {boolean|null} [isAck] RecordMessage isAck\n     * @property {string|null} [name] RecordMessage name\n     * @property {Array.<string>|null} [names] RecordMessage names\n     * @property {string|null} [pattern] RecordMessage pattern\n     * @property {string|null} [subscription] RecordMessage subscription\n     * @property {RECORD_ACTION|null} [originalAction] RecordMessage originalAction\n     * @property {boolean|null} [isWriteAck] RecordMessage isWriteAck\n     * @property {string|null} [path] RecordMessage path\n     * @property {number|null} [version] RecordMessage version\n     * @property {Object.<string,number>|null} [versions] RecordMessage versions\n     */\n\n    /**\n     * Constructs a new RecordMessage.\n     * @exports RecordMessage\n     * @classdesc Represents a RecordMessage.\n     * @implements IRecordMessage\n     * @constructor\n     * @param {IRecordMessage=} [properties] Properties to set\n     */\n    function RecordMessage(properties) {\n        this.names = [];\n        this.versions = {};\n        if (properties)\n            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n                if (properties[keys[i]] != null)\n                    this[keys[i]] = properties[keys[i]];\n    }\n\n    /**\n     * RecordMessage action.\n     * @member {RECORD_ACTION} action\n     * @memberof RecordMessage\n     * @instance\n     */\n    RecordMessage.prototype.action = 0;\n\n    /**\n     * RecordMessage data.\n     * @member {string} data\n     * @memberof RecordMessage\n     * @instance\n     */\n    RecordMessage.prototype.data = \"\";\n\n    /**\n     * RecordMessage correlationId.\n     * @member {string} correlationId\n     * @memberof RecordMessage\n     * @instance\n     */\n    RecordMessage.prototype.correlationId = \"\";\n\n    /**\n     * RecordMessage isError.\n     * @member {boolean} isError\n     * @memberof RecordMessage\n     * @instance\n     */\n    RecordMessage.prototype.isError = false;\n\n    /**\n     * RecordMessage isAck.\n     * @member {boolean} isAck\n     * @memberof RecordMessage\n     * @instance\n     */\n    RecordMessage.prototype.isAck = false;\n\n    /**\n     * RecordMessage name.\n     * @member {string} name\n     * @memberof RecordMessage\n     * @instance\n     */\n    RecordMessage.prototype.name = \"\";\n\n    /**\n     * RecordMessage names.\n     * @member {Array.<string>} names\n     * @memberof RecordMessage\n     * @instance\n     */\n    RecordMessage.prototype.names = $util.emptyArray;\n\n    /**\n     * RecordMessage pattern.\n     * @member {string} pattern\n     * @memberof RecordMessage\n     * @instance\n     */\n    RecordMessage.prototype.pattern = \"\";\n\n    /**\n     * RecordMessage subscription.\n     * @member {string} subscription\n     * @memberof RecordMessage\n     * @instance\n     */\n    RecordMessage.prototype.subscription = \"\";\n\n    /**\n     * RecordMessage originalAction.\n     * @member {RECORD_ACTION} originalAction\n     * @memberof RecordMessage\n     * @instance\n     */\n    RecordMessage.prototype.originalAction = 0;\n\n    /**\n     * RecordMessage isWriteAck.\n     * @member {boolean} isWriteAck\n     * @memberof RecordMessage\n     * @instance\n     */\n    RecordMessage.prototype.isWriteAck = false;\n\n    /**\n     * RecordMessage path.\n     * @member {string} path\n     * @memberof RecordMessage\n     * @instance\n     */\n    RecordMessage.prototype.path = \"\";\n\n    /**\n     * RecordMessage version.\n     * @member {number} version\n     * @memberof RecordMessage\n     * @instance\n     */\n    RecordMessage.prototype.version = 0;\n\n    /**\n     * RecordMessage versions.\n     * @member {Object.<string,number>} versions\n     * @memberof RecordMessage\n     * @instance\n     */\n    RecordMessage.prototype.versions = $util.emptyObject;\n\n    /**\n     * Encodes the specified RecordMessage message. Does not implicitly {@link RecordMessage.verify|verify} messages.\n     * @function encode\n     * @memberof RecordMessage\n     * @static\n     * @param {IRecordMessage} message RecordMessage message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    RecordMessage.encode = function encode(message, writer) {\n        if (!writer)\n            writer = $Writer.create();\n        if (message.action != null && Object.hasOwnProperty.call(message, \"action\"))\n            writer.uint32(/* id 1, wireType 0 =*/8).int32(message.action);\n        if (message.data != null && Object.hasOwnProperty.call(message, \"data\"))\n            writer.uint32(/* id 2, wireType 2 =*/18).string(message.data);\n        if (message.correlationId != null && Object.hasOwnProperty.call(message, \"correlationId\"))\n            writer.uint32(/* id 3, wireType 2 =*/26).string(message.correlationId);\n        if (message.isError != null && Object.hasOwnProperty.call(message, \"isError\"))\n            writer.uint32(/* id 4, wireType 0 =*/32).bool(message.isError);\n        if (message.isAck != null && Object.hasOwnProperty.call(message, \"isAck\"))\n            writer.uint32(/* id 5, wireType 0 =*/40).bool(message.isAck);\n        if (message.name != null && Object.hasOwnProperty.call(message, \"name\"))\n            writer.uint32(/* id 6, wireType 2 =*/50).string(message.name);\n        if (message.names != null && message.names.length)\n            for (var i = 0; i < message.names.length; ++i)\n                writer.uint32(/* id 7, wireType 2 =*/58).string(message.names[i]);\n        if (message.pattern != null && Object.hasOwnProperty.call(message, \"pattern\"))\n            writer.uint32(/* id 8, wireType 2 =*/66).string(message.pattern);\n        if (message.subscription != null && Object.hasOwnProperty.call(message, \"subscription\"))\n            writer.uint32(/* id 9, wireType 2 =*/74).string(message.subscription);\n        if (message.originalAction != null && Object.hasOwnProperty.call(message, \"originalAction\"))\n            writer.uint32(/* id 10, wireType 0 =*/80).int32(message.originalAction);\n        if (message.isWriteAck != null && Object.hasOwnProperty.call(message, \"isWriteAck\"))\n            writer.uint32(/* id 11, wireType 0 =*/88).bool(message.isWriteAck);\n        if (message.path != null && Object.hasOwnProperty.call(message, \"path\"))\n            writer.uint32(/* id 12, wireType 2 =*/98).string(message.path);\n        if (message.version != null && Object.hasOwnProperty.call(message, \"version\"))\n            writer.uint32(/* id 13, wireType 0 =*/104).int32(message.version);\n        if (message.versions != null && Object.hasOwnProperty.call(message, \"versions\"))\n            for (var keys = Object.keys(message.versions), i = 0; i < keys.length; ++i)\n                writer.uint32(/* id 14, wireType 2 =*/114).fork().uint32(/* id 1, wireType 2 =*/10).string(keys[i]).uint32(/* id 2, wireType 0 =*/16).int32(message.versions[keys[i]]).ldelim();\n        return writer;\n    };\n\n    /**\n     * Encodes the specified RecordMessage message, length delimited. Does not implicitly {@link RecordMessage.verify|verify} messages.\n     * @function encodeDelimited\n     * @memberof RecordMessage\n     * @static\n     * @param {IRecordMessage} message RecordMessage message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    RecordMessage.encodeDelimited = function encodeDelimited(message, writer) {\n        return this.encode(message, writer).ldelim();\n    };\n\n    /**\n     * Decodes a RecordMessage message from the specified reader or buffer.\n     * @function decode\n     * @memberof RecordMessage\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @param {number} [length] Message length if known beforehand\n     * @returns {RecordMessage} RecordMessage\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    RecordMessage.decode = function decode(reader, length) {\n        if (!(reader instanceof $Reader))\n            reader = $Reader.create(reader);\n        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.RecordMessage(), key, value;\n        while (reader.pos < end) {\n            var tag = reader.uint32();\n            switch (tag >>> 3) {\n            case 1:\n                message.action = reader.int32();\n                break;\n            case 2:\n                message.data = reader.string();\n                break;\n            case 3:\n                message.correlationId = reader.string();\n                break;\n            case 4:\n                message.isError = reader.bool();\n                break;\n            case 5:\n                message.isAck = reader.bool();\n                break;\n            case 6:\n                message.name = reader.string();\n                break;\n            case 7:\n                if (!(message.names && message.names.length))\n                    message.names = [];\n                message.names.push(reader.string());\n                break;\n            case 8:\n                message.pattern = reader.string();\n                break;\n            case 9:\n                message.subscription = reader.string();\n                break;\n            case 10:\n                message.originalAction = reader.int32();\n                break;\n            case 11:\n                message.isWriteAck = reader.bool();\n                break;\n            case 12:\n                message.path = reader.string();\n                break;\n            case 13:\n                message.version = reader.int32();\n                break;\n            case 14:\n                if (message.versions === $util.emptyObject)\n                    message.versions = {};\n                var end2 = reader.uint32() + reader.pos;\n                key = \"\";\n                value = 0;\n                while (reader.pos < end2) {\n                    var tag2 = reader.uint32();\n                    switch (tag2 >>> 3) {\n                    case 1:\n                        key = reader.string();\n                        break;\n                    case 2:\n                        value = reader.int32();\n                        break;\n                    default:\n                        reader.skipType(tag2 & 7);\n                        break;\n                    }\n                }\n                message.versions[key] = value;\n                break;\n            default:\n                reader.skipType(tag & 7);\n                break;\n            }\n        }\n        return message;\n    };\n\n    /**\n     * Decodes a RecordMessage message from the specified reader or buffer, length delimited.\n     * @function decodeDelimited\n     * @memberof RecordMessage\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @returns {RecordMessage} RecordMessage\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    RecordMessage.decodeDelimited = function decodeDelimited(reader) {\n        if (!(reader instanceof $Reader))\n            reader = new $Reader(reader);\n        return this.decode(reader, reader.uint32());\n    };\n\n    return RecordMessage;\n})();\n\n/**\n * RPC_ACTION enum.\n * @exports RPC_ACTION\n * @enum {number}\n * @property {number} RPC_UNKNOWN=0 RPC_UNKNOWN value\n * @property {number} RPC_ERROR=1 RPC_ERROR value\n * @property {number} RPC_REQUEST=2 RPC_REQUEST value\n * @property {number} RPC_ACCEPT=4 RPC_ACCEPT value\n * @property {number} RPC_RESPONSE=5 RPC_RESPONSE value\n * @property {number} RPC_REJECT=6 RPC_REJECT value\n * @property {number} RPC_REQUEST_ERROR=7 RPC_REQUEST_ERROR value\n * @property {number} RPC_PROVIDE=8 RPC_PROVIDE value\n * @property {number} RPC_UNPROVIDE=9 RPC_UNPROVIDE value\n * @property {number} RPC_NO_RPC_PROVIDER=100 RPC_NO_RPC_PROVIDER value\n * @property {number} RPC_ACCEPT_TIMEOUT=101 RPC_ACCEPT_TIMEOUT value\n * @property {number} RPC_MULTIPLE_ACCEPT=102 RPC_MULTIPLE_ACCEPT value\n * @property {number} RPC_INVALID_RPC_CORRELATION_ID=103 RPC_INVALID_RPC_CORRELATION_ID value\n * @property {number} RPC_RESPONSE_TIMEOUT=104 RPC_RESPONSE_TIMEOUT value\n * @property {number} RPC_MULTIPLE_RESPONSE=105 RPC_MULTIPLE_RESPONSE value\n * @property {number} RPC_MESSAGE_PERMISSION_ERROR=106 RPC_MESSAGE_PERMISSION_ERROR value\n * @property {number} RPC_MESSAGE_DENIED=107 RPC_MESSAGE_DENIED value\n * @property {number} RPC_INVALID_MESSAGE_DATA=108 RPC_INVALID_MESSAGE_DATA value\n * @property {number} RPC_MULTIPLE_PROVIDERS=109 RPC_MULTIPLE_PROVIDERS value\n * @property {number} RPC_NOT_PROVIDED=110 RPC_NOT_PROVIDED value\n */\n$root.RPC_ACTION = (function() {\n    var valuesById = {}, values = Object.create(valuesById);\n    values[valuesById[0] = \"RPC_UNKNOWN\"] = 0;\n    values[valuesById[1] = \"RPC_ERROR\"] = 1;\n    values[valuesById[2] = \"RPC_REQUEST\"] = 2;\n    values[valuesById[4] = \"RPC_ACCEPT\"] = 4;\n    values[valuesById[5] = \"RPC_RESPONSE\"] = 5;\n    values[valuesById[6] = \"RPC_REJECT\"] = 6;\n    values[valuesById[7] = \"RPC_REQUEST_ERROR\"] = 7;\n    values[valuesById[8] = \"RPC_PROVIDE\"] = 8;\n    values[valuesById[9] = \"RPC_UNPROVIDE\"] = 9;\n    values[valuesById[100] = \"RPC_NO_RPC_PROVIDER\"] = 100;\n    values[valuesById[101] = \"RPC_ACCEPT_TIMEOUT\"] = 101;\n    values[valuesById[102] = \"RPC_MULTIPLE_ACCEPT\"] = 102;\n    values[valuesById[103] = \"RPC_INVALID_RPC_CORRELATION_ID\"] = 103;\n    values[valuesById[104] = \"RPC_RESPONSE_TIMEOUT\"] = 104;\n    values[valuesById[105] = \"RPC_MULTIPLE_RESPONSE\"] = 105;\n    values[valuesById[106] = \"RPC_MESSAGE_PERMISSION_ERROR\"] = 106;\n    values[valuesById[107] = \"RPC_MESSAGE_DENIED\"] = 107;\n    values[valuesById[108] = \"RPC_INVALID_MESSAGE_DATA\"] = 108;\n    values[valuesById[109] = \"RPC_MULTIPLE_PROVIDERS\"] = 109;\n    values[valuesById[110] = \"RPC_NOT_PROVIDED\"] = 110;\n    return values;\n})();\n\n$root.RpcMessage = (function() {\n\n    /**\n     * Properties of a RpcMessage.\n     * @exports IRpcMessage\n     * @interface IRpcMessage\n     * @property {RPC_ACTION|null} [action] RpcMessage action\n     * @property {string|null} [data] RpcMessage data\n     * @property {string|null} [correlationId] RpcMessage correlationId\n     * @property {boolean|null} [isError] RpcMessage isError\n     * @property {boolean|null} [isAck] RpcMessage isAck\n     * @property {Array.<string>|null} [names] RpcMessage names\n     * @property {string|null} [name] RpcMessage name\n     * @property {number|null} [originalAction] RpcMessage originalAction\n     * @property {string|null} [requestorName] RpcMessage requestorName\n     * @property {string|null} [requestorData] RpcMessage requestorData\n     */\n\n    /**\n     * Constructs a new RpcMessage.\n     * @exports RpcMessage\n     * @classdesc Represents a RpcMessage.\n     * @implements IRpcMessage\n     * @constructor\n     * @param {IRpcMessage=} [properties] Properties to set\n     */\n    function RpcMessage(properties) {\n        this.names = [];\n        if (properties)\n            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n                if (properties[keys[i]] != null)\n                    this[keys[i]] = properties[keys[i]];\n    }\n\n    /**\n     * RpcMessage action.\n     * @member {RPC_ACTION} action\n     * @memberof RpcMessage\n     * @instance\n     */\n    RpcMessage.prototype.action = 0;\n\n    /**\n     * RpcMessage data.\n     * @member {string} data\n     * @memberof RpcMessage\n     * @instance\n     */\n    RpcMessage.prototype.data = \"\";\n\n    /**\n     * RpcMessage correlationId.\n     * @member {string} correlationId\n     * @memberof RpcMessage\n     * @instance\n     */\n    RpcMessage.prototype.correlationId = \"\";\n\n    /**\n     * RpcMessage isError.\n     * @member {boolean} isError\n     * @memberof RpcMessage\n     * @instance\n     */\n    RpcMessage.prototype.isError = false;\n\n    /**\n     * RpcMessage isAck.\n     * @member {boolean} isAck\n     * @memberof RpcMessage\n     * @instance\n     */\n    RpcMessage.prototype.isAck = false;\n\n    /**\n     * RpcMessage names.\n     * @member {Array.<string>} names\n     * @memberof RpcMessage\n     * @instance\n     */\n    RpcMessage.prototype.names = $util.emptyArray;\n\n    /**\n     * RpcMessage name.\n     * @member {string} name\n     * @memberof RpcMessage\n     * @instance\n     */\n    RpcMessage.prototype.name = \"\";\n\n    /**\n     * RpcMessage originalAction.\n     * @member {number} originalAction\n     * @memberof RpcMessage\n     * @instance\n     */\n    RpcMessage.prototype.originalAction = 0;\n\n    /**\n     * RpcMessage requestorName.\n     * @member {string} requestorName\n     * @memberof RpcMessage\n     * @instance\n     */\n    RpcMessage.prototype.requestorName = \"\";\n\n    /**\n     * RpcMessage requestorData.\n     * @member {string} requestorData\n     * @memberof RpcMessage\n     * @instance\n     */\n    RpcMessage.prototype.requestorData = \"\";\n\n    /**\n     * Encodes the specified RpcMessage message. Does not implicitly {@link RpcMessage.verify|verify} messages.\n     * @function encode\n     * @memberof RpcMessage\n     * @static\n     * @param {IRpcMessage} message RpcMessage message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    RpcMessage.encode = function encode(message, writer) {\n        if (!writer)\n            writer = $Writer.create();\n        if (message.action != null && Object.hasOwnProperty.call(message, \"action\"))\n            writer.uint32(/* id 1, wireType 0 =*/8).int32(message.action);\n        if (message.data != null && Object.hasOwnProperty.call(message, \"data\"))\n            writer.uint32(/* id 2, wireType 2 =*/18).string(message.data);\n        if (message.correlationId != null && Object.hasOwnProperty.call(message, \"correlationId\"))\n            writer.uint32(/* id 3, wireType 2 =*/26).string(message.correlationId);\n        if (message.isError != null && Object.hasOwnProperty.call(message, \"isError\"))\n            writer.uint32(/* id 4, wireType 0 =*/32).bool(message.isError);\n        if (message.isAck != null && Object.hasOwnProperty.call(message, \"isAck\"))\n            writer.uint32(/* id 5, wireType 0 =*/40).bool(message.isAck);\n        if (message.names != null && message.names.length)\n            for (var i = 0; i < message.names.length; ++i)\n                writer.uint32(/* id 6, wireType 2 =*/50).string(message.names[i]);\n        if (message.name != null && Object.hasOwnProperty.call(message, \"name\"))\n            writer.uint32(/* id 7, wireType 2 =*/58).string(message.name);\n        if (message.originalAction != null && Object.hasOwnProperty.call(message, \"originalAction\"))\n            writer.uint32(/* id 9, wireType 0 =*/72).int32(message.originalAction);\n        if (message.requestorName != null && Object.hasOwnProperty.call(message, \"requestorName\"))\n            writer.uint32(/* id 10, wireType 2 =*/82).string(message.requestorName);\n        if (message.requestorData != null && Object.hasOwnProperty.call(message, \"requestorData\"))\n            writer.uint32(/* id 11, wireType 2 =*/90).string(message.requestorData);\n        return writer;\n    };\n\n    /**\n     * Encodes the specified RpcMessage message, length delimited. Does not implicitly {@link RpcMessage.verify|verify} messages.\n     * @function encodeDelimited\n     * @memberof RpcMessage\n     * @static\n     * @param {IRpcMessage} message RpcMessage message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    RpcMessage.encodeDelimited = function encodeDelimited(message, writer) {\n        return this.encode(message, writer).ldelim();\n    };\n\n    /**\n     * Decodes a RpcMessage message from the specified reader or buffer.\n     * @function decode\n     * @memberof RpcMessage\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @param {number} [length] Message length if known beforehand\n     * @returns {RpcMessage} RpcMessage\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    RpcMessage.decode = function decode(reader, length) {\n        if (!(reader instanceof $Reader))\n            reader = $Reader.create(reader);\n        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.RpcMessage();\n        while (reader.pos < end) {\n            var tag = reader.uint32();\n            switch (tag >>> 3) {\n            case 1:\n                message.action = reader.int32();\n                break;\n            case 2:\n                message.data = reader.string();\n                break;\n            case 3:\n                message.correlationId = reader.string();\n                break;\n            case 4:\n                message.isError = reader.bool();\n                break;\n            case 5:\n                message.isAck = reader.bool();\n                break;\n            case 6:\n                if (!(message.names && message.names.length))\n                    message.names = [];\n                message.names.push(reader.string());\n                break;\n            case 7:\n                message.name = reader.string();\n                break;\n            case 9:\n                message.originalAction = reader.int32();\n                break;\n            case 10:\n                message.requestorName = reader.string();\n                break;\n            case 11:\n                message.requestorData = reader.string();\n                break;\n            default:\n                reader.skipType(tag & 7);\n                break;\n            }\n        }\n        return message;\n    };\n\n    /**\n     * Decodes a RpcMessage message from the specified reader or buffer, length delimited.\n     * @function decodeDelimited\n     * @memberof RpcMessage\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @returns {RpcMessage} RpcMessage\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    RpcMessage.decodeDelimited = function decodeDelimited(reader) {\n        if (!(reader instanceof $Reader))\n            reader = new $Reader(reader);\n        return this.decode(reader, reader.uint32());\n    };\n\n    return RpcMessage;\n})();\n\n/**\n * STATE_REGISTRY_TOPIC enum.\n * @exports STATE_REGISTRY_TOPIC\n * @enum {number}\n * @property {number} STATE_REGISTRY_UNKNOWN=0 STATE_REGISTRY_UNKNOWN value\n * @property {number} STATE_REGISTRY_EVENT_SUBSCRIPTIONS=11 STATE_REGISTRY_EVENT_SUBSCRIPTIONS value\n * @property {number} STATE_REGISTRY_RECORD_SUBSCRIPTIONS=12 STATE_REGISTRY_RECORD_SUBSCRIPTIONS value\n * @property {number} STATE_REGISTRY_SUBSCRIPTIONS=9 STATE_REGISTRY_SUBSCRIPTIONS value\n * @property {number} STATE_REGISTRY_ONLINE_USERS=10 STATE_REGISTRY_ONLINE_USERS value\n * @property {number} STATE_REGISTRY_MONITORING_SUBSCRIPTIONS=24 STATE_REGISTRY_MONITORING_SUBSCRIPTIONS value\n * @property {number} STATE_REGISTRY_RPC_SUBSCRIPTIONS=13 STATE_REGISTRY_RPC_SUBSCRIPTIONS value\n * @property {number} STATE_REGISTRY_PRESENCE_SUBSCRIPTIONS=14 STATE_REGISTRY_PRESENCE_SUBSCRIPTIONS value\n * @property {number} STATE_REGISTRY_RECORD_LISTEN_PATTERNS=15 STATE_REGISTRY_RECORD_LISTEN_PATTERNS value\n * @property {number} STATE_REGISTRY_EVENT_LISTEN_PATTERNS=16 STATE_REGISTRY_EVENT_LISTEN_PATTERNS value\n * @property {number} STATE_REGISTRY_RECORD_PUBLISHED_SUBSCRIPTIONS=17 STATE_REGISTRY_RECORD_PUBLISHED_SUBSCRIPTIONS value\n * @property {number} STATE_REGISTRY_EVENT_PUBLISHED_SUBSCRIPTIONS=18 STATE_REGISTRY_EVENT_PUBLISHED_SUBSCRIPTIONS value\n * @property {number} STATE_REGISTRY_RECORD_LISTENING=19 STATE_REGISTRY_RECORD_LISTENING value\n * @property {number} STATE_REGISTRY_EVENT_LISTENING=20 STATE_REGISTRY_EVENT_LISTENING value\n * @property {number} STATE_REGISTRY_STATE_REGISTRY=21 STATE_REGISTRY_STATE_REGISTRY value\n */\n$root.STATE_REGISTRY_TOPIC = (function() {\n    var valuesById = {}, values = Object.create(valuesById);\n    values[valuesById[0] = \"STATE_REGISTRY_UNKNOWN\"] = 0;\n    values[valuesById[11] = \"STATE_REGISTRY_EVENT_SUBSCRIPTIONS\"] = 11;\n    values[valuesById[12] = \"STATE_REGISTRY_RECORD_SUBSCRIPTIONS\"] = 12;\n    values[valuesById[9] = \"STATE_REGISTRY_SUBSCRIPTIONS\"] = 9;\n    values[valuesById[10] = \"STATE_REGISTRY_ONLINE_USERS\"] = 10;\n    values[valuesById[24] = \"STATE_REGISTRY_MONITORING_SUBSCRIPTIONS\"] = 24;\n    values[valuesById[13] = \"STATE_REGISTRY_RPC_SUBSCRIPTIONS\"] = 13;\n    values[valuesById[14] = \"STATE_REGISTRY_PRESENCE_SUBSCRIPTIONS\"] = 14;\n    values[valuesById[15] = \"STATE_REGISTRY_RECORD_LISTEN_PATTERNS\"] = 15;\n    values[valuesById[16] = \"STATE_REGISTRY_EVENT_LISTEN_PATTERNS\"] = 16;\n    values[valuesById[17] = \"STATE_REGISTRY_RECORD_PUBLISHED_SUBSCRIPTIONS\"] = 17;\n    values[valuesById[18] = \"STATE_REGISTRY_EVENT_PUBLISHED_SUBSCRIPTIONS\"] = 18;\n    values[valuesById[19] = \"STATE_REGISTRY_RECORD_LISTENING\"] = 19;\n    values[valuesById[20] = \"STATE_REGISTRY_EVENT_LISTENING\"] = 20;\n    values[valuesById[21] = \"STATE_REGISTRY_STATE_REGISTRY\"] = 21;\n    return values;\n})();\n\n/**\n * STATE_ACTION enum.\n * @exports STATE_ACTION\n * @enum {number}\n * @property {number} STATE_UNKNOWN=0 STATE_UNKNOWN value\n * @property {number} STATE_ERROR=1 STATE_ERROR value\n * @property {number} STATE_ADD=2 STATE_ADD value\n * @property {number} STATE_REMOVE=3 STATE_REMOVE value\n * @property {number} STATE_REQUEST_FULL_STATE=4 STATE_REQUEST_FULL_STATE value\n * @property {number} STATE_FULL_STATE=5 STATE_FULL_STATE value\n * @property {number} STATE_CHECKSUM=6 STATE_CHECKSUM value\n */\n$root.STATE_ACTION = (function() {\n    var valuesById = {}, values = Object.create(valuesById);\n    values[valuesById[0] = \"STATE_UNKNOWN\"] = 0;\n    values[valuesById[1] = \"STATE_ERROR\"] = 1;\n    values[valuesById[2] = \"STATE_ADD\"] = 2;\n    values[valuesById[3] = \"STATE_REMOVE\"] = 3;\n    values[valuesById[4] = \"STATE_REQUEST_FULL_STATE\"] = 4;\n    values[valuesById[5] = \"STATE_FULL_STATE\"] = 5;\n    values[valuesById[6] = \"STATE_CHECKSUM\"] = 6;\n    return values;\n})();\n\n$root.StateMessage = (function() {\n\n    /**\n     * Properties of a StateMessage.\n     * @exports IStateMessage\n     * @interface IStateMessage\n     * @property {STATE_ACTION|null} [action] StateMessage action\n     * @property {string|null} [data] StateMessage data\n     * @property {boolean|null} [isError] StateMessage isError\n     * @property {number|null} [checksum] StateMessage checksum\n     * @property {Array.<string>|null} [fullState] StateMessage fullState\n     * @property {string|null} [serverName] StateMessage serverName\n     * @property {STATE_REGISTRY_TOPIC|null} [registryTOPIC] StateMessage registryTOPIC\n     */\n\n    /**\n     * Constructs a new StateMessage.\n     * @exports StateMessage\n     * @classdesc Represents a StateMessage.\n     * @implements IStateMessage\n     * @constructor\n     * @param {IStateMessage=} [properties] Properties to set\n     */\n    function StateMessage(properties) {\n        this.fullState = [];\n        if (properties)\n            for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n                if (properties[keys[i]] != null)\n                    this[keys[i]] = properties[keys[i]];\n    }\n\n    /**\n     * StateMessage action.\n     * @member {STATE_ACTION} action\n     * @memberof StateMessage\n     * @instance\n     */\n    StateMessage.prototype.action = 0;\n\n    /**\n     * StateMessage data.\n     * @member {string} data\n     * @memberof StateMessage\n     * @instance\n     */\n    StateMessage.prototype.data = \"\";\n\n    /**\n     * StateMessage isError.\n     * @member {boolean} isError\n     * @memberof StateMessage\n     * @instance\n     */\n    StateMessage.prototype.isError = false;\n\n    /**\n     * StateMessage checksum.\n     * @member {number} checksum\n     * @memberof StateMessage\n     * @instance\n     */\n    StateMessage.prototype.checksum = 0;\n\n    /**\n     * StateMessage fullState.\n     * @member {Array.<string>} fullState\n     * @memberof StateMessage\n     * @instance\n     */\n    StateMessage.prototype.fullState = $util.emptyArray;\n\n    /**\n     * StateMessage serverName.\n     * @member {string} serverName\n     * @memberof StateMessage\n     * @instance\n     */\n    StateMessage.prototype.serverName = \"\";\n\n    /**\n     * StateMessage registryTOPIC.\n     * @member {STATE_REGISTRY_TOPIC} registryTOPIC\n     * @memberof StateMessage\n     * @instance\n     */\n    StateMessage.prototype.registryTOPIC = 0;\n\n    /**\n     * Encodes the specified StateMessage message. Does not implicitly {@link StateMessage.verify|verify} messages.\n     * @function encode\n     * @memberof StateMessage\n     * @static\n     * @param {IStateMessage} message StateMessage message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    StateMessage.encode = function encode(message, writer) {\n        if (!writer)\n            writer = $Writer.create();\n        if (message.action != null && Object.hasOwnProperty.call(message, \"action\"))\n            writer.uint32(/* id 1, wireType 0 =*/8).int32(message.action);\n        if (message.data != null && Object.hasOwnProperty.call(message, \"data\"))\n            writer.uint32(/* id 2, wireType 2 =*/18).string(message.data);\n        if (message.isError != null && Object.hasOwnProperty.call(message, \"isError\"))\n            writer.uint32(/* id 3, wireType 0 =*/24).bool(message.isError);\n        if (message.checksum != null && Object.hasOwnProperty.call(message, \"checksum\"))\n            writer.uint32(/* id 19, wireType 0 =*/152).int32(message.checksum);\n        if (message.fullState != null && message.fullState.length)\n            for (var i = 0; i < message.fullState.length; ++i)\n                writer.uint32(/* id 20, wireType 2 =*/162).string(message.fullState[i]);\n        if (message.serverName != null && Object.hasOwnProperty.call(message, \"serverName\"))\n            writer.uint32(/* id 21, wireType 2 =*/170).string(message.serverName);\n        if (message.registryTOPIC != null && Object.hasOwnProperty.call(message, \"registryTOPIC\"))\n            writer.uint32(/* id 22, wireType 0 =*/176).int32(message.registryTOPIC);\n        return writer;\n    };\n\n    /**\n     * Encodes the specified StateMessage message, length delimited. Does not implicitly {@link StateMessage.verify|verify} messages.\n     * @function encodeDelimited\n     * @memberof StateMessage\n     * @static\n     * @param {IStateMessage} message StateMessage message or plain object to encode\n     * @param {$protobuf.Writer} [writer] Writer to encode to\n     * @returns {$protobuf.Writer} Writer\n     */\n    StateMessage.encodeDelimited = function encodeDelimited(message, writer) {\n        return this.encode(message, writer).ldelim();\n    };\n\n    /**\n     * Decodes a StateMessage message from the specified reader or buffer.\n     * @function decode\n     * @memberof StateMessage\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @param {number} [length] Message length if known beforehand\n     * @returns {StateMessage} StateMessage\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    StateMessage.decode = function decode(reader, length) {\n        if (!(reader instanceof $Reader))\n            reader = $Reader.create(reader);\n        var end = length === undefined ? reader.len : reader.pos + length, message = new $root.StateMessage();\n        while (reader.pos < end) {\n            var tag = reader.uint32();\n            switch (tag >>> 3) {\n            case 1:\n                message.action = reader.int32();\n                break;\n            case 2:\n                message.data = reader.string();\n                break;\n            case 3:\n                message.isError = reader.bool();\n                break;\n            case 19:\n                message.checksum = reader.int32();\n                break;\n            case 20:\n                if (!(message.fullState && message.fullState.length))\n                    message.fullState = [];\n                message.fullState.push(reader.string());\n                break;\n            case 21:\n                message.serverName = reader.string();\n                break;\n            case 22:\n                message.registryTOPIC = reader.int32();\n                break;\n            default:\n                reader.skipType(tag & 7);\n                break;\n            }\n        }\n        return message;\n    };\n\n    /**\n     * Decodes a StateMessage message from the specified reader or buffer, length delimited.\n     * @function decodeDelimited\n     * @memberof StateMessage\n     * @static\n     * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n     * @returns {StateMessage} StateMessage\n     * @throws {Error} If the payload is not a reader or valid buffer\n     * @throws {$protobuf.util.ProtocolError} If required fields are missing\n     */\n    StateMessage.decodeDelimited = function decodeDelimited(reader) {\n        if (!(reader instanceof $Reader))\n            reader = new $Reader(reader);\n        return this.decode(reader, reader.uint32());\n    };\n\n    return StateMessage;\n})();\n\nmodule.exports = $root;\n", "import {\n    TOPIC,\n    AuthMessage,\n    ClusterMessage,\n    RecordMessage,\n    ConnectionMessage,\n    EventMessage,\n    LockMessage,\n    MonitoringMessage,\n    ParserMessage,\n    PresenceMessage,\n    RpcMessage,\n    // @ts-ignore\n} from '../generated/protobuf'\n\nexport const TopicMessage = {\n    [TOPIC.RECORD]: RecordMessage,\n    [TOPIC.CLUSTER]: ClusterMessage,\n    [TOPIC.CONNECTION]: ConnectionMessage,\n    [TOPIC.AUTH]: AuthMessage,\n    [TOPIC.EVENT]: EventMessage,\n    [TOPIC.LOCK]: LockMessage,\n    [TOPIC.MONITORING]: MonitoringMessage,\n    [TOPIC.PARSER]: ParserMessage,\n    [TOPIC.PRESENCE]: PresenceMessage,\n    [TOPIC.RPC]: RpcMessage\n}\n", "import { TopicMessage } from './protobuf-map'\nimport { ParseResult } from '../types/messages'\n// @ts-ignore\nimport { Message } from '../generated/protobuf'\nimport { PARSER_ACTION, TOPIC } from '../types/all'\n\nexport interface RawMessage {\n  fin: boolean\n  topic: number\n  action: number\n  meta?: Buffer\n  payload?: Buffer\n  rawHeader: Buffer\n}\n\nexport function parse (data: Uint8Array): Array<ParseResult> {\n  try {\n    const msg = Message.decodeDelimited(data)\n    const message = TopicMessage[msg.topic].decode(msg.message, msg.message.length)\n    return [{ topic: msg.topic, ...message }]\n  } catch (e) {\n    return [{ topic: TOPIC.PARSER, action: PARSER_ACTION.ERROR }]\n  }\n}\n\nexport function parseData (message: any): true | Error {\n  if (message.requestorData) {\n    message.requestorData = JSON.parse(message.requestorData)\n  }\n\n  if (message.parsedData !== undefined || message.data === undefined) {\n    return true\n  }\n\n  message.parsedData = JSON.parse(message.data)\n  if (message.parsedData === undefined) {\n    return new Error(`unable to parse data ${message.data}`)\n  }\n\n  return true\n}\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.StateMachine = void 0;\nvar StateMachine = /** @class */ (function () {\n    function StateMachine(logger, stateMachine) {\n        this.stateMachine = stateMachine;\n        this.inEndState = false;\n        this.transitions = stateMachine.transitions;\n        this.state = stateMachine.init;\n        this.context = stateMachine.context;\n        this.history = [{ oldState: '-', newState: this.state, transitionName: '-' }];\n    }\n    /**\n     * Try to perform a state change\n     */\n    StateMachine.prototype.transition = function (transitionName) {\n        var transition;\n        for (var i = 0; i < this.transitions.length; i++) {\n            transition = this.transitions[i];\n            if (transitionName === transition.name && (this.state === transition.from || transition.from === undefined)) {\n                this.history.push({ oldState: this.state, transitionName: transitionName, newState: transition.to });\n                var oldState = this.state;\n                this.state = transition.to;\n                if (this.stateMachine.onStateChanged) {\n                    this.stateMachine.onStateChanged.call(this.context, this.state, oldState);\n                }\n                if (transition.handler) {\n                    transition.handler.call(this.context);\n                }\n                if (transition.isEndState === true) {\n                    this.inEndState = true;\n                }\n                return;\n            }\n        }\n        var details = JSON.stringify({ transition: transitionName, fromState: this.state });\n        var debugHistory = this.history.reverse().reduce(function (result, entry) {\n            return result += \"\\n\\tFrom \".concat(entry.oldState, \" to \").concat(entry.newState, \" via \").concat(entry.transitionName);\n        }, '');\n        console.trace(\"Invalid state transition.\\nDetails: \".concat(details, \" \\nHistory: \").concat(debugHistory));\n    };\n    return StateMachine;\n}());\nexports.StateMachine = StateMachine;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.PromiseDelay = exports.normalizeArguments = exports.normalizeSetArguments = exports.getUid = exports.parseUrl = exports.shallowCopy = exports.deepCopy = exports.deepEquals = void 0;\n/**\n * Compares two objects for deep (recoursive) equality\n *\n * This used to be a significantly more complex custom implementation,\n * but JSON.stringify has gotten so fast that it now outperforms the custom\n * way by a factor of 1.5 to 3.\n *\n * In IE11 / Edge the custom implementation is still slightly faster, but for\n * consistencies sake and the upsides of leaving edge-case handling to the native\n * browser / node implementation we'll go for JSON.stringify from here on.\n *\n * Please find performance test results here\n *\n * http://jsperf.com/deep-equals-code-vs-json\n */\nvar deepEquals = function (objA, objB) {\n    if (objA === objB) {\n        return true;\n    }\n    else if (typeof objA !== 'object' || typeof objB !== 'object') {\n        return false;\n    }\n    return JSON.stringify(objA) === JSON.stringify(objB);\n};\nexports.deepEquals = deepEquals;\n/**\n * Similar to deepEquals above, tests have shown that JSON stringify outperforms any attempt of\n * a code based implementation by 50% - 100% whilst also handling edge-cases and keeping\n * implementation complexity low.\n *\n * If ES6/7 ever decides to implement deep copying natively (what happened to Object.clone?\n * that was briefly a thing...), let's switch it for the native implementation. For now though,\n * even Object.assign({}, obj) only provides a shallow copy.\n *\n * Please find performance test results backing these statements here:\n *\n * http://jsperf.com/object-deep-copy-assign\n */\nvar deepCopy = function (obj) {\n    if (typeof obj === 'object') {\n        return JSON.parse(JSON.stringify(obj));\n    }\n    return obj;\n};\nexports.deepCopy = deepCopy;\n/**\n * Copy the top level of items, but do not copy its items recourisvely. This\n * is much quicker than deepCopy does not guarantee the object items are new/unique.\n * Mainly used to change the reference to the actual object itself, but not its children.\n */\nvar shallowCopy = function (obj) {\n    if (Array.isArray(obj)) {\n        return obj.slice(0);\n    }\n    else if (typeof obj === 'object') {\n        var copy = Object.create(null);\n        var props = Object.keys(obj);\n        for (var i = 0; i < props.length; i++) {\n            copy[props[i]] = obj[props[i]];\n        }\n        return copy;\n    }\n    return obj;\n};\nexports.shallowCopy = shallowCopy;\n/**\n * Used to see if a protocol is specified within the url\n * @type {RegExp}\n */\nvar hasUrlProtocol = /^wss:|^ws:|^\\/\\//;\n/**\n * Used to see if the protocol contains any unsupported protocols\n * @type {RegExp}\n */\nvar unsupportedProtocol = /^http:|^https:/;\n/**\n * Take the url passed when creating the client and ensure the correct\n * protocol is provided\n * @param  {String} url Url passed in by client\n * @return {String} Url with supported protocol\n */\nvar parseUrl = function (initialURl, defaultPath) {\n    var url = initialURl;\n    if (unsupportedProtocol.test(url)) {\n        throw new Error('Only ws and wss are supported');\n    }\n    if (!hasUrlProtocol.test(url)) {\n        url = \"ws://\".concat(url);\n    }\n    else if (url.indexOf('//') === 0) {\n        url = \"ws:\".concat(url);\n    }\n    var protocol = url.split('//')[0];\n    var host = url.split('//')[1];\n    if (!host) {\n        throw new Error('Invalid URL: ws://');\n    }\n    var path = null;\n    if (host.indexOf('/') > -1) {\n        path = host.split('/');\n        host = path.shift() || '';\n        path = '/' + path.join('');\n    }\n    else {\n        if (host.indexOf('?') > -1) {\n            path = host.split('?');\n            host = path.shift() || '';\n            path = defaultPath + '?' + path.join('');\n        }\n    }\n    if (!path || path === '/')\n        path = defaultPath;\n    return \"\".concat(protocol, \"//\").concat(host).concat(path);\n};\nexports.parseUrl = parseUrl;\n/**\n* Returns a random string. The first block of characters\n* is a timestamp, in order to allow databases to optimize for semi-\n* sequentuel numberings\n*/\nvar getUid = function () {\n    var timestamp = (new Date()).getTime().toString(36);\n    var randomString = (Math.random() * 10000000000000000).toString(36).replace('.', '');\n    return \"\".concat(timestamp, \"-\").concat(randomString);\n};\nexports.getUid = getUid;\n/**\n * Creates a map based on the types of the provided arguments\n */\nvar normalizeSetArguments = function (args, startIndex) {\n    if (startIndex === void 0) { startIndex = 0; }\n    var result;\n    var isRootData = function (data) { return data !== undefined && typeof data === 'object'; };\n    var isNestedData = function (data) { return typeof data !== 'function'; };\n    var isPath = function (path) { return path !== undefined && typeof path === 'string'; };\n    var isCallback = function (callback) { return typeof callback === 'function'; };\n    if (args.length === startIndex + 1) {\n        result = {\n            path: undefined,\n            data: isRootData(args[startIndex]) ? args[startIndex] : undefined,\n            callback: undefined\n        };\n    }\n    if (args.length === startIndex + 2) {\n        result = { path: undefined, data: undefined, callback: undefined };\n        if (!isCallback(args[startIndex]) && isNestedData(args[startIndex])) {\n            result.path = isPath(args[startIndex]) ? args[startIndex] : undefined;\n        }\n        if (isPath(args[startIndex])) {\n            result.data = isNestedData(args[startIndex + 1]) ? args[startIndex + 1] : undefined;\n        }\n        else {\n            result.data = isRootData(args[startIndex]) ? args[startIndex] : undefined;\n        }\n        if (!isPath(args[startIndex])) {\n            result.callback = isCallback(args[startIndex + 1]) ? args[startIndex + 1] : false;\n        }\n    }\n    if (args.length === startIndex + 3) {\n        result = {\n            path: isPath(args[startIndex]) ? args[startIndex] : undefined,\n            data: isNestedData(args[startIndex + 1]) ? args[startIndex + 1] : undefined,\n            callback: isCallback(args[startIndex + 2]) ? args[startIndex + 2] : undefined\n        };\n    }\n    if (result) {\n        if (result.path !== undefined && result.path.length === 0 ||\n            (result.path === undefined && !result.data)) {\n            throw Error('Invalid set path argument');\n        }\n        if (result.data === undefined && result.path === undefined) {\n            throw Error('Invalid set data argument');\n        }\n        if (result.callback !== undefined && result.callback === false ||\n            result.callback === undefined && args.length === startIndex + 3) {\n            throw Error('Invalid set callback argument');\n        }\n        return result;\n    }\n    throw Error('Invalid set arguments');\n};\nexports.normalizeSetArguments = normalizeSetArguments;\n/**\n * Creates a map based on the types of the provided arguments\n */\nvar normalizeArguments = function (args) {\n    // If arguments is already a map of normalized parameters\n    // (e.g. when called by AnonymousRecord), just return it.\n    if (args.length === 1 && typeof args[0] === 'object') {\n        return args[0];\n    }\n    var result = Object.create(null);\n    for (var i = 0; i < args.length; i++) {\n        if (typeof args[i] === 'string') {\n            result.path = args[i];\n        }\n        else if (typeof args[i] === 'function') {\n            result.callback = args[i];\n        }\n        else if (typeof args[i] === 'boolean') {\n            result.triggerNow = args[i];\n        }\n    }\n    return result;\n};\nexports.normalizeArguments = normalizeArguments;\nvar PromiseDelay = function (time) {\n    return new Promise(function (done) { return setTimeout(done, time); });\n};\nexports.PromiseDelay = PromiseDelay;\n", "{\n    \"name\": \"@deepstream/client\",\n    \"version\": \"7.0.5\",\n    \"description\": \"the javascript client for deepstreamIO\",\n    \"keywords\": [\n        \"deepstream\",\n        \"javascript\",\n        \"realtime\",\n        \"client\"\n    ],\n    \"mocha\": {\n        \"recursive\": true,\n        \"reporter\": \"dot\",\n        \"require\": \"ts-node/register/transpile-only\",\n        \"exit\": true\n    },\n    \"main\": \"dist/src/deepstream.js\",\n    \"types\": \"dist/src/deepstream-client.d.ts\",\n    \"directories\": {\n        \"test\": \"src/test\"\n    },\n    \"scripts\": {\n        \"tsc\": \"rm -rf dist && tsc\",\n        \"build\": \"npm run tsc && npm run build:dev && npm run build:prod\",\n        \"build:dev\": \"webpack --config webpack.dev.js\",\n        \"build:prod\": \"webpack --config webpack.prod.js\",\n        \"rebuild\": \"rimraf dist && webpack\",\n        \"clean\": \"rimraf dist\",\n        \"lint\": \"tslint src/*.ts src/**/*.ts -t verbose\",\n        \"lint:fix\": \"npm run lint -- --fix\",\n        \"test\": \"mocha src/**/*.spec.ts\",\n        \"test:coverage\": \"nyc npm test\",\n        \"bundle:analyse\": \"webpack --config webpack.prod.js --profile --json > ./dist/stats.json && webpack-bundle-analyzer ./dist/stats.json\",\n        \"postinstall\": \"node scripts/postinstall.js\"\n    },\n    \"repository\": {\n        \"type\": \"git\",\n        \"url\": \"https://github.com/deepstreamIO/deepstream.io-client-js.git\"\n    },\n    \"dependencies\": {\n        \"@deepstream/protobuf\": \"^1.0.8\",\n        \"protobufjs\": \"^7.5.0\",\n        \"ws\": \"^7.4.0\"\n    },\n    \"browser\": {\n        \"net\": false,\n        \"ws\": false\n    },\n    \"devDependencies\": {\n        \"@istanbuljs/nyc-config-typescript\": \"^1.0.1\",\n        \"@types/chai\": \"^4.3.20\",\n        \"@types/mocha\": \"^8.2.3\",\n        \"@types/node\": \"^14.18.63\",\n        \"@types/sinon\": \"^9.0.11\",\n        \"@types/ws\": \"^7.4.0\",\n        \"buffer\": \"^6.0.3\",\n        \"chai\": \"^4.5.0\",\n        \"coveralls\": \"^3.1.0\",\n        \"husky\": \"^4.3.0\",\n        \"mocha\": \"^10.2.0\",\n        \"mocha-lcov-reporter\": \"^1.3.0\",\n        \"nyc\": \"^15.1.0\",\n        \"rimraf\": \"^3.0.2\",\n        \"sinon\": \"^9.2.1\",\n        \"terser-webpack-plugin\": \"^4.2.3\",\n        \"ts-essentials\": \"^10.0.4\",\n        \"ts-loader\": \"^9.5.2\",\n        \"ts-node\": \"^10.9.2\",\n        \"tslint\": \"^6.1.3\",\n        \"typescript\": \"^4.9.5\",\n        \"webpack\": \"^5.75.0\",\n        \"webpack-bundle-analyzer\": \"^4.10.2\",\n        \"webpack-cli\": \"^5.0.1\"\n    },\n    \"author\": \"deepstreamHub GmbH\",\n    \"license\": \"MIT\",\n    \"bugs\": {\n        \"url\": \"https://github.com/deepstreamIO/deepstream.io-client-js/issues\"\n    },\n    \"homepage\": \"http://deepstreamio.github.io\",\n    \"eslintConfig\": {\n        \"extends\": \"deepstream\"\n    },\n    \"husky\": {\n        \"hooks\": {\n            \"pre-commit\": \"npm t && npm run lint && npm run build\",\n            \"pre-publish\": \"npm t && npm run build\"\n        }\n    },\n    \"nyc\": {\n        \"extends\": \"@istanbuljs/nyc-config-typescript\",\n        \"include\": [\n            \"src/**/*.ts\"\n        ],\n        \"exclude\": [\n            \"src/**/*.spec.ts\"\n        ],\n        \"extension\": [\n            \".ts\"\n        ],\n        \"require\": [\n            \"ts-node/register\"\n        ],\n        \"reporter\": [\n            \"lcov\"\n        ]\n    }\n}\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Connection = void 0;\nvar constants_1 = require(\"../constants\");\nvar message_parser_1 = require(\"@deepstream/protobuf/dist/src/message-parser\");\nvar state_machine_1 = require(\"../util/state-machine\");\nvar utils = require(\"../util/utils\");\nvar emitter_1 = require(\"../util/emitter\");\nvar pkg = require(\"../../package.json\");\nvar Connection = /** @class */ (function () {\n    function Connection(services, options, url, emitter) {\n        var _this = this;\n        this.services = services;\n        this.options = options;\n        this.reconnectTimeout = null;\n        this.authParams = null;\n        this.handlers = new Map();\n        this.authCallback = null;\n        this.resumeCallback = null;\n        this.emitter = emitter;\n        this.internalEmitter = new emitter_1.Emitter();\n        this.isInLimbo = true;\n        this.clientData = null;\n        this.heartbeatIntervalTimeout = null;\n        this.endpoint = null;\n        this.reconnectionAttempt = 0;\n        this.limboTimeout = null;\n        var isReconnecting = false;\n        var firstOpen = true;\n        this.stateMachine = new state_machine_1.StateMachine(this.services.logger, {\n            init: constants_1.CONNECTION_STATE.CLOSED,\n            onStateChanged: function (newState, oldState) {\n                if (newState === oldState) {\n                    return;\n                }\n                emitter.emit(constants_1.EVENT.CONNECTION_STATE_CHANGED, newState);\n                if (newState === constants_1.CONNECTION_STATE.RECONNECTING) {\n                    _this.isInLimbo = true;\n                    isReconnecting = true;\n                    if (oldState !== constants_1.CONNECTION_STATE.CLOSED) {\n                        _this.internalEmitter.emit(constants_1.EVENT.CONNECTION_LOST);\n                        _this.limboTimeout = _this.services.timerRegistry.add({\n                            duration: _this.options.offlineBufferTimeout,\n                            context: _this,\n                            callback: function () {\n                                _this.isInLimbo = false;\n                                _this.internalEmitter.emit(constants_1.EVENT.EXIT_LIMBO);\n                            }\n                        });\n                    }\n                }\n                else if (newState === constants_1.CONNECTION_STATE.OPEN && (isReconnecting || firstOpen)) {\n                    firstOpen = false;\n                    _this.isInLimbo = false;\n                    _this.internalEmitter.emit(constants_1.EVENT.CONNECTION_REESTABLISHED);\n                    _this.services.timerRegistry.remove(_this.limboTimeout);\n                }\n            },\n            transitions: [\n                { name: \"initialised\" /* TRANSITIONS.INITIALISED */, from: constants_1.CONNECTION_STATE.CLOSED, to: constants_1.CONNECTION_STATE.INITIALISING },\n                { name: \"connected\" /* TRANSITIONS.CONNECTED */, from: constants_1.CONNECTION_STATE.INITIALISING, to: constants_1.CONNECTION_STATE.AWAITING_CONNECTION },\n                { name: \"connected\" /* TRANSITIONS.CONNECTED */, from: constants_1.CONNECTION_STATE.REDIRECTING, to: constants_1.CONNECTION_STATE.AWAITING_CONNECTION },\n                { name: \"connected\" /* TRANSITIONS.CONNECTED */, from: constants_1.CONNECTION_STATE.RECONNECTING, to: constants_1.CONNECTION_STATE.AWAITING_CONNECTION },\n                { name: \"challenge\" /* TRANSITIONS.CHALLENGE */, from: constants_1.CONNECTION_STATE.AWAITING_CONNECTION, to: constants_1.CONNECTION_STATE.CHALLENGING },\n                { name: \"redirected\" /* TRANSITIONS.CONNECTION_REDIRECTED */, from: constants_1.CONNECTION_STATE.CHALLENGING, to: constants_1.CONNECTION_STATE.REDIRECTING },\n                { name: \"challenge-denied\" /* TRANSITIONS.CHALLENGE_DENIED */, from: constants_1.CONNECTION_STATE.CHALLENGING, to: constants_1.CONNECTION_STATE.CHALLENGE_DENIED },\n                { name: \"accepted\" /* TRANSITIONS.CHALLENGE_ACCEPTED */, from: constants_1.CONNECTION_STATE.CHALLENGING, to: constants_1.CONNECTION_STATE.AWAITING_AUTHENTICATION, handler: this.onAwaitingAuthentication.bind(this) },\n                { name: \"authentication-timeout\" /* TRANSITIONS.AUTHENTICATION_TIMEOUT */, from: constants_1.CONNECTION_STATE.AWAITING_CONNECTION, to: constants_1.CONNECTION_STATE.AUTHENTICATION_TIMEOUT },\n                { name: \"authentication-timeout\" /* TRANSITIONS.AUTHENTICATION_TIMEOUT */, from: constants_1.CONNECTION_STATE.AWAITING_AUTHENTICATION, to: constants_1.CONNECTION_STATE.AUTHENTICATION_TIMEOUT },\n                { name: \"authenticate\" /* TRANSITIONS.AUTHENTICATE */, from: constants_1.CONNECTION_STATE.AWAITING_AUTHENTICATION, to: constants_1.CONNECTION_STATE.AUTHENTICATING },\n                { name: \"unsuccesful-login\" /* TRANSITIONS.UNSUCCESFUL_LOGIN */, from: constants_1.CONNECTION_STATE.AUTHENTICATING, to: constants_1.CONNECTION_STATE.AWAITING_AUTHENTICATION },\n                { name: \"succesful-login\" /* TRANSITIONS.SUCCESFUL_LOGIN */, from: constants_1.CONNECTION_STATE.AUTHENTICATING, to: constants_1.CONNECTION_STATE.OPEN },\n                { name: \"too-many-auth-attempts\" /* TRANSITIONS.TOO_MANY_AUTH_ATTEMPTS */, from: constants_1.CONNECTION_STATE.AUTHENTICATING, to: constants_1.CONNECTION_STATE.TOO_MANY_AUTH_ATTEMPTS },\n                { name: \"too-many-auth-attempts\" /* TRANSITIONS.TOO_MANY_AUTH_ATTEMPTS */, from: constants_1.CONNECTION_STATE.AWAITING_AUTHENTICATION, to: constants_1.CONNECTION_STATE.TOO_MANY_AUTH_ATTEMPTS },\n                { name: \"authentication-timeout\" /* TRANSITIONS.AUTHENTICATION_TIMEOUT */, from: constants_1.CONNECTION_STATE.AWAITING_AUTHENTICATION, to: constants_1.CONNECTION_STATE.AUTHENTICATION_TIMEOUT },\n                { name: \"reconnect\" /* TRANSITIONS.RECONNECT */, from: constants_1.CONNECTION_STATE.RECONNECTING, to: constants_1.CONNECTION_STATE.RECONNECTING },\n                { name: \"closed\" /* TRANSITIONS.CLOSED */, from: constants_1.CONNECTION_STATE.CLOSING, to: constants_1.CONNECTION_STATE.CLOSED },\n                { name: \"offline\" /* TRANSITIONS.OFFLINE */, from: constants_1.CONNECTION_STATE.PAUSING, to: constants_1.CONNECTION_STATE.OFFLINE },\n                { name: \"error\" /* TRANSITIONS.ERROR */, to: constants_1.CONNECTION_STATE.RECONNECTING },\n                { name: \"connection-lost\" /* TRANSITIONS.LOST */, to: constants_1.CONNECTION_STATE.RECONNECTING },\n                { name: \"resume\" /* TRANSITIONS.RESUME */, to: constants_1.CONNECTION_STATE.RECONNECTING },\n                { name: \"pause\" /* TRANSITIONS.PAUSE */, to: constants_1.CONNECTION_STATE.PAUSING },\n                { name: \"close\" /* TRANSITIONS.CLOSE */, to: constants_1.CONNECTION_STATE.CLOSING },\n            ]\n        });\n        this.stateMachine.transition(\"initialised\" /* TRANSITIONS.INITIALISED */);\n        this.originalUrl = utils.parseUrl(url, this.options.path);\n        this.url = this.originalUrl;\n        if (!options.lazyConnect) {\n            this.createEndpoint();\n        }\n    }\n    Object.defineProperty(Connection.prototype, \"isConnected\", {\n        get: function () {\n            return this.stateMachine.state === constants_1.CONNECTION_STATE.OPEN;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Connection.prototype.onLost = function (callback) {\n        this.internalEmitter.on(constants_1.EVENT.CONNECTION_LOST, callback);\n    };\n    Connection.prototype.removeOnLost = function (callback) {\n        this.internalEmitter.off(constants_1.EVENT.CONNECTION_LOST, callback);\n    };\n    Connection.prototype.onReestablished = function (callback) {\n        this.internalEmitter.on(constants_1.EVENT.CONNECTION_REESTABLISHED, callback);\n    };\n    Connection.prototype.removeOnReestablished = function (callback) {\n        this.internalEmitter.off(constants_1.EVENT.CONNECTION_REESTABLISHED, callback);\n    };\n    Connection.prototype.onExitLimbo = function (callback) {\n        this.internalEmitter.on(constants_1.EVENT.EXIT_LIMBO, callback);\n    };\n    Connection.prototype.registerHandler = function (topic, callback) {\n        this.handlers.set(topic, callback);\n    };\n    Connection.prototype.sendMessage = function (message) {\n        if (!this.isOpen()) {\n            this.services.logger.error(message, constants_1.EVENT.IS_CLOSED);\n            return;\n        }\n        if (this.endpoint) {\n            this.endpoint.sendParsedMessage(message);\n        }\n    };\n    Connection.prototype.authenticate = function (authParamsOrCallback, callback) {\n        if (authParamsOrCallback &&\n            typeof authParamsOrCallback !== 'object' &&\n            typeof authParamsOrCallback !== 'function') {\n            throw new Error('invalid argument authParamsOrCallback');\n        }\n        if (callback && typeof callback !== 'function') {\n            throw new Error('invalid argument callback');\n        }\n        if (this.stateMachine.state === constants_1.CONNECTION_STATE.CHALLENGE_DENIED ||\n            this.stateMachine.state === constants_1.CONNECTION_STATE.TOO_MANY_AUTH_ATTEMPTS ||\n            this.stateMachine.state === constants_1.CONNECTION_STATE.AUTHENTICATION_TIMEOUT) {\n            this.services.logger.error({ topic: constants_1.TOPIC.CONNECTION }, constants_1.EVENT.IS_CLOSED);\n            return;\n        }\n        if (authParamsOrCallback) {\n            // @ts-ignore\n            this.authParams = typeof authParamsOrCallback === 'object' ? authParamsOrCallback : {};\n        }\n        if (authParamsOrCallback && typeof authParamsOrCallback === 'function') {\n            this.authCallback = authParamsOrCallback;\n        }\n        else if (callback) {\n            this.authCallback = callback;\n        }\n        else {\n            this.authCallback = function () { };\n        }\n        // if (this.stateMachine.state === CONNECTION_STATE.CLOSED && !this.endpoint) {\n        //   this.createEndpoint()\n        //   return\n        // }\n        if (this.stateMachine.state === constants_1.CONNECTION_STATE.AWAITING_AUTHENTICATION && this.authParams) {\n            this.sendAuthParams();\n        }\n        if (!this.endpoint) {\n            this.createEndpoint();\n        }\n    };\n    /*\n    * Returns the current connection state.\n    */\n    Connection.prototype.getConnectionState = function () {\n        return this.stateMachine.state;\n    };\n    Connection.prototype.isOpen = function () {\n        var connState = this.getConnectionState();\n        return connState !== constants_1.CONNECTION_STATE.CLOSED\n            && connState !== constants_1.CONNECTION_STATE.ERROR\n            && connState !== constants_1.CONNECTION_STATE.CLOSING;\n    };\n    /**\n     * Closes the connection. Using this method\n     * will prevent the client from reconnecting.\n     */\n    Connection.prototype.close = function () {\n        this.services.timerRegistry.remove(this.heartbeatIntervalTimeout);\n        this.sendMessage({\n            topic: constants_1.TOPIC.CONNECTION,\n            action: constants_1.CONNECTION_ACTION.CLOSING\n        });\n        this.stateMachine.transition(\"close\" /* TRANSITIONS.CLOSE */);\n    };\n    Connection.prototype.pause = function () {\n        this.stateMachine.transition(\"pause\" /* TRANSITIONS.PAUSE */);\n        this.services.timerRegistry.remove(this.heartbeatIntervalTimeout);\n        if (this.endpoint) {\n            this.endpoint.close();\n        }\n    };\n    Connection.prototype.resume = function (callback) {\n        this.stateMachine.transition(\"resume\" /* TRANSITIONS.RESUME */);\n        this.resumeCallback = callback;\n        this.tryReconnect();\n    };\n    /**\n     * Creates the endpoint to connect to using the url deepstream\n     * was initialised with.\n     */\n    Connection.prototype.createEndpoint = function () {\n        this.endpoint = this.services.socketFactory(this.url, this.options.socketOptions, this.options.heartbeatInterval);\n        this.endpoint.onopened = this.onOpen.bind(this);\n        this.endpoint.onerror = this.onError.bind(this);\n        this.endpoint.onclosed = this.onClose.bind(this);\n        this.endpoint.onparsedmessages = this.onMessages.bind(this);\n    };\n    /********************************\n    ****** Endpoint Callbacks ******\n    /********************************/\n    /**\n    * Will be invoked once the connection is established. The client\n    * can't send messages yet, and needs to get a connection ACK or REDIRECT\n    * from the server before authenticating\n    */\n    Connection.prototype.onOpen = function () {\n        this.clearReconnect();\n        this.checkHeartBeat();\n        this.stateMachine.transition(\"connected\" /* TRANSITIONS.CONNECTED */);\n        this.sendMessage({\n            topic: constants_1.TOPIC.CONNECTION,\n            action: constants_1.CONNECTION_ACTION.CHALLENGE,\n            url: this.originalUrl,\n            protocolVersion: '0.1a',\n            sdkVersion: pkg.version,\n            sdkType: 'javascript'\n        });\n        this.stateMachine.transition(\"challenge\" /* TRANSITIONS.CHALLENGE */);\n    };\n    /**\n     * Callback for generic connection errors. Forwards\n     * the error to the client.\n     *\n     * The connection is considered broken once this method has been\n     * invoked.\n     */\n    Connection.prototype.onError = function (error) {\n        var _this = this;\n        /*\n         * If the implementation isn't listening on the error event this will throw\n         * an error. So let's defer it to allow the reconnection to kick in.\n         */\n        setTimeout(function () {\n            var msg;\n            if (error.code === 'ECONNRESET' || error.code === 'ECONNREFUSED') {\n                msg = \"Can't connect! Deepstream server unreachable on \".concat(_this.originalUrl);\n            }\n            else {\n                msg = error;\n            }\n            _this.services.logger.error({ topic: constants_1.TOPIC.CONNECTION }, constants_1.EVENT.CONNECTION_ERROR, msg);\n        }, 1);\n        this.services.timerRegistry.remove(this.heartbeatIntervalTimeout);\n        this.stateMachine.transition(\"error\" /* TRANSITIONS.ERROR */);\n        this.tryReconnect();\n    };\n    /**\n     * Callback when the connection closes. This might have been a deliberate\n     * close triggered by the client or the result of the connection getting\n     * lost.\n     *\n     * In the latter case the client will try to reconnect using the configured\n     * strategy.\n     */\n    Connection.prototype.onClose = function () {\n        this.services.timerRegistry.remove(this.heartbeatIntervalTimeout);\n        if (this.stateMachine.state === constants_1.CONNECTION_STATE.REDIRECTING) {\n            this.createEndpoint();\n            return;\n        }\n        if (this.stateMachine.state === constants_1.CONNECTION_STATE.CHALLENGE_DENIED ||\n            this.stateMachine.state === constants_1.CONNECTION_STATE.TOO_MANY_AUTH_ATTEMPTS ||\n            this.stateMachine.state === constants_1.CONNECTION_STATE.AUTHENTICATION_TIMEOUT) {\n            return;\n        }\n        if (this.stateMachine.state === constants_1.CONNECTION_STATE.CLOSING) {\n            this.stateMachine.transition(\"closed\" /* TRANSITIONS.CLOSED */);\n            return;\n        }\n        if (this.stateMachine.state === constants_1.CONNECTION_STATE.PAUSING) {\n            this.stateMachine.transition(\"offline\" /* TRANSITIONS.OFFLINE */);\n            return;\n        }\n        this.stateMachine.transition(\"connection-lost\" /* TRANSITIONS.LOST */);\n        this.tryReconnect();\n    };\n    /**\n     * Callback for messages received on the connection.\n     */\n    Connection.prototype.onMessages = function (parseResults) {\n        var _this = this;\n        parseResults.forEach(function (parseResult) {\n            if (parseResult.parseError) {\n                _this.services.logger.error({ topic: constants_1.TOPIC.PARSER }, parseResult.action, parseResult.raw && parseResult.raw.toString());\n                return;\n            }\n            var message = parseResult;\n            // NOTE: parseData mutates the message object adding the parsedData property and returns true when succesful\n            var res = (0, message_parser_1.parseData)(message);\n            if (res !== true) {\n                _this.services.logger.error({ topic: constants_1.TOPIC.PARSER }, constants_1.PARSER_ACTION.INVALID_MESSAGE, res);\n            }\n            if (message === null) {\n                return;\n            }\n            if (message.topic === constants_1.TOPIC.CONNECTION) {\n                _this.handleConnectionResponse(message);\n                return;\n            }\n            if (message.topic === constants_1.TOPIC.AUTH) {\n                _this.handleAuthResponse(message);\n                return;\n            }\n            var handler = _this.handlers.get(message.topic);\n            if (!handler) {\n                // this should never happen\n                return;\n            }\n            handler(message);\n        });\n    };\n    /**\n    * Sends authentication params to the server. Please note, this\n    * doesn't use the queued message mechanism, but rather sends the message directly\n    */\n    Connection.prototype.sendAuthParams = function () {\n        this.stateMachine.transition(\"authenticate\" /* TRANSITIONS.AUTHENTICATE */);\n        this.sendMessage({\n            topic: constants_1.TOPIC.AUTH,\n            action: constants_1.AUTH_ACTION.REQUEST,\n            parsedData: this.authParams\n        });\n    };\n    /**\n    * Ensures that a heartbeat was not missed more than once, otherwise it considers the connection\n    * to have been lost and closes it for reconnection.\n    */\n    Connection.prototype.checkHeartBeat = function () {\n        var heartBeatTolerance = this.options.heartbeatInterval * 2;\n        if (!this.endpoint) {\n            return;\n        }\n        if (this.endpoint.getTimeSinceLastMessage() > heartBeatTolerance) {\n            this.services.timerRegistry.remove(this.heartbeatIntervalTimeout);\n            this.services.logger.error({ topic: constants_1.TOPIC.CONNECTION }, constants_1.EVENT.HEARTBEAT_TIMEOUT);\n            this.endpoint.close();\n            return;\n        }\n        this.heartbeatIntervalTimeout = this.services.timerRegistry.add({\n            duration: this.options.heartbeatInterval,\n            callback: this.checkHeartBeat,\n            context: this\n        });\n    };\n    /**\n    * If the connection drops or is closed in error this\n    * method schedules increasing reconnection intervals\n    *\n    * If the number of failed reconnection attempts exceeds\n    * options.maxReconnectAttempts the connection is closed\n    */\n    Connection.prototype.tryReconnect = function () {\n        if (this.reconnectTimeout !== null) {\n            return;\n        }\n        if (this.reconnectionAttempt < this.options.maxReconnectAttempts) {\n            this.stateMachine.transition(\"reconnect\" /* TRANSITIONS.RECONNECT */);\n            this.reconnectTimeout = this.services.timerRegistry.add({\n                callback: this.tryOpen,\n                context: this,\n                duration: Math.min(this.options.maxReconnectInterval, this.options.reconnectIntervalIncrement * this.reconnectionAttempt)\n            });\n            this.reconnectionAttempt++;\n            return;\n        }\n        this.emitter.emit(constants_1.EVENT[constants_1.EVENT.MAX_RECONNECTION_ATTEMPTS_REACHED], this.reconnectionAttempt);\n        this.clearReconnect();\n        this.close();\n    };\n    /**\n     * Attempts to open a errourosly closed connection\n     */\n    Connection.prototype.tryOpen = function () {\n        if (this.stateMachine.state !== constants_1.CONNECTION_STATE.REDIRECTING) {\n            this.url = this.originalUrl;\n        }\n        this.createEndpoint();\n        this.reconnectTimeout = null;\n    };\n    /**\n     * Stops all further reconnection attempts,\n     * either because the connection is open again\n     * or because the maximal number of reconnection\n     * attempts has been exceeded\n     */\n    Connection.prototype.clearReconnect = function () {\n        this.services.timerRegistry.remove(this.reconnectTimeout);\n        this.reconnectTimeout = null;\n        this.reconnectionAttempt = 0;\n    };\n    /**\n     * The connection response will indicate whether the deepstream connection\n     * can be used or if it should be forwarded to another instance. This\n     * allows us to introduce load-balancing if needed.\n     *\n     * If authentication parameters are already provided this will kick of\n     * authentication immediately. The actual 'open' event won't be emitted\n     * by the client until the authentication is successful.\n     *\n     * If a challenge is recieved, the user will send the url to the server\n     * in response to get the appropriate redirect. If the URL is invalid the\n     * server will respond with a REJECTION resulting in the client connection\n     * being permanently closed.\n     *\n     * If a redirect is recieved, this connection is closed and updated with\n     * a connection to the url supplied in the message.\n     */\n    Connection.prototype.handleConnectionResponse = function (message) {\n        if (message.action === constants_1.CONNECTION_ACTION.ACCEPT) {\n            this.stateMachine.transition(\"accepted\" /* TRANSITIONS.CHALLENGE_ACCEPTED */);\n            return;\n        }\n        if (message.action === constants_1.CONNECTION_ACTION.REJECT) {\n            this.stateMachine.transition(\"challenge-denied\" /* TRANSITIONS.CHALLENGE_DENIED */);\n            if (this.endpoint) {\n                this.endpoint.close();\n            }\n            return;\n        }\n        if (message.action === constants_1.CONNECTION_ACTION.REDIRECT) {\n            this.url = message.url;\n            this.stateMachine.transition(\"redirected\" /* TRANSITIONS.CONNECTION_REDIRECTED */);\n            if (this.endpoint) {\n                this.endpoint.close();\n            }\n            return;\n        }\n        if (message.action === constants_1.CONNECTION_ACTION.AUTHENTICATION_TIMEOUT) {\n            this.stateMachine.transition(\"authentication-timeout\" /* TRANSITIONS.AUTHENTICATION_TIMEOUT */);\n            this.services.logger.error(message);\n        }\n    };\n    /**\n     * Callback for messages received for the AUTH topic. If\n     * the authentication was successful this method will\n     * open the connection and send all messages that the client\n     * tried to send so far.\n     */\n    Connection.prototype.handleAuthResponse = function (message) {\n        if (message.action === constants_1.AUTH_ACTION.TOO_MANY_AUTH_ATTEMPTS) {\n            this.stateMachine.transition(\"too-many-auth-attempts\" /* TRANSITIONS.TOO_MANY_AUTH_ATTEMPTS */);\n            this.services.logger.error(message);\n            return;\n        }\n        if (message.action === constants_1.AUTH_ACTION.AUTH_UNSUCCESSFUL) {\n            this.stateMachine.transition(\"unsuccesful-login\" /* TRANSITIONS.UNSUCCESFUL_LOGIN */);\n            this.onAuthUnSuccessful(message.parsedData);\n            return;\n        }\n        if (message.action === constants_1.AUTH_ACTION.AUTH_SUCCESSFUL) {\n            this.stateMachine.transition(\"succesful-login\" /* TRANSITIONS.SUCCESFUL_LOGIN */);\n            this.onAuthSuccessful(message.parsedData);\n            return;\n        }\n    };\n    Connection.prototype.onAwaitingAuthentication = function () {\n        if (this.authParams) {\n            this.sendAuthParams();\n        }\n    };\n    Connection.prototype.onAuthSuccessful = function (clientData) {\n        this.updateClientData(clientData);\n        if (this.resumeCallback) {\n            this.resumeCallback();\n            this.resumeCallback = null;\n        }\n        if (this.authCallback === null) {\n            return;\n        }\n        this.authCallback(true, this.clientData);\n        this.authCallback = null;\n    };\n    Connection.prototype.onAuthUnSuccessful = function (clientData) {\n        var reason = { reason: clientData || constants_1.EVENT[constants_1.EVENT.INVALID_AUTHENTICATION_DETAILS] };\n        if (this.resumeCallback) {\n            this.resumeCallback(reason);\n            this.resumeCallback = null;\n        }\n        if (this.authCallback === null) {\n            this.emitter.emit(constants_1.EVENT.REAUTHENTICATION_FAILURE, reason);\n            return;\n        }\n        this.authCallback(false, reason);\n        this.authCallback = null;\n    };\n    Connection.prototype.updateClientData = function (data) {\n        var newClientData = data || null;\n        if (this.clientData === null &&\n            (newClientData === null || Object.keys(newClientData).length === 0)) {\n            return;\n        }\n        if (!utils.deepEquals(this.clientData, data)) {\n            this.emitter.emit(constants_1.EVENT.CLIENT_DATA_CHANGED, Object.assign({}, newClientData));\n            this.clientData = newClientData;\n        }\n    };\n    return Connection;\n}());\nexports.Connection = Connection;\n", "import {\n  TopicMessage\n} from './protobuf-map'\n\n// @ts-ignore\nimport { Message } from '../generated/protobuf'\n\nexport function getMessage (message: any, isAck: boolean): Uint8Array {\n  if (isAck && !message.isAck) {\n    message = { ...message, isAck: true }\n  }\n  if (message.data === undefined && message.parsedData !== undefined) {\n    message.data = JSON.stringify(message.parsedData)\n  }\n  if (message.requestorData) {\n    message.requestorData = JSON.stringify(message.requestorData)\n  }\n\n  const serializedMessage = TopicMessage[message.topic].encode(message).finish()\n  const x = Message.encodeDelimited({ topic: message.topic, message: serializedMessage }).finish()\n  return x\n}\n", "\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n    __assign = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign.apply(this, arguments);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.socketFactory = void 0;\nvar message_parser_1 = require(\"@deepstream/protobuf/dist/src/message-parser\");\nvar message_builder_1 = require(\"@deepstream/protobuf/dist/src/message-builder\");\nvar constants_1 = require(\"../constants\");\nvar BrowserWebsocket = (global.WebSocket || global.MozWebSocket);\nvar socketFactory = function (url, options, heartBeatInterval) {\n    if (options === void 0) { options = { jsonTransportMode: false }; }\n    var socket = BrowserWebsocket\n        ? new BrowserWebsocket(url, [], options)\n        : new (require('ws'))(url, options);\n    if (BrowserWebsocket && options.jsonTransportMode !== true) {\n        socket.binaryType = 'arraybuffer';\n    }\n    var buildMessage = options.jsonTransportMode !== true ? message_builder_1.getMessage : function (message, isAck) { return JSON.stringify(__assign(__assign({}, message), { isAck: isAck })); };\n    var pingMessage = buildMessage({ topic: constants_1.TOPIC.CONNECTION, action: constants_1.CONNECTION_ACTION.PING }, false);\n    var pingInterval = null;\n    var lastRecievedMessageTimestamp = -1;\n    // tslint:disable-next-line:no-empty\n    socket.onparsedmessage = function () { };\n    socket.onmessage = function (raw) {\n        lastRecievedMessageTimestamp = Date.now();\n        var parseResults;\n        if (options.jsonTransportMode !== true) {\n            parseResults = (0, message_parser_1.parse)(BrowserWebsocket ? new Buffer(new Uint8Array(raw.data)) : raw.data);\n        }\n        else {\n            parseResults = [JSON.parse(raw.data)];\n        }\n        socket.onparsedmessages(parseResults);\n    };\n    socket.getTimeSinceLastMessage = function () {\n        if (lastRecievedMessageTimestamp < 0)\n            return 0;\n        return Date.now() - lastRecievedMessageTimestamp;\n    };\n    socket.sendParsedMessage = function (message) {\n        if (message.topic === constants_1.TOPIC.CONNECTION && message.action === constants_1.CONNECTION_ACTION.CLOSING) {\n            socket.onparsedmessages([{ topic: constants_1.TOPIC.CONNECTION, action: constants_1.CONNECTION_ACTION.CLOSED }]);\n            socket.close();\n            return;\n        }\n        if (message.parsedData) {\n            message.data = JSON.stringify(message.parsedData);\n        }\n        // if (message.action !== CONNECTION_ACTIONS.PONG && message.action !== CONNECTION_ACTIONS.PING) {\n        //     console.log('>>>', TOPIC[message.topic], (ACTIONS as any)[message.topic][message.action], message.parsedData, message.data, message.name)\n        // }\n        if (message.data === undefined) {\n            delete message.data;\n        }\n        socket.send(buildMessage(message, false));\n    };\n    socket.onclosed = null;\n    socket.onclose = function () {\n        clearInterval(pingInterval);\n        socket.onclosed();\n    };\n    socket.onopened = null;\n    socket.onopen = function () {\n        pingInterval = setInterval(function () {\n            try {\n                socket.send(pingMessage);\n            }\n            catch (e) {\n                clearTimeout(pingInterval);\n            }\n        }, heartBeatInterval);\n        socket.onopened();\n    };\n    return socket;\n};\nexports.socketFactory = socketFactory;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Listener = void 0;\nvar constants_1 = require(\"../constants\");\nvar Listener = /** @class */ (function () {\n    function Listener(topic, services) {\n        this.topic = topic;\n        this.services = services;\n        this.listeners = new Map();\n        this.stopCallbacks = new Map();\n        if (topic === constants_1.TOPIC.RECORD) {\n            this.actions = constants_1.RECORD_ACTION;\n        }\n        else if (topic === constants_1.TOPIC.EVENT) {\n            this.actions = constants_1.EVENT_ACTION;\n        }\n        this.services.connection.onLost(this.onConnectionLost.bind(this));\n        this.services.connection.onReestablished(this.onConnectionReestablished.bind(this));\n    }\n    Listener.prototype.listen = function (pattern, callback) {\n        if (typeof pattern !== 'string' || pattern.length === 0) {\n            throw new Error('invalid argument pattern');\n        }\n        if (typeof callback !== 'function') {\n            throw new Error('invalid argument callback');\n        }\n        if (this.listeners.has(pattern)) {\n            this.services.logger.warn({\n                topic: this.topic,\n                action: this.actions.LISTEN,\n                name: pattern\n            }, constants_1.EVENT.LISTENER_EXISTS);\n            return;\n        }\n        this.listeners.set(pattern, callback);\n        this.sendListen(pattern);\n    };\n    Listener.prototype.unlisten = function (pattern) {\n        if (typeof pattern !== 'string' || pattern.length === 0) {\n            throw new Error('invalid argument pattern');\n        }\n        if (!this.listeners.has(pattern)) {\n            this.services.logger.warn({\n                topic: this.topic,\n                action: this.actions.UNLISTEN,\n                name: pattern\n            }, constants_1.EVENT.NOT_LISTENING);\n            return;\n        }\n        this.listeners.delete(pattern);\n        this.sendUnlisten(pattern);\n    };\n    /*\n   * Accepting a listener request informs deepstream that the current provider is willing to\n   * provide the record or event matching the subscriptionName . This will establish the current\n   * provider as the only publisher for the actual subscription with the deepstream cluster.\n   * Either accept or reject needs to be called by the listener\n   */\n    Listener.prototype.accept = function (pattern, subscription) {\n        this.services.connection.sendMessage({\n            topic: this.topic,\n            action: this.actions.LISTEN_ACCEPT,\n            name: pattern,\n            subscription: subscription\n        });\n    };\n    /*\n    * Rejecting a listener request informs deepstream that the current provider is not willing\n    * to provide the record or event matching the subscriptionName . This will result in deepstream\n    * requesting another provider to do so instead. If no other provider accepts or exists, the\n    * resource will remain unprovided.\n    * Either accept or reject needs to be called by the listener\n    */\n    Listener.prototype.reject = function (pattern, subscription) {\n        this.services.connection.sendMessage({\n            topic: this.topic,\n            action: this.actions.LISTEN_REJECT,\n            name: pattern,\n            subscription: subscription\n        });\n    };\n    Listener.prototype.stop = function (subscription, callback) {\n        this.stopCallbacks.set(subscription, callback);\n    };\n    Listener.prototype.handle = function (message) {\n        if (message.isAck) {\n            this.services.timeoutRegistry.remove(message);\n            return;\n        }\n        if (message.action === this.actions.SUBSCRIPTION_FOR_PATTERN_FOUND) {\n            var listener = this.listeners.get(message.name);\n            if (listener) {\n                listener(message.subscription, {\n                    accept: this.accept.bind(this, message.name, message.subscription),\n                    reject: this.reject.bind(this, message.name, message.subscription),\n                    onStop: this.stop.bind(this, message.subscription)\n                });\n            }\n            return;\n        }\n        if (message.action === this.actions.SUBSCRIPTION_FOR_PATTERN_REMOVED) {\n            var stopCallback = this.stopCallbacks.get(message.subscription);\n            if (stopCallback) {\n                stopCallback(message.subscription);\n                this.stopCallbacks.delete(message.subscription);\n            }\n            return;\n        }\n        this.services.logger.error(message, constants_1.EVENT.UNSOLICITED_MESSAGE);\n    };\n    Listener.prototype.onConnectionLost = function () {\n        this.stopCallbacks.forEach(function (callback, subscription) {\n            callback(subscription);\n        });\n        this.stopCallbacks.clear();\n    };\n    Listener.prototype.onConnectionReestablished = function () {\n        var _this = this;\n        this.listeners.forEach(function (callback, pattern) {\n            _this.sendListen(pattern);\n        });\n    };\n    /*\n    * Sends a C.ACTIONS.LISTEN to deepstream.\n    */\n    Listener.prototype.sendListen = function (pattern) {\n        var message = {\n            topic: this.topic,\n            action: this.actions.LISTEN,\n            name: pattern\n        };\n        this.services.timeoutRegistry.add({ message: message });\n        this.services.connection.sendMessage(message);\n    };\n    Listener.prototype.sendUnlisten = function (pattern) {\n        var message = {\n            topic: this.topic,\n            action: this.actions.UNLISTEN,\n            name: pattern\n        };\n        this.services.timeoutRegistry.add({ message: message });\n        this.services.connection.sendMessage(message);\n    };\n    return Listener;\n}());\nexports.Listener = Listener;\n", "\"use strict\";\nvar __read = (this && this.__read) || function (o, n) {\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n    if (!m) return o;\n    var i = m.call(o), r, ar = [], e;\n    try {\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n    }\n    catch (error) { e = { error: error }; }\n    finally {\n        try {\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\n        }\n        finally { if (e) throw e.error; }\n    }\n    return ar;\n};\nvar __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n    if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n        if (ar || !(i in from)) {\n            if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n            ar[i] = from[i];\n        }\n    }\n    return to.concat(ar || Array.prototype.slice.call(from));\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.BulkSubscriptionService = void 0;\nvar BulkSubscriptionService = /** @class */ (function () {\n    function BulkSubscriptionService(services, subscriptionInterval, topic, subscribeBulkAction, unsubscribeBulkAction, onSubscriptionSent) {\n        if (onSubscriptionSent === void 0) { onSubscriptionSent = (function () { }); }\n        this.services = services;\n        this.subscriptionInterval = subscriptionInterval;\n        this.topic = topic;\n        this.subscribeBulkAction = subscribeBulkAction;\n        this.unsubscribeBulkAction = unsubscribeBulkAction;\n        this.onSubscriptionSent = onSubscriptionSent;\n        this.subscribeNames = new Set();\n        this.unsubscribeNames = new Set();\n        this.timerRef = -1;\n        this.correlationId = 0;\n        this.services.connection.onLost(this.onLost.bind(this));\n    }\n    BulkSubscriptionService.prototype.subscribe = function (name) {\n        if (this.subscriptionInterval > 0) {\n            if (this.unsubscribeNames.has(name)) {\n                this.unsubscribeNames.delete(name);\n            }\n            else {\n                this.subscribeNames.add(name);\n                this.registerFlush();\n            }\n            return;\n        }\n        var message = {\n            topic: this.topic,\n            action: this.subscribeBulkAction,\n            names: [name],\n            correlationId: (this.correlationId++).toString()\n        };\n        this.services.connection.sendMessage(message);\n        this.onSubscriptionSent(message);\n    };\n    BulkSubscriptionService.prototype.subscribeList = function (users) {\n        users.forEach(this.subscribe.bind(this));\n    };\n    BulkSubscriptionService.prototype.unsubscribe = function (name) {\n        if (this.subscriptionInterval > 0) {\n            if (this.subscribeNames.has(name)) {\n                this.subscribeNames.delete(name);\n            }\n            else {\n                this.unsubscribeNames.add(name);\n                this.registerFlush();\n            }\n            return;\n        }\n        var message = {\n            topic: this.topic,\n            action: this.unsubscribeBulkAction,\n            names: [name],\n            correlationId: (this.correlationId++).toString()\n        };\n        this.services.connection.sendMessage(message);\n        this.onSubscriptionSent(message);\n    };\n    BulkSubscriptionService.prototype.unsubscribeList = function (users) {\n        users.forEach(this.unsubscribe.bind(this));\n    };\n    BulkSubscriptionService.prototype.registerFlush = function () {\n        if (!this.services.timerRegistry.has(this.timerRef)) {\n            this.timerRef = this.services.timerRegistry.add({\n                callback: this.sendMessages,\n                context: this,\n                duration: this.subscriptionInterval\n            });\n        }\n    };\n    BulkSubscriptionService.prototype.sendMessages = function () {\n        if (!this.services.connection.isConnected) {\n            this.onLost();\n            return;\n        }\n        if (this.subscribeNames.size > 0) {\n            var message = {\n                topic: this.topic,\n                action: this.subscribeBulkAction,\n                names: __spreadArray([], __read(this.subscribeNames), false),\n                correlationId: (this.correlationId++).toString()\n            };\n            this.services.connection.sendMessage(message);\n            this.onSubscriptionSent(message);\n            this.subscribeNames.clear();\n        }\n        if (this.unsubscribeNames.size > 0) {\n            var message = {\n                topic: this.topic,\n                action: this.unsubscribeBulkAction,\n                names: __spreadArray([], __read(this.unsubscribeNames), false),\n                correlationId: (this.correlationId++).toString()\n            };\n            this.services.connection.sendMessage(message);\n            this.onSubscriptionSent(message);\n            this.unsubscribeNames.clear();\n        }\n    };\n    BulkSubscriptionService.prototype.onLost = function () {\n        this.correlationId = 0;\n        this.services.timerRegistry.remove(this.timerRef);\n        this.subscribeNames.clear();\n        this.unsubscribeNames.clear();\n    };\n    return BulkSubscriptionService;\n}());\nexports.BulkSubscriptionService = BulkSubscriptionService;\n", "\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n    __assign = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign.apply(this, arguments);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.EventHandler = void 0;\nvar constants_1 = require(\"../constants\");\nvar listener_1 = require(\"../util/listener\");\nvar emitter_1 = require(\"../util/emitter\");\nvar bulk_subscription_service_1 = require(\"../util/bulk-subscription-service\");\nvar EventHandler = /** @class */ (function () {\n    function EventHandler(services, options, listeners) {\n        this.services = services;\n        this.emitter = new emitter_1.Emitter();\n        this.limboQueue = [];\n        this.bulkSubscription = new bulk_subscription_service_1.BulkSubscriptionService(this.services, options.subscriptionInterval, constants_1.TOPIC.EVENT, constants_1.EVENT_ACTION.SUBSCRIBE, constants_1.EVENT_ACTION.UNSUBSCRIBE, this.onBulkSubscriptionSent.bind(this));\n        this.listeners = listeners || new listener_1.Listener(constants_1.TOPIC.EVENT, services);\n        this.services.connection.registerHandler(constants_1.TOPIC.EVENT, this.handle.bind(this));\n        this.services.connection.onExitLimbo(this.onExitLimbo.bind(this));\n        this.services.connection.onReestablished(this.onConnectionReestablished.bind(this));\n    }\n    /**\n     * Returns all the events that are subscribed to locally\n     */\n    EventHandler.prototype.eventNames = function () {\n        return this.emitter.eventNames();\n    };\n    /**\n    * Subscribe to an event. This will receive both locally emitted events\n    * as well as events emitted by other connected clients.\n    */\n    EventHandler.prototype.subscribe = function (name, callback) {\n        if (typeof name !== 'string' || name.length === 0) {\n            throw new Error('invalid argument name');\n        }\n        if (typeof callback !== 'function') {\n            throw new Error('invalid argument callback');\n        }\n        if (!this.emitter.hasListeners(name)) {\n            if (this.services.connection.isConnected) {\n                this.bulkSubscription.subscribe(name);\n            }\n        }\n        this.emitter.on(name, callback);\n    };\n    /**\n     * Removes a callback for a specified event. If all callbacks\n     * for an event have been removed, the server will be notified\n     * that the client is unsubscribed as a listener\n     */\n    EventHandler.prototype.unsubscribe = function (name, callback) {\n        if (!name || typeof name !== 'string' || name.length === 0) {\n            throw new Error('invalid argument name');\n        }\n        if (callback !== undefined && typeof callback !== 'function') {\n            throw new Error('invalid argument callback');\n        }\n        if (!this.emitter.hasListeners(name)) {\n            this.services.logger.warn({\n                topic: constants_1.TOPIC.EVENT,\n                action: constants_1.EVENT_ACTION.NOT_SUBSCRIBED,\n                name: name\n            });\n            return;\n        }\n        this.emitter.off(name, callback);\n        if (!this.emitter.hasListeners(name)) {\n            this.bulkSubscription.unsubscribe(name);\n        }\n    };\n    /**\n     * Emits an event locally and sends a message to the server to\n     * broadcast the event to the other connected clients\n     */\n    EventHandler.prototype.emit = function (name, data) {\n        if (typeof name !== 'string' || name.length === 0) {\n            throw new Error('invalid argument name');\n        }\n        var message = {\n            topic: constants_1.TOPIC.EVENT,\n            action: constants_1.EVENT_ACTION.EMIT,\n            name: name,\n            parsedData: data\n        };\n        if (this.services.connection.isConnected) {\n            this.services.connection.sendMessage(message);\n        }\n        else if (this.services.connection.isInLimbo) {\n            this.limboQueue.push(message);\n        }\n        this.emitter.emit(name, data);\n    };\n    /**\n   * Allows to listen for event subscriptions made by this or other clients. This\n   * is useful to create \"active\" data providers, e.g. providers that only provide\n   * data for a particular event if a user is actually interested in it\n   */\n    EventHandler.prototype.listen = function (pattern, callback) {\n        this.listeners.listen(pattern, callback);\n    };\n    /**\n     * Removes a listener that was previously registered\n     */\n    EventHandler.prototype.unlisten = function (pattern) {\n        this.listeners.unlisten(pattern);\n    };\n    /**\n   * Handles incoming messages from the server\n   */\n    EventHandler.prototype.handle = function (message) {\n        if (message.isAck) {\n            this.services.timeoutRegistry.remove(message);\n            return;\n        }\n        if (message.action === constants_1.EVENT_ACTION.EMIT) {\n            if (message.parsedData !== undefined) {\n                this.emitter.emit(message.name, message.parsedData);\n            }\n            else {\n                this.emitter.emit(message.name, undefined);\n            }\n            return;\n        }\n        if (message.action === constants_1.EVENT_ACTION.MESSAGE_DENIED) {\n            this.services.logger.error({ topic: constants_1.TOPIC.EVENT }, constants_1.EVENT_ACTION.MESSAGE_DENIED);\n            this.services.timeoutRegistry.remove(message);\n            if (message.originalAction === constants_1.EVENT_ACTION.SUBSCRIBE) {\n                this.emitter.off(message.name);\n            }\n            return;\n        }\n        if (message.action === constants_1.EVENT_ACTION.MULTIPLE_SUBSCRIPTIONS || message.action === constants_1.EVENT_ACTION.NOT_SUBSCRIBED) {\n            this.services.timeoutRegistry.remove(__assign(__assign({}, message), { action: constants_1.EVENT_ACTION.SUBSCRIBE }));\n            this.services.logger.warn(message);\n            return;\n        }\n        if (message.action === constants_1.EVENT_ACTION.SUBSCRIPTION_FOR_PATTERN_FOUND ||\n            message.action === constants_1.EVENT_ACTION.SUBSCRIPTION_FOR_PATTERN_REMOVED) {\n            this.listeners.handle(message);\n            return;\n        }\n        if (message.action === constants_1.EVENT_ACTION.INVALID_LISTEN_REGEX) {\n            this.services.logger.error(message);\n            return;\n        }\n        this.services.logger.error(message, constants_1.EVENT.UNSOLICITED_MESSAGE);\n    };\n    /**\n     * Resubscribes to events when connection is lost\n     */\n    EventHandler.prototype.onConnectionReestablished = function () {\n        this.bulkSubscription.subscribeList(this.emitter.eventNames());\n        for (var i = 0; i < this.limboQueue.length; i++) {\n            this.services.connection.sendMessage(this.limboQueue[i]);\n        }\n        this.limboQueue = [];\n    };\n    EventHandler.prototype.onExitLimbo = function () {\n        this.limboQueue = [];\n    };\n    EventHandler.prototype.onBulkSubscriptionSent = function (message) {\n        this.services.timeoutRegistry.add({ message: message });\n    };\n    return EventHandler;\n}());\nexports.EventHandler = EventHandler;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.RPC = void 0;\nvar constants_1 = require(\"../constants\");\n/**\n * This class represents a single remote procedure\n * call made from the client to the server. It's main function\n * is to encapsulate the logic and to convert the\n * incoming response data\n */\nvar RPC = /** @class */ (function () {\n    function RPC(name, correlationId, data, response, options, services) {\n        this.response = response;\n        this.services = services;\n        var message = {\n            topic: constants_1.TOPIC.RPC,\n            action: constants_1.RPC_ACTION.REQUEST,\n            correlationId: correlationId,\n            name: name,\n            parsedData: data\n        };\n        this.services.connection.sendMessage(message);\n    }\n    /**\n     * Called once an ack message is received from the server\n     */\n    RPC.prototype.accept = function () {\n    };\n    /**\n     * Called once a response message is received from the server.\n     */\n    RPC.prototype.respond = function (data) {\n        this.response(null, data);\n    };\n    /**\n     * Called once an error is received from the server.\n     */\n    RPC.prototype.error = function (data) {\n        this.response(data);\n    };\n    return RPC;\n}());\nexports.RPC = RPC;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.RPCResponse = void 0;\nvar constants_1 = require(\"../constants\");\n/**\n * This class represents a single remote procedure\n * call made from the client to the server. It's main function\n * is to encapsulate the logic around timeouts and to convert the\n * incoming response data\n */\nvar RPCResponse = /** @class */ (function () {\n    function RPCResponse(message, options, services) {\n        this.name = message.name;\n        this.correlationId = message.correlationId;\n        this.services = services;\n        this.isAccepted = false;\n        this.isComplete = false;\n        this.autoAccept = true;\n        this.services.timerRegistry.requestIdleCallback(this.performAutoAck.bind(this));\n    }\n    /**\n     * Acknowledges the receipt of the request. This\n     * will happen implicitly unless the request callback\n     * explicitly sets autoAck to false\n     */\n    RPCResponse.prototype.accept = function () {\n        if (this.isAccepted === false) {\n            this.services.connection.sendMessage({\n                topic: constants_1.TOPIC.RPC,\n                action: constants_1.RPC_ACTION.ACCEPT,\n                name: this.name,\n                correlationId: this.correlationId\n            });\n            this.isAccepted = true;\n        }\n    };\n    /**\n     * Reject the request. This might be necessary if the client\n     * is already processing a large number of requests. If deepstream\n     * receives a rejection message it will try to route the request to\n     * another provider - or return a NO_RPC_PROVIDER error if there are no\n     * providers left\n     */\n    RPCResponse.prototype.reject = function () {\n        if (this.isComplete === true) {\n            throw new Error(\"Rpc \".concat(this.name, \" already completed\"));\n        }\n        this.autoAccept = false;\n        this.isComplete = true;\n        this.isAccepted = true;\n        this.services.connection.sendMessage({\n            topic: constants_1.TOPIC.RPC,\n            action: constants_1.RPC_ACTION.REJECT,\n            name: this.name,\n            correlationId: this.correlationId\n        });\n    };\n    /**\n     * Notifies the server that an error has occured while trying to process the request.\n     * This will complete the rpc.\n     */\n    RPCResponse.prototype.error = function (error) {\n        if (this.isComplete === true) {\n            throw new Error(\"Rpc \".concat(this.name, \" already completed\"));\n        }\n        this.autoAccept = false;\n        this.isComplete = true;\n        this.isAccepted = true;\n        this.services.connection.sendMessage({\n            topic: constants_1.TOPIC.RPC,\n            action: constants_1.RPC_ACTION.REQUEST_ERROR,\n            name: this.name,\n            correlationId: this.correlationId,\n            parsedData: error\n        });\n    };\n    /**\n     * Completes the request by sending the response data\n     * to the server. If data is an array or object it will\n     * automatically be serialised.\n     * If autoAck is disabled and the response is sent before\n     * the ack message the request will still be completed and the\n     * ack message ignored\n     */\n    RPCResponse.prototype.send = function (data) {\n        if (this.isComplete === true) {\n            throw new Error(\"Rpc \".concat(this.name, \" already completed\"));\n        }\n        this.accept();\n        this.services.connection.sendMessage({\n            topic: constants_1.TOPIC.RPC,\n            action: constants_1.RPC_ACTION.RESPONSE,\n            name: this.name,\n            correlationId: this.correlationId,\n            parsedData: data\n        });\n        this.isComplete = true;\n    };\n    /**\n     * Callback for the autoAck timeout. Executes ack\n     * if autoAck is not disabled\n     */\n    RPCResponse.prototype.performAutoAck = function () {\n        if (this.autoAccept === true) {\n            this.accept();\n        }\n    };\n    return RPCResponse;\n}());\nexports.RPCResponse = RPCResponse;\n", "\"use strict\";\nvar __read = (this && this.__read) || function (o, n) {\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n    if (!m) return o;\n    var i = m.call(o), r, ar = [], e;\n    try {\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n    }\n    catch (error) { e = { error: error }; }\n    finally {\n        try {\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\n        }\n        finally { if (e) throw e.error; }\n    }\n    return ar;\n};\nvar __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n    if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n        if (ar || !(i in from)) {\n            if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n            ar[i] = from[i];\n        }\n    }\n    return to.concat(ar || Array.prototype.slice.call(from));\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.RPCHandler = void 0;\nvar constants_1 = require(\"../constants\");\nvar rpc_1 = require(\"../rpc/rpc\");\nvar rpc_response_1 = require(\"../rpc/rpc-response\");\nvar utils_1 = require(\"../util/utils\");\nvar bulk_subscription_service_1 = require(\"../util/bulk-subscription-service\");\nvar RPCHandler = /** @class */ (function () {\n    function RPCHandler(services, options) {\n        this.services = services;\n        this.options = options;\n        this.rpcs = new Map();\n        this.providers = new Map();\n        this.limboQueue = [];\n        this.bulkSubscription = new bulk_subscription_service_1.BulkSubscriptionService(this.services, options.subscriptionInterval, constants_1.TOPIC.RPC, constants_1.RPC_ACTION.PROVIDE, constants_1.RPC_ACTION.UNPROVIDE, this.onBulkSubscriptionSent.bind(this));\n        this.services.connection.registerHandler(constants_1.TOPIC.RPC, this.handle.bind(this));\n        this.services.connection.onReestablished(this.onConnectionReestablished.bind(this));\n        this.services.connection.onExitLimbo(this.onExitLimbo.bind(this));\n        this.services.connection.onLost(this.onConnectionLost.bind(this));\n    }\n    /**\n     * Returns the names of all the RPCs provided\n     */\n    RPCHandler.prototype.providerNames = function () {\n        return __spreadArray([], __read(this.providers.keys()), false);\n    };\n    /**\n     * Registers a callback function as a RPC provider. If another connected client calls\n     * client.rpc.make() the request will be routed to this method\n     *\n     * The callback will be invoked with two arguments:\n     *     {Mixed} data The data passed to the client.rpc.make function\n     *     {RpcResponse} rpcResponse An object with methods to response,\n     *                               acknowledge or reject the request\n     *     {rpcRequestor} An object with requestorName and/or requestorData,\n     *                               if enabled on the connected server\n     *\n     * Only one callback can be registered for a RPC at a time\n     *\n     * Please note: Deepstream tries to deliver data in its original format.\n     * Data passed to client.rpc.make as a String will arrive as a String,\n     * numbers or implicitly JSON serialized objects will arrive in their\n     * respective format as well\n     */\n    RPCHandler.prototype.provide = function (name, callback) {\n        if (typeof name !== 'string' || name.length === 0) {\n            throw new Error('invalid argument name');\n        }\n        if (this.providers.has(name)) {\n            throw new Error(\"RPC \".concat(name, \" already registered\"));\n        }\n        if (typeof callback !== 'function') {\n            throw new Error('invalid argument callback');\n        }\n        this.providers.set(name, callback);\n        if (this.services.connection.isConnected) {\n            this.bulkSubscription.subscribe(name);\n        }\n    };\n    /**\n     * Unregisters this client as a provider for a remote procedure call\n     */\n    RPCHandler.prototype.unprovide = function (name) {\n        if (typeof name !== 'string' || name.length === 0) {\n            throw new Error('invalid argument name');\n        }\n        if (!this.providers.has(name)) {\n            this.services.logger.warn({\n                topic: constants_1.TOPIC.RPC,\n                action: constants_1.RPC_ACTION.NOT_PROVIDED,\n                name: name\n            });\n            return;\n        }\n        this.providers.delete(name);\n        if (this.services.connection.isConnected) {\n            this.bulkSubscription.unsubscribe(name);\n        }\n    };\n    RPCHandler.prototype.make = function (name, data, callback) {\n        var _this = this;\n        if (typeof name !== 'string' || name.length === 0) {\n            throw new Error('invalid argument name');\n        }\n        if (callback && typeof callback !== 'function') {\n            throw new Error('invalid argument callback');\n        }\n        var correlationId = (0, utils_1.getUid)();\n        if (this.services.connection.isConnected) {\n            if (callback) {\n                this.rpcs.set(correlationId, new rpc_1.RPC(name, correlationId, data, callback, this.options, this.services));\n                return;\n            }\n            return new Promise(function (resolve, reject) {\n                _this.rpcs.set(correlationId, new rpc_1.RPC(name, correlationId, data, function (error, result) { return error ? reject(error) : resolve(result); }, _this.options, _this.services));\n            });\n        }\n        else if (this.services.connection.isInLimbo) {\n            if (callback) {\n                this.limboQueue.push({ correlationId: correlationId, name: name, data: data, callback: callback });\n            }\n            else {\n                return new Promise(function (resolve, reject) {\n                    _this.limboQueue.push({ correlationId: correlationId, name: name, data: data, callback: function (error, result) { return error ? reject(error) : resolve(result); } });\n                });\n            }\n        }\n        else {\n            if (callback) {\n                callback(constants_1.EVENT.CLIENT_OFFLINE);\n            }\n            else {\n                return Promise.reject(constants_1.EVENT.CLIENT_OFFLINE);\n            }\n        }\n    };\n    /**\n     * Handles incoming rpc REQUEST messages. Instantiates a new response object\n     * and invokes the provider callback or rejects the request if no rpc provider\n     * is present (which shouldn't really happen, but might be the result of a race condition\n     * if this client sends a unprovide message whilst an incoming request is already in flight)\n     */\n    RPCHandler.prototype.respondToRpc = function (message) {\n        var provider = this.providers.get(message.name);\n        if (provider) {\n            if (message.requestorName || message.requestorData) {\n                provider(message.parsedData, new rpc_response_1.RPCResponse(message, this.options, this.services), { requestorName: message.requestorName, requestorData: message.requestorData });\n            }\n            else {\n                provider(message.parsedData, new rpc_response_1.RPCResponse(message, this.options, this.services));\n            }\n        }\n        else {\n            this.services.connection.sendMessage({\n                topic: constants_1.TOPIC.RPC,\n                action: constants_1.RPC_ACTION.REJECT,\n                name: message.name,\n                correlationId: message.correlationId\n            });\n        }\n    };\n    /**\n     * Distributes incoming messages from the server\n     * based on their action\n     */\n    RPCHandler.prototype.handle = function (message) {\n        // RPC Requests\n        if (message.action === constants_1.RPC_ACTION.REQUEST) {\n            this.respondToRpc(message);\n            return;\n        }\n        // RPC subscription Acks\n        if (message.isAck) {\n            this.services.timeoutRegistry.remove(message);\n            return;\n        }\n        // handle auth/denied subscription errors\n        if (message.action === constants_1.RPC_ACTION.MESSAGE_PERMISSION_ERROR || message.action === constants_1.RPC_ACTION.MESSAGE_DENIED) {\n            if (message.originalAction === constants_1.RPC_ACTION.PROVIDE || message.originalAction === constants_1.RPC_ACTION.UNPROVIDE) {\n                this.services.timeoutRegistry.remove(message);\n                this.providers.delete(message.name);\n                this.services.logger.error(message);\n                return;\n            }\n            if (message.originalAction === constants_1.RPC_ACTION.REQUEST) {\n                var invalidRPC = this.getRPC(message);\n                if (invalidRPC) {\n                    invalidRPC.error(constants_1.RPC_ACTION[message.action]);\n                    this.rpcs.delete(message.correlationId);\n                    return;\n                }\n            }\n        }\n        // RPC Responses\n        var rpc = this.getRPC(message);\n        if (rpc) {\n            if (message.action === constants_1.RPC_ACTION.ACCEPT) {\n                rpc.accept();\n                return;\n            }\n            if (message.action === constants_1.RPC_ACTION.RESPONSE) {\n                rpc.respond(message.parsedData);\n            }\n            else if (message.action === constants_1.RPC_ACTION.REQUEST_ERROR) {\n                rpc.error(message.parsedData);\n            }\n            else if (message.action === constants_1.RPC_ACTION.RESPONSE_TIMEOUT ||\n                message.action === constants_1.RPC_ACTION.ACCEPT_TIMEOUT ||\n                message.action === constants_1.RPC_ACTION.NO_RPC_PROVIDER) {\n                rpc.error(constants_1.RPC_ACTION[message.action]);\n            }\n            this.rpcs.delete(message.correlationId);\n        }\n    };\n    RPCHandler.prototype.getRPC = function (message) {\n        var rpc = this.rpcs.get(message.correlationId);\n        if (rpc === undefined) {\n            this.services.logger.error(message, constants_1.EVENT.UNKNOWN_CORRELATION_ID);\n        }\n        return rpc;\n    };\n    RPCHandler.prototype.onConnectionReestablished = function () {\n        this.bulkSubscription.subscribeList(__spreadArray([], __read(this.providers.keys()), false));\n        for (var i = 0; i < this.limboQueue.length; i++) {\n            var _a = this.limboQueue[i], correlationId = _a.correlationId, name_1 = _a.name, data = _a.data, callback = _a.callback;\n            this.rpcs.set(correlationId, new rpc_1.RPC(name_1, correlationId, data, callback, this.options, this.services));\n        }\n        this.limboQueue = [];\n    };\n    RPCHandler.prototype.onExitLimbo = function () {\n        for (var i = 0; i < this.limboQueue.length; i++) {\n            this.limboQueue[i].callback(constants_1.EVENT.CLIENT_OFFLINE);\n        }\n        this.limboQueue = [];\n    };\n    RPCHandler.prototype.onConnectionLost = function () {\n        this.rpcs.forEach(function (rpc) {\n            rpc.error(constants_1.EVENT.CLIENT_OFFLINE);\n        });\n        this.rpcs.clear();\n    };\n    RPCHandler.prototype.onBulkSubscriptionSent = function (message) {\n        this.services.timeoutRegistry.add({ message: message });\n    };\n    return RPCHandler;\n}());\nexports.RPCHandler = RPCHandler;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.setValue = exports.get = void 0;\nvar utils = require(\"../util/utils\");\nvar SPLIT_REG_EXP = /[[\\]]/g;\n/**\n* Returns the value of the path or\n* undefined if the path can't be resolved\n*/\nfunction get(data, path, deepCopy) {\n    if (deepCopy === void 0) { deepCopy = false; }\n    var tokens = tokenize(path);\n    var value = data;\n    for (var i = 0; i < tokens.length; i++) {\n        if (value === undefined) {\n            return undefined;\n        }\n        if (typeof value !== 'object') {\n            throw new Error('invalid data or path');\n        }\n        value = value[tokens[i]];\n    }\n    return deepCopy !== false ? utils.deepCopy(value) : value;\n}\nexports.get = get;\n/**\n * This class allows to set or get specific\n * values within a json data structure using\n * string-based paths\n */\nfunction setValue(root, path, value) {\n    if (path === null) {\n        return value;\n    }\n    var tokens = tokenize(path);\n    var rootCopy = utils.deepCopy(root);\n    var valueCopy = utils.deepCopy(value);\n    var node = rootCopy;\n    var i;\n    for (i = 0; i < tokens.length - 1; i++) {\n        var token = tokens[i];\n        if (node[token] !== undefined && node[token] !== null && typeof node[token] === 'object') {\n            node = node[token];\n        }\n        else if (typeof tokens[i + 1] === 'number') {\n            var array = new Array(tokens[i + 1]);\n            array.fill(null);\n            node = node[token] = array;\n        }\n        else {\n            node = node[token] = {};\n        }\n    }\n    if (value === undefined) {\n        delete node[tokens[i]];\n    }\n    else {\n        node[tokens[i]] = valueCopy;\n    }\n    return rootCopy;\n}\nexports.setValue = setValue;\n/**\n * Parses the path. Splits it into\n * keys for objects and indices for arrays.\n */\nfunction tokenize(path) {\n    if (path === null) {\n        return [];\n    }\n    var tokens = [];\n    var parts = path.split('.');\n    for (var i = 0; i < parts.length; i++) {\n        var part = parts[i].trim();\n        if (part.length === 0) {\n            continue;\n        }\n        var arrayIndexes = part.split(SPLIT_REG_EXP);\n        if (arrayIndexes.length === 0) {\n            // TODO\n            continue;\n        }\n        tokens.push(arrayIndexes[0]);\n        for (var j = 1; j < arrayIndexes.length; j++) {\n            if (arrayIndexes[j].length === 0) {\n                continue;\n            }\n            tokens.push(Number(arrayIndexes[j]));\n        }\n    }\n    return tokens;\n}\n", "\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __assign = (this && this.__assign) || function () {\n    __assign = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign.apply(this, arguments);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.RecordCore = void 0;\nvar constants_1 = require(\"../constants\");\nvar json_path_1 = require(\"./json-path\");\nvar emitter_1 = require(\"../util/emitter\");\nvar utils = require(\"../util/utils\");\nvar state_machine_1 = require(\"../util/state-machine\");\nvar RecordCore = /** @class */ (function (_super) {\n    __extends(RecordCore, _super);\n    function RecordCore(name, services, options, recordServices, whenComplete) {\n        var _this = _super.call(this) || this;\n        _this.name = name;\n        _this.services = services;\n        _this.options = options;\n        _this.recordServices = recordServices;\n        _this.whenComplete = whenComplete;\n        _this.isReady = false;\n        _this.hasProvider = false;\n        _this.version = null;\n        _this.references = new Set();\n        _this.emitter = new emitter_1.Emitter();\n        _this.data = Object.create(null);\n        _this.responseTimeout = null;\n        _this.discardTimeout = null;\n        _this.deletedTimeout = null;\n        _this.deleteResponse = null;\n        _this.pendingWrites = [];\n        _this.readyTimer = -1;\n        _this.recordReadOnlyMode = _this.options.recordReadOnlyMode && _this.options.recordPrefixWriteWhitelist.every(function (prefix) { return !_this.name.startsWith(prefix); });\n        _this.readyCallbacks = [];\n        if (typeof name !== 'string' || name.length === 0) {\n            throw new Error('invalid argument name');\n        }\n        _this.onConnectionLost = _this.onConnectionLost.bind(_this);\n        _this.onConnectionReestablished = _this.onConnectionReestablished.bind(_this);\n        _this.stateMachine = new state_machine_1.StateMachine(_this.services.logger, {\n            init: \"LOADING_OFFLINE\" /* RECORD_STATE.LOADING_OFFLINE */,\n            context: _this,\n            onStateChanged: _this.onStateChanged,\n            transitions: recordStateTransitions\n        });\n        _this.recordServices.dirtyService.whenLoaded(_this, _this.onDirtyServiceLoaded);\n        return _this;\n    }\n    Object.defineProperty(RecordCore.prototype, \"recordState\", {\n        get: function () {\n            return this.stateMachine.state;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    RecordCore.prototype.addReference = function (ref) {\n        if (this.references.size === 0 && this.isReady) {\n            this.services.timeoutRegistry.clear(this.discardTimeout);\n            this.services.timerRegistry.remove(this.readyTimer);\n            this.readyTimer = -1;\n            this.stateMachine.transition(constants_1.RECORD_ACTION.SUBSCRIBE);\n        }\n        this.references.add(ref);\n    };\n    /**\n    * Removes all change listeners and notifies the server that the client is\n    * no longer interested in updates for this record\n    */\n    RecordCore.prototype.removeReference = function (ref) {\n        var _this = this;\n        if (this.checkDestroyed('discard')) {\n            return;\n        }\n        this.whenReadyInternal(ref, function () {\n            _this.references.delete(ref);\n            if (_this.references.size === 0 && _this.readyTimer === -1) {\n                _this.readyTimer = _this.services.timerRegistry.add({\n                    duration: _this.options.recordDiscardTimeout,\n                    callback: _this.stateMachine.transition,\n                    context: _this.stateMachine,\n                    data: \"UNSUBSCRIBE_FOR_REAL\" /* RECORD_OFFLINE_ACTIONS.UNSUBSCRIBE_FOR_REAL */\n                });\n                _this.stateMachine.transition(constants_1.RECORD_ACTION.UNSUBSCRIBE);\n            }\n        });\n    };\n    RecordCore.prototype.onDirtyServiceLoaded = function () {\n        var _this = this;\n        this.services.storage.get(this.name, function (recordName, version, data) {\n            _this.services.connection.onReestablished(_this.onConnectionReestablished);\n            _this.services.connection.onLost(_this.onConnectionLost);\n            if (!_this.services.connection.isConnected) {\n                if (version === -1) {\n                    if (_this.recordReadOnlyMode) {\n                        return;\n                    }\n                    _this.version = _this.options.initialRecordVersion;\n                    _this.data = Object.create(null);\n                    // We do this sync in order to avoid the possibility of a race condition\n                    // where connection is established while we are saving. We could introduce\n                    // another transition but its probably overkill since we only set this\n                    // in order to allow the possibility of this record being retrieved in the\n                    // future to know its been created\n                    _this.recordServices.dirtyService.setDirty(_this.name, true);\n                    _this.services.storage.set(_this.name, _this.version, _this.data, function (error) { });\n                }\n                else {\n                    _this.version = version;\n                    _this.data = data;\n                }\n                _this.stateMachine.transition(\"LOADED\" /* RECORD_OFFLINE_ACTIONS.LOADED */);\n                return;\n            }\n            if (version === -1 && !_this.recordServices.dirtyService.isDirty(_this.name)) {\n                /**\n                 * Record has never been created before\n                 */\n                _this.stateMachine.transition(constants_1.RECORD_ACTION.SUBSCRIBECREATEANDREAD);\n            }\n            else {\n                _this.version = version;\n                _this.data = data;\n                _this.stateMachine.transition(\"RESUBSCRIBE\" /* RECORD_OFFLINE_ACTIONS.RESUBSCRIBE */);\n            }\n        });\n    };\n    RecordCore.prototype.onStateChanged = function (newState, oldState) {\n        this.emitter.emit(constants_1.EVENT.RECORD_STATE_CHANGED, newState);\n    };\n    RecordCore.prototype.whenReady = function (context, callback) {\n        var _this = this;\n        if (callback) {\n            this.whenReadyInternal(context, function (realContext) {\n                callback(realContext);\n            });\n            return;\n        }\n        return new Promise(function (resolve) { return _this.whenReadyInternal(context, function () { return resolve(context); }); });\n    };\n    /**\n   */\n    RecordCore.prototype.whenReadyInternal = function (context, callback) {\n        if (this.isReady === true) {\n            callback(context);\n            return;\n        }\n        this.readyCallbacks.push({ callback: callback, context: context });\n    };\n    /**\n     * Sets the value of either the entire dataset\n     * or of a specific path within the record\n     * and submits the changes to the server\n     *\n     * If the new data is equal to the current data, nothing will happen\n     *\n     * @param {[String|Object]} pathOrData Either a JSON path when called with\n     *                                     two arguments or the data itself\n     * @param {Object} data     The data that should be stored in the record\n     */\n    RecordCore.prototype.set = function (_a) {\n        var _this = this;\n        var path = _a.path, data = _a.data, callback = _a.callback;\n        if (!path && (data === null || typeof data !== 'object')) {\n            throw new Error('invalid arguments, scalar values cannot be set without path');\n        }\n        if (this.checkDestroyed('set')) {\n            return;\n        }\n        if (this.recordReadOnlyMode) {\n            this.services.logger.error({ topic: constants_1.TOPIC.RECORD }, constants_1.EVENT.RECORD_READ_ONLY_MODE, 'Attempting to set data when in readonly mode, ignoring');\n            return;\n        }\n        if (this.isReady === false) {\n            this.pendingWrites.push({ path: path, data: data, callback: callback });\n            return;\n        }\n        var oldValue = this.data;\n        var newValue = (0, json_path_1.setValue)(oldValue, path || null, data);\n        if (utils.deepEquals(oldValue, newValue)) {\n            if (callback) {\n                this.services.timerRegistry.requestIdleCallback(function () { return callback(null, _this.name); });\n            }\n            return;\n        }\n        this.applyChange(newValue);\n        if (this.services.connection.isConnected) {\n            this.sendUpdate(path, data, callback);\n        }\n        else {\n            if (callback) {\n                callback(constants_1.EVENT.CLIENT_OFFLINE, this.name);\n            }\n            this.saveUpdate();\n        }\n    };\n    /**\n     * Wrapper function around the record.set that returns a promise\n     * if no callback is supplied.\n     * @returns {Promise} if a callback is omitted a Promise is returned with the result of the write\n     */\n    RecordCore.prototype.setWithAck = function (args) {\n        var _this = this;\n        if (args.callback) {\n            this.set(args);\n            return;\n        }\n        return new Promise(function (resolve, reject) {\n            args.callback = function (error) { return error === null ? resolve() : reject(error); };\n            _this.set(args);\n        });\n    };\n    /**\n   * Returns a copy of either the entire dataset of the record\n   * or - if called with a path - the value of that path within\n   * the record's dataset.\n   *\n   * Returning a copy rather than the actual value helps to prevent\n   * the record getting out of sync due to unintentional changes to\n   * its data\n   */\n    RecordCore.prototype.get = function (path) {\n        return (0, json_path_1.get)(this.data, path || null, this.options.recordDeepCopy);\n    };\n    /**\n   * Subscribes to changes to the records dataset.\n   *\n   * Callback is the only mandatory argument.\n   *\n   * When called with a path, it will only subscribe to updates\n   * to that path, rather than the entire record\n   *\n   * If called with true for triggerNow, the callback will\n   * be called immediatly with the current value\n   */\n    RecordCore.prototype.subscribe = function (args, context) {\n        var _this = this;\n        if (args.path !== undefined && (typeof args.path !== 'string' || args.path.length === 0)) {\n            throw new Error('invalid argument path');\n        }\n        if (typeof args.callback !== 'function') {\n            throw new Error('invalid argument callback');\n        }\n        if (this.checkDestroyed('subscribe')) {\n            return;\n        }\n        if (args.triggerNow) {\n            this.whenReadyInternal(null, function () {\n                _this.emitter.on(args.path || '', args.callback, context);\n                args.callback(_this.get(args.path));\n            });\n        }\n        else {\n            this.emitter.on(args.path || '', args.callback, context);\n        }\n    };\n    /**\n     * Removes a subscription that was previously made using record.subscribe()\n     *\n     * Can be called with a path to remove the callback for this specific\n     * path or only with a callback which removes it from the generic subscriptions\n     *\n     * Please Note: unsubscribe is a purely client side operation. If the app is no longer\n     * interested in receiving updates for this record from the server it needs to call\n     * discard instead\n     *\n     * @param   {String}           path  A JSON path\n     * @param   {Function}         callback     The callback method. Please note, if a bound\n     *                                          method was passed to subscribe, the same method\n     *                                          must be passed to unsubscribe as well.\n     */\n    RecordCore.prototype.unsubscribe = function (args, context) {\n        if (args.path !== undefined && (typeof args.path !== 'string' || args.path.length === 0)) {\n            throw new Error('invalid argument path');\n        }\n        if (args.callback !== undefined && typeof args.callback !== 'function') {\n            throw new Error('invalid argument callback');\n        }\n        if (this.checkDestroyed('unsubscribe')) {\n            return;\n        }\n        this.emitter.off(args.path || '', args.callback, context);\n    };\n    /**\n     * Deletes the record on the server.\n     */\n    RecordCore.prototype.delete = function (callback) {\n        var _this = this;\n        if (!this.services.connection.isConnected) {\n            // this.services.logger.warn({ topic: TOPIC.RECORD }, RECORD_ACTION.DELETE, 'Deleting while offline is not supported')\n            if (callback) {\n                this.services.timerRegistry.requestIdleCallback(function () {\n                    callback('Deleting while offline is not supported');\n                });\n                return;\n            }\n            return Promise.reject('Deleting while offline is not supported');\n        }\n        if (this.checkDestroyed('delete')) {\n            return;\n        }\n        this.stateMachine.transition(constants_1.RECORD_ACTION.DELETE);\n        if (callback && typeof callback === 'function') {\n            this.deleteResponse = { callback: callback };\n            this.sendDelete();\n        }\n        else {\n            return new Promise(function (resolve, reject) {\n                _this.deleteResponse = { resolve: resolve, reject: reject };\n                _this.sendDelete();\n            });\n        }\n    };\n    /**\n     * Set a merge strategy to resolve any merge conflicts that may occur due\n     * to offline work or write conflicts. The function will be called with the\n     * local record, the remote version/data and a callback to call once the merge has\n     * completed or if an error occurs ( which leaves it in an inconsistent state until\n     * the next update merge attempt ).\n     */\n    RecordCore.prototype.setMergeStrategy = function (mergeStrategy) {\n        this.recordServices.mergeStrategy.setMergeStrategyByName(this.name, mergeStrategy);\n    };\n    RecordCore.prototype.saveRecordToOffline = function (callback) {\n        if (callback === void 0) { callback = function () { }; }\n        this.services.storage.set(this.name, this.version, this.data, callback);\n    };\n    /**\n     * Transition States\n     */\n    RecordCore.prototype.onSubscribing = function () {\n        this.recordServices.readRegistry.register(this.name, this, this.handleReadResponse);\n        this.responseTimeout = this.services.timeoutRegistry.add({\n            message: {\n                topic: constants_1.TOPIC.RECORD,\n                action: constants_1.RECORD_ACTION.READ_RESPONSE,\n                name: this.name\n            }\n        });\n        if (this.recordReadOnlyMode) {\n            this.recordServices.bulkSubscriptionService[constants_1.RECORD_ACTION.SUBSCRIBEANDREAD].subscribe(this.name);\n        }\n        else {\n            this.recordServices.bulkSubscriptionService[constants_1.RECORD_ACTION.SUBSCRIBECREATEANDREAD].subscribe(this.name);\n        }\n    };\n    RecordCore.prototype.onResubscribing = function () {\n        this.services.timerRegistry.remove(this.readyTimer);\n        this.recordServices.headRegistry.register(this.name, this, this.handleHeadResponse);\n        this.responseTimeout = this.services.timeoutRegistry.add({\n            message: {\n                topic: constants_1.TOPIC.RECORD,\n                action: constants_1.RECORD_ACTION.HEAD,\n                name: this.name\n            }\n        });\n        this.recordServices.bulkSubscriptionService[constants_1.RECORD_ACTION.SUBSCRIBEANDHEAD].subscribe(this.name);\n    };\n    RecordCore.prototype.onReady = function () {\n        this.services.timeoutRegistry.clear(this.responseTimeout);\n        this.applyPendingWrites();\n        this.isReady = true;\n        // We temporarily reset the data in order to allow the change callback\n        // to trigger all the subscriptions on the first response.\n        this.applyChange(this.data, true, false);\n        this.readyCallbacks.forEach(function (_a) {\n            var context = _a.context, callback = _a.callback;\n            callback.call(context, context);\n        });\n        this.readyCallbacks = [];\n    };\n    RecordCore.prototype.applyPendingWrites = function () {\n        var _this = this;\n        var writeCallbacks = [];\n        var oldData = this.data;\n        var newData = oldData;\n        for (var i = 0; i < this.pendingWrites.length; i++) {\n            var _a = this.pendingWrites[i], callback = _a.callback, path = _a.path, data = _a.data;\n            if (callback) {\n                writeCallbacks.push(callback);\n            }\n            newData = (0, json_path_1.setValue)(newData, path || null, data);\n        }\n        this.pendingWrites = [];\n        this.applyChange(newData);\n        var runFns;\n        if (writeCallbacks.length !== 0) {\n            runFns = function (err) {\n                for (var i = 0; i < writeCallbacks.length; i++) {\n                    writeCallbacks[i](err, _this.name);\n                }\n            };\n        }\n        if (utils.deepEquals(oldData, newData)) {\n            if (runFns) {\n                runFns(null);\n            }\n            return;\n        }\n        if (this.services.connection.isConnected) {\n            this.sendUpdate(null, newData, runFns);\n        }\n        else {\n            if (runFns) {\n                runFns(constants_1.EVENT.CLIENT_OFFLINE);\n            }\n            this.saveUpdate();\n        }\n    };\n    RecordCore.prototype.onUnsubscribed = function () {\n        var _this = this;\n        if (this.services.connection.isConnected) {\n            // TODO: Remove the discard concept from an individual record into bulk\n            // this.recordServices.bulkSubscriptionService[RA.SUBSCRIBEANDHEAD].unsubscribe(this.name)\n            var message = {\n                topic: constants_1.TOPIC.RECORD,\n                action: constants_1.RECORD_ACTION.UNSUBSCRIBE,\n                names: [this.name],\n                correlationId: this.name\n            };\n            this.discardTimeout = this.services.timeoutRegistry.add({ message: message });\n            this.services.connection.sendMessage(message);\n        }\n        this.emit(constants_1.EVENT.RECORD_DISCARDED);\n        this.saveRecordToOffline(function () { return _this.destroy(); });\n    };\n    RecordCore.prototype.onDeleted = function () {\n        this.services.storage.delete(this.name, function () { });\n        this.recordServices.dirtyService.setDirty(this.name, false);\n        this.emit(constants_1.EVENT.RECORD_DELETED);\n        this.destroy();\n    };\n    RecordCore.prototype.handle = function (message) {\n        if (message.action === constants_1.RECORD_ACTION.PATCH || message.action === constants_1.RECORD_ACTION.UPDATE || message.action === constants_1.RECORD_ACTION.ERASE) {\n            if (this.stateMachine.state === \"MERGING\" /* RECORD_STATE.MERGING */) {\n                // The scenario this covers is when a read is requested because the head doesn't match\n                // but an update comes in because we subscribed. In that scenario we just ignore the update\n                // and wait for the read response. Hopefully the messages don't cross on the wire in which case\n                // it might result in another merge conflict.\n                return;\n            }\n            this.applyUpdate(message);\n            return;\n        }\n        if (message.action === constants_1.RECORD_ACTION.DELETE_SUCCESS) {\n            this.services.timeoutRegistry.clear(this.deletedTimeout);\n            this.stateMachine.transition(constants_1.RECORD_ACTION.DELETE_SUCCESS);\n            if (this.deleteResponse.callback) {\n                this.deleteResponse.callback(null);\n            }\n            else if (this.deleteResponse.resolve) {\n                this.deleteResponse.resolve();\n            }\n            return;\n        }\n        if (message.action === constants_1.RECORD_ACTION.DELETED) {\n            this.stateMachine.transition(constants_1.RECORD_ACTION.DELETED);\n            return;\n        }\n        if (message.action === constants_1.RECORD_ACTION.VERSION_EXISTS) {\n            this.recoverRecordFromMessage(message);\n            return;\n        }\n        if (message.action === constants_1.RECORD_ACTION.MESSAGE_DENIED ||\n            message.action === constants_1.RECORD_ACTION.MESSAGE_PERMISSION_ERROR ||\n            message.action === constants_1.RECORD_ACTION.RECORD_UPDATE_ERROR) {\n            if (message.originalAction === constants_1.RECORD_ACTION.SUBSCRIBECREATEANDREAD ||\n                message.originalAction === constants_1.RECORD_ACTION.SUBSCRIBEANDHEAD ||\n                message.originalAction === constants_1.RECORD_ACTION.SUBSCRIBEANDREAD) {\n                var subscribeMsg = __assign(__assign({}, message), { originalAction: constants_1.RECORD_ACTION.SUBSCRIBE });\n                var actionMsg = __assign(__assign({}, message), { originalAction: message.originalAction === constants_1.RECORD_ACTION.SUBSCRIBECREATEANDREAD ? constants_1.RECORD_ACTION.READ_RESPONSE : constants_1.RECORD_ACTION.HEAD_RESPONSE });\n                this.services.timeoutRegistry.remove(subscribeMsg); // TODO: This doesn't contain correlationIds\n                this.services.timeoutRegistry.remove(actionMsg);\n                this.services.logger.error(message);\n            }\n            // handle message denied on record set with ack\n            if (message.isWriteAck) {\n                this.recordServices.writeAckService.recieve(message);\n                return;\n            }\n            this.emit(constants_1.EVENT.RECORD_ERROR, constants_1.RECORD_ACTION[message.action], constants_1.RECORD_ACTION[message.originalAction]);\n            if (message.originalAction === constants_1.RECORD_ACTION.DELETE) {\n                if (this.deleteResponse.callback) {\n                    this.deleteResponse.callback(constants_1.RECORD_ACTION[constants_1.RECORD_ACTION.MESSAGE_DENIED]);\n                }\n                else if (this.deleteResponse.reject) {\n                    this.deleteResponse.reject(constants_1.RECORD_ACTION[constants_1.RECORD_ACTION.MESSAGE_DENIED]);\n                }\n            }\n            return;\n        }\n        if (message.action === constants_1.RECORD_ACTION.SUBSCRIPTION_HAS_PROVIDER ||\n            message.action === constants_1.RECORD_ACTION.SUBSCRIPTION_HAS_NO_PROVIDER) {\n            this.hasProvider = message.action === constants_1.RECORD_ACTION.SUBSCRIPTION_HAS_PROVIDER;\n            this.emit(constants_1.EVENT.RECORD_HAS_PROVIDER_CHANGED, this.hasProvider);\n            return;\n        }\n        if (message.action === constants_1.RECORD_ACTION.CACHE_RETRIEVAL_TIMEOUT || message.action === constants_1.RECORD_ACTION.STORAGE_RETRIEVAL_TIMEOUT) {\n            this.services.logger.error(message);\n            return;\n        }\n    };\n    RecordCore.prototype.handleReadResponse = function (message) {\n        if (this.stateMachine.state === \"MERGING\" /* RECORD_STATE.MERGING */) {\n            this.recoverRecordFromMessage(message);\n            this.recordServices.dirtyService.setDirty(this.name, false);\n            return;\n        }\n        this.version = message.version;\n        this.data = message.parsedData;\n        // in order to avoid invalid state transitions\n        if (this.stateMachine.state === \"READY\" /* RECORD_STATE.READY */)\n            return;\n        this.stateMachine.transition(constants_1.RECORD_ACTION.READ_RESPONSE);\n    };\n    RecordCore.prototype.handleHeadResponse = function (message) {\n        var remoteVersion = message.version;\n        if (this.recordServices.dirtyService.isDirty(this.name)) {\n            if (remoteVersion === -1 && this.version === this.options.initialRecordVersion) {\n                /**\n                 * Record created while offline\n                 */\n                this.stateMachine.transition(\"SUBSCRIBED\" /* RECORD_OFFLINE_ACTIONS.SUBSCRIBED */);\n                this.sendCreateUpdate(this.data);\n            }\n            else if (this.version === remoteVersion + 1) {\n                /**\n                 * record updated by client while offline\n                */\n                this.stateMachine.transition(\"RESUBSCRIBED\" /* RECORD_OFFLINE_ACTIONS.RESUBSCRIBED */);\n                this.sendUpdate(null, this.data);\n            }\n            else {\n                /**\n                 * record updated by server when offline, get latest data\n                 */\n                this.stateMachine.transition(\"INVALID_VERSION\" /* RECORD_OFFLINE_ACTIONS.INVALID_VERSION */);\n                if (remoteVersion !== -1) {\n                    /**\n                     * A read with version -1 would result in a read error\n                     */\n                    this.sendRead();\n                    this.recordServices.readRegistry.register(this.name, this, this.handleReadResponse);\n                }\n                else {\n                    this.recoverRecordDeletedRemotely();\n                }\n            }\n        }\n        else {\n            if (this.version === remoteVersion) {\n                this.stateMachine.transition(\"RESUBSCRIBED\" /* RECORD_OFFLINE_ACTIONS.RESUBSCRIBED */);\n            }\n            else {\n                this.stateMachine.transition(\"INVALID_VERSION\" /* RECORD_OFFLINE_ACTIONS.INVALID_VERSION */);\n                if (remoteVersion < this.version) {\n                    /**\n                     *  deleted and created again remotely, up to merge conflict I guess\n                     */\n                    this.recoverRecordDeletedRemotely();\n                }\n                else {\n                    this.sendRead();\n                    this.recordServices.readRegistry.register(this.name, this, this.handleReadResponse);\n                }\n            }\n        }\n    };\n    RecordCore.prototype.sendRead = function () {\n        this.services.connection.sendMessage({\n            topic: constants_1.TOPIC.RECORD,\n            action: constants_1.RECORD_ACTION.READ,\n            name: this.name\n        });\n    };\n    RecordCore.prototype.saveUpdate = function () {\n        if (!this.recordServices.dirtyService.isDirty(this.name)) {\n            this.version++;\n            this.recordServices.dirtyService.setDirty(this.name, true);\n        }\n        this.saveRecordToOffline();\n    };\n    RecordCore.prototype.sendUpdate = function (path, data, callback) {\n        if (path === void 0) { path = null; }\n        if (this.recordReadOnlyMode) {\n            this.services.logger.error({ topic: constants_1.TOPIC.RECORD }, constants_1.EVENT.RECORD_READ_ONLY_MODE, 'Attempting to send updated data, ignoring');\n            return;\n        }\n        if (this.recordServices.dirtyService.isDirty(this.name)) {\n            this.recordServices.dirtyService.setDirty(this.name, false);\n        }\n        else {\n            this.version++;\n        }\n        var message = {\n            topic: constants_1.TOPIC.RECORD,\n            version: this.version,\n            name: this.name\n        };\n        if (path) {\n            if (data === undefined) {\n                Object.assign(message, { action: constants_1.RECORD_ACTION.ERASE, path: path });\n            }\n            else {\n                Object.assign(message, { action: constants_1.RECORD_ACTION.PATCH, path: path, parsedData: data });\n            }\n        }\n        else {\n            Object.assign(message, { action: constants_1.RECORD_ACTION.UPDATE, parsedData: data });\n        }\n        if (callback) {\n            this.recordServices.writeAckService.send(message, callback);\n        }\n        else {\n            this.services.connection.sendMessage(message);\n        }\n    };\n    RecordCore.prototype.sendCreateUpdate = function (data) {\n        this.services.connection.sendMessage({\n            name: this.name,\n            topic: constants_1.TOPIC.RECORD,\n            action: constants_1.RECORD_ACTION.CREATEANDUPDATE,\n            version: this.options.initialRecordVersion,\n            parsedData: data\n        });\n        this.recordServices.dirtyService.setDirty(this.name, false);\n    };\n    /**\n     * Applies incoming updates and patches to the record's dataset\n     */\n    RecordCore.prototype.applyUpdate = function (message) {\n        var version = message.version;\n        var data = message.parsedData;\n        if (this.version === null) {\n            this.version = version;\n        }\n        else if (this.version + 1 !== version) {\n            this.stateMachine.transition(\"INVALID_VERSION\" /* RECORD_OFFLINE_ACTIONS.INVALID_VERSION */);\n            if (message.action === constants_1.RECORD_ACTION.PATCH) {\n                /**\n                * Request a snapshot so that a merge can be done with the read reply which contains\n                * the full state of the record\n                **/\n                this.sendRead();\n                this.recordServices.readRegistry.register(this.name, this, this.handleReadResponse);\n            }\n            else {\n                this.recoverRecordFromMessage(message);\n            }\n            return;\n        }\n        this.version = version;\n        var newData;\n        if (message.action === constants_1.RECORD_ACTION.PATCH) {\n            newData = (0, json_path_1.setValue)(this.data, message.path, data);\n        }\n        else if (message.action === constants_1.RECORD_ACTION.ERASE) {\n            newData = (0, json_path_1.setValue)(this.data, message.path, undefined);\n        }\n        else {\n            newData = data;\n        }\n        this.applyChange(newData);\n    };\n    /**\n     * Compares the new values for every path with the previously stored ones and\n     * updates the subscribers if the value has changed\n     */\n    RecordCore.prototype.applyChange = function (newData, force, save) {\n        if (force === void 0) { force = false; }\n        if (save === void 0) { save = true; }\n        if (this.stateMachine.inEndState) {\n            return;\n        }\n        var oldData = this.data;\n        this.data = newData;\n        if (this.options.saveUpdatesOffline && save) {\n            this.saveRecordToOffline();\n        }\n        var paths = this.emitter.eventNames();\n        for (var i = 0; i < paths.length; i++) {\n            var newValue = (0, json_path_1.get)(newData, paths[i], false);\n            var oldValue = (0, json_path_1.get)(oldData, paths[i], false);\n            if (!utils.deepEquals(newValue, oldValue) || (force && newValue)) {\n                this.emitter.emit(paths[i], this.get(paths[i]));\n            }\n        }\n    };\n    /**\n     */\n    RecordCore.prototype.sendDelete = function () {\n        var _this = this;\n        this.whenReadyInternal(null, function () {\n            _this.services.storage.delete(_this.name, function () {\n                if (_this.services.connection.isConnected) {\n                    var message = {\n                        topic: constants_1.TOPIC.RECORD,\n                        action: constants_1.RECORD_ACTION.DELETE,\n                        name: _this.name\n                    };\n                    _this.deletedTimeout = _this.services.timeoutRegistry.add({\n                        message: message,\n                        event: constants_1.EVENT.RECORD_DELETE_TIMEOUT,\n                        duration: _this.options.recordDeleteTimeout\n                    });\n                    _this.services.connection.sendMessage(message);\n                }\n                else {\n                    _this.stateMachine.transition(constants_1.RECORD_ACTION.DELETE_SUCCESS);\n                }\n            });\n        });\n    };\n    RecordCore.prototype.recoverRecordFromMessage = function (message) {\n        this.recordServices.mergeStrategy.merge(message, this.version, this.get(), this.onRecordRecovered, this);\n    };\n    RecordCore.prototype.recoverRecordDeletedRemotely = function () {\n        this.recordServices.mergeStrategy.merge({\n            name: this.name,\n            version: -1,\n            parsedData: null\n        }, this.version, this.get(), this.onRecordRecovered, this);\n    };\n    /**\n   * Callback once the record merge has completed. If successful it will set the\n   * record state, else emit and error and the record will remain in an\n   * inconsistent state until the next update.\n   */\n    RecordCore.prototype.onRecordRecovered = function (error, recordMessage, mergedData) {\n        var _this = this;\n        var remoteVersion = recordMessage.version, remoteData = recordMessage.parsedData;\n        if (error) {\n            this.services.logger.error({ topic: constants_1.TOPIC.RECORD }, constants_1.EVENT.RECORD_VERSION_EXISTS);\n            if (recordMessage.correlationId) {\n                this.recordServices.writeAckService.recieve(__assign(__assign({}, recordMessage), { reason: error }));\n            }\n            return;\n        }\n        if (mergedData === null) {\n            if (remoteVersion === -1) {\n                this.services.storage.delete(this.name, function () { });\n                this.stateMachine.transition(constants_1.RECORD_ACTION.DELETED);\n            }\n            else {\n                this.stateMachine.transition(constants_1.RECORD_ACTION.DELETE);\n            }\n            return;\n        }\n        this.version = remoteVersion;\n        var oldValue = this.data;\n        if (utils.deepEquals(oldValue, remoteData)) {\n            if (this.stateMachine.state === \"MERGING\" /* RECORD_STATE.MERGING */) {\n                this.stateMachine.transition(\"MERGED\" /* RECORD_OFFLINE_ACTIONS.MERGED */);\n            }\n            return;\n        }\n        if (this.stateMachine.state !== \"MERGING\" /* RECORD_STATE.MERGING */) {\n            this.services.logger.warn({\n                topic: constants_1.TOPIC.RECORD,\n                action: constants_1.RECORD_ACTION.VERSION_EXISTS\n            });\n            return;\n        }\n        var newValue = mergedData;\n        this.stateMachine.transition(\"MERGED\" /* RECORD_OFFLINE_ACTIONS.MERGED */);\n        var runFns;\n        var writeCallbacks = this.pendingWrites\n            .map(function (_a) {\n            var callback = _a.callback;\n            return callback;\n        })\n            .filter(function (callback) { return callback !== undefined; });\n        if (writeCallbacks.length !== 0) {\n            runFns = function (err) {\n                writeCallbacks.forEach(function (callback) { return callback(err, _this.name); });\n            };\n        }\n        this.pendingWrites = [];\n        if (utils.deepEquals(mergedData, remoteData)) {\n            this.applyChange(mergedData);\n            if (runFns) {\n                runFns(null);\n            }\n            return;\n        }\n        if (this.recordReadOnlyMode) {\n            this.services.logger.error({ topic: constants_1.TOPIC.RECORD }, constants_1.EVENT.RECORD_READ_ONLY_MODE, 'Attempting to set data after merge when in readonly mode, ignoring');\n            return;\n        }\n        this.applyChange(newValue);\n        this.sendUpdate(null, this.data, runFns);\n    };\n    /**\n   * A quick check that's carried out by most methods that interact with the record\n   * to make sure it hasn't been destroyed yet - and to handle it gracefully if it has.\n   */\n    RecordCore.prototype.checkDestroyed = function (methodName) {\n        if (this.stateMachine.inEndState) {\n            this.services.logger.error({ topic: constants_1.TOPIC.RECORD }, constants_1.EVENT.RECORD_ALREADY_DESTROYED, { methodName: methodName });\n            return true;\n        }\n        return false;\n    };\n    /**\n     * Destroys the record and nulls all\n     * its dependencies\n     */\n    RecordCore.prototype.destroy = function () {\n        this.services.timerRegistry.remove(this.readyTimer);\n        this.services.timeoutRegistry.clear(this.responseTimeout);\n        this.services.timeoutRegistry.clear(this.deletedTimeout);\n        this.services.timeoutRegistry.clear(this.discardTimeout);\n        this.services.connection.removeOnReestablished(this.onConnectionReestablished);\n        this.services.connection.removeOnLost(this.onConnectionLost);\n        this.emitter.off();\n        this.isReady = false;\n        this.whenComplete(this.name);\n    };\n    RecordCore.prototype.onConnectionReestablished = function () {\n        this.stateMachine.transition(\"RESUBSCRIBE\" /* RECORD_OFFLINE_ACTIONS.RESUBSCRIBE */);\n    };\n    RecordCore.prototype.onConnectionLost = function () {\n        this.saveRecordToOffline();\n        this.recordServices.dirtyService.setDirty(this.name, true);\n    };\n    RecordCore.prototype.getDebugId = function () {\n        if (this.options.debug) {\n            return utils.getUid();\n        }\n        return null;\n    };\n    return RecordCore;\n}(emitter_1.Emitter));\nexports.RecordCore = RecordCore;\nvar recordStateTransitions = [\n    { name: constants_1.RECORD_ACTION.SUBSCRIBECREATEANDREAD, from: \"LOADING_OFFLINE\" /* RECORD_STATE.LOADING_OFFLINE */, to: \"SUBSCRIBING\" /* RECORD_STATE.SUBSCRIBING */, handler: RecordCore.prototype.onSubscribing },\n    { name: \"LOADED\" /* RECORD_OFFLINE_ACTIONS.LOADED */, from: \"LOADING_OFFLINE\" /* RECORD_STATE.LOADING_OFFLINE */, to: \"READY\" /* RECORD_STATE.READY */, handler: RecordCore.prototype.onReady },\n    { name: constants_1.RECORD_ACTION.READ_RESPONSE, from: \"SUBSCRIBING\" /* RECORD_STATE.SUBSCRIBING */, to: \"READY\" /* RECORD_STATE.READY */, handler: RecordCore.prototype.onReady },\n    { name: \"SUBSCRIBED\" /* RECORD_OFFLINE_ACTIONS.SUBSCRIBED */, from: \"RESUBSCRIBING\" /* RECORD_STATE.RESUBSCRIBING */, to: \"READY\" /* RECORD_STATE.READY */, handler: RecordCore.prototype.onReady },\n    { name: \"RESUBSCRIBE\" /* RECORD_OFFLINE_ACTIONS.RESUBSCRIBE */, from: \"LOADING_OFFLINE\" /* RECORD_STATE.LOADING_OFFLINE */, to: \"RESUBSCRIBING\" /* RECORD_STATE.RESUBSCRIBING */, handler: RecordCore.prototype.onResubscribing },\n    { name: \"RESUBSCRIBE\" /* RECORD_OFFLINE_ACTIONS.RESUBSCRIBE */, from: \"READY\" /* RECORD_STATE.READY */, to: \"RESUBSCRIBING\" /* RECORD_STATE.RESUBSCRIBING */, handler: RecordCore.prototype.onResubscribing },\n    { name: \"RESUBSCRIBE\" /* RECORD_OFFLINE_ACTIONS.RESUBSCRIBE */, from: \"RESUBSCRIBING\" /* RECORD_STATE.RESUBSCRIBING */, to: \"RESUBSCRIBING\" /* RECORD_STATE.RESUBSCRIBING */, handler: RecordCore.prototype.onResubscribing },\n    { name: \"RESUBSCRIBE\" /* RECORD_OFFLINE_ACTIONS.RESUBSCRIBE */, from: \"SUBSCRIBING\" /* RECORD_STATE.SUBSCRIBING */, to: \"SUBSCRIBING\" /* RECORD_STATE.SUBSCRIBING */, handler: RecordCore.prototype.onSubscribing },\n    { name: \"RESUBSCRIBE\" /* RECORD_OFFLINE_ACTIONS.RESUBSCRIBE */, from: \"UNSUBSCRIBING\" /* RECORD_STATE.UNSUBSCRIBING */, to: \"UNSUBSCRIBING\" /* RECORD_STATE.UNSUBSCRIBING */ },\n    { name: \"RESUBSCRIBED\" /* RECORD_OFFLINE_ACTIONS.RESUBSCRIBED */, from: \"RESUBSCRIBING\" /* RECORD_STATE.RESUBSCRIBING */, to: \"READY\" /* RECORD_STATE.READY */, handler: RecordCore.prototype.onReady },\n    { name: \"INVALID_VERSION\" /* RECORD_OFFLINE_ACTIONS.INVALID_VERSION */, from: \"RESUBSCRIBING\" /* RECORD_STATE.RESUBSCRIBING */, to: \"MERGING\" /* RECORD_STATE.MERGING */ },\n    { name: \"MERGED\" /* RECORD_OFFLINE_ACTIONS.MERGED */, from: \"MERGING\" /* RECORD_STATE.MERGING */, to: \"READY\" /* RECORD_STATE.READY */, handler: RecordCore.prototype.onReady },\n    { name: constants_1.RECORD_ACTION.DELETED, from: \"MERGING\" /* RECORD_STATE.MERGING */, to: \"DELETED\" /* RECORD_STATE.DELETED */, handler: RecordCore.prototype.onDeleted, isEndState: true },\n    { name: constants_1.RECORD_ACTION.DELETE, from: \"MERGING\" /* RECORD_STATE.MERGING */, to: \"DELETING\" /* RECORD_STATE.DELETING */ },\n    { name: constants_1.RECORD_ACTION.DELETE, from: \"READY\" /* RECORD_STATE.READY */, to: \"DELETING\" /* RECORD_STATE.DELETING */ },\n    { name: constants_1.RECORD_ACTION.DELETED, from: \"READY\" /* RECORD_STATE.READY */, to: \"DELETED\" /* RECORD_STATE.DELETED */, handler: RecordCore.prototype.onDeleted, isEndState: true },\n    { name: constants_1.RECORD_ACTION.DELETED, from: \"UNSUBSCRIBE_FOR_REAL\" /* RECORD_OFFLINE_ACTIONS.UNSUBSCRIBE_FOR_REAL */, to: \"DELETED\" /* RECORD_STATE.DELETED */, handler: RecordCore.prototype.onDeleted, isEndState: true },\n    { name: constants_1.RECORD_ACTION.DELETED, from: \"UNSUBSCRIBING\" /* RECORD_STATE.UNSUBSCRIBING */, to: \"DELETED\" /* RECORD_STATE.DELETED */, handler: RecordCore.prototype.onDeleted, isEndState: true },\n    { name: constants_1.RECORD_ACTION.DELETE_SUCCESS, from: \"DELETING\" /* RECORD_STATE.DELETING */, to: \"DELETED\" /* RECORD_STATE.DELETED */, handler: RecordCore.prototype.onDeleted, isEndState: true },\n    { name: constants_1.RECORD_ACTION.UNSUBSCRIBE, from: \"READY\" /* RECORD_STATE.READY */, to: \"UNSUBSCRIBING\" /* RECORD_STATE.UNSUBSCRIBING */ },\n    { name: constants_1.RECORD_ACTION.SUBSCRIBE, from: \"UNSUBSCRIBING\" /* RECORD_STATE.UNSUBSCRIBING */, to: \"READY\" /* RECORD_STATE.READY */ },\n    { name: \"UNSUBSCRIBE_FOR_REAL\" /* RECORD_OFFLINE_ACTIONS.UNSUBSCRIBE_FOR_REAL */, from: \"UNSUBSCRIBING\" /* RECORD_STATE.UNSUBSCRIBING */, to: \"UNSUBSCRIBED\" /* RECORD_STATE.UNSUBSCRIBED */, handler: RecordCore.prototype.onUnsubscribed, isEndState: true },\n    { name: \"INVALID_VERSION\" /* RECORD_OFFLINE_ACTIONS.INVALID_VERSION */, from: \"READY\" /* RECORD_STATE.READY */, to: \"MERGING\" /* RECORD_STATE.MERGING */ },\n];\n", "\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Record = void 0;\nvar utils = require(\"../util/utils\");\nvar constants_1 = require(\"../constants\");\nvar emitter_1 = require(\"../util/emitter\");\nvar Record = /** @class */ (function (_super) {\n    __extends(Record, _super);\n    function Record(record) {\n        var _this = _super.call(this) || this;\n        _this.record = record;\n        _this.debugId = _this.record.getDebugId();\n        _this.subscriptions = [];\n        _this.record.on(constants_1.EVENT.RECORD_READY, _this.emit.bind(_this, constants_1.EVENT.RECORD_READY, _this), _this);\n        _this.record.on(constants_1.EVENT.RECORD_DISCARDED, _this.emit.bind(_this, constants_1.EVENT.RECORD_DISCARDED), _this);\n        _this.record.on(constants_1.EVENT.RECORD_DELETED, _this.emit.bind(_this, constants_1.EVENT.RECORD_DELETED), _this);\n        _this.record.on(constants_1.EVENT.RECORD_ERROR, _this.emit.bind(_this, constants_1.EVENT.RECORD_ERROR), _this);\n        _this.record.addReference(_this);\n        return _this;\n    }\n    Object.defineProperty(Record.prototype, \"name\", {\n        get: function () {\n            return this.record.name;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Record.prototype, \"isReady\", {\n        get: function () {\n            return this.record.isReady;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Record.prototype, \"version\", {\n        get: function () {\n            return this.record.version;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Record.prototype, \"hasProvider\", {\n        get: function () {\n            return this.record.hasProvider;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Record.prototype.whenReady = function (callback) {\n        if (callback) {\n            this.record.whenReady(this, callback);\n        }\n        else {\n            return this.record.whenReady(this);\n        }\n    };\n    Record.prototype.get = function (path) {\n        return this.record.get(path);\n    };\n    Record.prototype.set = function (dataOrPath, dataOrCallback, callback) {\n        return this.record.set(utils.normalizeSetArguments(arguments));\n    };\n    Record.prototype.setWithAck = function (pathOrData, dataOrCallback, callback) {\n        return this.record.setWithAck(utils.normalizeSetArguments(arguments));\n    };\n    /**\n     * Deletes a path from the record. Equivalent to doing `record.set(path, undefined)`\n     *\n     * @param {String} path The path to be deleted\n     */\n    Record.prototype.erase = function (path) {\n        if (!path) {\n            throw new Error('unable to erase record data without path, consider using `delete`');\n        }\n        this.set(path, undefined);\n    };\n    Record.prototype.eraseWithAck = function (path, callback) {\n        if (!path) {\n            throw new Error('unable to erase record data without path, consider using `delete`');\n        }\n        if (callback) {\n            this.setWithAck(path, undefined, callback);\n        }\n        else {\n            return this.setWithAck(path, undefined);\n        }\n    };\n    Record.prototype.subscribe = function (pathOrCallback, callbackOrTriggerNow, triggerNow) {\n        var parameters = utils.normalizeArguments(arguments);\n        this.subscriptions.push(parameters);\n        this.record.subscribe(parameters, this);\n    };\n    Record.prototype.unsubscribe = function (pathOrCallback, callback) {\n        var parameters = utils.normalizeArguments(arguments);\n        this.subscriptions = this.subscriptions.filter(function (subscription) {\n            if (!parameters.callback && (subscription.path === parameters.path))\n                return false;\n            if (parameters.callback && (subscription.path === parameters.path && subscription.callback === parameters.callback))\n                return false;\n            return true;\n        });\n        this.record.unsubscribe(parameters, this);\n    };\n    Record.prototype.discard = function () {\n        for (var i = 0; i < this.subscriptions.length; i++) {\n            this.record.unsubscribe(this.subscriptions[i], this);\n        }\n        this.record.removeReference(this);\n        this.record.removeContext(this);\n    };\n    Record.prototype.delete = function (callback) {\n        return this.record.delete(callback);\n    };\n    Record.prototype.setMergeStrategy = function (mergeStrategy) {\n        this.record.setMergeStrategy(mergeStrategy);\n    };\n    return Record;\n}(emitter_1.Emitter));\nexports.Record = Record;\n", "\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.AnonymousRecord = void 0;\nvar utils = require(\"../util/utils\");\nvar emitter_1 = require(\"../util/emitter\");\nvar AnonymousRecord = /** @class */ (function (_super) {\n    __extends(AnonymousRecord, _super);\n    function AnonymousRecord(getRecordCore) {\n        var _this = _super.call(this) || this;\n        _this.record = null;\n        _this.subscriptions = [];\n        _this.getRecordCore = getRecordCore;\n        return _this;\n    }\n    Object.defineProperty(AnonymousRecord.prototype, \"name\", {\n        get: function () {\n            if (!this.record) {\n                return '';\n            }\n            return this.record.name;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(AnonymousRecord.prototype, \"isReady\", {\n        get: function () {\n            if (!this.record) {\n                return false;\n            }\n            return this.record.isReady;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(AnonymousRecord.prototype, \"version\", {\n        get: function () {\n            if (!this.record) {\n                return -1;\n            }\n            return this.record.version;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    AnonymousRecord.prototype.whenReady = function (callback) {\n        if (this.record) {\n            if (callback) {\n                this.record.whenReady(this, callback);\n            }\n            else {\n                return this.record.whenReady(this);\n            }\n        }\n    };\n    AnonymousRecord.prototype.setName = function (recordName, callback) {\n        if (this.name === recordName) {\n            return;\n        }\n        this.discard();\n        this.record = this.getRecordCore(recordName);\n        this.record.addReference(this);\n        for (var i = 0; i < this.subscriptions.length; i++) {\n            this.record.subscribe(this.subscriptions[i], this);\n        }\n        this.emit('nameChanged', recordName);\n        if (callback) {\n            this.record.whenReady(this, callback);\n        }\n        else {\n            return this.record.whenReady(this);\n        }\n    };\n    AnonymousRecord.prototype.get = function (path) {\n        if (this.record) {\n            return this.record.get(path);\n        }\n    };\n    AnonymousRecord.prototype.set = function (path, data, callback) {\n        if (this.record) {\n            return this.record.set(utils.normalizeSetArguments(arguments));\n        }\n    };\n    AnonymousRecord.prototype.setWithAck = function (path, data, callback) {\n        if (this.record) {\n            return this.record.setWithAck(utils.normalizeSetArguments(arguments));\n        }\n    };\n    AnonymousRecord.prototype.erase = function (path) {\n        if (this.record) {\n            return this.record.set(utils.normalizeSetArguments(arguments));\n        }\n    };\n    AnonymousRecord.prototype.eraseWithAck = function (path, callback) {\n        if (this.record) {\n            return this.record.setWithAck(utils.normalizeSetArguments(arguments));\n        }\n    };\n    AnonymousRecord.prototype.subscribe = function (path, callback, triggerNow) {\n        var parameters = utils.normalizeArguments(arguments);\n        this.subscriptions.push(parameters);\n        if (this.record) {\n            this.record.subscribe(parameters, this);\n        }\n    };\n    AnonymousRecord.prototype.unsubscribe = function (path, callback) {\n        var parameters = utils.normalizeArguments(arguments);\n        this.subscriptions = this.subscriptions.filter(function (subscription) {\n            if (!parameters.callback && (subscription.path === parameters.path))\n                return false;\n            if (parameters.callback && (subscription.path === parameters.path && subscription.callback === parameters.callback))\n                return false;\n            return true;\n        });\n        if (this.record) {\n            this.record.unsubscribe(parameters, this);\n        }\n    };\n    AnonymousRecord.prototype.discard = function () {\n        if (this.record) {\n            for (var i = 0; i < this.subscriptions.length; i++) {\n                this.record.unsubscribe(this.subscriptions[i], this);\n            }\n            return this.record.removeReference(this);\n        }\n    };\n    AnonymousRecord.prototype.delete = function (callback) {\n        if (this.record) {\n            return this.record.delete(callback);\n        }\n    };\n    AnonymousRecord.prototype.setMergeStrategy = function (mergeStrategy) {\n        if (this.record) {\n            this.record.setMergeStrategy(mergeStrategy);\n        }\n    };\n    return AnonymousRecord;\n}(emitter_1.Emitter));\nexports.AnonymousRecord = AnonymousRecord;\n", "\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __read = (this && this.__read) || function (o, n) {\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n    if (!m) return o;\n    var i = m.call(o), r, ar = [], e;\n    try {\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n    }\n    catch (error) { e = { error: error }; }\n    finally {\n        try {\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\n        }\n        finally { if (e) throw e.error; }\n    }\n    return ar;\n};\nvar __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n    if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n        if (ar || !(i in from)) {\n            if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n            ar[i] = from[i];\n        }\n    }\n    return to.concat(ar || Array.prototype.slice.call(from));\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.List = void 0;\nvar utils = require(\"../util/utils\");\nvar constants_1 = require(\"../constants\");\nvar emitter_1 = require(\"../util/emitter\");\nvar List = /** @class */ (function (_super) {\n    __extends(List, _super);\n    function List(record) {\n        var _this = _super.call(this) || this;\n        _this.record = record;\n        _this.debugId = _this.record.getDebugId();\n        _this.wrappedFunctions = new Map();\n        _this.hasAddListener = false;\n        _this.hasRemoveListener = false;\n        _this.hasMoveListener = false;\n        _this.subscriptions = [];\n        _this.originalApplyUpdate = _this.record.applyUpdate.bind(_this.record);\n        _this.record.applyUpdate = _this.applyUpdate.bind(_this);\n        _this.record.addReference(_this);\n        _this.record.on('discard', function () { return _this.emit('discard', _this); }, _this);\n        _this.record.on('delete', function () { return _this.emit('delete', _this); }, _this);\n        _this.record.on('error', function () {\n            var args = [];\n            for (var _i = 0; _i < arguments.length; _i++) {\n                args[_i] = arguments[_i];\n            }\n            return _this.emit.apply(_this, __spreadArray(['error'], __read(args), false));\n        }, _this);\n        return _this;\n    }\n    Object.defineProperty(List.prototype, \"name\", {\n        get: function () {\n            return this.record.name;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(List.prototype, \"isReady\", {\n        get: function () {\n            return this.record.isReady;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(List.prototype, \"version\", {\n        get: function () {\n            return this.record.version;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    List.prototype.whenReady = function (callback) {\n        if (callback) {\n            this.record.whenReady(this, callback);\n        }\n        else {\n            return this.record.whenReady(this);\n        }\n    };\n    List.prototype.discard = function () {\n        this.destroy();\n        this.record.removeReference(this);\n    };\n    List.prototype.delete = function (callback) {\n        this.destroy();\n        return this.record.delete(callback);\n    };\n    /**\n     * Returns the array of list entries or an\n     * empty array if the list hasn't been populated yet.\n     */\n    List.prototype.getEntries = function () {\n        var entries = this.record.get();\n        if (!(entries instanceof Array)) {\n            return [];\n        }\n        return entries;\n    };\n    /**\n   * Returns true if the list is empty\n   */\n    List.prototype.isEmpty = function () {\n        return this.getEntries().length === 0;\n    };\n    List.prototype.setEntriesWithAck = function (entries, callback) {\n        var _this = this;\n        if (!callback) {\n            return new Promise(function (resolve, reject) {\n                _this.setEntries(entries, function (error) {\n                    if (error) {\n                        reject(error);\n                    }\n                    else {\n                        resolve();\n                    }\n                });\n            });\n        }\n        this.setEntries(entries, callback);\n    };\n    /**\n    * Updates the list with a new set of entries\n    */\n    List.prototype.setEntries = function (entries, callback) {\n        var errorMsg = 'entries must be an array of record names';\n        var i;\n        if (!(entries instanceof Array)) {\n            throw new Error(errorMsg);\n        }\n        for (i = 0; i < entries.length; i++) {\n            if (typeof entries[i] !== 'string') {\n                throw new Error(errorMsg);\n            }\n        }\n        this.beforeChange();\n        this.record.set({ data: entries, callback: callback });\n        this.afterChange();\n    };\n    /**\n     * Removes an entry from the list\n     *\n     * @param {String} entry\n     * @param {Number} [index]\n     */\n    List.prototype.removeEntry = function (entry, index, callback) {\n        // @ts-ignore\n        var currentEntries = this.record.get();\n        var hasIndex = this.hasIndex(index);\n        var entries = [];\n        var i;\n        for (i = 0; i < currentEntries.length; i++) {\n            if (currentEntries[i] !== entry || (hasIndex && index !== i)) {\n                entries.push(currentEntries[i]);\n            }\n        }\n        this.beforeChange();\n        this.record.set({ data: entries, callback: callback });\n        this.afterChange();\n    };\n    /**\n   * Adds an entry to the list\n   *\n   * @param {String} entry\n   * @param {Number} [index]\n   */\n    List.prototype.addEntry = function (entry, index, callback) {\n        if (typeof entry !== 'string') {\n            throw new Error('Entry must be a recordName');\n        }\n        var hasIndex = this.hasIndex(index);\n        var entries = this.getEntries();\n        if (hasIndex) {\n            entries.splice(index, 0, entry);\n        }\n        else {\n            entries.push(entry);\n        }\n        this.beforeChange();\n        this.record.set({ data: entries, callback: callback });\n        this.afterChange();\n    };\n    /**\n   * Proxies the underlying Record's subscribe method. Makes sure\n   * that no path is provided\n   */\n    List.prototype.subscribe = function (callback) {\n        var parameters = utils.normalizeArguments(arguments);\n        if (parameters.path) {\n            throw new Error('path is not supported for List.subscribe');\n        }\n        // Make sure the callback is invoked with an empty array for new records\n        var listCallback = function (scope, cb) {\n            cb(scope.getEntries());\n        }.bind(this, this, parameters.callback);\n        /**\n        * Adding a property onto a function directly is terrible practice,\n        * and we will change this as soon as we have a more seperate approach\n        * of creating lists that doesn't have records default state.\n        *\n        * The reason we are holding a referencing to wrapped array is so that\n        * on unsubscribe it can provide a reference to the actual method the\n        * record is subscribed too.\n        **/\n        this.wrappedFunctions.set(parameters.callback, listCallback);\n        parameters.callback = listCallback;\n        this.subscriptions.push(parameters);\n        this.record.subscribe(parameters, this);\n    };\n    /**\n   * Proxies the underlying Record's unsubscribe method. Makes sure\n   * that no path is provided\n   */\n    List.prototype.unsubscribe = function (callback) {\n        var parameters = utils.normalizeArguments(arguments);\n        if (parameters.path) {\n            throw new Error('path is not supported for List.unsubscribe');\n        }\n        var listenCallback = this.wrappedFunctions.get(parameters.callback);\n        parameters.callback = listenCallback;\n        this.wrappedFunctions.delete(parameters.callback);\n        this.subscriptions = this.subscriptions.filter(function (subscription) {\n            if (parameters.callback && parameters.callback !== subscription.callback)\n                return true;\n            return false;\n        });\n        this.record.unsubscribe(parameters, this);\n    };\n    /**\n     * Proxies the underlying Record's _update method. Set's\n     * data to an empty array if no data is provided.\n     */\n    List.prototype.applyUpdate = function (message) {\n        if (!(message.parsedData instanceof Array)) {\n            message.parsedData = [];\n        }\n        this.beforeChange();\n        this.originalApplyUpdate(message);\n        this.afterChange();\n    };\n    /**\n     * Validates that the index provided is within the current set of entries.\n     */\n    List.prototype.hasIndex = function (index) {\n        var hasIndex = false;\n        var entries = this.getEntries();\n        if (index !== undefined) {\n            if (isNaN(index)) {\n                throw new Error('Index must be a number');\n            }\n            if (index !== entries.length && (index >= entries.length || index < 0)) {\n                throw new Error('Index must be within current entries');\n            }\n            hasIndex = true;\n        }\n        return hasIndex;\n    };\n    /**\n     * Establishes the current structure of the list, provided the client has attached any\n     * add / move / remove listener\n     *\n     * This will be called before any change to the list, regardsless if the change was triggered\n     * by an incoming message from the server or by the client\n     */\n    List.prototype.beforeChange = function () {\n        this.hasAddListener = this.hasListeners(constants_1.EVENT.ENTRY_ADDED_EVENT);\n        this.hasRemoveListener = this.hasListeners(constants_1.EVENT.ENTRY_REMOVED_EVENT);\n        this.hasMoveListener = this.hasListeners(constants_1.EVENT.ENTRY_MOVED_EVENT);\n        if (this.hasAddListener || this.hasRemoveListener || this.hasMoveListener) {\n            this.beforeStructure = this.getStructure();\n        }\n        else {\n            this.beforeStructure = null;\n        }\n    };\n    /**\n     * Compares the structure of the list after a change to its previous structure and notifies\n     * any add / move / remove listener. Won't do anything if no listeners are attached.\n     */\n    List.prototype.afterChange = function () {\n        if (this.beforeStructure === null) {\n            return;\n        }\n        var after = this.getStructure();\n        var before = this.beforeStructure;\n        var entry;\n        var i;\n        if (this.hasRemoveListener) {\n            for (entry in before) {\n                for (i = 0; i < before[entry].length; i++) {\n                    if (after[entry] === undefined || after[entry][i] === undefined) {\n                        this.emit(constants_1.EVENT.ENTRY_REMOVED_EVENT, entry, before[entry][i]);\n                    }\n                }\n            }\n        }\n        if (this.hasAddListener || this.hasMoveListener) {\n            for (entry in after) {\n                if (before[entry] === undefined) {\n                    for (i = 0; i < after[entry].length; i++) {\n                        this.emit(constants_1.EVENT.ENTRY_ADDED_EVENT, entry, after[entry][i]);\n                    }\n                }\n                else {\n                    for (i = 0; i < after[entry].length; i++) {\n                        if (before[entry][i] !== after[entry][i]) {\n                            if (before[entry][i] === undefined) {\n                                this.emit(constants_1.EVENT.ENTRY_ADDED_EVENT, entry, after[entry][i]);\n                            }\n                            else {\n                                this.emit(constants_1.EVENT.ENTRY_MOVED_EVENT, entry, after[entry][i]);\n                            }\n                        }\n                    }\n                }\n            }\n        }\n    };\n    /**\n     * Iterates through the list and creates a map with the entry as a key\n     * and an array of its position(s) within the list as a value, e.g.\n     *\n     * {\n     *   'recordA': [ 0, 3 ],\n     *   'recordB': [ 1 ],\n     *   'recordC': [ 2 ]\n     * }\n     */\n    List.prototype.getStructure = function () {\n        var structure = {};\n        var i;\n        var entries = this.getEntries();\n        for (i = 0; i < entries.length; i++) {\n            if (structure[entries[i]] === undefined) {\n                structure[entries[i]] = [i];\n            }\n            else {\n                structure[entries[i]].push(i);\n            }\n        }\n        return structure;\n    };\n    List.prototype.destroy = function () {\n        for (var i = 0; i < this.subscriptions.length; i++) {\n            this.record.unsubscribe(this.subscriptions[i], this);\n        }\n        this.wrappedFunctions.clear();\n        this.record.removeContext(this);\n    };\n    return List;\n}(emitter_1.Emitter));\nexports.List = List;\n", "\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __assign = (this && this.__assign) || function () {\n    __assign = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign.apply(this, arguments);\n};\nvar __read = (this && this.__read) || function (o, n) {\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n    if (!m) return o;\n    var i = m.call(o), r, ar = [], e;\n    try {\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n    }\n    catch (error) { e = { error: error }; }\n    finally {\n        try {\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\n        }\n        finally { if (e) throw e.error; }\n    }\n    return ar;\n};\nvar __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n    if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n        if (ar || !(i in from)) {\n            if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n            ar[i] = from[i];\n        }\n    }\n    return to.concat(ar || Array.prototype.slice.call(from));\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Dequeue = void 0;\nvar utils = require(\"../util/utils\");\nvar constants_1 = require(\"../constants\");\nvar emitter_1 = require(\"../util/emitter\");\nvar Dequeue = /** @class */ (function (_super) {\n    __extends(Dequeue, _super);\n    function Dequeue(record) {\n        var _this = _super.call(this) || this;\n        _this.record = record;\n        _this.debugId = _this.record.getDebugId();\n        _this.wrappedFunctions = new Map();\n        _this.headPath = 'h';\n        _this.emptyHead = { p: '', n: '' };\n        _this.hasAddListener = false;\n        _this.hasRemoveListener = false;\n        _this.hasMoveListener = false;\n        _this.subscriptions = [];\n        _this.lastEntries = [];\n        _this.lastVersion = 0;\n        _this.originalApplyUpdate = _this.record.applyUpdate.bind(_this.record);\n        _this.record.applyUpdate = _this.applyUpdate.bind(_this);\n        _this.record.addReference(_this);\n        _this.record.on('discard', function () { return _this.emit('discard', _this); }, _this);\n        _this.record.on('delete', function () { return _this.emit('delete', _this); }, _this);\n        _this.record.on('error', function () {\n            var args = [];\n            for (var _i = 0; _i < arguments.length; _i++) {\n                args[_i] = arguments[_i];\n            }\n            return _this.emit.apply(_this, __spreadArray(['error'], __read(args), false));\n        }, _this);\n        return _this;\n    }\n    Object.defineProperty(Dequeue.prototype, \"name\", {\n        get: function () {\n            return this.record.name;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Dequeue.prototype, \"isReady\", {\n        get: function () {\n            return this.record.isReady;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Dequeue.prototype, \"version\", {\n        get: function () {\n            return this.record.version;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Dequeue.prototype.whenReady = function (callback) {\n        if (callback) {\n            this.record.whenReady(this, callback);\n        }\n        else {\n            return this.record.whenReady(this);\n        }\n    };\n    Dequeue.prototype.discard = function () {\n        this.destroy();\n        this.record.removeReference(this);\n    };\n    Dequeue.prototype.delete = function (callback) {\n        this.destroy();\n        return this.record.delete(callback);\n    };\n    /**\n     * Returns the array of list entries or an\n     * empty array if the list hasn't been populated yet.\n     */\n    Dequeue.prototype.getEntries = function () {\n        // did we computed already?\n        if (this.version === this.lastVersion) {\n            return this.lastEntries;\n        }\n        var head = this.record.get(this.headPath) || this.emptyHead;\n        var next = head.n;\n        var entries = [];\n        while (next) {\n            var node = this.record.get(next);\n            entries.push(node.d);\n            next = node.n;\n        }\n        // memoize\n        this.lastVersion = this.version;\n        this.lastEntries = entries;\n        return entries;\n    };\n    /**\n   * Returns true if the list is empty\n   */\n    Dequeue.prototype.isEmpty = function () {\n        var head = this.record.get(this.headPath) || this.emptyHead;\n        return !head.n && !head.p;\n    };\n    Dequeue.prototype.setEntriesWithAck = function (entries, callback) {\n        var _this = this;\n        if (!callback) {\n            return new Promise(function (resolve, reject) {\n                _this.setEntries(entries, function (error) {\n                    if (error) {\n                        reject(error);\n                    }\n                    else {\n                        resolve();\n                    }\n                });\n            });\n        }\n        this.setEntries(entries, callback);\n    };\n    /**\n    * Updates the list with a new set of entries\n    */\n    Dequeue.prototype.setEntries = function (entries, callback) {\n        var _a, _b;\n        var errorMsg = 'entries must be an array';\n        if (!(entries instanceof Array)) {\n            throw new Error(errorMsg);\n        }\n        if (entries.length === 0) {\n            this.record.set({ data: (_a = {}, _a[this.headPath] = this.emptyHead, _a), callback: callback });\n            return;\n        }\n        var head = { n: '0', p: \"\".concat(entries.length - 1) };\n        var nodes = {};\n        for (var index = 0; index < entries.length; index++) {\n            nodes[index] = {\n                d: entries[index],\n                n: \"\".concat(index + 1),\n                p: \"\".concat(index - 1)\n            };\n            if (index === 0) {\n                /* tslint:disable:no-string-literal */\n                nodes[index]['p'] = '';\n                /* tslint:enable:no-string-literal */\n            }\n            if (index === entries.length - 1) {\n                /* tslint:disable:no-string-literal */\n                nodes[index]['n'] = '';\n                /* tslint:enable:no-string-literal */\n            }\n        }\n        this.beforeChange();\n        this.record.set({ data: __assign((_b = {}, _b[this.headPath] = head, _b), nodes), callback: callback });\n        this.afterChange();\n    };\n    /**\n     * Get last entry\n     */\n    Dequeue.prototype.getLast = function () {\n        var head = this.record.get(this.headPath) || this.emptyHead;\n        if (!head.p)\n            return '';\n        var node = this.record.get(head.p);\n        return node.d;\n    };\n    /**\n     * Get first entry\n     */\n    Dequeue.prototype.getFirst = function () {\n        var head = this.record.get(this.headPath) || this.emptyHead;\n        if (!head.n)\n            return '';\n        var node = this.record.get(head.n);\n        return node.d;\n    };\n    /**\n     * Remove last value and return it\n     *\n     */\n    Dequeue.prototype.pop = function () {\n        // when the array is 1 or 2 entries its easier to just set it again to avoid complications with the head reference\n        var entries = this.getEntries();\n        if (entries.length < 3) {\n            var pop = entries.pop() || '';\n            this.setEntries(entries);\n            return pop;\n        }\n        var head = this.record.get(this.headPath) || this.emptyHead;\n        if (!head.p)\n            return '';\n        var last = this.record.get(head.p);\n        this.beforeChange();\n        // update head\n        this.record.set({ path: \"\".concat(this.headPath, \".p\"), data: last.p });\n        // update last node\n        if (last.p)\n            this.record.set({ path: \"\".concat(last.p, \".n\"), data: '' });\n        // erase node\n        this.record.set({ path: head.p, data: undefined });\n        this.afterChange();\n        return last.d;\n    };\n    /**\n     * Remove first value and return it\n     */\n    Dequeue.prototype.shift = function () {\n        // when the array is 1 or 2 entries its easier to just set it again to avoid complications with the head reference\n        var entries = this.getEntries();\n        if (entries.length < 3) {\n            var shift = entries.shift() || '';\n            this.setEntries(entries);\n            return shift;\n        }\n        var head = this.record.get(this.headPath) || this.emptyHead;\n        if (!head.n)\n            return '';\n        var first = this.record.get(head.n);\n        this.beforeChange();\n        // update head\n        this.record.set({ path: \"\".concat(this.headPath, \".n\"), data: first.n });\n        // update first node\n        if (first.n)\n            this.record.set({ path: \"\".concat(first.n, \".p\"), data: '' });\n        // erase node\n        this.record.set({ path: head.n, data: undefined });\n        this.afterChange();\n        return first.d;\n    };\n    /**\n     * Get first available key for inserting node\n     */\n    Dequeue.prototype.getNodeKey = function () {\n        var sortedKeys = Object.keys(this.record.get()).sort(function (a, b) { return Number(a) - Number(b); });\n        var key = \"\".concat(sortedKeys.length);\n        for (var index = 1; index < sortedKeys.length; index++) {\n            if (index !== Number(sortedKeys[index])) {\n                key = \"\".concat(index);\n                break;\n            }\n        }\n        return key;\n    };\n    /**\n     * Add value at first position\n     *\n     * @param {String} entry\n     */\n    Dequeue.prototype.unshift = function (entry) {\n        // check if empty\n        if (this.isEmpty()) {\n            this.setEntries([entry]);\n            return;\n        }\n        var head = this.record.get(this.headPath) || this.emptyHead;\n        var key = this.getNodeKey();\n        this.beforeChange();\n        // set node\n        this.record.set({ path: key, data: { d: entry, p: '', n: head.n } });\n        // update previous first node\n        if (head.n)\n            this.record.set({ path: \"\".concat(head.n, \".p\"), data: key });\n        // update head\n        this.record.set({ path: \"\".concat(this.headPath, \".n\"), data: key });\n        this.afterChange();\n    };\n    /**\n     * Add value at last position\n     *\n     * @param {String} entry\n     */\n    Dequeue.prototype.push = function (entry) {\n        // check if empty\n        if (this.isEmpty()) {\n            this.setEntries([entry]);\n            return;\n        }\n        var head = this.record.get(this.headPath) || this.emptyHead;\n        var key = this.getNodeKey();\n        this.beforeChange();\n        // set node\n        this.record.set({ path: key, data: { d: entry, p: head.p, n: '' } });\n        // update previous last node\n        if (head.p)\n            this.record.set({ path: \"\".concat(head.p, \".n\"), data: key });\n        // update head\n        this.record.set({ path: \"\".concat(this.headPath, \".p\"), data: key });\n        this.afterChange();\n    };\n    /**\n     * Remove a node\n     */\n    Dequeue.prototype.removeNode = function (nodeKey, node) {\n        var head = this.record.get(this.headPath) || this.emptyHead;\n        this.beforeChange();\n        // update previous and next node\n        if (node.p)\n            this.record.set({ path: \"\".concat(node.p, \".n\"), data: node.n });\n        if (node.n)\n            this.record.set({ path: \"\".concat(node.n, \".p\"), data: node.p });\n        // if last node was removed update head\n        if (head.p === nodeKey) {\n            this.record.set({ path: \"\".concat(this.headPath, \".p\"), data: node.p });\n        }\n        // if first node was removed update head\n        if (head.n === nodeKey) {\n            this.record.set({ path: \"\".concat(this.headPath, \".n\"), data: node.n });\n        }\n        // erase node\n        this.record.set({ path: nodeKey, data: undefined });\n        this.afterChange();\n    };\n    /**\n     * Removes an entry from the list. If no index is given it will remove the first occurrence\n     *\n     * @param {String} entry\n     * @param {Number} [index]\n     */\n    Dequeue.prototype.removeEntry = function (entry, index) {\n        var head = this.record.get(this.headPath) || this.emptyHead;\n        var next = head.n;\n        var position = 0;\n        while (next) {\n            var node = this.record.get(next);\n            if (node.d === entry) {\n                if (!index) {\n                    this.removeNode(next, node);\n                    break;\n                }\n                if (index && index === position) {\n                    this.removeNode(next, node);\n                    break;\n                }\n            }\n            ++position;\n            next = node.n;\n        }\n        if (!next) {\n            // got to the end without result\n            throw new Error('no entry removed');\n        }\n    };\n    /**\n     * Inserts an entry in the list. At index 0 is equivalent to unshift, at index = entries.length - 1 it will be inserted before last node, unlike push.\n     *\n     * @param {String} entry\n     * @param {Number} [index]\n     */\n    Dequeue.prototype.insertEntry = function (entry, index) {\n        var hasIndex = this.hasIndex(index);\n        if (index === 0) {\n            this.unshift(entry);\n            return;\n        }\n        if (hasIndex) {\n            var head = this.record.get(this.headPath) || this.emptyHead;\n            var next = head.n;\n            var position = 0;\n            while (next) {\n                var node = this.record.get(next);\n                if (index === position) {\n                    var key = this.getNodeKey();\n                    this.beforeChange();\n                    // set node\n                    this.record.set({ path: key, data: { d: entry, n: next, p: node.p } });\n                    // update next node\n                    this.record.set({ path: \"\".concat(next, \".p\"), data: key });\n                    // update previous node\n                    if (node.p)\n                        this.record.set({ path: \"\".concat(node.p, \".n\"), data: key });\n                    this.afterChange();\n                    break;\n                }\n                ++position;\n                next = node.n;\n            }\n            if (!next) {\n                // got to the end without inserting\n                throw new Error('Index out of range');\n            }\n        }\n    };\n    Dequeue.prototype.subscribe = function (positionOrCallback, callback) {\n        var parameters = utils.normalizeArguments(arguments);\n        if (parameters.path) {\n            if (parameters.path === 'first') {\n                parameters.path = \"\".concat(this.headPath, \".n\");\n            }\n            else if (parameters.path === 'last') {\n                parameters.path = \"\".concat(this.headPath, \".p\");\n            }\n            else {\n                throw new Error('Position must be \"first\" or \"last\" element');\n            }\n        }\n        // Make sure the callback is invoked with an empty array for new records\n        var listCallback = function (scope, cb) {\n            if (parameters.path) {\n                if (parameters.path === \"\".concat(scope.headPath, \".p\")) {\n                    cb(scope.getLast());\n                }\n                if (parameters.path === \"\".concat(scope.headPath, \".n\")) {\n                    cb(scope.getFirst());\n                }\n            }\n            else {\n                cb(scope.getEntries());\n            }\n        }.bind(this, this, parameters.callback);\n        /**\n        * Adding a property onto a function directly is terrible practice,\n        * and we will change this as soon as we have a more seperate approach\n        * of creating lists that doesn't have records default state.\n        *\n        * The reason we are holding a referencing to wrapped array is so that\n        * on unsubscribe it can provide a reference to the actual method the\n        * record is subscribed too.\n        **/\n        this.wrappedFunctions.set(parameters.callback, listCallback);\n        parameters.callback = listCallback;\n        this.subscriptions.push(parameters);\n        this.record.subscribe(parameters, this);\n    };\n    Dequeue.prototype.unsubscribe = function (positionOrCallback, callback) {\n        var parameters = utils.normalizeArguments(arguments);\n        if (parameters.path) {\n            if (parameters.path === 'first') {\n                parameters.path = \"\".concat(this.headPath, \".n\");\n            }\n            else if (parameters.path === 'last') {\n                parameters.path = \"\".concat(this.headPath, \".p\");\n            }\n            else {\n                throw new Error('Position must be \"first\" or \"last\" element');\n            }\n        }\n        var listenCallback = this.wrappedFunctions.get(parameters.callback);\n        parameters.callback = listenCallback;\n        this.wrappedFunctions.delete(parameters.callback);\n        this.subscriptions = this.subscriptions.filter(function (subscription) {\n            if (!parameters.callback && (subscription.path === parameters.path))\n                return false;\n            if (parameters.callback && (subscription.path === parameters.path && subscription.callback === parameters.callback))\n                return false;\n            return true;\n        });\n        this.record.unsubscribe(parameters, this);\n    };\n    /**\n     * Proxies the underlying Record's _update method.\n     */\n    Dequeue.prototype.applyUpdate = function (message) {\n        this.beforeChange();\n        this.originalApplyUpdate(message);\n        this.afterChange();\n    };\n    /**\n     * Validates that the index provided is within the current set of entries.\n     */\n    Dequeue.prototype.hasIndex = function (index) {\n        var hasIndex = false;\n        var entries = this.getEntries();\n        if (index !== undefined) {\n            if (isNaN(index)) {\n                throw new Error('Index must be a number');\n            }\n            if (index !== entries.length && (index >= entries.length || index < 0)) {\n                throw new Error('Index must be within current entries');\n            }\n            hasIndex = true;\n        }\n        return hasIndex;\n    };\n    /**\n     * Establishes the current structure of the list, provided the client has attached any\n     * add / move / remove listener\n     *\n     * This will be called before any change to the list, regardsless if the change was triggered\n     * by an incoming message from the server or by the client\n     */\n    Dequeue.prototype.beforeChange = function () {\n        this.hasAddListener = this.hasListeners(constants_1.EVENT.ENTRY_ADDED_EVENT);\n        this.hasRemoveListener = this.hasListeners(constants_1.EVENT.ENTRY_REMOVED_EVENT);\n        this.hasMoveListener = this.hasListeners(constants_1.EVENT.ENTRY_MOVED_EVENT);\n        if (this.hasAddListener || this.hasRemoveListener || this.hasMoveListener) {\n            this.beforeStructure = this.getStructure();\n        }\n        else {\n            this.beforeStructure = null;\n        }\n    };\n    /**\n     * Compares the structure of the list after a change to its previous structure and notifies\n     * any add / move / remove listener. Won't do anything if no listeners are attached.\n     */\n    Dequeue.prototype.afterChange = function () {\n        if (this.beforeStructure === null) {\n            return;\n        }\n        var after = this.getStructure();\n        var before = this.beforeStructure;\n        var entry;\n        var i;\n        if (this.hasRemoveListener) {\n            for (entry in before) {\n                for (i = 0; i < before[entry].length; i++) {\n                    if (after[entry] === undefined || after[entry][i] === undefined) {\n                        this.emit(constants_1.EVENT.ENTRY_REMOVED_EVENT, entry, before[entry][i]);\n                    }\n                }\n            }\n        }\n        if (this.hasAddListener || this.hasMoveListener) {\n            for (entry in after) {\n                if (before[entry] === undefined) {\n                    for (i = 0; i < after[entry].length; i++) {\n                        this.emit(constants_1.EVENT.ENTRY_ADDED_EVENT, entry, after[entry][i]);\n                    }\n                }\n                else {\n                    for (i = 0; i < after[entry].length; i++) {\n                        if (before[entry][i] !== after[entry][i]) {\n                            if (before[entry][i] === undefined) {\n                                this.emit(constants_1.EVENT.ENTRY_ADDED_EVENT, entry, after[entry][i]);\n                            }\n                            else {\n                                this.emit(constants_1.EVENT.ENTRY_MOVED_EVENT, entry, after[entry][i]);\n                            }\n                        }\n                    }\n                }\n            }\n        }\n    };\n    /**\n     * Iterates through the list and creates a map with the entry as a key\n     * and an array of its position(s) within the list as a value, e.g.\n     *\n     * {\n     *   'recordA': [ 0, 3 ],\n     *   'recordB': [ 1 ],\n     *   'recordC': [ 2 ]\n     * }\n     */\n    Dequeue.prototype.getStructure = function () {\n        var structure = {};\n        var i;\n        var entries = this.getEntries();\n        for (i = 0; i < entries.length; i++) {\n            if (structure[entries[i]] === undefined) {\n                structure[entries[i]] = [i];\n            }\n            else {\n                structure[entries[i]].push(i);\n            }\n        }\n        return structure;\n    };\n    Dequeue.prototype.destroy = function () {\n        for (var i = 0; i < this.subscriptions.length; i++) {\n            this.record.unsubscribe(this.subscriptions[i], this);\n        }\n        this.wrappedFunctions.clear();\n        this.record.removeContext(this);\n    };\n    return Dequeue;\n}(emitter_1.Emitter));\nexports.Dequeue = Dequeue;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SingleNotifier = void 0;\nvar constants_1 = require(\"../constants\");\n/**\n * Provides a scaffold for subscriptionless requests to deepstream, such as the SNAPSHOT\n * and HAS functionality. The SingleNotifier multiplexes all the client requests so\n * that they can can be notified at once, and also includes reconnection funcionality\n * incase the connection drops.\n *\n * @param {Services} services          The deepstream client\n * @param {Options} options     Function to call to allow resubscribing\n *\n * @constructor\n */\nvar SingleNotifier = /** @class */ (function () {\n    function SingleNotifier(services, action, timeoutDuration) {\n        this.services = services;\n        this.action = action;\n        this.requests = new Map();\n        this.internalRequests = new Map();\n        this.limboQueue = [];\n        this.services.connection.onLost(this.onConnectionLost.bind(this));\n        this.services.connection.onExitLimbo(this.onExitLimbo.bind(this));\n        this.services.connection.onReestablished(this.onConnectionReestablished.bind(this));\n    }\n    /**\n     * Add a request. If one has already been made it will skip the server request\n     * and multiplex the response\n     *\n     * @param {String} name An identifier for the request, e.g. a record name\n     * @param {Object} response An object with property `callback` or `resolve` and `reject`\n     *\n     * @public\n     * @returns {void}\n     */\n    SingleNotifier.prototype.request = function (name, callback) {\n        var req = this.requests.get(name);\n        if (req) {\n            req.push(callback);\n            return;\n        }\n        this.requests.set(name, [callback]);\n        var message = {\n            topic: constants_1.TOPIC.RECORD,\n            action: this.action,\n            name: name\n        };\n        if (this.services.connection.isConnected) {\n            this.services.connection.sendMessage(message);\n            this.services.timeoutRegistry.add({ message: message });\n        }\n        else if (this.services.connection.isInLimbo) {\n            this.limboQueue.push(message);\n        }\n        else {\n            this.requests.delete(name);\n            callback(constants_1.EVENT.CLIENT_OFFLINE);\n        }\n    };\n    /**\n     * Adds a callback to a (possibly) inflight request that will be called\n     * on the response.\n     */\n    SingleNotifier.prototype.register = function (name, context, callback) {\n        var request = this.internalRequests.get(name);\n        if (!request) {\n            this.internalRequests.set(name, [{ callback: callback, context: context }]);\n        }\n        else {\n            request.push({ callback: callback, context: context });\n        }\n    };\n    SingleNotifier.prototype.recieve = function (message, error, data) {\n        this.services.timeoutRegistry.remove(message);\n        var name = message.name;\n        var responses = this.requests.get(name) || [];\n        var internalResponses = this.internalRequests.get(name) || [];\n        if (!responses && !internalResponses) {\n            return;\n        }\n        for (var i = 0; i < internalResponses.length; i++) {\n            internalResponses[i].callback.call(internalResponses[i].context, message);\n        }\n        this.internalRequests.delete(name);\n        // todo we can clean this up and do cb = (error, data) => error ? reject(error) : resolve()\n        for (var i = 0; i < responses.length; i++) {\n            responses[i](error, data);\n        }\n        this.requests.delete(name);\n        return;\n    };\n    SingleNotifier.prototype.onConnectionLost = function () {\n        this.requests.forEach(function (responses) {\n            responses.forEach(function (response) { return response(constants_1.EVENT.CLIENT_OFFLINE); });\n        });\n        this.requests.clear();\n    };\n    SingleNotifier.prototype.onExitLimbo = function () {\n        for (var i = 0; i < this.limboQueue.length; i++) {\n            var message = this.limboQueue[i];\n            var requests = this.requests.get(message.name);\n            if (requests) {\n                requests.forEach(function (cb) { return cb(constants_1.EVENT.CLIENT_OFFLINE); });\n            }\n        }\n        this.requests.clear();\n        this.limboQueue = [];\n    };\n    SingleNotifier.prototype.onConnectionReestablished = function () {\n        for (var i = 0; i < this.limboQueue.length; i++) {\n            var message = this.limboQueue[i];\n            this.services.connection.sendMessage(message);\n            this.services.timeoutRegistry.add({ message: message });\n        }\n    };\n    return SingleNotifier;\n}());\nexports.SingleNotifier = SingleNotifier;\n", "\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n    __assign = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign.apply(this, arguments);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.WriteAcknowledgementService = void 0;\nvar constants_1 = require(\"../constants\");\nvar WriteAcknowledgementService = /** @class */ (function () {\n    function WriteAcknowledgementService(services) {\n        this.services = services;\n        this.responses = new Map();\n        this.count = 1;\n        this.services.connection.onLost(this.onConnectionLost.bind(this));\n    }\n    /**\n     * Send message with write ack callback.\n     */\n    WriteAcknowledgementService.prototype.send = function (message, callback) {\n        if (this.services.connection.isConnected === false) {\n            this.services.timerRegistry.requestIdleCallback(callback.bind(this, constants_1.EVENT.CLIENT_OFFLINE, message.name));\n            return;\n        }\n        var correlationId = this.count.toString();\n        this.responses.set(correlationId, callback);\n        this.services.connection.sendMessage(__assign(__assign({}, message), { correlationId: correlationId, isWriteAck: true }));\n        this.count++;\n    };\n    WriteAcknowledgementService.prototype.recieve = function (message) {\n        var id = message.correlationId;\n        var response = this.responses.get(id);\n        if (!response ||\n            (message.action !== constants_1.RECORD_ACTION.WRITE_ACKNOWLEDGEMENT && !message.isError && !message.isWriteAck)) {\n            return;\n        }\n        if (message.action === constants_1.RECORD_ACTION.VERSION_EXISTS) {\n            response(message.reason || 'Write failed due to conflict', message.name);\n        }\n        else {\n            message.isError\n                ? response(constants_1.RECORD_ACTION[message.action], message.name)\n                : response(null, message.name);\n        }\n        this.responses.delete(id);\n    };\n    WriteAcknowledgementService.prototype.onConnectionLost = function () {\n        this.responses.forEach(function (response) { return response(constants_1.EVENT.CLIENT_OFFLINE); });\n        this.responses.clear();\n    };\n    return WriteAcknowledgementService;\n}());\nexports.WriteAcknowledgementService = WriteAcknowledgementService;\n", "\"use strict\";\nvar __read = (this && this.__read) || function (o, n) {\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n    if (!m) return o;\n    var i = m.call(o), r, ar = [], e;\n    try {\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n    }\n    catch (error) { e = { error: error }; }\n    finally {\n        try {\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\n        }\n        finally { if (e) throw e.error; }\n    }\n    return ar;\n};\nvar __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n    if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n        if (ar || !(i in from)) {\n            if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n            ar[i] = from[i];\n        }\n    }\n    return to.concat(ar || Array.prototype.slice.call(from));\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DirtyService = void 0;\nvar DirtyService = /** @class */ (function () {\n    function DirtyService(storage, dirtyStorageName) {\n        this.storage = storage;\n        this.dirtyStorageName = dirtyStorageName;\n        this.dirtyRecords = new Map();\n        this.loadedCallback = [];\n        this.flushTimeout = null;\n        this.loaded = false;\n        this.save = this.save.bind(this);\n        this.load();\n    }\n    DirtyService.prototype.isDirty = function (recordName) {\n        return this.dirtyRecords.has(recordName);\n    };\n    DirtyService.prototype.setDirty = function (recordName, isDirty) {\n        var changed = true;\n        if (isDirty) {\n            this.dirtyRecords.set(recordName, true);\n        }\n        else {\n            changed = this.dirtyRecords.delete(recordName);\n        }\n        if (!this.flushTimeout && changed) {\n            this.flushTimeout = setTimeout(this.save, 1000);\n        }\n    };\n    DirtyService.prototype.save = function () {\n        this.storage.set(this.dirtyStorageName, 1, __spreadArray([], __read(this.dirtyRecords), false), function () { });\n        if (this.flushTimeout) {\n            clearTimeout(this.flushTimeout);\n        }\n        this.flushTimeout = null;\n    };\n    DirtyService.prototype.whenLoaded = function (context, callback) {\n        if (this.loaded) {\n            callback.call(context);\n            return;\n        }\n        this.loadedCallback.push({ callback: callback, context: context });\n    };\n    DirtyService.prototype.getAll = function () {\n        return this.dirtyRecords;\n    };\n    DirtyService.prototype.load = function () {\n        var _this = this;\n        if (this.loaded) {\n            return;\n        }\n        this.storage.get(this.dirtyStorageName, function (recordName, version, data) {\n            _this.dirtyRecords = data ? new Map(data) : new Map();\n            _this.loaded = true;\n            _this.loadedCallback.forEach(function (_a) {\n                var callback = _a.callback, context = _a.context;\n                return callback.call(context);\n            });\n        });\n    };\n    return DirtyService;\n}());\nexports.DirtyService = DirtyService;\n", "\"use strict\";\nvar __values = (this && this.__values) || function(o) {\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n    if (m) return m.call(o);\n    if (o && typeof o.length === \"number\") return {\n        next: function () {\n            if (o && i >= o.length) o = void 0;\n            return { value: o && o[i++], done: !o };\n        }\n    };\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nvar __read = (this && this.__read) || function (o, n) {\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n    if (!m) return o;\n    var i = m.call(o), r, ar = [], e;\n    try {\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n    }\n    catch (error) { e = { error: error }; }\n    finally {\n        try {\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\n        }\n        finally { if (e) throw e.error; }\n    }\n    return ar;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MergeStrategyService = void 0;\nvar constants_1 = require(\"../constants\");\nvar MergeStrategyService = /** @class */ (function () {\n    function MergeStrategyService(services, defaultStrategy) {\n        this.services = services;\n        this.defaultStrategy = defaultStrategy;\n        this.strategiesByRecord = new Map();\n        this.strategiesByPattern = new Map();\n    }\n    MergeStrategyService.prototype.setMergeStrategyByName = function (recordName, strategy) {\n        this.strategiesByRecord.set(recordName, strategy);\n    };\n    MergeStrategyService.prototype.setMergeStrategyByPattern = function (pattern, strategy) {\n        this.strategiesByPattern.set(pattern, strategy);\n    };\n    MergeStrategyService.prototype.merge = function (remoteRecord, localVersion, localData, callback, context) {\n        var e_1, _a;\n        var recordName = remoteRecord.name;\n        var exactMergeStrategy = this.strategiesByRecord.get(recordName);\n        if (exactMergeStrategy) {\n            exactMergeStrategy(localData, localVersion, remoteRecord.parsedData, remoteRecord.version, function (error, data) {\n                callback.call(context, error, remoteRecord, data, localVersion, localData);\n            });\n            return;\n        }\n        try {\n            for (var _b = __values(this.strategiesByPattern), _c = _b.next(); !_c.done; _c = _b.next()) {\n                var _d = __read(_c.value, 2), pattern = _d[0], patternMergeStrategy = _d[1];\n                if (pattern.test(recordName)) {\n                    patternMergeStrategy(localData, localVersion, remoteRecord.parsedData, remoteRecord.version, function (error, data) {\n                        callback.call(context, error, remoteRecord, data, localVersion, localData);\n                    });\n                    return;\n                }\n            }\n        }\n        catch (e_1_1) { e_1 = { error: e_1_1 }; }\n        finally {\n            try {\n                if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n            }\n            finally { if (e_1) throw e_1.error; }\n        }\n        if (this.defaultStrategy) {\n            this.defaultStrategy(localData, localVersion, remoteRecord.parsedData, remoteRecord.version, function (error, data) {\n                callback.call(context, error, remoteRecord, data, localVersion, localData);\n            });\n            return;\n        }\n        this.services.logger.error({ topic: constants_1.TOPIC.RECORD }, constants_1.EVENT.RECORD_VERSION_EXISTS, { remoteVersion: remoteRecord.version, recordName: recordName });\n    };\n    return MergeStrategyService;\n}());\nexports.MergeStrategyService = MergeStrategyService;\n", "\"use strict\";\nvar __read = (this && this.__read) || function (o, n) {\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n    if (!m) return o;\n    var i = m.call(o), r, ar = [], e;\n    try {\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n    }\n    catch (error) { e = { error: error }; }\n    finally {\n        try {\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\n        }\n        finally { if (e) throw e.error; }\n    }\n    return ar;\n};\nvar __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n    if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n        if (ar || !(i in from)) {\n            if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n            ar[i] = from[i];\n        }\n    }\n    return to.concat(ar || Array.prototype.slice.call(from));\n};\nvar __values = (this && this.__values) || function(o) {\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n    if (m) return m.call(o);\n    if (o && typeof o.length === \"number\") return {\n        next: function () {\n            if (o && i >= o.length) o = void 0;\n            return { value: o && o[i++], done: !o };\n        }\n    };\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.RecordHandler = void 0;\nvar utils = require(\"../util/utils\");\nvar constants_1 = require(\"../constants\");\nvar record_core_1 = require(\"./record-core\");\nvar record_1 = require(\"./record\");\nvar anonymous_record_1 = require(\"./anonymous-record\");\nvar list_1 = require(\"./list\");\nvar dequeue_1 = require(\"./dequeue\");\nvar listener_1 = require(\"../util/listener\");\nvar single_notifier_1 = require(\"./single-notifier\");\nvar write_ack_service_1 = require(\"./write-ack-service\");\nvar dirty_service_1 = require(\"./dirty-service\");\nvar merge_strategy_service_1 = require(\"./merge-strategy-service\");\nvar bulk_subscription_service_1 = require(\"../util/bulk-subscription-service\");\nvar RecordHandler = /** @class */ (function () {\n    function RecordHandler(services, options, recordServices, listener) {\n        var _a;\n        if (listener === void 0) { listener = new listener_1.Listener(constants_1.TOPIC.RECORD, services); }\n        this.services = services;\n        this.options = options;\n        this.listener = listener;\n        this.recordCores = new Map();\n        this.notifyCallbacks = new Map();\n        this.recordServices = recordServices || {\n            bulkSubscriptionService: (_a = {},\n                _a[constants_1.RECORD_ACTION.SUBSCRIBECREATEANDREAD] = this.getBulkSubscriptionService(constants_1.RECORD_ACTION.SUBSCRIBECREATEANDREAD),\n                _a[constants_1.RECORD_ACTION.SUBSCRIBEANDREAD] = this.getBulkSubscriptionService(constants_1.RECORD_ACTION.SUBSCRIBEANDREAD),\n                _a[constants_1.RECORD_ACTION.SUBSCRIBEANDHEAD] = this.getBulkSubscriptionService(constants_1.RECORD_ACTION.SUBSCRIBEANDHEAD),\n                _a),\n            writeAckService: new write_ack_service_1.WriteAcknowledgementService(services),\n            readRegistry: new single_notifier_1.SingleNotifier(services, constants_1.RECORD_ACTION.READ, options.recordReadTimeout),\n            headRegistry: new single_notifier_1.SingleNotifier(services, constants_1.RECORD_ACTION.HEAD, options.recordReadTimeout),\n            dirtyService: new dirty_service_1.DirtyService(services.storage, options.dirtyStorageName),\n            mergeStrategy: new merge_strategy_service_1.MergeStrategyService(services, options.mergeStrategy)\n        };\n        this.dirtyService = this.recordServices.dirtyService;\n        this.sendUpdatedData = this.sendUpdatedData.bind(this);\n        this.onMergeCompleted = this.onMergeCompleted.bind(this);\n        this.getRecordCore = this.getRecordCore.bind(this);\n        this.removeRecord = this.removeRecord.bind(this);\n        this.onBulkSubscriptionSent = this.onBulkSubscriptionSent.bind(this);\n        this.services.connection.registerHandler(constants_1.TOPIC.RECORD, this.handle.bind(this));\n        this.services.connection.onReestablished(this.syncDirtyRecords.bind(this));\n        if (this.services.connection.isConnected) {\n            this.syncDirtyRecords();\n        }\n    }\n    /**\n     * Returns all the available data-sync names.\n     *\n     * Please note: Lists, AnonymousRecords and Records are all essentially\n     * the same thing within the SDK, so this array will contain a list of\n     * everything.\n     *\n     * Due to how records work as well even after a discard this list will\n     * take a while to update. This is intentional as their is an option for\n     * how long a record will survive before being discarded! You can change that\n     * via the `recordDiscardTimeout: milliseconds` option.\n     */\n    RecordHandler.prototype.names = function () {\n        return __spreadArray([], __read(this.recordCores.keys()), false);\n    };\n    RecordHandler.prototype.setMergeStrategy = function (recordName, mergeStrategy) {\n        if (typeof mergeStrategy === 'function') {\n            this.recordServices.mergeStrategy.setMergeStrategyByName(recordName, mergeStrategy);\n        }\n        else {\n            throw new Error('Invalid merge strategy: Must be a Function');\n        }\n    };\n    RecordHandler.prototype.setMergeStrategyRegExp = function (regexp, mergeStrategy) {\n        if (typeof mergeStrategy === 'function') {\n            this.recordServices.mergeStrategy.setMergeStrategyByPattern(regexp, mergeStrategy);\n        }\n        else {\n            throw new Error('Invalid merge strategy: Must be a Function');\n        }\n    };\n    /**\n   * Returns an existing record or creates a new one.\n   *\n   * @param   {String} name the unique name of the record\n   */\n    RecordHandler.prototype.getRecord = function (name) {\n        return new record_1.Record(this.getRecordCore(name));\n    };\n    /**\n     * Returns an existing List or creates a new one. A list is a specialised\n     * type of record that holds an array of recordNames.\n     *\n     * @param   {String} name       the unique name of the list\n     */\n    RecordHandler.prototype.getList = function (name) {\n        return new list_1.List(this.getRecordCore(name));\n    };\n    /**\n     * Returns an existing Dequeue or creates a new one. A Dq is a specialised\n     * type of record that provides a double-ended queue interface.\n     *\n     * @param   {String} name       the unique name of the Dq\n     */\n    RecordHandler.prototype.getDq = function (name) {\n        return new dequeue_1.Dequeue(this.getRecordCore(name));\n    };\n    /**\n     * Returns an anonymous record. A anonymous record is effectively\n     * a wrapper that mimicks the API of a record, but allows for the\n     * underlying record to be swapped without loosing subscriptions etc.\n     *\n     * This is particularly useful when selecting from a number of similarly\n     * structured records. E.g. a list of users that can be choosen from a list\n     *\n     * The only API difference to a normal record is an additional setName( name ) method.\n     */\n    RecordHandler.prototype.getAnonymousRecord = function () {\n        return new anonymous_record_1.AnonymousRecord(this.getRecordCore);\n    };\n    /**\n     * Allows to listen for record subscriptions made by this or other clients. This\n     * is useful to create \"active\" data providers, e.g. providers that only provide\n     * data for a particular record if a user is actually interested in it\n     *\n     * @param   {String}   pattern  A combination of alpha numeric characters and wildcards( * )\n     * @param   {Function} callback\n     */\n    RecordHandler.prototype.listen = function (pattern, callback) {\n        this.listener.listen(pattern, callback);\n    };\n    /**\n     * Removes a listener that was previously registered with listenForSubscriptions\n     *\n     * @param   {String}   pattern  A combination of alpha numeric characters and wildcards( * )\n     */\n    RecordHandler.prototype.unlisten = function (pattern) {\n        this.listener.unlisten(pattern);\n    };\n    RecordHandler.prototype.snapshot = function (name, callback) {\n        var _this = this;\n        if (typeof name !== 'string' || name.length === 0) {\n            throw new Error('invalid argument: name');\n        }\n        if (callback !== undefined && typeof callback !== 'function') {\n            throw new Error('invalid argument: callback');\n        }\n        var recordCore = this.recordCores.get(name);\n        if (recordCore) {\n            if (callback) {\n                recordCore.whenReady(null, function () {\n                    callback(null, recordCore.get());\n                });\n            }\n            else {\n                return new Promise(function (resolve, reject) {\n                    recordCore.whenReady(null, function () {\n                        resolve(recordCore.get());\n                    });\n                });\n            }\n            return;\n        }\n        if (callback) {\n            this.recordServices.readRegistry.request(name, callback);\n        }\n        else {\n            return new Promise(function (resolve, reject) {\n                _this.recordServices.readRegistry.request(name, function (error, data) { return error ? reject(error) : resolve(data); });\n            });\n        }\n    };\n    RecordHandler.prototype.has = function (name, callback) {\n        var _this = this;\n        if (typeof name !== 'string' || name.length === 0) {\n            throw new Error('invalid argument: name');\n        }\n        if (callback !== undefined && typeof callback !== 'function') {\n            throw new Error('invalid argument: callback');\n        }\n        var cb;\n        if (!callback) {\n            return new Promise(function (resolve, reject) {\n                cb = function (error, version) { return error ? reject(error) : resolve(version !== -1); };\n                _this.head(name, cb);\n            });\n        }\n        cb = function (error, version) { return error ? callback(error, null) : callback(null, version !== -1); };\n        this.head(name, cb);\n    };\n    RecordHandler.prototype.head = function (name, callback) {\n        var _this = this;\n        if (typeof name !== 'string' || name.length === 0) {\n            throw new Error('invalid argument: name');\n        }\n        if (callback !== undefined && typeof callback !== 'function') {\n            throw new Error('invalid argument: callback');\n        }\n        var recordCore = this.recordCores.get(name);\n        if (recordCore) {\n            if (callback) {\n                recordCore.whenReady(null, function () {\n                    callback(null, recordCore.version);\n                });\n            }\n            else {\n                return new Promise(function (resolve, reject) {\n                    recordCore.whenReady(null, function () {\n                        resolve(recordCore.version);\n                    });\n                });\n            }\n            return;\n        }\n        if (callback) {\n            this.recordServices.headRegistry.request(name, callback);\n        }\n        else {\n            return new Promise(function (resolve, reject) {\n                _this.recordServices.headRegistry.request(name, function (error, data) { return error ? reject(error) : resolve(data); });\n            });\n        }\n    };\n    RecordHandler.prototype.setDataWithAck = function (recordName) {\n        var _this = this;\n        var rest = [];\n        for (var _i = 1; _i < arguments.length; _i++) {\n            rest[_i - 1] = arguments[_i];\n        }\n        var args = utils.normalizeSetArguments(arguments, 1);\n        if (!args.callback) {\n            return new Promise(function (resolve, reject) {\n                args.callback = function (error) { return error === null ? resolve() : reject(error); };\n                _this.sendSetData(recordName, -1, args);\n            });\n        }\n        this.sendSetData(recordName, -1, args);\n    };\n    RecordHandler.prototype.setData = function (recordName) {\n        var args = utils.normalizeSetArguments(arguments, 1);\n        this.sendSetData(recordName, -1, args);\n    };\n    RecordHandler.prototype.delete = function (recordName, callback) {\n        // TODO: Use a delete service to make the logic in record core and here common\n        throw Error('Delete is not yet supported without use of a Record');\n    };\n    RecordHandler.prototype.notify = function (recordNames, callback) {\n        var _this = this;\n        if (!this.services.connection.isConnected) {\n            if (callback) {\n                callback(constants_1.EVENT.CLIENT_OFFLINE);\n                return;\n            }\n            return new Promise(function (resolve, reject) { return reject(constants_1.EVENT.CLIENT_OFFLINE); });\n        }\n        var correlationId = utils.getUid();\n        this.services.connection.sendMessage({\n            topic: constants_1.TOPIC.RECORD,\n            action: constants_1.RECORD_ACTION.NOTIFY,\n            names: recordNames,\n            correlationId: correlationId\n        });\n        if (callback) {\n            this.notifyCallbacks.set(correlationId, callback);\n        }\n        else {\n            return new Promise(function (resolve, reject) {\n                _this.notifyCallbacks.set(correlationId, function (error) { return error ? reject(error) : resolve(); });\n            });\n        }\n    };\n    RecordHandler.prototype.sendSetData = function (recordName, version, args) {\n        var path = args.path, data = args.data, callback = args.callback;\n        if (!recordName || typeof recordName !== 'string' || recordName.length === 0) {\n            throw new Error('invalid argument: recordName must be an non empty string');\n        }\n        if (!path && (data === null || typeof data !== 'object')) {\n            throw new Error('invalid argument: data must be an object when no path is provided');\n        }\n        var recordCores = this.recordCores.get(recordName);\n        if (recordCores) {\n            recordCores.set({ path: path, data: data, callback: callback });\n            return;\n        }\n        var action;\n        if (path) {\n            if (data === undefined) {\n                action = constants_1.RECORD_ACTION.ERASE;\n            }\n            else {\n                action = constants_1.RECORD_ACTION.CREATEANDPATCH;\n            }\n        }\n        else {\n            action = constants_1.RECORD_ACTION.CREATEANDUPDATE;\n        }\n        var message = {\n            topic: constants_1.TOPIC.RECORD,\n            action: action,\n            name: recordName,\n            path: path,\n            version: version,\n            parsedData: data\n        };\n        if (callback) {\n            this.recordServices.writeAckService.send(message, callback);\n        }\n        else {\n            this.services.connection.sendMessage(message);\n        }\n    };\n    RecordHandler.prototype.saveToOfflineStorage = function () {\n        this.recordCores.forEach(function (recordCore) { return recordCore.saveRecordToOffline(); });\n    };\n    RecordHandler.prototype.clearOfflineStorage = function (callback) {\n        var _this = this;\n        if (callback) {\n            this.services.storage.reset(callback);\n        }\n        else {\n            return new Promise(function (resolve, reject) {\n                _this.services.storage.reset(function (error) { return error ? reject(error) : resolve(); });\n            });\n        }\n    };\n    /**\n     * Will be called by the client for incoming messages on the RECORD topic\n     *\n     * @param   {Object} message parsed and validated deepstream message\n     */\n    RecordHandler.prototype.handle = function (message) {\n        var _this = this;\n        if ((message.action === constants_1.RECORD_ACTION.NOTIFY && message.isAck) ||\n            (message.isError && message.action === constants_1.RECORD_ACTION.RECORD_NOTIFY_ERROR)) {\n            var callback = this.notifyCallbacks.get(message.correlationId);\n            if (callback) {\n                callback(message.data || null);\n                this.notifyCallbacks.delete(message.correlationId);\n            }\n            else {\n                this.services.logger.error(message, constants_1.RECORD_ACTION.NOTIFY);\n            }\n            return;\n        }\n        if (message.isAck) {\n            this.services.timeoutRegistry.remove(message);\n            return;\n        }\n        if (message.action === constants_1.RECORD_ACTION.SUBSCRIPTION_FOR_PATTERN_FOUND ||\n            message.action === constants_1.RECORD_ACTION.SUBSCRIPTION_FOR_PATTERN_REMOVED ||\n            message.action === constants_1.RECORD_ACTION.LISTEN ||\n            message.action === constants_1.RECORD_ACTION.UNLISTEN) {\n            this.listener.handle(message);\n            return;\n        }\n        if (message.isWriteAck && message.action !== constants_1.RECORD_ACTION.VERSION_EXISTS) {\n            this.recordServices.writeAckService.recieve(message);\n            return;\n        }\n        if (message.action === constants_1.RECORD_ACTION.READ_RESPONSE || message.originalAction === constants_1.RECORD_ACTION.READ) {\n            if (message.isError) {\n                this.recordServices.readRegistry.recieve(message, constants_1.RECORD_ACTION[message.action]);\n            }\n            else {\n                this.recordServices.readRegistry.recieve(message, null, message.parsedData);\n            }\n            return;\n        }\n        if (message.action === constants_1.RECORD_ACTION.HEAD_RESPONSE_BULK) {\n            Object.keys(message.versions).forEach(function (name) {\n                _this.recordServices.headRegistry.recieve({\n                    topic: constants_1.TOPIC.RECORD,\n                    action: constants_1.RECORD_ACTION.HEAD_RESPONSE,\n                    originalAction: constants_1.RECORD_ACTION.HEAD,\n                    name: name,\n                    version: message.versions[name]\n                }, null, message.versions[name]);\n            });\n            return;\n        }\n        if (message.action === constants_1.RECORD_ACTION.HEAD_RESPONSE ||\n            message.originalAction === constants_1.RECORD_ACTION.HEAD) {\n            if (message.isError) {\n                this.recordServices.headRegistry.recieve(message, constants_1.RECORD_ACTION[message.action]);\n            }\n            else {\n                this.recordServices.headRegistry.recieve(message, null, message.version);\n            }\n            return;\n        }\n        var recordCore = this.recordCores.get(message.name);\n        if (recordCore) {\n            recordCore.handle(message);\n            return;\n        }\n        if (message.action === constants_1.RECORD_ACTION.VERSION_EXISTS) {\n            return;\n        }\n        if (message.action === constants_1.RECORD_ACTION.SUBSCRIPTION_HAS_PROVIDER ||\n            message.action === constants_1.RECORD_ACTION.SUBSCRIPTION_HAS_NO_PROVIDER) {\n            // record can receive a HAS_PROVIDER after discarding the record\n            return;\n        }\n        if (message.isError) {\n            this.services.logger.error(message);\n            return;\n        }\n        this.services.logger.error(message, constants_1.EVENT.UNSOLICITED_MESSAGE);\n    };\n    /**\n     * Callback for 'deleted' and 'discard' events from a record. Removes the record from\n     * the registry\n     */\n    RecordHandler.prototype.removeRecord = function (recordName) {\n        this.recordCores.delete(recordName);\n    };\n    RecordHandler.prototype.getRecordCore = function (recordName) {\n        var recordCore = this.recordCores.get(recordName);\n        if (!recordCore) {\n            recordCore = new record_core_1.RecordCore(recordName, this.services, this.options, this.recordServices, this.removeRecord);\n            this.recordCores.set(recordName, recordCore);\n        }\n        return recordCore;\n    };\n    RecordHandler.prototype.syncDirtyRecords = function () {\n        this.dirtyService.whenLoaded(this, this._syncDirtyRecords);\n    };\n    // TODO: Expose issues here, as there isn't a reason why a record core needs to exist in\n    // order to sync up\n    RecordHandler.prototype._syncDirtyRecords = function () {\n        var e_1, _a;\n        var dirtyRecords = this.dirtyService.getAll();\n        try {\n            for (var dirtyRecords_1 = __values(dirtyRecords), dirtyRecords_1_1 = dirtyRecords_1.next(); !dirtyRecords_1_1.done; dirtyRecords_1_1 = dirtyRecords_1.next()) {\n                var _b = __read(dirtyRecords_1_1.value, 1), recordName = _b[0];\n                var recordCore = this.recordCores.get(recordName);\n                if (recordCore && recordCore.references.size > 0) {\n                    // if it isn't zero the record core takes care of it\n                    continue;\n                }\n                this.services.storage.get(recordName, this.sendUpdatedData);\n            }\n        }\n        catch (e_1_1) { e_1 = { error: e_1_1 }; }\n        finally {\n            try {\n                if (dirtyRecords_1_1 && !dirtyRecords_1_1.done && (_a = dirtyRecords_1.return)) _a.call(dirtyRecords_1);\n            }\n            finally { if (e_1) throw e_1.error; }\n        }\n    };\n    RecordHandler.prototype.sendUpdatedData = function (recordName, version, data) {\n        var _this = this;\n        if (version === -1) {\n            // deleted locally, how to merge?\n            this.services.logger.warn({ topic: constants_1.TOPIC.RECORD }, constants_1.RECORD_ACTION.DELETE, \"Deleted record while offline, can't resolve\");\n            return;\n        }\n        var callback = function (error, name) {\n            if (!error) {\n                _this.dirtyService.setDirty(name, false);\n            }\n            else {\n                _this.recordServices.readRegistry.register(name, _this, function (message) {\n                    _this.recordServices.mergeStrategy.merge(message, version, data, _this.onMergeCompleted, _this);\n                });\n            }\n        };\n        this.sendSetData(recordName, version, { data: data, callback: callback });\n    };\n    RecordHandler.prototype.onMergeCompleted = function (error, _a, mergeData) {\n        var name = _a.name, version = _a.version;\n        this.sendSetData(name, version + 1, { data: mergeData });\n    };\n    RecordHandler.prototype.getBulkSubscriptionService = function (bulkSubscribe) {\n        return new bulk_subscription_service_1.BulkSubscriptionService(this.services, this.options.subscriptionInterval, constants_1.TOPIC.RECORD, bulkSubscribe, constants_1.RECORD_ACTION.UNSUBSCRIBE, this.onBulkSubscriptionSent);\n    };\n    RecordHandler.prototype.onBulkSubscriptionSent = function (message) {\n        if (!message.names) {\n            this.services.timeoutRegistry.add({ message: message });\n        }\n    };\n    return RecordHandler;\n}());\nexports.RecordHandler = RecordHandler;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.PresenceHandler = void 0;\nvar constants_1 = require(\"../constants\");\nvar emitter_1 = require(\"../util/emitter\");\nvar bulk_subscription_service_1 = require(\"../util/bulk-subscription-service\");\nvar ONLY_EVENT = 'OE';\nfunction validateQueryArguments(rest) {\n    var users = null;\n    var callback = null;\n    if (rest.length === 1) {\n        if (Array.isArray(rest[0])) {\n            users = rest[0];\n        }\n        else {\n            if (typeof rest[0] !== 'function') {\n                throw new Error('invalid argument: \"callback\"');\n            }\n            callback = rest[0];\n        }\n    }\n    else if (rest.length === 2) {\n        users = rest[0];\n        callback = rest[1];\n        if (!Array.isArray(users) || typeof callback !== 'function') {\n            throw new Error('invalid argument: \"users\" or \"callback\"');\n        }\n    }\n    return { users: users, callback: callback };\n}\nvar PresenceHandler = /** @class */ (function () {\n    function PresenceHandler(services, options) {\n        this.services = services;\n        this.globalSubscriptionEmitter = new emitter_1.Emitter();\n        this.subscriptionEmitter = new emitter_1.Emitter();\n        this.queryEmitter = new emitter_1.Emitter();\n        this.queryAllEmitter = new emitter_1.Emitter();\n        this.counter = 0;\n        this.limboQueue = [];\n        this.bulkSubscription = new bulk_subscription_service_1.BulkSubscriptionService(this.services, options.subscriptionInterval, constants_1.TOPIC.PRESENCE, constants_1.PRESENCE_ACTION.SUBSCRIBE, constants_1.PRESENCE_ACTION.UNSUBSCRIBE, this.onBulkSubscriptionSent.bind(this));\n        this.services.connection.registerHandler(constants_1.TOPIC.PRESENCE, this.handle.bind(this));\n        this.services.connection.onExitLimbo(this.onExitLimbo.bind(this));\n        this.services.connection.onLost(this.onExitLimbo.bind(this));\n        this.services.connection.onReestablished(this.onConnectionReestablished.bind(this));\n    }\n    PresenceHandler.prototype.subscribe = function (userOrCallback, callback) {\n        if (typeof userOrCallback === 'string' && userOrCallback.length > 0 && typeof callback === 'function') {\n            var user = userOrCallback;\n            if (!this.subscriptionEmitter.hasListeners(user)) {\n                this.bulkSubscription.subscribe(user);\n            }\n            this.subscriptionEmitter.on(user, callback);\n            return;\n        }\n        if (typeof userOrCallback === 'function' && typeof callback === 'undefined') {\n            if (!this.globalSubscriptionEmitter.hasListeners(ONLY_EVENT)) {\n                this.subscribeToAllChanges();\n            }\n            this.globalSubscriptionEmitter.on(ONLY_EVENT, userOrCallback);\n            return;\n        }\n        throw new Error('invalid arguments: \"user\" or \"callback\"');\n    };\n    PresenceHandler.prototype.unsubscribe = function (userOrCallback, callback) {\n        if (userOrCallback && typeof userOrCallback === 'string' && userOrCallback.length > 0) {\n            var user = userOrCallback;\n            if (callback) {\n                if (typeof callback !== 'function') {\n                    throw new Error('invalid argument: \"callback\"');\n                }\n                this.subscriptionEmitter.off(user, callback);\n            }\n            else {\n                this.subscriptionEmitter.off(user);\n            }\n            if (!this.subscriptionEmitter.hasListeners(user)) {\n                this.bulkSubscription.unsubscribe(user);\n                return;\n            }\n        }\n        if (userOrCallback && typeof userOrCallback === 'function') {\n            callback = userOrCallback;\n            this.globalSubscriptionEmitter.off(ONLY_EVENT, callback);\n            if (!this.globalSubscriptionEmitter.hasListeners(ONLY_EVENT)) {\n                this.unsubscribeToAllChanges();\n            }\n            return;\n        }\n        if (typeof userOrCallback === 'undefined' && typeof callback === 'undefined') {\n            this.subscriptionEmitter.off();\n            this.globalSubscriptionEmitter.off();\n            this.bulkSubscription.unsubscribeList(this.subscriptionEmitter.eventNames());\n            this.unsubscribeToAllChanges();\n            return;\n        }\n        throw new Error('invalid argument: \"user\" or \"callback\"');\n    };\n    PresenceHandler.prototype.getAll = function () {\n        var rest = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            rest[_i] = arguments[_i];\n        }\n        var _a = validateQueryArguments(rest), callback = _a.callback, users = _a.users;\n        var message;\n        var emitter;\n        var emitterAction;\n        if (users) {\n            var queryId = (this.counter++).toString();\n            message = {\n                topic: constants_1.TOPIC.PRESENCE,\n                action: constants_1.PRESENCE_ACTION.QUERY,\n                correlationId: queryId,\n                names: users\n            };\n            emitter = this.queryEmitter;\n            emitterAction = queryId;\n        }\n        else {\n            message = {\n                topic: constants_1.TOPIC.PRESENCE,\n                action: constants_1.PRESENCE_ACTION.QUERY_ALL\n            };\n            emitter = this.queryAllEmitter;\n            emitterAction = ONLY_EVENT;\n        }\n        if (this.services.connection.isConnected) {\n            this.sendQuery(message);\n        }\n        else if (this.services.connection.isInLimbo) {\n            this.limboQueue.push(message);\n        }\n        else {\n            this.services.timerRegistry.requestIdleCallback(function () {\n                emitter.emit(emitterAction, constants_1.EVENT.CLIENT_OFFLINE);\n            });\n        }\n        if (callback) {\n            emitter.once(emitterAction, callback);\n            return;\n        }\n        return new Promise(function (resolve, reject) {\n            emitter.once(emitterAction, function (error, results) { return error ? reject(error) : resolve(results); });\n        });\n    };\n    PresenceHandler.prototype.handle = function (message) {\n        if (message.isAck) {\n            this.services.timeoutRegistry.remove(message);\n            return;\n        }\n        if (message.action === constants_1.PRESENCE_ACTION.QUERY_ALL_RESPONSE) {\n            this.queryAllEmitter.emit(ONLY_EVENT, null, message.names);\n            this.services.timeoutRegistry.remove(message);\n            return;\n        }\n        if (message.action === constants_1.PRESENCE_ACTION.QUERY_RESPONSE) {\n            this.queryEmitter.emit(message.correlationId, null, message.parsedData);\n            this.services.timeoutRegistry.remove(message);\n            return;\n        }\n        if (message.action === constants_1.PRESENCE_ACTION.PRESENCE_JOIN) {\n            this.subscriptionEmitter.emit(message.name, message.name, true);\n            return;\n        }\n        if (message.action === constants_1.PRESENCE_ACTION.PRESENCE_JOIN_ALL) {\n            this.globalSubscriptionEmitter.emit(ONLY_EVENT, message.name, true);\n            return;\n        }\n        if (message.action === constants_1.PRESENCE_ACTION.PRESENCE_LEAVE) {\n            this.subscriptionEmitter.emit(message.name, message.name, false);\n            return;\n        }\n        if (message.action === constants_1.PRESENCE_ACTION.PRESENCE_LEAVE_ALL) {\n            this.globalSubscriptionEmitter.emit(ONLY_EVENT, message.name, false);\n            return;\n        }\n        if (message.isError) {\n            this.services.timeoutRegistry.remove(message);\n            if (message.originalAction === constants_1.PRESENCE_ACTION.QUERY) {\n                this.queryEmitter.emit(message.correlationId, constants_1.PRESENCE_ACTION[message.action]);\n            }\n            else if (message.originalAction === constants_1.PRESENCE_ACTION.QUERY_ALL) {\n                this.queryAllEmitter.emit(ONLY_EVENT, constants_1.PRESENCE_ACTION[message.action]);\n            }\n            else {\n                this.services.logger.error(message);\n            }\n            return;\n        }\n        this.services.logger.error(message, constants_1.EVENT.UNSOLICITED_MESSAGE);\n    };\n    PresenceHandler.prototype.sendQuery = function (message) {\n        this.services.connection.sendMessage(message);\n        this.services.timeoutRegistry.add({ message: message });\n    };\n    PresenceHandler.prototype.subscribeToAllChanges = function () {\n        if (!this.services.connection.isConnected) {\n            return;\n        }\n        var message = { topic: constants_1.TOPIC.PRESENCE, action: constants_1.PRESENCE_ACTION.SUBSCRIBE_ALL };\n        this.services.timeoutRegistry.add({ message: message });\n        this.services.connection.sendMessage(message);\n    };\n    PresenceHandler.prototype.unsubscribeToAllChanges = function () {\n        if (!this.services.connection.isConnected) {\n            return;\n        }\n        var message = { topic: constants_1.TOPIC.PRESENCE, action: constants_1.PRESENCE_ACTION.UNSUBSCRIBE_ALL };\n        this.services.timeoutRegistry.add({ message: message });\n        this.services.connection.sendMessage(message);\n    };\n    PresenceHandler.prototype.onConnectionReestablished = function () {\n        var keys = this.subscriptionEmitter.eventNames();\n        if (keys.length > 0) {\n            this.bulkSubscription.subscribeList(keys);\n        }\n        var hasGlobalSubscription = this.globalSubscriptionEmitter.hasListeners(ONLY_EVENT);\n        if (hasGlobalSubscription) {\n            this.subscribeToAllChanges();\n        }\n        for (var i = 0; i < this.limboQueue.length; i++) {\n            this.sendQuery(this.limboQueue[i]);\n        }\n        this.limboQueue = [];\n    };\n    PresenceHandler.prototype.onExitLimbo = function () {\n        var _this = this;\n        this.queryEmitter.eventNames().forEach(function (correlationId) {\n            _this.queryEmitter.emit(correlationId, constants_1.EVENT.CLIENT_OFFLINE);\n        });\n        this.queryAllEmitter.emit(ONLY_EVENT, constants_1.EVENT.CLIENT_OFFLINE);\n        this.limboQueue = [];\n        this.queryAllEmitter.off();\n        this.queryEmitter.off();\n    };\n    PresenceHandler.prototype.onBulkSubscriptionSent = function (message) {\n        this.services.timeoutRegistry.add({ message: message });\n    };\n    return PresenceHandler;\n}());\nexports.PresenceHandler = PresenceHandler;\n", "\"use strict\";\nvar __values = (this && this.__values) || function(o) {\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n    if (m) return m.call(o);\n    if (o && typeof o.length === \"number\") return {\n        next: function () {\n            if (o && i >= o.length) o = void 0;\n            return { value: o && o[i++], done: !o };\n        }\n    };\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nvar __read = (this && this.__read) || function (o, n) {\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n    if (!m) return o;\n    var i = m.call(o), r, ar = [], e;\n    try {\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n    }\n    catch (error) { e = { error: error }; }\n    finally {\n        try {\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\n        }\n        finally { if (e) throw e.error; }\n    }\n    return ar;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.IndexdbStorage = void 0;\nvar Operation;\n(function (Operation) {\n    Operation[Operation[\"GET\"] = 0] = \"GET\";\n    Operation[Operation[\"SET\"] = 1] = \"SET\";\n    Operation[Operation[\"DELETE\"] = 2] = \"DELETE\";\n})(Operation || (Operation = {}));\nvar IndexdbStorage = /** @class */ (function () {\n    function IndexdbStorage(options) {\n        var _this = this;\n        this.options = options;\n        this.isReady = false;\n        this.queuedRequests = new Map();\n        this.flushTimeout = null;\n        if (typeof indexedDB === 'undefined' || indexedDB === null) {\n            throw new Error('IndexDB currently not supported when deepstream in node');\n        }\n        this.flush = this.flush.bind(this);\n        var _a = options.indexdb, objectStoreNames = _a.objectStoreNames, storageDatabaseName = _a.storageDatabaseName, defaultObjectStoreName = _a.defaultObjectStoreName, primaryKey = _a.primaryKey;\n        if (!objectStoreNames.includes(defaultObjectStoreName)) {\n            objectStoreNames.push(defaultObjectStoreName);\n        }\n        var dbVersion = options.indexdb.dbVersion;\n        if (options.indexdb.autoVersion) {\n            var previousDBStructureSerialized = localStorage.getItem(\"deepstream-db/\".concat(storageDatabaseName));\n            if (previousDBStructureSerialized) {\n                var previousDBStructure = JSON.parse(previousDBStructureSerialized);\n                var objectStoreChanged = (previousDBStructure.objectStoreNames.length !== objectStoreNames.length ||\n                    previousDBStructure.objectStoreNames.some(function (name) { return !objectStoreNames.includes(name); }));\n                if (objectStoreChanged) {\n                    dbVersion = previousDBStructure.dbVersion + 1;\n                }\n                else {\n                    dbVersion = previousDBStructure.dbVersion;\n                }\n            }\n            else {\n                dbVersion = 1;\n            }\n        }\n        var request = indexedDB.open(storageDatabaseName, dbVersion);\n        request.onerror = function (event) {\n            console.error(\"Error opening index \".concat(storageDatabaseName), event);\n            // TODO: Workflow for lack of permissions to use indexDB\n        };\n        request.onsuccess = function (event) {\n            _this.db = event.target.result;\n            _this.onReady();\n        };\n        request.onupgradeneeded = function () {\n            var db = request.result;\n            objectStoreNames.forEach(function (objectStoreName) {\n                if (!db.objectStoreNames.contains(objectStoreName)) {\n                    db.createObjectStore(objectStoreName, { keyPath: primaryKey });\n                }\n            });\n            for (var i = 0; i < db.objectStoreNames.length; i++) {\n                if (objectStoreNames.includes(db.objectStoreNames[i]) === false) {\n                    db.deleteObjectStore(db.objectStoreNames[i]);\n                }\n            }\n            if (options.indexdb.autoVersion) {\n                localStorage.setItem(\"deepstream-db/\".concat(storageDatabaseName), JSON.stringify({ dbVersion: dbVersion, objectStoreNames: objectStoreNames }));\n            }\n        };\n    }\n    IndexdbStorage.prototype.get = function (recordName, callback) {\n        var ignore = this.options.ignorePrefixes.some(function (prefix) { return recordName.startsWith(prefix); });\n        if (ignore) {\n            callback(recordName, -1, null);\n            return;\n        }\n        this.insertRequest({ recordName: recordName, callback: callback, operation: Operation.GET });\n    };\n    IndexdbStorage.prototype.set = function (recordName, version, data, callback) {\n        var ignore = this.options.ignorePrefixes.some(function (prefix) { return recordName.startsWith(prefix); });\n        if (ignore) {\n            callback(null, recordName);\n            return;\n        }\n        this.insertRequest({ recordName: recordName, version: version, callback: callback, data: data, operation: Operation.SET });\n    };\n    IndexdbStorage.prototype.delete = function (recordName, callback) {\n        var ignore = this.options.ignorePrefixes.some(function (prefix) { return recordName.startsWith(prefix); });\n        if (ignore) {\n            callback(null, recordName);\n            return;\n        }\n        this.insertRequest({ recordName: recordName, callback: callback, operation: Operation.DELETE });\n    };\n    IndexdbStorage.prototype.reset = function (callback) {\n        var _this = this;\n        if (this.db) {\n            this.db.close();\n            this.db = null;\n        }\n        var deleteDBReqeust = indexedDB.deleteDatabase(this.options.indexdb.storageDatabaseName);\n        deleteDBReqeust.onblocked = function () { return setTimeout(function () { return _this.reset(callback); }, 1000); };\n        deleteDBReqeust.onsuccess = function () { return callback(null); };\n        deleteDBReqeust.onerror = function (event) {\n            var errorMessage = \"Error deleting database \".concat(_this.options.indexdb.storageDatabaseName);\n            console.error(errorMessage, event);\n            callback(errorMessage);\n        };\n    };\n    IndexdbStorage.prototype.registerFlush = function () {\n        if (this.isReady && !this.flushTimeout) {\n            this.flushTimeout = setTimeout(this.flush, this.options.indexdb.flushTimeout);\n        }\n    };\n    IndexdbStorage.prototype.flush = function () {\n        var e_1, _a;\n        var _this = this;\n        var transaction = this.db.transaction(this.queuedRequests.keys(), 'readwrite');\n        var _loop_1 = function (key, queuedRequests) {\n            var objectStore = transaction.objectStore(key);\n            queuedRequests.forEach(function (_a) {\n                var _b;\n                var operation = _a.operation, recordName = _a.recordName, version = _a.version, data = _a.data, callback = _a.callback;\n                switch (operation) {\n                    case Operation.GET: {\n                        var request_1 = objectStore.get(recordName);\n                        // The api doesn't support get errors yet!\n                        request_1.onerror = function (event) {\n                            throw new Error(\"Requesting record \".concat(recordName, \" failed\"));\n                        };\n                        request_1.onsuccess = function () {\n                            if (request_1.result) {\n                                callback(recordName, request_1.result.version, request_1.result.data);\n                            }\n                            else {\n                                callback(recordName, -1, null);\n                            }\n                        };\n                        break;\n                    }\n                    case Operation.DELETE: {\n                        var request = objectStore.delete(recordName);\n                        request.onsuccess = function () { return callback(null); };\n                        request.onerror = function (event) { return callback(event.errorCode); };\n                        break;\n                    }\n                    case Operation.SET: {\n                        var request = objectStore.put((_b = {}, _b[_this.options.indexdb.primaryKey] = recordName, _b.version = version, _b.data = data, _b));\n                        request.onsuccess = function () { return callback(null); };\n                        request.onerror = function (event) { return callback(event.errorCode); };\n                        break;\n                    }\n                }\n            });\n        };\n        try {\n            for (var _b = __values(this.queuedRequests), _c = _b.next(); !_c.done; _c = _b.next()) {\n                var _d = __read(_c.value, 2), key = _d[0], queuedRequests = _d[1];\n                _loop_1(key, queuedRequests);\n            }\n        }\n        catch (e_1_1) { e_1 = { error: e_1_1 }; }\n        finally {\n            try {\n                if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n            }\n            finally { if (e_1) throw e_1.error; }\n        }\n        this.queuedRequests.clear();\n        this.flushTimeout = null;\n    };\n    IndexdbStorage.prototype.onReady = function () {\n        this.isReady = true;\n        this.flush();\n    };\n    IndexdbStorage.prototype.insertRequest = function (request) {\n        var firstSlashIndex = request.recordName.indexOf('/');\n        var objectStoreName;\n        if (firstSlashIndex > -1) {\n            objectStoreName = request.recordName.substring(0, firstSlashIndex);\n            if (this.options.indexdb.objectStoreNames.indexOf(objectStoreName) === -1) {\n                console.error(\"Object store names need to be predefined, missing \".concat(objectStoreName, \". Using default objectStore instead.\"));\n                objectStoreName = this.options.indexdb.defaultObjectStoreName;\n            }\n            else {\n                request.recordName = request.recordName.substring(firstSlashIndex + 1, request.recordName.length);\n            }\n        }\n        else {\n            objectStoreName = this.options.indexdb.defaultObjectStoreName;\n        }\n        var requests = this.queuedRequests.get(objectStoreName);\n        if (requests === undefined) {\n            this.queuedRequests.set(objectStoreName, [request]);\n        }\n        else {\n            requests.push(request);\n        }\n        this.registerFlush();\n    };\n    return IndexdbStorage;\n}());\nexports.IndexdbStorage = IndexdbStorage;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.LocalstorageStorage = void 0;\nvar LocalstorageStorage = /** @class */ (function () {\n    function LocalstorageStorage(options) {\n        this.options = options;\n        this.isReady = true;\n        if (typeof localStorage === 'undefined' || localStorage === null) {\n            try {\n                var LocalStorage = require('node-localstorage').LocalStorage;\n                this.storage = new LocalStorage(options.localstorage.nodeStoragePath, options.localstorage.nodeStorageSize * 1024 * 1024);\n            }\n            catch (e) {\n                throw new Error('Attempting to use localStorage outside of browser without node-localstorage polyfill');\n            }\n        }\n        else {\n            this.storage = localStorage;\n        }\n    }\n    LocalstorageStorage.prototype.get = function (recordName, callback) {\n        var ignore = this.options.ignorePrefixes.some(function (prefix) { return recordName.startsWith(prefix); });\n        if (ignore) {\n            callback(recordName, -1, null);\n            return;\n        }\n        var item = this.storage.getItem(recordName);\n        if (item) {\n            var doc = JSON.parse(item);\n            setTimeout(callback.bind(this, recordName, doc.version, doc.data), 0);\n            return;\n        }\n        setTimeout(callback.bind(this, recordName, -1, null), 0);\n    };\n    LocalstorageStorage.prototype.set = function (recordName, version, data, callback) {\n        var ignore = this.options.ignorePrefixes.some(function (prefix) { return recordName.startsWith(prefix); });\n        if (ignore) {\n            callback(null, recordName);\n            return;\n        }\n        this.storage.setItem(recordName, JSON.stringify({ recordName: recordName, version: version, data: data }));\n        setTimeout(callback, 0);\n    };\n    LocalstorageStorage.prototype.delete = function (recordName, callback) {\n        var ignore = this.options.ignorePrefixes.some(function (prefix) { return recordName.startsWith(prefix); });\n        if (ignore) {\n            callback(null, recordName);\n            return;\n        }\n        this.storage.removeItem(recordName);\n        setTimeout(callback, 0);\n    };\n    LocalstorageStorage.prototype.reset = function (callback) {\n        try {\n            this.storage.clear();\n            callback(null);\n        }\n        catch (error) {\n            callback(error);\n        }\n    };\n    return LocalstorageStorage;\n}());\nexports.LocalstorageStorage = LocalstorageStorage;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.NoopStorage = void 0;\nvar NoopStorage = /** @class */ (function () {\n    function NoopStorage() {\n        this.isReady = true;\n    }\n    NoopStorage.prototype.get = function (recordName, callback) {\n        setTimeout(callback.bind(this, recordName, -1, null), 0);\n    };\n    NoopStorage.prototype.set = function (recordName, version, data, callback) {\n        setTimeout(callback, 0);\n    };\n    NoopStorage.prototype.delete = function (recordName, callback) {\n        setTimeout(callback, 0);\n    };\n    NoopStorage.prototype.reset = function (callback) {\n        callback(null);\n    };\n    return NoopStorage;\n}());\nexports.NoopStorage = NoopStorage;\n", "\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __assign = (this && this.__assign) || function () {\n    __assign = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign.apply(this, arguments);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DefaultOptions = exports.C = exports.DeepstreamClient = void 0;\nvar client_options_1 = require(\"./client-options\");\nObject.defineProperty(exports, \"DefaultOptions\", { enumerable: true, get: function () { return client_options_1.DefaultOptions; } });\nvar C = require(\"./constants\");\nexports.C = C;\nvar logger_1 = require(\"./util/logger\");\nvar timeout_registry_1 = require(\"./util/timeout-registry\");\nvar interval_timer_registry_1 = require(\"./util/interval-timer-registry\");\nvar native_timer_registry_1 = require(\"./util/native-timer-registry\");\nvar connection_1 = require(\"./connection/connection\");\nvar socket_factory_1 = require(\"./connection/socket-factory\");\nvar event_handler_1 = require(\"./event/event-handler\");\nvar rpc_handler_1 = require(\"./rpc/rpc-handler\");\nvar record_handler_1 = require(\"./record/record-handler\");\nvar presence_handler_1 = require(\"./presence/presence-handler\");\nvar emitter_1 = require(\"./util/emitter\");\nvar indexdb_storage_service_1 = require(\"./storage/indexdb-storage-service\");\nvar localstorage_storage_service_1 = require(\"./storage/localstorage-storage-service\");\nvar noop_storage_service_1 = require(\"./storage/noop-storage-service\");\nvar DeepstreamClient = /** @class */ (function (_super) {\n    __extends(DeepstreamClient, _super);\n    function DeepstreamClient(url, options) {\n        if (options === void 0) { options = {}; }\n        var _this = _super.call(this) || this;\n        _this.options = __assign(__assign({}, client_options_1.DefaultOptions), options);\n        var services = {};\n        services.logger = new logger_1.Logger(_this);\n        if (options.nativeTimerRegistry) {\n            services.timerRegistry = new native_timer_registry_1.NativeTimerRegistry();\n        }\n        else {\n            services.timerRegistry = new interval_timer_registry_1.IntervalTimerRegistry(_this.options.intervalTimerResolution);\n        }\n        services.timeoutRegistry = new timeout_registry_1.TimeoutRegistry(services, _this.options);\n        services.socketFactory = _this.options.socketFactory || socket_factory_1.socketFactory;\n        services.connection = new connection_1.Connection(services, _this.options, url, _this);\n        if (_this.options.offlineEnabled) {\n            if (_this.options.storageName === 'indexdb')\n                services.storage = new indexdb_storage_service_1.IndexdbStorage(_this.options);\n            if (_this.options.storageName === 'localstorage')\n                services.storage = new localstorage_storage_service_1.LocalstorageStorage(_this.options);\n            if (_this.options.storage)\n                services.storage = _this.options.storage;\n        }\n        else {\n            services.storage = new noop_storage_service_1.NoopStorage();\n        }\n        _this.services = services;\n        _this.services.connection.onLost(services.timeoutRegistry.onConnectionLost.bind(services.timeoutRegistry));\n        _this.event = new event_handler_1.EventHandler(_this.services, _this.options);\n        _this.rpc = new rpc_handler_1.RPCHandler(_this.services, _this.options);\n        _this.record = new record_handler_1.RecordHandler(_this.services, _this.options);\n        _this.presence = new presence_handler_1.PresenceHandler(_this.services, _this.options);\n        return _this;\n    }\n    DeepstreamClient.prototype.login = function (detailsOrCallback, callback) {\n        var _this = this;\n        if (detailsOrCallback && typeof detailsOrCallback === 'object') {\n            if (callback) {\n                this.services.connection.authenticate(detailsOrCallback, callback);\n            }\n            else {\n                return new Promise(function (resolve, reject) {\n                    _this.services.connection.authenticate(detailsOrCallback, function (success, data) {\n                        success ? resolve(data) : reject(data);\n                    });\n                });\n            }\n        }\n        else {\n            if (typeof detailsOrCallback === 'function') {\n                this.services.connection.authenticate({}, detailsOrCallback);\n            }\n            else {\n                return new Promise(function (resolve, reject) {\n                    _this.services.connection.authenticate({}, function (success, data) {\n                        success ? resolve(data) : reject(data);\n                    });\n                });\n            }\n        }\n    };\n    DeepstreamClient.prototype.getConnectionState = function () {\n        return this.services.connection.getConnectionState();\n    };\n    DeepstreamClient.prototype.close = function () {\n        var _this = this;\n        Object.keys(this.services).forEach(function (serviceName) {\n            if (_this.services[serviceName].close) {\n                _this.services[serviceName].close();\n            }\n        });\n    };\n    DeepstreamClient.prototype.pause = function () {\n        this.services.connection.pause();\n    };\n    DeepstreamClient.prototype.resume = function (callback) {\n        var _this = this;\n        if (callback) {\n            this.services.connection.resume(callback);\n            return;\n        }\n        return new Promise(function (resolve, reject) {\n            _this.services.connection.resume(function (error) {\n                error ? reject(error) : resolve();\n            });\n        });\n    };\n    /**\n    * Returns a random string. The first block of characters\n    * is a timestamp, in order to allow databases to optimize for semi-\n    * sequential numberings\n    */\n    DeepstreamClient.prototype.getUid = function () {\n        var timestamp = (new Date()).getTime().toString(36);\n        var randomString = (Math.random() * 10000000000000000).toString(36).replace('.', '');\n        return \"\".concat(timestamp, \"-\").concat(randomString);\n    };\n    return DeepstreamClient;\n}(emitter_1.Emitter));\nexports.DeepstreamClient = DeepstreamClient;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Options = exports.C = exports.DeepstreamClient = void 0;\nvar deepstream_client_1 = require(\"./deepstream-client\");\nObject.defineProperty(exports, \"DeepstreamClient\", { enumerable: true, get: function () { return deepstream_client_1.DeepstreamClient; } });\nObject.defineProperty(exports, \"C\", { enumerable: true, get: function () { return deepstream_client_1.C; } });\nObject.defineProperty(exports, \"Options\", { enumerable: true, get: function () { return deepstream_client_1.DefaultOptions; } });\n", "export * from \"./core\"\nexport { partyToggleInfo } from \"./addons/info_panel/index.js\"\n", "import { JSONObject, UserData } from \"./validate\"\nimport { SubscriptionCallback } from \"@deepstream/client/dist/src/record/record\"\n\nimport { version } from \"../version\"\nimport * as log from \"./log\"\nimport { Room } from \"./Room\"\nimport { Record } from \"./Record\"\n\nlog.styled(\"font-weight: bold\", `Vanilla Party v${version}`)\n\nlet room: Room | null = null\n\n/// partyConnect\nexport const partyConnect = (\n  host: string,\n  appName: string,\n  roomName = \"main\",\n  cb?: () => void\n) => {\n  if (room !== null) {\n    log.error(\n      \"You are already connected. Call partyDisconnect() before calling partyConnect() again!\"\n    )\n    return\n  }\n  const load = async () => {\n    // connect room\n    room = new Room(host, appName, roomName)\n    await room.whenConnected\n    window.addEventListener(\"beforeunload\", () => {\n      room?.disconnect()\n    })\n\n    // finish up\n    log.log(\n      `partyConnect() done! You are in the room \"${room.info().roomName}\"`\n    )\n    cb?.()\n  }\n  load()\n}\n\n/// partyDisconnect\nexport const partyDisconnect = () => {\n  if (!room) {\n    log.error(\"partyDisconnect() called before partyConnect()\")\n    return\n  }\n  log.warn(`You have been disconnected from room \"${room.info().roomName}\".`)\n  room.disconnect()\n  room = null\n}\n\n/// partyLoadShared\nexport const partyLoadShared = (\n  name: string,\n  initObject?: UserData,\n  cb?: (shared: JSONObject) => void\n): JSONObject | undefined => {\n  if (!room) {\n    log.error(\"partyLoadShared() called before partyConnect()\")\n    return\n  }\n  const record = room.getRecord(name)\n\n  const load = async () => {\n    await room?.whenConnected // room null checked above\n\n    const overwrite = room?.isHost() === true\n    await record.load(initObject, overwrite)\n    log.log(`partyLoadShared \"${name}\" done!`)\n    cb?.(record.shared)\n  }\n\n  load()\n\n  return record.shared\n}\n\n/// partyLoadMyShared\nexport const partyLoadMyShared = (\n  initObject = {},\n  cb?: (shared: JSONObject) => void\n) => {\n  if (!room) {\n    log.error(\"partyLoadMyShared() called before partyConnect()\")\n    return\n  }\n\n  const record = room.myGuestRecord\n\n  const load = async () => {\n    await room?.whenConnected // room null checked above\n    await record.whenLoaded\n    await record.initData(initObject)\n    log.log(`partyLoadMyShared done!`)\n    cb?.(record.shared)\n  }\n\n  load()\n\n  return record.shared\n}\n\n/// partyLoadGuestShareds\nexport const partyLoadGuestShareds = () => {\n  if (!room) {\n    log.error(\"partyLoadGuestShareds() called before partyConnect()\")\n    return\n  }\n  return room.guestShareds\n}\n\n/// partyIsHost\nexport const partyIsHost = (): boolean => {\n  if (!room) {\n    log.error(\"partyIsHost() called before partyConnect()\")\n    return false\n  }\n  return room.isHost()\n}\n\n/// partySetShared\nexport const partySetShared = (\n  shared: JSONObject,\n  object: JSONObject\n): void => {\n  if (!Record.recordForShared(shared)) {\n    log.warn(\n      \"partySetShared() doesn't recognize the provided shared object.\",\n      shared\n    )\n    return\n  }\n  Record.recordForShared(shared)?.setData(object)\n}\n\n/// partyWatchShared\nexport const partyWatchShared = (\n  shared: JSONObject,\n  a: any,\n  b: any,\n  c: any\n): void => {\n  if (!Record.recordForShared(shared)) {\n    log.warn(\n      \"partyWatchShared() expected shared (argument 1) to be shared object.\",\n      shared\n    )\n    return\n  }\n  Record.recordForShared(shared)?.watchShared(a, b, c)\n}\n\n/// partyEmit\nexport const partyEmit = (event: string, data?: UserData): void => {\n  if (!room) {\n    log.error(\"partyEmit() called before partyConnect()\")\n    return\n  }\n  room.emit(event, data)\n}\n\n/// partySubscribe\nexport const partySubscribe = (\n  event: string,\n  cb: SubscriptionCallback\n): void => {\n  if (!room) {\n    log.error(\"partySubscribe() called before partyConnect()\")\n    return\n  }\n  room.subscribe(event, cb)\n}\n\n/// partyUnsubscribe\nexport const partyUnsubscribe = (\n  event: string,\n  cb?: SubscriptionCallback\n): void => {\n  if (!room) {\n    log.error(\"partyUnsubscribe() called before partyConnect()\")\n    return\n  }\n  room.unsubscribe(event, cb)\n}\n\n/// partyCountGuests\nexport const partyCountGuests = () => {\n  if (!room) {\n    log.error(\"partyCountGuests() called before partyConnect()\")\n    return\n  }\n  return room.info().guestNames.length\n}\n\n/// partyGetRoom\nexport const partyGetRoom = () => {\n  if (!room) {\n    log.error(\"partyGetRoom() called before partyConnect()\")\n  }\n  return room\n}\n\nexport { Room as PartyRoom, Record as PartyRecord }\n", "// Generated by genversion.\nexport const version = '0.6.2';\n", "export const debug = makeLogger(\n  \"log\",\n  \"party-debug\",\n  \"background-color: #888; color: #fff; padding: 2px 5px; border-radius: 2px\"\n)\n\nexport const log = makeLogger(\n  \"log\",\n  \"party-log\",\n  \"background-color: #88F; color: #00ffff; padding: 2px 5px; border-radius: 2px\"\n)\n\nexport const alert = makeLogger(\n  \"log\",\n  \"party-alert\",\n  \"background-color: #FF0; color: #000; padding: 2px 5px; border-radius: 2px\"\n)\n\nexport const warn = makeLogger(\n  \"warn\",\n  \"party-warn\",\n  \"background-color: #FF0; color: #000; padding: 2px 5px; border-radius: 2px\"\n)\n\nexport const error = makeLogger(\n  \"error\",\n  \"party-error\",\n  \"background-color: #ff0000; color: #ffffff; padding: 2px 5px; border-radius: 2px\"\n)\n\ntype loggerType = \"debug\" | \"log\" | \"warn\" | \"error\"\nfunction makeLogger(type: loggerType, prefix: string, style: string) {\n  if (typeof window !== \"undefined\") {\n    // eslint-disable-next-line\n    return console[type].bind(window.console, `%c${prefix}`, style)\n  } else {\n    return console.log\n  }\n}\n\n// eslint-disable-next-line\nexport const styled =\n  typeof window !== \"undefined\"\n    ? console.log.bind(\n        window.console,\n        \"%cparty-log%c %c%s\",\n        \"background-color: #88F; color: #00ffff; padding: 2px 5px; border-radius: 2px\",\n        \"background: none;\"\n      )\n    : console.log\n", "import { DeepstreamClient } from \"@deepstream/client\"\nimport { CONNECTION_STATE } from \"@deepstream/client/dist/src/constants\"\nimport * as log from \"./log\"\nimport { SubscriptionCallback } from \"./validate\"\nimport { UserData, JSONValue, JSONObject } from \"./validate\"\nimport { isJSONValue, isEmpty } from \"./validate\"\nimport { Record } from \"./Record\"\n\nexport class Room {\n  readonly #ds: DeepstreamClient\n  readonly #appName: string\n  readonly #roomName: string\n  readonly #roomId: string // e.g. \"app-room\"\n  readonly #guestName: string // e.g. \"app-room/client-uid\"\n  readonly #guestRecords: Map<string, Record>\n  readonly #guestShareds: JSONObject[] // all guest shareds in this room\n  readonly #publishedGuestShareds: JSONObject[] // just the non-empty ones\n  readonly #myGuestRecord: Record // record for this guest's shared object\n  readonly #whenConnected: Promise<void>\n\n  #guestNames: string[] // names of guests in the room\n  #hostName: string | undefined // name of designated host\n\n  constructor(host: string, appName: string, roomName: string) {\n    this.#ds = new DeepstreamClient(host)\n    this.#appName = appName\n    this.#roomName = roomName\n    this.#roomId = `${appName}-${roomName}`\n    this.#guestName = `${this.#roomId}/${this.#ds.getUid()}`\n    this.#guestRecords = new Map()\n    this.#guestShareds = []\n    this.#publishedGuestShareds = []\n    this.#myGuestRecord = new Record(this.#ds, this.#guestName)\n    this.#guestNames = []\n    this.#hostName = undefined\n    this.#whenConnected = this.#connect()\n  }\n\n  #connect(): Promise<void> {\n    const innerConnect = async () => {\n      // subscribe to deepstream errors\n      this.#ds.on(\"error\", (error: string, event: string, topic: string) => {\n        log.error(\"ds error\", error, event, topic)\n        this.emit(\"party:ds-error\", { error, event, topic })\n      })\n\n      // subscribe to ANY/ALL clients connect/disconnect on SERVER\n      // (not limited to app / room)\n      this.#ds.presence.subscribe(this.#onPresence.bind(this))\n\n      // log in to deepstream server\n      await this.#ds.login({ username: this.#guestName })\n\n      // load my guest record\n      this.#myGuestRecord.load()\n\n      // get room list and determine host\n      await this.#updateGuestNames()\n\n      // get the guest records and update guestShareds\n      this.#updateGuestShareds()\n    }\n    return innerConnect()\n  }\n\n  isConnected(): boolean {\n    return this.#ds.getConnectionState() === CONNECTION_STATE.OPEN\n  }\n\n  get whenConnected(): Promise<void> {\n    return this.#whenConnected\n  }\n\n  disconnect() {\n    if (!this.isConnected()) return\n    this.#ds.close()\n  }\n\n  info() {\n    return {\n      appName: this.#appName,\n      roomName: this.#roomName,\n      guestNames: this.#guestNames,\n      guestName: this.#guestName,\n      isConnected: this.isConnected(),\n      isHost: this.isHost(),\n    }\n  }\n\n  getRecord(name: string): Record {\n    const r = new Record(this.#ds, `${this.#roomId}/${name}`)\n    return r\n  }\n\n  subscribe(event: string, cb: SubscriptionCallback): void {\n    this.#ds.event.subscribe(`${this.#roomId}/${event}`, cb)\n  }\n\n  unsubscribe(event: string, cb?: SubscriptionCallback): void {\n    // cb `as SubscriptionCallback` because cb CAN BE undefined\n    this.#ds.event.unsubscribe(\n      `${this.#roomId}/${event}`,\n      cb as SubscriptionCallback\n    )\n  }\n\n  emit(event: string, data?: UserData): void {\n    if (data === undefined || isJSONValue(data, \"emit-data\")) {\n      // data `as JSONValue` because data CAN BE undefined\n      this.#ds.event.emit(`${this.#roomId}/${event}`, data as JSONValue)\n    }\n  }\n\n  // at any given time any occupied room has exactly one host\n  get hostName(): string | undefined {\n    return this.#hostName\n  }\n\n  // sorted list of connected guests in this room\n  // semi-private for test suite\n  get _guestNames(): string[] {\n    // return copy so that it can't be modified\n    return [...this.#guestNames]\n  }\n\n  get myGuestRecord(): Record {\n    return this.#myGuestRecord\n  }\n\n  get guestShareds(): JSONObject[] {\n    // return read only proxy of array\n    // caller can still modify properties of the items\n    return new Proxy(this.#publishedGuestShareds, {\n      set() {\n        log.error(\"The guestShared array is read-only.\")\n        // eat the value\n        return true\n      },\n    })\n  }\n\n  isHost(): boolean {\n    return this.#hostName === this.#guestName\n  }\n\n  #updateHost() {\n    this.#hostName = this.#guestNames[0]\n  }\n\n  async #updateGuestNames(): Promise<void> {\n    const everyone = await this.#ds.presence.getAll()\n\n    this.#guestNames = everyone\n      .filter((guestName: string) => guestName.startsWith(`${this.#roomId}/`))\n      .concat(this.#guestName)\n      .sort()\n\n    this.#updateHost()\n  }\n\n  #onPresence(username: string, isLoggedIn: boolean): void {\n    if (!username.startsWith(`${this.#roomId}/`)) return // not in this room\n    if (isLoggedIn) {\n      // add to #guestNames\n      this.#guestNames.push(username)\n      this.#guestNames.sort()\n    } else {\n      // remove from #guestNames\n      this.#guestNames = this.#guestNames.filter(\n        (guestName) => guestName !== username\n      )\n    }\n\n    this.#updateHost()\n\n    // update guest shareds\n    this.#updateGuestShareds()\n  }\n\n  #updateGuestShareds() {\n    const updatePublishedGuestShareds = () => {\n      this.#publishedGuestShareds.length = 0\n      const nonemptyShareds = this.#guestShareds.filter((s) => !isEmpty(s))\n      this.#publishedGuestShareds.push(...nonemptyShareds)\n    }\n\n    // add any missing records to guestRecords, start loading them\n    for (const name of this.#guestNames) {\n      if (this.#guestRecords.has(name)) continue\n      if (name === this.#guestName) {\n        // add my guest record\n        this.#guestRecords.set(name, this.#myGuestRecord)\n        // republish when record changes\n        this.#myGuestRecord.whenLoaded.then(() => {\n          this.#myGuestRecord.watchShared(\n            updatePublishedGuestShareds.bind(this),\n            true\n          )\n        })\n      } else {\n        // create record for remote guest and add it\n        const r = new Record(this.#ds, name)\n        this.#guestRecords.set(name, r)\n        // republish when record changes\n        r.load().then(() => {\n          r.watchShared(updatePublishedGuestShareds.bind(this), true)\n        })\n      }\n    }\n\n    // update shareds in guestShareds\n    this.#guestShareds.length = 0 // empty it\n    for (const name of this.#guestNames) {\n      if (name === this.#guestName) {\n        // add `my` guest record\n        this.#guestShareds.push(this.#myGuestRecord.shared)\n      } else {\n        // add remote guest record\n        const r = this.#guestRecords.get(name)\n        if (r) this.#guestShareds.push(r.shared)\n      }\n    }\n\n    updatePublishedGuestShareds()\n  }\n}\n", "import {\n  JSONValue,\n  JSONObject,\n  RecordData,\n} from \"@deepstream/client/dist/src/constants\"\n\nimport { SubscriptionCallback as OriginalSubscriptionCallback } from \"@deepstream/client/dist/src/record/record\"\n\nimport * as log from \"./log\"\n\nexport { JSONValue, JSONObject, RecordData }\nexport type UserData = unknown\n\nexport type SubscriptionCallback =\n  | OriginalSubscriptionCallback\n  | ((...args: Parameters<OriginalSubscriptionCallback>) => Promise<void>)\n\n/**\n * checks if `value` is JSONValue (JSON serializable)\n * logs error message if not\n *\n * @param value value to check\n * @param name the name of the value to use in debugging messages\n * @returns if the value is JSONValue\n */\n\nexport function isJSONValue(\n  value: UserData,\n  name = \"unknown\"\n): value is JSONValue {\n  const isJSON = validateJSONValue(value, \"\")\n  if (!isJSON) {\n    let details = \"\"\n    if (validationError) {\n      details = `\\n\"${name}${validationError.path}\" ${validationError.message}`\n    }\n    log.warn(`User provided data is not JSON serializable.${details}`)\n  }\n  return isJSON\n}\n\n/**\n * checks if `value` is JSONObject (JSON serializable + object)\n * logs error message if not\n *\n * @param value value to check\n * @returns if the value is JSONObject\n */\n\nexport function isJSONObject(\n  value: UserData,\n  name?: string\n): value is JSONObject {\n  if (typeof value !== \"object\") {\n    log.warn(`User provided data is not an object.`)\n    return false\n  }\n  return isJSONValue(value, name)\n}\n\nexport function isEmpty(o: any): boolean {\n  if (typeof o !== \"object\") return false\n  return Object.keys(o as object).length === 0\n}\n\nfunction defined(value: unknown): boolean {\n  return typeof value !== \"undefined\"\n}\n\n/**\n * checks the given value to see if it is JSON serializable\n * recursively checks all objects and arrays\n *\n * @param value the value to validate\n * @param path the starting path, this is used for error messages only\n * (and is currently useless)\n * @returns if the value is JSON serializable\n */\n\ninterface ValidationError {\n  path: string\n  message: string\n}\n\n// validationError is a module global and can be checked if/after validateJSONValue returns false for info on the error.\n// note: is there a better pattern for providing error details here?\n\nlet validationError: ValidationError | null\n\nfunction validateJSONValue(value: UserData, path = \"\"): boolean {\n  validationError = null\n\n  // JSONPrimitives are okay\n  if ([\"string\", \"number\", \"boolean\"].includes(typeof value)) return true\n\n  // nulls are okay\n  if (value === null) return true\n\n  // arrays okay, check children\n  if (Array.isArray(value)) {\n    for (const [i, v] of Object.entries(value)) {\n      if (!validateJSONValue(v, `${path}[${i}]`)) return false\n    }\n    return true\n  }\n\n  // plain objects okay, check children\n  if (typeof value === \"object\" && value.constructor === Object) {\n    for (const [k, v] of Object.entries(value)) {\n      if (!validateJSONValue(v, `${path}.${k}`)) return false\n    }\n    return true\n  }\n\n  if (typeof value === \"function\") {\n    validationError = {\n      path,\n      message: `is a function. Functions are not allowed.`,\n    }\n    return false\n  }\n  if (typeof value === \"symbol\") {\n    validationError = {\n      path,\n      message: `is a symbol. Symbols are not allowed.`,\n    }\n    return false\n  }\n\n  if (typeof value === \"object\") {\n    // no warning for any objects not yet classified because its sometimes okay\n    // for example the \"stickies\" example uses a Rect class with no methods\n    // could possibly walk the prototype chain to see if there are any\n    // properties that won't be shared and warn\n\n    return true\n  }\n\n  if (typeof value === \"undefined\") {\n    // allow it, key should be removed\n    return true\n  }\n\n  validationError = {\n    path,\n    message: `is an unknown type. vanilla-party doesn't know what to do with it.`,\n  }\n\n  // if we got this far, we don't know what it is\n  return false\n}\n\n/**\n *  JSONValue is a Deepstream type that reflects what is JSON serializable\n *\n *  checking a key on a JSONValue will warn because a JSONValue might\n *  not be an object, it could be a primitive.\n *\n *  .log((value as JSONObject).test); // okay\n *  .log(value.test);                 // not okay\n */\n", "import onChange from \"on-change\"\n\nimport { DeepstreamClient } from \"@deepstream/client\"\nimport { CONNECTION_STATE } from \"@deepstream/client/dist/src/constants\"\nimport { Record as DSRecord } from \"@deepstream/client/dist/src/record/record\"\n\nimport * as log from \"./log\"\n\nimport { SubscriptionCallback } from \"./validate\"\nimport { UserData, JSONValue, JSONObject, RecordData } from \"./validate\"\nimport { isJSONValue, isJSONObject, isEmpty } from \"./validate\"\n\nimport { patchInPlace } from \"./patch\"\n\ntype SharedObject = JSONObject\n\nconst sharedRecordLookup = new WeakMap<SharedObject, Record>()\n\nexport class Record {\n  readonly #ds: DeepstreamClient\n  readonly #name: string\n  #dsRecord: DSRecord | null\n  #shared: SharedObject\n  #watchedShared: SharedObject\n  #whenLoaded: Promise<void> | null\n\n  constructor(ds: DeepstreamClient, name: string) {\n    this.#ds = ds\n    this.#name = name\n    this.#dsRecord = null\n    this.#shared = {}\n    this.#watchedShared = onChange(\n      this.#shared,\n      this.#onClientChangeData.bind(this),\n      {\n        onValidate: this.#onClientValidateData.bind(this),\n      }\n    )\n    this.#whenLoaded = null\n\n    sharedRecordLookup.set(this.#shared, this)\n  }\n\n  async load(initObject?: UserData, overwrite = false): Promise<void> {\n    if (this.#whenLoaded) {\n      log.warn(\"Record.load() called twice!\", this.#name)\n      return this.#whenLoaded\n    }\n\n    if (this.#ds.getConnectionState() !== CONNECTION_STATE.OPEN) {\n      // \"OPEN\"\n      log.error(\"Record.load() called before room is connected.\", this.#name)\n      return\n    }\n\n    const innerLoad = async () => {\n      this.#dsRecord = this.#ds.record.getRecord(this.#name)\n      this.#dsRecord.subscribe(this.#onServerChangeData.bind(this), true)\n      await this.#dsRecord.whenReady()\n      if (!initObject) return\n      await this.initData(initObject, overwrite)\n    }\n\n    this.#whenLoaded = innerLoad()\n    return this.#whenLoaded\n  }\n\n  get whenLoaded(): Promise<void> {\n    if (this.#whenLoaded === null) {\n      log.error(\"Record.whenLoaded called before load().\", this.#name)\n      return Promise.reject(\n        new Error(\"Record.whenLoaded called before load().\")\n      )\n    }\n    return this.#whenLoaded\n  }\n\n  /**\n   * sets initial data on the record only if the record is empty\n   *\n   * @param data initial data to set on the record\n   */\n  async initData(data: UserData, overwrite = false): Promise<void> {\n    if (!this.#dsRecord?.isReady) {\n      log.error(\"Record.initData() called before record ready.\", this.#name)\n      return\n    }\n\n    // if (!data) return;\n    if (!overwrite && !isEmpty(this.#dsRecord.get())) return // don't overwrite existing data\n    if (!isJSONObject(data, \"init-data\")) return // don't try to write bad data\n\n    // todo: allow but warn non-owner writes\n    await this.#dsRecord.setWithAck(data)\n  }\n\n  setData(data: UserData): void {\n    if (!this.#dsRecord?.isReady) {\n      // prettier-ignore\n      log.error(\n        `Record.setData() called before record ready. ${\n          this.#name\n        }\\n Ignored: ${JSON.stringify(data)}`\n      );\n      return\n    }\n    if (!isJSONObject(data, \"set-data\")) return // don't try to write bad data\n\n    // todo: allow but warn non-owner writes\n    this.#dsRecord.set(data)\n  }\n\n  watchShared(callback: SubscriptionCallback, triggerNow?: boolean): void\n\n  watchShared(\n    path: string,\n    callback: SubscriptionCallback,\n    triggerNow?: boolean\n  ): void\n\n  watchShared(\n    path: string | SubscriptionCallback,\n    cb?: SubscriptionCallback | boolean,\n    triggerNow?: boolean\n  ): void {\n    if (!this.#dsRecord?.isReady) {\n      log.warn(`watchShared() called on '${this.#name}' before ready.`)\n      return\n    }\n\n    // @ts-expect-error subscribe overload signatures DO match watchShared\n    this.#dsRecord.subscribe(path, cb, triggerNow)\n  }\n\n  get shared(): JSONObject {\n    return this.#watchedShared\n  }\n\n  get name(): string {\n    return this.#name\n  }\n\n  async delete() {\n    if (!this.#dsRecord?.isReady) {\n      log.error(`delete() called on ${this.#name} before ready.`)\n      return\n    }\n\n    return new Promise((resolve) => {\n      this.#dsRecord?.once(\"delete\", resolve)\n      this.#dsRecord?.delete()\n    })\n  }\n\n  async _set(path: string, value: JSONValue) {\n    // value `as RecordData` because all JSONValues ARE supported\n    await this.#dsRecord?.setWithAck(path, value as RecordData)\n  }\n\n  _get(key?: string): JSONValue {\n    return this.#dsRecord?.get(key) as JSONValue\n  }\n\n  #onClientValidateData(\n    path: string,\n    newValue: UserData,\n    oldValue: UserData\n  ): boolean {\n    return isJSONValue(newValue, `${this.#name}/${path}`)\n  }\n\n  #onClientChangeData(\n    path: string,\n    newValue: UserData,\n    oldValue: UserData\n  ): void {\n    if (!this.#dsRecord?.isReady) {\n      // prettier-ignore\n      log.warn(\n        `Shared object written to before ready. ${\n          this.#name\n        }\\n Ignored: ${path} = ${JSON.stringify(newValue)}`\n      );\n      return\n    }\n    //! experimental\n    // function get(obj: JSONValue, path: string) {\n    //   return path.split(\".\").reduce((current, key) => {\n    //     return current && current[key];\n    //   }, obj);\n    // }\n\n    // function propertyIsEnumerable(obj: JSONValue, path: string) {\n    //   const keys = path.split(\".\");\n    //   const lastKey = keys.pop();\n    //   const parent = keys.reduce((current, key) => {\n    //     return current && current[key];\n    //   }, obj);\n    //   // return parent && parent.hasOwnProperty(lastKey);\n\n    //   return (\n    //     parent && Object.prototype.propertyIsEnumerable.call(parent, lastKey)\n    //   );\n    // }\n\n    // if (!propertyIsEnumerable(this.#shared, path)) {\n    //   return; // don't sync non-enumerable properties\n    // }\n    //! /experimental\n\n    // todo: warn and allow non-owner writes\n\n    // `as JSONValue` because newValue validated in onClientValidateData\n    this._set(path, newValue as JSONValue)\n  }\n\n  #onServerChangeData(data: JSONObject): void {\n    /* istanbul ignore next */ // the server should never be sending this\n    if (!isJSONObject(data, \"server-data\")) {\n      log.error(`Incoming server data not valid.`)\n    }\n    // don't replace #shared itself as #watchedShared has a reference to it\n    // instead patch it to match the incoming data\n    patchInPlace(this.#shared, data, \"shared\")\n  }\n\n  static recordForShared(watchedShared: JSONObject): Record | undefined {\n    const shared = onChange.target(watchedShared)\n\n    if (!sharedRecordLookup.has(shared)) {\n      log.error(`No record found for shared object.`)\n      return undefined\n    }\n    return sharedRecordLookup.get(shared)\n  }\n}\n", "/* eslint-disable unicorn/prefer-spread */\nimport {TARGET, UNSUBSCRIBE, PATH_SEPARATOR} from './lib/constants.js';\nimport {isBuiltinWithMutableMethods, isBuiltinWithoutMutableMethods} from './lib/is-builtin.js';\nimport path from './lib/path.js';\nimport isArray from './lib/is-array.js';\nimport isSymbol from './lib/is-symbol.js';\nimport isIterator from './lib/is-iterator.js';\nimport wrapIterator from './lib/wrap-iterator.js';\nimport ignoreProperty from './lib/ignore-property.js';\nimport Cache from './lib/cache.js';\nimport SmartClone from './lib/smart-clone/smart-clone.js';\n\nconst defaultOptions = {\n\tequals: Object.is,\n\tisShallow: false,\n\tpathAsArray: false,\n\tignoreSymbols: false,\n\tignoreUnderscores: false,\n\tignoreDetached: false,\n\tdetails: false,\n};\n\nconst onChange = (object, onChange, options = {}) => {\n\toptions = {\n\t\t...defaultOptions,\n\t\t...options,\n\t};\n\n\tconst proxyTarget = Symbol('ProxyTarget');\n\tconst {equals, isShallow, ignoreDetached, details} = options;\n\tconst cache = new Cache(equals);\n\tconst hasOnValidate = typeof options.onValidate === 'function';\n\tconst smartClone = new SmartClone(hasOnValidate);\n\n\t// eslint-disable-next-line max-params\n\tconst validate = (target, property, value, previous, applyData) => !hasOnValidate\n\t\t|| smartClone.isCloning\n\t\t|| options.onValidate(path.concat(cache.getPath(target), property), value, previous, applyData) === true;\n\n\tconst handleChangeOnTarget = (target, property, value, previous) => {\n\t\tif (\n\t\t\t!ignoreProperty(cache, options, property)\n\t\t\t&& !(ignoreDetached && cache.isDetached(target, object))\n\t\t) {\n\t\t\thandleChange(cache.getPath(target), property, value, previous);\n\t\t}\n\t};\n\n\t// eslint-disable-next-line max-params\n\tconst handleChange = (changePath, property, value, previous, applyData) => {\n\t\tif (smartClone.isCloning && smartClone.isPartOfClone(changePath)) {\n\t\t\tsmartClone.update(changePath, property, previous);\n\t\t} else {\n\t\t\tonChange(path.concat(changePath, property), value, previous, applyData);\n\t\t}\n\t};\n\n\tconst getProxyTarget = value => value\n\t\t? (value[proxyTarget] ?? value)\n\t\t: value;\n\n\tconst prepareValue = (value, target, property, basePath) => {\n\t\tif (\n\t\t\tisBuiltinWithoutMutableMethods(value)\n\t\t\t|| property === 'constructor'\n\t\t\t|| (isShallow && !SmartClone.isHandledMethod(target, property))\n\t\t\t|| ignoreProperty(cache, options, property)\n\t\t\t|| cache.isGetInvariant(target, property)\n\t\t\t|| (ignoreDetached && cache.isDetached(target, object))\n\t\t) {\n\t\t\treturn value;\n\t\t}\n\n\t\tif (basePath === undefined) {\n\t\t\tbasePath = cache.getPath(target);\n\t\t}\n\n\t\t/*\n  \t\tCheck for circular references.\n\n  \t\tIf the value already has a corresponding path/proxy,\n\t\tand if the path corresponds to one of the parents,\n\t\tthen we are on a circular case, where the child is pointing to their parent.\n\t\tIn this case we return the proxy object with the shortest path.\n  \t\t*/\n\t\tconst childPath = path.concat(basePath, property);\n\t\tconst existingPath = cache.getPath(value);\n\n\t\tif (existingPath && isSameObjectTree(childPath, existingPath)) {\n\t\t\t// We are on the same object tree but deeper, so we use the parent path.\n\t\t\treturn cache.getProxy(value, existingPath, handler, proxyTarget);\n\t\t}\n\n\t\treturn cache.getProxy(value, childPath, handler, proxyTarget);\n\t};\n\n\t/*\n\tReturns true if `childPath` is a subpath of `existingPath`\n\t(if childPath starts with existingPath). Otherwise, it returns false.\n\n \tIt also returns false if the 2 paths are identical.\n\n \tFor example:\n\t- childPath    = group.layers.0.parent.layers.0.value\n\t- existingPath = group.layers.0.parent\n\t*/\n\tconst isSameObjectTree = (childPath, existingPath) => {\n\t\tif (isSymbol(childPath) || childPath.length <= existingPath.length) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (isArray(existingPath) && existingPath.length === 0) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst childParts = isArray(childPath) ? childPath : childPath.split(PATH_SEPARATOR);\n\t\tconst existingParts = isArray(existingPath) ? existingPath : existingPath.split(PATH_SEPARATOR);\n\n\t\tif (childParts.length <= existingParts.length) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn !(existingParts.some((part, index) => part !== childParts[index]));\n\t};\n\n\tconst handler = {\n\t\tget(target, property, receiver) {\n\t\t\tif (isSymbol(property)) {\n\t\t\t\tif (property === proxyTarget || property === TARGET) {\n\t\t\t\t\treturn target;\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\tproperty === UNSUBSCRIBE\n\t\t\t\t\t&& !cache.isUnsubscribed\n\t\t\t\t\t&& cache.getPath(target).length === 0\n\t\t\t\t) {\n\t\t\t\t\tcache.unsubscribe();\n\t\t\t\t\treturn target;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst value = isBuiltinWithMutableMethods(target)\n\t\t\t\t? Reflect.get(target, property)\n\t\t\t\t: Reflect.get(target, property, receiver);\n\n\t\t\treturn prepareValue(value, target, property);\n\t\t},\n\n\t\tset(target, property, value, receiver) {\n\t\t\tvalue = getProxyTarget(value);\n\n\t\t\tconst reflectTarget = target[proxyTarget] ?? target;\n\t\t\tconst previous = reflectTarget[property];\n\n\t\t\tif (equals(previous, value) && property in target) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tconst isValid = validate(target, property, value, previous);\n\n\t\t\tif (\n\t\t\t\tisValid\n\t\t\t\t&& cache.setProperty(reflectTarget, property, value, receiver, previous)\n\t\t\t) {\n\t\t\t\thandleChangeOnTarget(target, property, target[property], previous);\n\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\treturn !isValid;\n\t\t},\n\n\t\tdefineProperty(target, property, descriptor) {\n\t\t\tif (!cache.isSameDescriptor(descriptor, target, property)) {\n\t\t\t\tconst previous = target[property];\n\n\t\t\t\tif (\n\t\t\t\t\tvalidate(target, property, descriptor.value, previous)\n\t\t\t\t\t&& cache.defineProperty(target, property, descriptor, previous)\n\t\t\t\t) {\n\t\t\t\t\thandleChangeOnTarget(target, property, descriptor.value, previous);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn true;\n\t\t},\n\n\t\tdeleteProperty(target, property) {\n\t\t\tif (!Reflect.has(target, property)) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tconst previous = Reflect.get(target, property);\n\t\t\tconst isValid = validate(target, property, undefined, previous);\n\n\t\t\tif (\n\t\t\t\tisValid\n\t\t\t\t&& cache.deleteProperty(target, property, previous)\n\t\t\t) {\n\t\t\t\thandleChangeOnTarget(target, property, undefined, previous);\n\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\treturn !isValid;\n\t\t},\n\n\t\tapply(target, thisArg, argumentsList) {\n\t\t\tconst thisProxyTarget = thisArg[proxyTarget] ?? thisArg;\n\n\t\t\tif (cache.isUnsubscribed) {\n\t\t\t\treturn Reflect.apply(target, thisProxyTarget, argumentsList);\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\t(details === false\n\t\t\t\t\t|| (details !== true && !details.includes(target.name)))\n\t\t\t\t&& SmartClone.isHandledType(thisProxyTarget)\n\t\t\t) {\n\t\t\t\tlet applyPath = path.initial(cache.getPath(target));\n\t\t\t\tconst isHandledMethod = SmartClone.isHandledMethod(thisProxyTarget, target.name);\n\n\t\t\t\tsmartClone.start(thisProxyTarget, applyPath, argumentsList);\n\n\t\t\t\tlet result = Reflect.apply(\n\t\t\t\t\ttarget,\n\t\t\t\t\tsmartClone.preferredThisArg(target, thisArg, thisProxyTarget),\n\t\t\t\t\tisHandledMethod\n\t\t\t\t\t\t? argumentsList.map(argument => getProxyTarget(argument))\n\t\t\t\t\t\t: argumentsList,\n\t\t\t\t);\n\n\t\t\t\tconst isChanged = smartClone.isChanged(thisProxyTarget, equals);\n\t\t\t\tconst previous = smartClone.stop();\n\n\t\t\t\tif (SmartClone.isHandledType(result) && isHandledMethod) {\n\t\t\t\t\tif (thisArg instanceof Map && target.name === 'get') {\n\t\t\t\t\t\tapplyPath = path.concat(applyPath, argumentsList[0]);\n\t\t\t\t\t}\n\n\t\t\t\t\tresult = cache.getProxy(result, applyPath, handler);\n\t\t\t\t}\n\n\t\t\t\tif (isChanged) {\n\t\t\t\t\tconst applyData = {\n\t\t\t\t\t\tname: target.name,\n\t\t\t\t\t\targs: argumentsList,\n\t\t\t\t\t\tresult,\n\t\t\t\t\t};\n\t\t\t\t\tconst changePath = smartClone.isCloning\n\t\t\t\t\t\t? path.initial(applyPath)\n\t\t\t\t\t\t: applyPath;\n\t\t\t\t\tconst property = smartClone.isCloning\n\t\t\t\t\t\t? path.last(applyPath)\n\t\t\t\t\t\t: '';\n\n\t\t\t\t\tif (validate(path.get(object, changePath), property, thisProxyTarget, previous, applyData)) {\n\t\t\t\t\t\thandleChange(changePath, property, thisProxyTarget, previous, applyData);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsmartClone.undo(thisProxyTarget);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\t(thisArg instanceof Map || thisArg instanceof Set)\n\t\t\t\t\t&& isIterator(result)\n\t\t\t\t) {\n\t\t\t\t\treturn wrapIterator(result, target, thisArg, applyPath, prepareValue);\n\t\t\t\t}\n\n\t\t\t\treturn result;\n\t\t\t}\n\n\t\t\treturn Reflect.apply(target, thisArg, argumentsList);\n\t\t},\n\t};\n\n\tconst proxy = cache.getProxy(object, options.pathAsArray ? [] : '', handler);\n\tonChange = onChange.bind(proxy);\n\n\tif (hasOnValidate) {\n\t\toptions.onValidate = options.onValidate.bind(proxy);\n\t}\n\n\treturn proxy;\n};\n\nonChange.target = proxy => proxy?.[TARGET] ?? proxy;\nonChange.unsubscribe = proxy => proxy?.[UNSUBSCRIBE] ?? proxy;\n\nexport default onChange;\n", "export const PATH_SEPARATOR = '.';\nexport const TARGET = Symbol('target');\nexport const UNSUBSCRIBE = Symbol('unsubscribe');\n", "export function isBuiltinWithMutableMethods(value) {\n\treturn value instanceof Date\n\t\t|| value instanceof Set\n\t\t|| value instanceof Map\n\t\t|| value instanceof WeakSet\n\t\t|| value instanceof WeakMap\n\t\t|| ArrayBuffer.isView(value);\n}\n\nexport function isBuiltinWithoutMutableMethods(value) {\n\treturn (typeof value === 'object' ? value === null : typeof value !== 'function') || value instanceof RegExp;\n}\n", "import {PATH_SEPARATOR} from './constants.js';\nimport isArray from './is-array.js';\nimport isSymbol from './is-symbol.js';\n\nconst path = {\n\tafter(path, subPath) {\n\t\tif (isArray(path)) {\n\t\t\treturn path.slice(subPath.length);\n\t\t}\n\n\t\tif (subPath === '') {\n\t\t\treturn path;\n\t\t}\n\n\t\treturn path.slice(subPath.length + 1);\n\t},\n\tconcat(path, key) {\n\t\tif (isArray(path)) {\n\t\t\tpath = [...path];\n\n\t\t\tif (key) {\n\t\t\t\tpath.push(key);\n\t\t\t}\n\n\t\t\treturn path;\n\t\t}\n\n\t\tif (key && key.toString !== undefined) {\n\t\t\tif (path !== '') {\n\t\t\t\tpath += PATH_SEPARATOR;\n\t\t\t}\n\n\t\t\tif (isSymbol(key)) {\n\t\t\t\treturn path + key.toString();\n\t\t\t}\n\n\t\t\treturn path + key;\n\t\t}\n\n\t\treturn path;\n\t},\n\tinitial(path) {\n\t\tif (isArray(path)) {\n\t\t\treturn path.slice(0, -1);\n\t\t}\n\n\t\tif (path === '') {\n\t\t\treturn path;\n\t\t}\n\n\t\tconst index = path.lastIndexOf(PATH_SEPARATOR);\n\n\t\tif (index === -1) {\n\t\t\treturn '';\n\t\t}\n\n\t\treturn path.slice(0, index);\n\t},\n\tlast(path) {\n\t\tif (isArray(path)) {\n\t\t\treturn path.at(-1) ?? '';\n\t\t}\n\n\t\tif (path === '') {\n\t\t\treturn path;\n\t\t}\n\n\t\tconst index = path.lastIndexOf(PATH_SEPARATOR);\n\n\t\tif (index === -1) {\n\t\t\treturn path;\n\t\t}\n\n\t\treturn path.slice(index + 1);\n\t},\n\twalk(path, callback) {\n\t\tif (isArray(path)) {\n\t\t\tfor (const key of path) {\n\t\t\t\tcallback(key);\n\t\t\t}\n\t\t} else if (path !== '') {\n\t\t\tlet position = 0;\n\t\t\tlet index = path.indexOf(PATH_SEPARATOR);\n\n\t\t\tif (index === -1) {\n\t\t\t\tcallback(path);\n\t\t\t} else {\n\t\t\t\twhile (position < path.length) {\n\t\t\t\t\tif (index === -1) {\n\t\t\t\t\t\tindex = path.length;\n\t\t\t\t\t}\n\n\t\t\t\t\tcallback(path.slice(position, index));\n\n\t\t\t\t\tposition = index + 1;\n\t\t\t\t\tindex = path.indexOf(PATH_SEPARATOR, position);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\tget(object, path) {\n\t\tthis.walk(path, key => {\n\t\t\tif (object) {\n\t\t\t\tobject = object[key];\n\t\t\t}\n\t\t});\n\n\t\treturn object;\n\t},\n\tisSubPath(path, subPath) {\n\t\tif (isArray(path)) {\n\t\t\tif (path.length < subPath.length) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// eslint-disable-next-line unicorn/no-for-loop\n\t\t\tfor (let i = 0; i < subPath.length; i++) {\n\t\t\t\tif (path[i] !== subPath[i]) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn true;\n\t\t}\n\n\t\tif (path.length < subPath.length) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (path === subPath) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (path.startsWith(subPath)) {\n\t\t\treturn path[subPath.length] === PATH_SEPARATOR;\n\t\t}\n\n\t\treturn false;\n\t},\n\tisRootPath(path) {\n\t\tif (isArray(path)) {\n\t\t\treturn path.length === 0;\n\t\t}\n\n\t\treturn path === '';\n\t},\n};\n\nexport default path;\n", "export default Array.isArray;\n", "export default function isSymbol(value) {\n\treturn typeof value === 'symbol';\n}\n", "export default function isIterator(value) {\n\treturn typeof value === 'object' && typeof value.next === 'function';\n}\n", "import {TARGET} from './constants.js';\n\n// eslint-disable-next-line max-params\nexport default function wrapIterator(iterator, target, thisArgument, applyPath, prepareValue) {\n\tconst originalNext = iterator.next;\n\n\tif (target.name === 'entries') {\n\t\titerator.next = function () {\n\t\t\tconst result = originalNext.call(this);\n\n\t\t\tif (result.done === false) {\n\t\t\t\tresult.value[0] = prepareValue(\n\t\t\t\t\tresult.value[0],\n\t\t\t\t\ttarget,\n\t\t\t\t\tresult.value[0],\n\t\t\t\t\tapplyPath,\n\t\t\t\t);\n\t\t\t\tresult.value[1] = prepareValue(\n\t\t\t\t\tresult.value[1],\n\t\t\t\t\ttarget,\n\t\t\t\t\tresult.value[0],\n\t\t\t\t\tapplyPath,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn result;\n\t\t};\n\t} else if (target.name === 'values') {\n\t\tconst keyIterator = thisArgument[TARGET].keys();\n\n\t\titerator.next = function () {\n\t\t\tconst result = originalNext.call(this);\n\n\t\t\tif (result.done === false) {\n\t\t\t\tresult.value = prepareValue(\n\t\t\t\t\tresult.value,\n\t\t\t\t\ttarget,\n\t\t\t\t\tkeyIterator.next().value,\n\t\t\t\t\tapplyPath,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn result;\n\t\t};\n\t} else {\n\t\titerator.next = function () {\n\t\t\tconst result = originalNext.call(this);\n\n\t\t\tif (result.done === false) {\n\t\t\t\tresult.value = prepareValue(\n\t\t\t\t\tresult.value,\n\t\t\t\t\ttarget,\n\t\t\t\t\tresult.value,\n\t\t\t\t\tapplyPath,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn result;\n\t\t};\n\t}\n\n\treturn iterator;\n}\n", "import isSymbol from './is-symbol.js';\n\nexport default function ignoreProperty(cache, options, property) {\n\treturn cache.isUnsubscribed\n\t\t|| (options.ignoreSymbols && isSymbol(property))\n\t\t|| (options.ignoreUnderscores && property.charAt(0) === '_')\n\t\t|| ('ignoreKeys' in options && options.ignoreKeys.includes(property));\n}\n", "import path from './path.js';\n\n/**\n@class Cache\n@private\n*/\nexport default class Cache {\n\tconstructor(equals) {\n\t\tthis._equals = equals;\n\t\tthis._proxyCache = new WeakMap();\n\t\tthis._pathCache = new WeakMap();\n\t\tthis.isUnsubscribed = false;\n\t}\n\n\t_getDescriptorCache() {\n\t\tif (this._descriptorCache === undefined) {\n\t\t\tthis._descriptorCache = new WeakMap();\n\t\t}\n\n\t\treturn this._descriptorCache;\n\t}\n\n\t_getProperties(target) {\n\t\tconst descriptorCache = this._getDescriptorCache();\n\t\tlet properties = descriptorCache.get(target);\n\n\t\tif (properties === undefined) {\n\t\t\tproperties = {};\n\t\t\tdescriptorCache.set(target, properties);\n\t\t}\n\n\t\treturn properties;\n\t}\n\n\t_getOwnPropertyDescriptor(target, property) {\n\t\tif (this.isUnsubscribed) {\n\t\t\treturn Reflect.getOwnPropertyDescriptor(target, property);\n\t\t}\n\n\t\tconst properties = this._getProperties(target);\n\t\tlet descriptor = properties[property];\n\n\t\tif (descriptor === undefined) {\n\t\t\tdescriptor = Reflect.getOwnPropertyDescriptor(target, property);\n\t\t\tproperties[property] = descriptor;\n\t\t}\n\n\t\treturn descriptor;\n\t}\n\n\tgetProxy(target, path, handler, proxyTarget) {\n\t\tif (this.isUnsubscribed) {\n\t\t\treturn target;\n\t\t}\n\n\t\tconst reflectTarget = target[proxyTarget];\n\t\tconst source = reflectTarget ?? target;\n\n\t\tthis._pathCache.set(source, path);\n\n\t\tlet proxy = this._proxyCache.get(source);\n\n\t\tif (proxy === undefined) {\n\t\t\tproxy = reflectTarget === undefined\n\t\t\t\t? new Proxy(target, handler)\n\t\t\t\t: target;\n\n\t\t\tthis._proxyCache.set(source, proxy);\n\t\t}\n\n\t\treturn proxy;\n\t}\n\n\tgetPath(target) {\n\t\treturn this.isUnsubscribed ? undefined : this._pathCache.get(target);\n\t}\n\n\tisDetached(target, object) {\n\t\treturn !Object.is(target, path.get(object, this.getPath(target)));\n\t}\n\n\tdefineProperty(target, property, descriptor) {\n\t\tif (!Reflect.defineProperty(target, property, descriptor)) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (!this.isUnsubscribed) {\n\t\t\tthis._getProperties(target)[property] = descriptor;\n\t\t}\n\n\t\treturn true;\n\t}\n\n\tsetProperty(target, property, value, receiver, previous) { // eslint-disable-line max-params\n\t\tif (!this._equals(previous, value) || !(property in target)) {\n\t\t\tconst descriptor = this._getOwnPropertyDescriptor(target, property);\n\n\t\t\tif (descriptor !== undefined && 'set' in descriptor) {\n\t\t\t\treturn Reflect.set(target, property, value, receiver);\n\t\t\t}\n\n\t\t\treturn Reflect.set(target, property, value);\n\t\t}\n\n\t\treturn true;\n\t}\n\n\tdeleteProperty(target, property, previous) {\n\t\tif (Reflect.deleteProperty(target, property)) {\n\t\t\tif (!this.isUnsubscribed) {\n\t\t\t\tconst properties = this._getDescriptorCache().get(target);\n\n\t\t\t\tif (properties) {\n\t\t\t\t\tdelete properties[property];\n\t\t\t\t\tthis._pathCache.delete(previous);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tisSameDescriptor(a, target, property) {\n\t\tconst b = this._getOwnPropertyDescriptor(target, property);\n\n\t\treturn a !== undefined\n\t\t\t&& b !== undefined\n\t\t\t&& Object.is(a.value, b.value)\n\t\t\t&& (a.writable || false) === (b.writable || false)\n\t\t\t&& (a.enumerable || false) === (b.enumerable || false)\n\t\t\t&& (a.configurable || false) === (b.configurable || false)\n\t\t\t&& a.get === b.get\n\t\t\t&& a.set === b.set;\n\t}\n\n\tisGetInvariant(target, property) {\n\t\tconst descriptor = this._getOwnPropertyDescriptor(target, property);\n\n\t\treturn descriptor !== undefined\n\t\t\t&& descriptor.configurable !== true\n\t\t\t&& descriptor.writable !== true;\n\t}\n\n\tunsubscribe() {\n\t\tthis._descriptorCache = null;\n\t\tthis._pathCache = null;\n\t\tthis._proxyCache = null;\n\t\tthis.isUnsubscribed = true;\n\t}\n}\n", "import isArray from '../is-array.js';\nimport {isBuiltinWithMutableMethods} from '../is-builtin.js';\nimport isObject from '../is-object.js';\nimport CloneObject from './clone/clone-object.js';\nimport CloneArray from './clone/clone-array.js';\nimport CloneDate from './clone/clone-date.js';\nimport CloneSet from './clone/clone-set.js';\nimport CloneMap from './clone/clone-map.js';\nimport CloneWeakSet from './clone/clone-weakset.js';\nimport CloneWeakMap from './clone/clone-weakmap.js';\n\nexport default class SmartClone {\n\tconstructor(hasOnValidate) {\n\t\tthis._stack = [];\n\t\tthis._hasOnValidate = hasOnValidate;\n\t}\n\n\tstatic isHandledType(value) {\n\t\treturn isObject(value)\n\t\t\t|| isArray(value)\n\t\t\t|| isBuiltinWithMutableMethods(value);\n\t}\n\n\tstatic isHandledMethod(target, name) {\n\t\tif (isObject(target)) {\n\t\t\treturn CloneObject.isHandledMethod(name);\n\t\t}\n\n\t\tif (isArray(target)) {\n\t\t\treturn CloneArray.isHandledMethod(name);\n\t\t}\n\n\t\tif (target instanceof Set) {\n\t\t\treturn CloneSet.isHandledMethod(name);\n\t\t}\n\n\t\tif (target instanceof Map) {\n\t\t\treturn CloneMap.isHandledMethod(name);\n\t\t}\n\n\t\treturn isBuiltinWithMutableMethods(target);\n\t}\n\n\tget isCloning() {\n\t\treturn this._stack.length > 0;\n\t}\n\n\tstart(value, path, argumentsList) {\n\t\tlet CloneClass = CloneObject;\n\n\t\tif (isArray(value)) {\n\t\t\tCloneClass = CloneArray;\n\t\t} else if (value instanceof Date) {\n\t\t\tCloneClass = CloneDate;\n\t\t} else if (value instanceof Set) {\n\t\t\tCloneClass = CloneSet;\n\t\t} else if (value instanceof Map) {\n\t\t\tCloneClass = CloneMap;\n\t\t} else if (value instanceof WeakSet) {\n\t\t\tCloneClass = CloneWeakSet;\n\t\t} else if (value instanceof WeakMap) {\n\t\t\tCloneClass = CloneWeakMap;\n\t\t}\n\n\t\tthis._stack.push(new CloneClass(value, path, argumentsList, this._hasOnValidate));\n\t}\n\n\tupdate(fullPath, property, value) {\n\t\tthis._stack.at(-1).update(fullPath, property, value);\n\t}\n\n\tpreferredThisArg(target, thisArgument, thisProxyTarget) {\n\t\tconst {name} = target;\n\t\tconst isHandledMethod = SmartClone.isHandledMethod(thisProxyTarget, name);\n\n\t\treturn this._stack.at(-1)\n\t\t\t.preferredThisArg(isHandledMethod, name, thisArgument, thisProxyTarget);\n\t}\n\n\tisChanged(isMutable, value, equals) {\n\t\treturn this._stack.at(-1).isChanged(isMutable, value, equals);\n\t}\n\n\tisPartOfClone(changePath) {\n\t\treturn this._stack.at(-1).isPathApplicable(changePath);\n\t}\n\n\tundo(object) {\n\t\tif (this._previousClone !== undefined) {\n\t\t\tthis._previousClone.undo(object);\n\t\t}\n\t}\n\n\tstop() {\n\t\tthis._previousClone = this._stack.pop();\n\n\t\treturn this._previousClone.clone;\n\t}\n}\n", "export default function isObject(value) {\n\treturn toString.call(value) === '[object Object]';\n}\n", "import path from '../../path.js';\nimport isArray from '../../is-array.js';\nimport isObject from '../../is-object.js';\nimport {MUTABLE_ARRAY_METHODS} from '../methods/array.js';\nimport {MUTABLE_SET_METHODS} from '../methods/set.js';\nimport {MUTABLE_MAP_METHODS} from '../methods/map.js';\nimport {IMMUTABLE_OBJECT_METHODS} from '../methods/object.js';\n\nexport default class CloneObject {\n\tconstructor(value, path, argumentsList, hasOnValidate) {\n\t\tthis._path = path;\n\t\tthis._isChanged = false;\n\t\tthis._clonedCache = new Set();\n\t\tthis._hasOnValidate = hasOnValidate;\n\t\tthis._changes = hasOnValidate ? [] : null;\n\n\t\tthis.clone = path === undefined ? value : this._shallowClone(value);\n\t}\n\n\tstatic isHandledMethod(name) {\n\t\treturn IMMUTABLE_OBJECT_METHODS.has(name);\n\t}\n\n\t_shallowClone(value) {\n\t\tlet clone = value;\n\n\t\tif (isObject(value)) {\n\t\t\tclone = {...value};\n\t\t} else if (isArray(value) || ArrayBuffer.isView(value)) {\n\t\t\tclone = [...value];\n\t\t} else if (value instanceof Date) {\n\t\t\tclone = new Date(value);\n\t\t} else if (value instanceof Set) {\n\t\t\tclone = new Set([...value].map(item => this._shallowClone(item)));\n\t\t} else if (value instanceof Map) {\n\t\t\tclone = new Map();\n\n\t\t\tfor (const [key, item] of value.entries()) {\n\t\t\t\tclone.set(key, this._shallowClone(item));\n\t\t\t}\n\t\t}\n\n\t\tthis._clonedCache.add(clone);\n\n\t\treturn clone;\n\t}\n\n\tpreferredThisArg(isHandledMethod, name, thisArgument, thisProxyTarget) {\n\t\tif (isHandledMethod) {\n\t\t\tif (isArray(thisProxyTarget)) {\n\t\t\t\tthis._onIsChanged = MUTABLE_ARRAY_METHODS[name];\n\t\t\t} else if (thisProxyTarget instanceof Set) {\n\t\t\t\tthis._onIsChanged = MUTABLE_SET_METHODS[name];\n\t\t\t} else if (thisProxyTarget instanceof Map) {\n\t\t\t\tthis._onIsChanged = MUTABLE_MAP_METHODS[name];\n\t\t\t}\n\n\t\t\treturn thisProxyTarget;\n\t\t}\n\n\t\treturn thisArgument;\n\t}\n\n\tupdate(fullPath, property, value) {\n\t\tconst changePath = path.after(fullPath, this._path);\n\n\t\tif (property !== 'length') {\n\t\t\tlet object = this.clone;\n\n\t\t\tpath.walk(changePath, key => {\n\t\t\t\tif (object?.[key]) {\n\t\t\t\t\tif (!this._clonedCache.has(object[key])) {\n\t\t\t\t\t\tobject[key] = this._shallowClone(object[key]);\n\t\t\t\t\t}\n\n\t\t\t\t\tobject = object[key];\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (this._hasOnValidate) {\n\t\t\t\tthis._changes.push({\n\t\t\t\t\tpath: changePath,\n\t\t\t\t\tproperty,\n\t\t\t\t\tprevious: value,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (object?.[property]) {\n\t\t\t\tobject[property] = value;\n\t\t\t}\n\t\t}\n\n\t\tthis._isChanged = true;\n\t}\n\n\tundo(object) {\n\t\tlet change;\n\n\t\tfor (let index = this._changes.length - 1; index !== -1; index--) {\n\t\t\tchange = this._changes[index];\n\n\t\t\tpath.get(object, change.path)[change.property] = change.previous;\n\t\t}\n\t}\n\n\tisChanged(value) {\n\t\treturn this._onIsChanged === undefined\n\t\t\t? this._isChanged\n\t\t\t: this._onIsChanged(this.clone, value);\n\t}\n\n\tisPathApplicable(changePath) {\n\t\treturn path.isRootPath(this._path) || path.isSubPath(changePath, this._path);\n\t}\n}\n", "import isDiffCertain from '../diff/is-diff-certain.js';\nimport isDiffArrays from '../diff/is-diff-arrays.js';\nimport {IMMUTABLE_OBJECT_METHODS} from './object.js';\n\nconst IMMUTABLE_ARRAY_METHODS = new Set([\n\t'concat',\n\t'includes',\n\t'indexOf',\n\t'join',\n\t'keys',\n\t'lastIndexOf',\n]);\n\nexport const MUTABLE_ARRAY_METHODS = {\n\tpush: isDiffCertain,\n\tpop: isDiffCertain,\n\tshift: isDiffCertain,\n\tunshift: isDiffCertain,\n\tcopyWithin: isDiffArrays,\n\treverse: isDiffArrays,\n\tsort: isDiffArrays,\n\tsplice: isDiffArrays,\n\tflat: isDiffArrays,\n\tfill: isDiffArrays,\n};\n\nexport const HANDLED_ARRAY_METHODS = new Set([\n\t...IMMUTABLE_OBJECT_METHODS,\n\t...IMMUTABLE_ARRAY_METHODS,\n\t...Object.keys(MUTABLE_ARRAY_METHODS),\n]);\n", "export default function isDiffCertain() {\n\treturn true;\n}\n", "export default function isDiffArrays(clone, value) {\n\treturn clone.length !== value.length || clone.some((item, index) => value[index] !== item);\n}\n", "export const IMMUTABLE_OBJECT_METHODS = new Set([\n\t'hasOwnProperty',\n\t'isPrototypeOf',\n\t'propertyIsEnumerable',\n\t'toLocaleString',\n\t'toString',\n\t'valueOf',\n]);\n", "import isDiffSets from '../diff/is-diff-sets.js';\n\nexport const COLLECTION_ITERATOR_METHODS = [\n\t'keys',\n\t'values',\n\t'entries',\n];\n\nexport const IMMUTABLE_SET_METHODS = new Set([\n\t'has',\n\t'toString',\n]);\n\nexport const MUTABLE_SET_METHODS = {\n\tadd: isDiffSets,\n\tclear: isDiffSets,\n\tdelete: isDiffSets,\n\tforEach: isDiffSets,\n};\n\nexport const HANDLED_SET_METHODS = new Set([\n\t...IMMUTABLE_SET_METHODS,\n\t...Object.keys(MUTABLE_SET_METHODS),\n\t...COLLECTION_ITERATOR_METHODS,\n]);\n", "export default function isDiffSets(clone, value) {\n\tif (clone.size !== value.size) {\n\t\treturn true;\n\t}\n\n\tfor (const element of clone) {\n\t\tif (!value.has(element)) {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\treturn false;\n}\n", "import isDiffMaps from '../diff/is-diff-maps.js';\nimport {IMMUTABLE_SET_METHODS, COLLECTION_ITERATOR_METHODS} from './set.js';\n\nconst IMMUTABLE_MAP_METHODS = new Set([...IMMUTABLE_SET_METHODS, 'get']);\n\nexport const MUTABLE_MAP_METHODS = {\n\tset: isDiffMaps,\n\tclear: isDiffMaps,\n\tdelete: isDiffMaps,\n\tforEach: isDiffMaps,\n};\n\nexport const HANDLED_MAP_METHODS = new Set([\n\t...IMMUTABLE_MAP_METHODS,\n\t...Object.keys(MUTABLE_MAP_METHODS),\n\t...COLLECTION_ITERATOR_METHODS,\n]);\n", "export default function isDiffMaps(clone, value) {\n\tif (clone.size !== value.size) {\n\t\treturn true;\n\t}\n\n\tlet bValue;\n\tfor (const [key, aValue] of clone) {\n\t\tbValue = value.get(key);\n\n\t\tif (bValue !== aValue || (bValue === undefined && !value.has(key))) {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\treturn false;\n}\n", "import {HANDLED_ARRAY_METHODS} from '../methods/array.js';\nimport CloneObject from './clone-object.js';\n\nexport default class CloneArray extends CloneObject {\n\tstatic isHandledMethod(name) {\n\t\treturn HANDLED_ARRAY_METHODS.has(name);\n\t}\n}\n", "import CloneObject from './clone-object.js';\n\nexport default class CloneDate extends CloneObject {\n\tundo(object) {\n\t\tobject.setTime(this.clone.getTime());\n\t}\n\n\tisChanged(value, equals) {\n\t\treturn !equals(this.clone.valueOf(), value.valueOf());\n\t}\n}\n", "import {HANDLED_SET_METHODS} from '../methods/set.js';\nimport CloneObject from './clone-object.js';\n\nexport default class CloneSet extends CloneObject {\n\tstatic isHandledMethod(name) {\n\t\treturn HANDLED_SET_METHODS.has(name);\n\t}\n\n\tundo(object) {\n\t\tfor (const value of this.clone) {\n\t\t\tobject.add(value);\n\t\t}\n\n\t\tfor (const value of object) {\n\t\t\tif (!this.clone.has(value)) {\n\t\t\t\tobject.delete(value);\n\t\t\t}\n\t\t}\n\t}\n}\n", "import {HANDLED_MAP_METHODS} from '../methods/map.js';\nimport CloneObject from './clone-object.js';\n\nexport default class CloneMap extends CloneObject {\n\tstatic isHandledMethod(name) {\n\t\treturn HANDLED_MAP_METHODS.has(name);\n\t}\n\n\tundo(object) {\n\t\tfor (const [key, value] of this.clone.entries()) {\n\t\t\tobject.set(key, value);\n\t\t}\n\n\t\tfor (const key of object.keys()) {\n\t\t\tif (!this.clone.has(key)) {\n\t\t\t\tobject.delete(key);\n\t\t\t}\n\t\t}\n\t}\n}\n", "import CloneObject from './clone-object.js';\n\nexport default class CloneWeakSet extends CloneObject {\n\tconstructor(value, path, argumentsList, hasOnValidate) {\n\t\tsuper(undefined, path, argumentsList, hasOnValidate);\n\n\t\tthis._argument1 = argumentsList[0];\n\t\tthis._weakValue = value.has(this._argument1);\n\t}\n\n\tisChanged(value) {\n\t\treturn this._weakValue !== value.has(this._argument1);\n\t}\n\n\tundo(object) {\n\t\tif (this._weakValue && !object.has(this._argument1)) {\n\t\t\tobject.add(this._argument1);\n\t\t} else {\n\t\t\tobject.delete(this._argument1);\n\t\t}\n\t}\n}\n", "import CloneObject from './clone-object.js';\n\nexport default class CloneWeakMap extends CloneObject {\n\tconstructor(value, path, argumentsList, hasOnValidate) {\n\t\tsuper(undefined, path, argumentsList, hasOnValidate);\n\n\t\tthis._weakKey = argumentsList[0];\n\t\tthis._weakHas = value.has(this._weakKey);\n\t\tthis._weakValue = value.get(this._weakKey);\n\t}\n\n\tisChanged(value) {\n\t\treturn this._weakValue !== value.get(this._weakKey);\n\t}\n\n\tundo(object) {\n\t\tconst weakHas = object.has(this._weakKey);\n\n\t\tif (this._weakHas && !weakHas) {\n\t\t\tobject.set(this._weakKey, this._weakValue);\n\t\t} else if (!this._weakHas && weakHas) {\n\t\t\tobject.delete(this._weakKey);\n\t\t} else if (this._weakValue !== object.get(this._weakKey)) {\n\t\t\tobject.set(this._weakKey, this._weakValue);\n\t\t}\n\t}\n}\n", "import { JSONObject, JSONValue } from \"./validate\"\nimport * as log from \"./log\"\n\n/**\n * patches _old to deep equal _new\n * needed so objects can be updated without breaking references to them\n *\n * @param oldObject object to be updated\n * @param newObject object with values to use for update\n * @param path path to the object to be updated\n */\n\nexport function patchInPlace(\n  oldObject: JSONObject,\n  newObject: JSONObject,\n  path = \"\"\n): void {\n  if (typeof oldObject !== \"object\") {\n    log.error(\"_old is not an object\")\n    return\n  }\n  if (typeof newObject !== \"object\") {\n    log.error(\"_new is not an object\")\n    return\n  }\n\n  const oldKeys = Object.keys(oldObject).reverse()\n  const newKeys = Object.keys(newObject)\n\n  // remove oldObject keys that are not in newObject\n  for (const key of oldKeys) {\n    if (!Object.prototype.hasOwnProperty.call(newObject, key)) {\n      // log.debug(`remove ${_keyPath}.${key}`);\n      if (Array.isArray(oldObject)) {\n        oldObject.splice(parseInt(key), 1)\n      } else {\n        // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n        delete oldObject[key]\n      }\n    }\n  }\n\n  // add newObject keys that are not in oldObject\n  for (const key of newKeys) {\n    if (!Object.prototype.hasOwnProperty.call(oldObject, key)) {\n      // log.debug(`add ${_keyPath}.${key}`);\n      oldObject[key] = newObject[key]\n    }\n  }\n\n  // patch shared object and array keys\n  for (const key of newKeys) {\n    if (Object.prototype.hasOwnProperty.call(oldObject, key)) {\n      const oldType = getMergeType(oldObject[key])\n      const newType = getMergeType(newObject[key])\n\n      // bail if type is unsupported\n      if (newType === \"unsupported\") {\n        log.error(\n          `${path}.${key} is unsupported type: ${typeof newObject[key]}`\n        )\n        continue\n      }\n\n      // merge objects\n      if (oldType === \"object\" && newType === \"object\") {\n        // casts are safe; objects in JSONObjects are always JSON Objects\n        patchInPlace(\n          oldObject[key] as JSONObject,\n          newObject[key] as JSONObject,\n          `${path}.${key}`\n        )\n        continue\n      }\n\n      // merge arrays\n      if (oldType === \"array\" && newType === \"array\") {\n        // casts are safe; arrays in JSONObjects can be treated by\n        // this function as JSONObjects\n        patchInPlace(\n          oldObject[key] as JSONObject,\n          newObject[key] as JSONObject,\n          `${path}.${key}`\n        )\n        continue\n      }\n\n      // replace everything else\n      if (oldObject[key] !== newObject[key]) {\n        oldObject[key] = newObject[key]\n      }\n    }\n  }\n}\n\n// module.exports = { patchInPlace };\nfunction getMergeType(value: JSONValue): string {\n  if (value === null) return \"null\"\n  if (Array.isArray(value)) return \"array\"\n  if (typeof value === \"object\") return \"object\"\n  if (typeof value === \"boolean\") return \"primitive\"\n  if (typeof value === \"number\" && Number.isFinite(value)) return \"primitive\"\n  if (typeof value === \"string\") return \"primitive\"\n  return \"unsupported\"\n}\n", "import { signal, component } from \"reefjs\"\nimport * as log from \"../../log\"\nimport infoCss from \"./info.css\"\nimport { partyGetRoom } from \"../../core\"\n\nlet infoDiv\nlet refreshId\nlet infoComponent\nlet eventsReady = false\nlet isInfoShown = false\n\n// show/hide the Info Panel with F1 key\ndocument.addEventListener(\n  \"keyup\",\n  (e) => {\n    if (e.key === \"F1\") {\n      partyToggleInfo()\n    }\n  },\n  false\n)\n\n/// partyToggleInfo\n/**\n * @param {boolean} show\n */\nexport function partyToggleInfo(show) {\n  const room = partyGetRoom()\n\n  if (!room) {\n    log.error(\"partyToggleInfo() called before partyConnect()\")\n    return\n  }\n\n  isInfoShown = show ?? !isInfoShown\n\n  if (isInfoShown) {\n    createInfo(room)\n  } else {\n    destroyInfo()\n  }\n}\n\nasync function createInfo(room) {\n  await room.whenConnected\n\n  if (infoDiv) return\n\n  // create info panel div\n  infoDiv = document.createElement(\"div\")\n  infoDiv.className = \"vanillaparty_info\"\n  document.body.append(infoDiv)\n\n  // setup UI with reef\n  const data = signal({\n    ...room.info(),\n  })\n\n  function template() {\n    const { appName, roomName, guestNames, isHost, isConnected } = data\n\n    if (isConnected) {\n      return `\n        <style>${infoCss}</style>\n        <div>${appName}</div>\n        <div>${roomName}</div>\n        <div>guests: ${guestNames.length}</div>\n        <div>${isHost ? \"hosting\" : \"\"}</div>\n        <button data-party=\"reload-others\">reload others</button>\n        <button data-party=\"disconnect-others\">disconnect others</button>\n        <a href=\"https://www.notion.so/justinbakse/The-Info-Panel-193b1bb21cec80aaafd8f341f044b3fc\">?</a>`\n    } else {\n      return `\n        <style>${infoCss}</style>\n        <div class=\"error\">disconnected</div>`\n    }\n  }\n\n  infoComponent = component(infoDiv, template)\n\n  if (!eventsReady) {\n    eventsReady = true\n\n    document.addEventListener(\"click\", (event) => {\n      let action = event.target.getAttribute(\"data-party\")\n\n      if (!action) return\n      const sender = room.info().guestName\n      if (action === \"reload-others\") {\n        room.emit(\"party:reload-others\", { sender })\n      }\n      if (action === \"disconnect-others\") {\n        room.emit(\"party:disconnect-others\", { sender })\n      }\n    })\n\n    // install party events\n    room.subscribe(\"party:reload-others\", (data) => {\n      if (!room) return\n      if (data.sender !== room.info().guestName) {\n        log.warn('Received \"reload-others\" event. Reloading...')\n        window.location.reload()\n      }\n    })\n\n    room.subscribe(\"party:disconnect-others\", (data) => {\n      if (!room) return\n      if (data.sender != room.info().guestName) {\n        log.warn('Received \"disconnect-others\" event. Disconnecting...')\n        room.disconnect()\n        createInfo(room)\n      }\n    })\n  }\n\n  // update UI\n  refreshId = window.setInterval(() => {\n    Object.assign(data, room.info())\n  }, 100)\n}\n\nfunction destroyInfo() {\n  if (infoDiv) {\n    infoDiv.remove()\n    infoDiv = null\n  }\n  if (infoComponent) infoComponent.stop()\n\n  clearInterval(refreshId)\n}\n", "/**\n * Emit a custom reefevent\n * @param  {String} type   The event type\n * @param  {*}      detail Any details to pass along with the event\n * @param  {Node}   elem   The element to emit the event on\n */\nfunction emit (type, detail, elem = document) {\n\n\t// Create a new event\n\tlet event = new CustomEvent(`reef:${type}`, {\n\t\tbubbles: true,\n\t\tcancelable: true,\n\t\tdetail: detail\n\t});\n\n\t// Dispatch the event\n\treturn elem.dispatchEvent(event);\n\n}\n\n/**\n * Get the element from the UI\n * @param  {String|Node} elem The element or selector string\n * @return {Node}             The element\n */\nfunction getElem (elem) {\n\treturn typeof elem === 'string' ? document.querySelector(elem) : elem;\n}\n\n/**\n * Get an object's type\n * @param  {*}      obj The object\n * @return {String}     The type\n */\nfunction getType (obj) {\n\treturn Object.prototype.toString.call(obj).slice(8, -1).toLowerCase();\n}\n\n\nexport {emit, getElem, getType};", "import {emit, getType} from './utilities.js';\n\n\n/**\n * Create a Proxy handler object\n * @param  {String} name The custom event namespace\n * @param  {Object} data The data object\n * @return {Object}      The handler object\n */\nfunction handler (name, data) {\n\tlet type = 'signal' + (name ? `-${name}` : '');\n\treturn {\n\t\tget (obj, prop) {\n\t\t\tif (prop === '_isSignal') return true;\n\t\t\tif (['object', 'array'].includes(getType(obj[prop])) && !obj[prop]._isSignal) {\n\t\t\t\tobj[prop] = new Proxy(obj[prop], handler(name, data));\n\t\t\t}\n\t\t\treturn obj[prop];\n\t\t},\n\t\tset (obj, prop, value) {\n\t\t\tif (obj[prop] === value) return true;\n\t\t\tobj[prop] = value;\n\t\t\temit(type, {prop, value, action: 'set'});\n\t\t\treturn true;\n\t\t},\n\t\tdeleteProperty (obj, prop) {\n\t\t\tdelete obj[prop];\n\t\t\temit(type, {prop, value: obj[prop], action: 'delete'});\n\t\t\treturn true;\n\t\t}\n\t};\n}\n\n/**\n * Create a new signal\n * @param  {Object} data The data object\n * @param  {String} name The custom event namespace\n * @return {Proxy}       The signal Proxy\n */\nfunction signal (data = {}, name = '') {\n\tdata = ['array', 'object'].includes(getType(data)) ? data : {value: data};\n\treturn new Proxy(data, handler(name, data));\n}\n\n\nexport default signal;\n", "import {emit} from './utilities.js';\n\n\n/**\n * Store Class\n */\nclass Store {\n\n\t/**\n\t * The constructor object\n\t * @param  {Object} data    The data object\n\t * @param  {Object} actions The store functions\n\t * @param  {String} name    The custom event namespace for the signal\n\t */\n\tconstructor (data, actions, name = '') {\n\n\t\t// Get signal type\n\t\tlet type = 'signal' + (name ? `-${name}` : '');\n\n\t\t// Create data property setter/getter\n\t\tObject.defineProperties(this, {\n\t\t\tvalue: {\n\t\t\t\tget () {\n\t\t\t\t\treturn structuredClone(data);\n\t\t\t\t},\n\t\t\t\tset () {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\t// Add store functions\n\t\tfor (let fn in actions) {\n\t\t\tif (typeof actions[fn] !== 'function') continue;\n\t\t\tthis[fn] = function (...args) {\n\t\t\t\tactions[fn](data, ...args);\n\t\t\t\temit(type, data);\n\t\t\t};\n\t\t}\n\n\t}\n\n}\n\n/**\n * Create a new store\n * @param  {Object} data    The data object\n * @param  {Object} setters The store functions\n * @param  {String} name    The custom event namespace for the signal\n * @return {Proxy}          The Store instance\n */\nfunction store (data = {}, setters = {}, name = '') {\n\treturn new Store(data, setters, name);\n}\n\n\nexport default store;", "import {emit, getElem} from './utilities.js';\n\n\n// Form fields and attributes that can be modified by users\n// They also have implicit values that make it hard to know if they were changed by the user or developer\nlet formFields = ['input', 'option', 'textarea'];\nlet formAtts = ['value', 'checked', 'selected'];\nlet formAttsNoVal = ['checked', 'selected'];\n\n/**\n * Convert a template string into HTML DOM nodes\n * @param  {String}  str The template string\n * @return {Element}     The template HTML\n */\nfunction stringToHTML (str) {\n\n\t// Create document\n\tlet parser = new DOMParser();\n\tlet doc = parser.parseFromString(`<body><template>${str}</template></body>`, 'text/html');\n\n\t// If there's a body, return it\n\tif (doc.body) {\n\t\treturn doc.body.firstElementChild.content;\n\t}\n\n\t// Otherwise, create a body and return it\n\treturn document.createElement('body');\n\n}\n\n/**\n * Check if an attribute string has a stringified falsy value\n * @param  {String}  str The string\n * @return {Boolean}     If true, value is falsy (yea, I know, that's a little confusing)\n */\nfunction isFalsy (str) {\n\treturn ['false', 'null', 'undefined', '0', '-0', 'NaN', '0n', '-0n'].includes(str);\n}\n\n/**\n * Add an event listener to an element\n * @param  {Element} elem   The element to delegate events on\n * @param  {String}  event  The event name\n * @param  {String}  val    The function to run for the event\n * @param  {Object}  events The allowed event functions\n */\nfunction listen (elem, event, val, events) {\n\n\t// Only run if there are events\n\tif (!event.startsWith('on') || !events) return;\n\n\t// If there's already a listener for this event, skip\n\tif (!!elem[event]) return;\n\n\t// Get the event listener ID\n\tlet fnName = val.split('(')[0];\n\tlet listener = events[fnName];\n\tif (!listener) return;\n\n\t// Start listening\n\telem[event] = listener;\n\n}\n\n/**\n * Check if attribute should be skipped (sanitize properties)\n * @param  {String}  name   The attribute name\n * @param  {String}  value  The attribute value\n * @return {Boolean}        If true, skip the attribute\n */\nfunction skipAttribute (name, value) {\n\tlet val = value.replace(/\\s+/g, '').toLowerCase();\n\tif (['src', 'href', 'xlink:href'].includes(name)) {\n\t\tif (val.includes('javascript:') || val.includes('data:text/html')) return true;\n\t}\n\tif (name.startsWith('on') || name.startsWith('@on') || name.startsWith('#on')) return true;\n}\n\n/**\n * Add an attribute to an element\n * @param {Node}   elem   The element\n * @param {String} att    The attribute\n * @param {String} val    The value\n * @param {Object} events The allowed event functions\n */\nfunction addAttribute (elem, att, val, events) {\n\n\t// If there's an event object, add listener\n\tlisten(elem, att, val, events);\n\n\t// Sanitize dangerous attributes\n\tif (skipAttribute(att, val)) return;\n\n\t// If it's a form attribute, set the property directly\n\tif (formAtts.includes(att)) {\n\t\telem[att] = att === 'value' ? val : ' ';\n\t}\n\n\t// Update the attribute\n\telem.setAttribute(att, val);\n\n}\n\n/**\n * Remove an attribute from an element\n * @param {Node}   elem The element\n * @param {String} att  The attribute\n */\nfunction removeAttribute (elem, att) {\n\n\t// If it's a form attribute, remove the property directly\n\tif (formAtts.includes(att)) {\n\t\telem[att] = '';\n\t}\n\n\t// Remove the attribute\n\telem.removeAttribute(att);\n\n}\n\n/**\n * Compare the existing node attributes to the template node attributes and make updates\n * @param  {Node}   template The new template\n * @param  {Node}   existing The existing DOM node\n * @param  {Object} events   The allowed event functions\n */\nfunction diffAttributes (template, existing, events) {\n\n\t// If the node is not an element, bail\n\tif (template.nodeType !== 1) return;\n\n\t// Get attributes for the template and existing DOM\n\tlet templateAtts = template.attributes;\n\tlet existingAtts = existing.attributes;\n\n\t// Add and update attributes from the template into the DOM\n\tfor (let {name, value} of Array.from(templateAtts)) {\n\n\t\t// Skip [#*] attributes\n\t\tif (name.startsWith('#')) continue;\n\n\t\t// Skip user-editable form field attributes\n\t\tif (formAtts.includes(name) && formFields.includes(template.tagName.toLowerCase())) continue;\n\n\t\t// Convert [@*] names to their real attribute name\n\t\tlet attName = name.startsWith('@') ? name.slice(1) : name;\n\n\t\t// If its a no-value property and it's falsy remove it\n\t\tif (formAttsNoVal.includes(attName) && isFalsy(value)) {\n\t\t\tremoveAttribute(existing, attName);\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Otherwise, add the attribute\n\t\taddAttribute(existing, attName, value, events);\n\n\t}\n\n\t// Remove attributes from the DOM that shouldn't be there\n\tfor (let {name, value} of Array.from(existingAtts)) {\n\n\t\t// If the attribute exists in the template, skip it\n\t\tif (templateAtts[name]) continue;\n\n\t\t// Skip user-editable form field attributes\n\t\tif (formAtts.includes(name) && formFields.includes(existing.tagName.toLowerCase())) continue;\n\n\t\t// Otherwise, remove it\n\t\tremoveAttribute(existing, name);\n\n\t}\n\n}\n\n/**\n * Add default attributes to a newly created element\n * @param  {Node}   elem   The element\n * @param  {Object} events The allowed event functions\n */\nfunction addDefaultAtts (elem, events) {\n\n\t// Only run on elements\n\tif (elem.nodeType !== 1) return;\n\n\t// Remove [@*] and [#*] attributes and replace them with the plain attributes\n\t// Remove unsafe HTML attributes\n\tfor (let {name, value} of Array.from(elem.attributes)) {\n\n\t\t// If the attribute should be skipped, remove it\n\t\tif (skipAttribute(name, value)) {\n\t\t\tremoveAttribute(elem, name);\n\t\t\tlisten(elem, name, value, events);\n\t\t\treturn;\n\t\t}\n\n\t\t// If the attribute isn't a [@*] or [#*], skip it\n\t\tif (!name.startsWith('@') && !name.startsWith('#')) continue;\n\n\t\t// Get the plain attribute name\n\t\tlet attName = name.slice(1);\n\n\t\t// Remove the [@*] or [#*] attribute\n\t\tremoveAttribute(elem, name);\n\n\t\t// If it's a no-value attribute and its falsy, skip it\n\t\tif (formAttsNoVal.includes(attName) && isFalsy(value)) continue;\n\n\t\t// Add the plain attribute\n\t\taddAttribute(elem, attName, value, events);\n\n\t}\n\n\t// If there are child elems, recursively add defaults to them\n\tif (elem.childNodes) {\n\t\tfor (let node of elem.childNodes) {\n\t\t\taddDefaultAtts(node, events);\n\t\t}\n\t}\n\n}\n\n/**\n * Get the content from a node\n * @param  {Node}   node The node\n * @return {String}      The content\n */\nfunction getNodeContent (node) {\n\treturn node.childNodes && node.childNodes.length ? null : node.textContent;\n}\n\n/**\n * Check if two nodes are different\n * @param  {Node}    node1 The first node\n * @param  {Node}    node2 The second node\n * @return {Boolean}       If true, they're not the same node\n */\nfunction isDifferentNode (node1, node2) {\n\treturn (\n\t\t(typeof node1.nodeType === 'number' && node1.nodeType !== node2.nodeType) ||\n\t\t(typeof node1.tagName === 'string' && node1.tagName !== node2.tagName) ||\n\t\t(typeof node1.id === 'string' && !!node1.id && node1.id !== node2.id) ||\n\t\t('getAttribute' in node1 && 'getAttribute' in node2 && node1.getAttribute('key') !== node2.getAttribute('key')) ||\n\t\t(typeof node1.src === 'string' && !!node1.src && node1.src !== node2.src)\n\t);\n}\n\n/**\n * Check if the desired node is further ahead in the current DOM tree branch\n * @param  {Node}     node     The node to look for\n * @param  {NodeList} existing The existing nodes in the DOM\n * @return {Node}              The element from the DOM\n */\nfunction aheadInTree (node, existing) {\n\n\t// If the node isn't an element, bail\n\tif (node.nodeType !== 1) return;\n\n\t// Look for the ID or [key] attribute\n\tlet id = node.getAttribute('id');\n\tlet key = node.getAttribute('key');\n\tif (!id || !key) return;\n\n\t// Use the ID or [key] as the selector\n\tlet selector = id ? `#${id}` : `[key=\"${key}\"]`;\n\n\t// Look for the corresponding element in the DOM\n\treturn existing.querySelector(`:scope > ${selector}`);\n\n}\n\n/**\n * If there are extra elements in DOM, remove them\n * @param  {Array} existingNodes The existing DOM nodes\n * @param  {Array} templateNodes The template nodes\n */\nfunction trimExtraNodes (existingNodes, templateNodes) {\n\tlet extra = existingNodes.length - templateNodes.length;\n\tif (extra < 1)  return;\n\tfor (; extra > 0; extra--) {\n\t\texistingNodes[existingNodes.length - 1].remove();\n\t}\n}\n\n/**\n * Remove scripts from HTML\n * @param  {Node} elem The element to remove scripts from\n */\nfunction removeScripts (elem) {\n\tlet scripts = elem.querySelectorAll('script');\n\tfor (let script of scripts) {\n\t\tscript.remove();\n\t}\n}\n\n/**\n * Diff the existing DOM node versus the template\n * @param  {Array}  template The template HTML\n * @param  {Node}   existing The current DOM HTML\n * @param  {Object} events   The allowed event functions\n */\nfunction diff (template, existing, events) {\n\n\t// Get the nodes in the template and existing UI\n\tlet templateNodes = template.childNodes;\n\tlet existingNodes = existing.childNodes;\n\n\t// Don't inject scripts\n\tif (removeScripts(template)) return;\n\n\t// Loop through each node in the template and compare it to the matching element in the UI\n\ttemplateNodes.forEach(function (node, index) {\n\n\t\t// If there's no existing element, create and append\n\t\tif (!existingNodes[index]) {\n\t\t\tlet clone = node.cloneNode(true);\n\t\t\taddDefaultAtts(clone, events);\n\t\t\texisting.append(clone);\n\t\t\treturn;\n\t\t}\n\n\t\t// If there is, but it's not the same node type...\n\t\tif (isDifferentNode(node, existingNodes[index])) {\n\n\t\t\t// Check if node exists further in the tree\n\t\t\tlet ahead = aheadInTree(node, existing);\n\n\t\t\t// If not, insert the new node before the current one\n\t\t\tif (!ahead) {\n\t\t\t\tlet clone = node.cloneNode(true);\n\t\t\t\taddDefaultAtts(clone, events);\n\t\t\t\texistingNodes[index].before(clone);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Otherwise, move existing node to the current spot\n\t\t\texistingNodes[index].before(ahead);\n\n\t\t}\n\n\t\t// Stop diffing if element should be ignored\n\t\tif (templateNodes[index] && 'hasAttribute' in templateNodes[index] && templateNodes[index].hasAttribute('reef-ignore')) return;\n\n\t\t// If attributes are different, update them\n\t\tdiffAttributes(node, existingNodes[index], events);\n\n\t\t// Stop diffing if a native web component\n\t\tif (node.nodeName.includes('-')) return;\n\n\t\t// If content is different, update it\n\t\tlet templateContent = getNodeContent(node);\n\t\tif (templateContent && templateContent !== getNodeContent(existingNodes[index])) {\n\t\t\texistingNodes[index].textContent = templateContent;\n\t\t}\n\n\t\t// If there shouldn't be child nodes but there are, remove them\n\t\tif (!node.childNodes.length && existingNodes[index].childNodes.length) {\n\t\t\texistingNodes[index].innerHTML = '';\n\t\t\treturn;\n\t\t}\n\n\t\t// If DOM is empty and shouldn't be, build it up\n\t\t// This uses a document fragment to minimize reflows\n\t\tif (!existingNodes[index].childNodes.length && node.childNodes.length) {\n\t\t\tlet fragment = document.createDocumentFragment();\n\t\t\tdiff(node, fragment, events);\n\t\t\texistingNodes[index].appendChild(fragment);\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are nodes within it, recursively diff those\n\t\tif (node.childNodes.length) {\n\t\t\tdiff(node, existingNodes[index], events);\n\t\t}\n\n\t});\n\n\t// If extra elements in DOM, remove them\n\ttrimExtraNodes(existingNodes, templateNodes);\n\n}\n\n/**\n * Render a template into the UI\n * @param  {Node|String} elem     The element or selector to render the template into\n * @param  {String}      template The template to render\n * @param  {Object}      events   The allowed event functions\n */\nfunction render (elem, template, events) {\n\tlet node = getElem(elem);\n\tlet html = stringToHTML(template);\n\tif (!emit('before-render', null, node)) return;\n\tdiff(html, node, events);\n\temit('render', null, node);\n}\n\n\nexport default render;", "// Hold the selector for the element to focus on\nlet focusOn;\n\n/**\n * Set focus on the element\n * 1ms delay prevents odd bugs from browser-native focus shifts\n */\nfunction setFocus () {\n\tsetTimeout(function () {\n\n\t\t// Find target element in the DOM\n\t\tlet elem = document.querySelector(focusOn);\n\t\tfocusOn = null;\n\t\tif (!elem) return;\n\n\t\t// Try to focus element\n\t\telem.focus();\n\t\tif (document.activeElement === elem) return;\n\n\t\t// If element could not be focused, set a tabindex and try again\n\t\telem.setAttribute('tabindex', -1);\n\t\telem.focus();\n\n\t}, 1);\n}\n\n/**\n * Shift focus to trigger a screen reader announcement after content is loaded\n */\nfunction focus (selector) {\n\tif (!selector || typeof selector !== 'string') return;\n\tfocusOn = selector;\n\tdocument.addEventListener('reef:render', setFocus, {once: true});\n}\n\n\nexport default focus;", "import render from './render.js';\nimport {emit, getElem} from './utilities.js';\n\n\n/**\n * Create the event handler function\n * @param {Class} instance The Component instance\n */\nfunction createHandler (instance) {\n\treturn function handler (event) {\n\t\tinstance.render();\n\t};\n}\n\n/**\n * Component Class\n */\nclass Component {\n\n\t/**\n\t * The constructor object\n\t * @param  {Node|String} elem            The element or selector to render the template into\n\t * @param  {Function}    template        The template function to run when the data updates\n\t * @param  {Object}      options         Additional options\n\t * @param  {Array}       options.signals The names of the signals to listen for\n\t * @param  {Object}      options.events  The allowed event functions\n\t */\n\tconstructor (elem, template, options) {\n\n\t\t// Create instance properties\n\t\tthis.elem = elem;\n\t\tthis.template = template;\n\t\tthis.signals = options.signals ? options.signals.map((signal) => `reef:signal-${signal}`) : ['reef:signal'];\n\t\tthis.events = options.events;\n\t\tthis.handler = createHandler(this);\n\t\tthis.debounce = null;\n\n\t\t// Init\n\t\tthis.start();\n\n\t}\n\n\t/**\n\t * Start reactive data rendering\n\t */\n\tstart () {\n\t\tfor (let signal of this.signals) {\n\t\t\tdocument.addEventListener(signal, this.handler);\n\t\t}\n\t\tthis.render();\n\t\temit('start', null, getElem(this.elem));\n\t}\n\n\t/**\n\t * Stop reactive data rendering\n\t */\n\tstop () {\n\t\tfor (let signal of this.signals) {\n\t\t\tdocument.removeEventListener(signal, this.handler);\n\t\t}\n\t\temit('stop', null, getElem(this.elem));\n\t}\n\n\t/**\n\t * Render the UI\n\t */\n\trender () {\n\n\t\t// Cache instance\n\t\tlet self = this;\n\n\t\t// If there's a pending render, cancel it\n\t\tif (self.debounce) {\n\t\t\twindow.cancelAnimationFrame(self.debounce);\n\t\t}\n\n\t\t// Setup the new render to run at the next animation frame\n\t\tself.debounce = window.requestAnimationFrame(function () {\n\t\t\trender(self.elem, self.template(), self.events);\n\t\t});\n\n\t}\n\n}\n\n/**\n * Create a new listener\n * @param  {Node|String} elem     The element or selector to render the template into\n * @param  {Function}    template The template function to run when the data updates\n * @param  {Object}      options  Additional options\n */\nfunction component (elem, template, options = {}) {\n\treturn new Component(elem, template, options);\n}\n\n\nexport default component;", ".vanillaparty_info {\n  position: fixed;\n  right: 0;\n  top: 0;\n  padding: 10px;\n\n  background: rgba(255, 255, 0, 0.1);\n\n  font-family: \"Courier New\", Courier, monospace;\n  font-size: 18px;\n}\n\n.vanillaparty_info .error {\n  padding: 3px 6px;\n\n  background: red;\n  color: white;\n}\n\n.vanillaparty_info button {\n  display: block;\n  margin-top: 6px;\n  padding: 3px 6px;\n\n  background: white;\n  color: black;\n  border: 1px solid black;\n  border-radius: 3px;\n\n  cursor: pointer;\n\n  font-family: \"Courier New\", Courier, monospace;\n  font-size: 14px;\n}\n.vanillaparty_info button:hover {\n  background: #eee;\n}\n.vanillaparty_info button:active {\n  background: #ddd;\n}\n\n.vanillaparty_info .checkbox {\n  appearance: none;\n  margin: 0;\n\n  width: 1em;\n  height: 1em;\n\n  border: 1px solid black;\n  border-radius: 3px;\n  background: white;\n\n  display: inline-grid;\n  place-content: center;\n}\n.vanillaparty_info .checkbox::before {\n  content: \"\";\n  width: 0.65em;\n  height: 0.65em;\n\n  background: black;\n  border-radius: 2px;\n\n  transform: scale(0);\n  transition: 120ms transform ease-in-out;\n}\n.vanillaparty_info .checkbox:checked::before {\n  transform: scale(1);\n}\n\n.vanillaparty_info label {\n  margin: 0;\n  font-size: 14px;\n}\n"],
  "mappings": "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",
  "names": ["require_base64_js", "__commonJSMin", "exports", "init_esbuild_inject", "byteLength", "toByteArray", "fromByteArray", "lookup", "revLookup", "Arr", "code", "i", "len", "getLens", "b64", "validLen", "placeHoldersLen", "lens", "_byteLength", "tmp", "arr", "curByte", "tripletToBase64", "num", "encodeChunk", "uint8", "start", "end", "output", "extraBytes", "parts", "maxChunkLength", "len2", "require_ieee754", "__commonJSMin", "exports", "init_esbuild_inject", "buffer", "offset", "isLE", "mLen", "nBytes", "e", "m", "eLen", "eMax", "eBias", "nBits", "i", "d", "s", "value", "rt", "require_buffer", "__commonJSMin", "exports", "init_esbuild_inject", "base64", "ieee754", "customInspectSymbol", "Buffer", "SlowBuffer", "K_MAX_LENGTH", "typedArraySupport", "arr", "proto", "e", "createBuffer", "length", "buf", "arg", "encodingOrOffset", "allocUnsafe", "from", "value", "fromString", "fromArrayView", "isInstance", "fromArrayBuffer", "valueOf", "b", "fromObject", "assertSize", "size", "alloc", "fill", "encoding", "checked", "string", "byteLength", "actual", "fromArrayLike", "array", "arrayView", "copy", "byteOffset", "obj", "len", "numberIsNaN", "a", "x", "y", "i", "list", "buffer", "pos", "mustMatch", "loweredCase", "utf8ToBytes", "base64ToBytes", "slowToString", "start", "end", "hexSlice", "utf8Slice", "asciiSlice", "latin1Slice", "base64Slice", "utf16leSlice", "swap", "n", "m", "str", "max", "target", "thisStart", "thisEnd", "thisCopy", "targetCopy", "bidirectionalIndexOf", "val", "dir", "arrayIndexOf", "indexSize", "arrLength", "valLength", "read", "foundIndex", "found", "j", "hexWrite", "offset", "remaining", "strLen", "parsed", "utf8Write", "blitBuffer", "asciiWrite", "asciiToBytes", "base64Write", "ucs2Write", "utf16leToBytes", "res", "firstByte", "codePoint", "bytesPerSequence", "secondByte", "thirdByte", "fourthByte", "tempCodePoint", "decodeCodePointsArray", "MAX_ARGUMENTS_LENGTH", "codePoints", "ret", "out", "hexSliceLookupTable", "bytes", "newBuf", "checkOffset", "ext", "noAssert", "mul", "defineBigIntMethod", "validateNumber", "first", "last", "boundsError", "lo", "__pow", "hi", "checkInt", "min", "maxBytes", "wrtBigUInt64LE", "checkIntBI", "wrtBigUInt64BE", "limit", "sub", "checkIEEE754", "writeFloat", "littleEndian", "writeDouble", "targetStart", "code", "errors", "E", "sym", "getMessage", "Base", "name", "range", "input", "msg", "received", "addNumericalSeparator", "checkBounds", "type", "INVALID_BASE64_RE", "base64clean", "units", "leadSurrogate", "byteArray", "c", "src", "dst", "alphabet", "table", "i16", "fn", "BufferBigIntNotDefined", "init_esbuild_inject", "__esmMin", "require_merge_strategy", "__commonJSMin", "exports", "init_esbuild_inject", "REMOTE_WINS", "localValue", "localVersion", "remoteValue", "remoteVersion", "callback", "LOCAL_WINS", "require_client_options", "__commonJSMin", "exports", "init_esbuild_inject", "merge_strategy_1", "TOPIC", "exports", "RECORD_ACTION", "exports", "AUTH_ACTION", "exports", "EVENT_ACTION", "exports", "RPC_ACTION", "exports", "PRESENCE_ACTION", "exports", "CONNECTION_ACTION", "exports", "CLUSTER_ACTION", "exports", "LOCK_ACTION", "exports", "PARSER_ACTION", "exports", "MONITORING_ACTION", "exports", "STATE_REGISTRY_TOPIC", "exports", "STATE_ACTION", "general_1", "exports", "record_1", "auth_1", "event_1", "rpc_1", "presence_1", "connection_1", "cluster_1", "lock_1", "parser_1", "monitoring_1", "state_1", "all_1", "exports", "require_constants", "__commonJSMin", "exports", "init_esbuild_inject", "__createBinding", "o", "m", "k", "k2", "desc", "__exportStar", "p", "_a", "_b", "_c", "_d", "all_1", "EVENT", "CONNECTION_STATE", "require_logger", "__commonJSMin", "exports", "init_esbuild_inject", "constants_1", "messages_1", "all_1", "isEvent", "action", "Logger", "emitter", "message", "event", "meta", "warnMessage", "require_emitter", "__commonJSMin", "exports", "init_esbuild_inject", "__values", "o", "s", "m", "__read", "n", "r", "ar", "e", "error", "__spreadArray", "to", "from", "pack", "l", "Emitter", "event", "fn", "scope", "callbacks", "_this", "on", "args", "_i", "item", "cb", "context", "e_1", "_a", "_b", "_c", "_d", "eventName", "e_1_1", "require_timeout_registry", "__commonJSMin", "exports", "init_esbuild_inject", "__extends", "extendStatics", "d", "b", "p", "__", "__assign", "t", "s", "i", "n", "__values", "o", "m", "__read", "r", "ar", "e", "error", "constants_1", "emitter_1", "TimeoutRegistry", "_super", "services", "options", "_this", "timeout", "internalTimeout", "message", "requestMsg", "action", "uniqueName", "name", "e_1", "_a", "_b", "_c", "_d", "e_1_1", "require_interval_timer_registry", "__commonJSMin", "exports", "init_esbuild_inject", "__values", "o", "s", "m", "__read", "n", "r", "ar", "e", "error", "IntervalTimerRegistry", "timerResolution", "e_1", "_a", "now", "_b", "_c", "_d", "timerId", "timeout", "e_1_1", "callback", "require_native_timer_registry", "__commonJSMin", "exports", "init_esbuild_inject", "NativeTimerRegistry", "timerId", "timeout", "_this", "id", "callback", "require_aspromise", "__commonJSMin", "exports", "module", "init_esbuild_inject", "asPromise", "fn", "ctx", "params", "offset", "index", "pending", "resolve", "reject", "err", "require_base64", "__commonJSMin", "exports", "init_esbuild_inject", "base64", "string", "p", "n", "b64", "s64", "i", "buffer", "start", "end", "parts", "chunk", "j", "t", "b", "invalidEncoding", "offset", "require_eventemitter", "__commonJSMin", "exports", "module", "init_esbuild_inject", "EventEmitter", "evt", "fn", "ctx", "listeners", "i", "args", "require_float", "__commonJSMin", "exports", "module", "init_esbuild_inject", "factory", "f32", "f8b", "le", "writeFloat_f32_cpy", "val", "buf", "pos", "writeFloat_f32_rev", "readFloat_f32_cpy", "readFloat_f32_rev", "writeFloat_ieee754", "writeUint", "sign", "exponent", "mantissa", "writeUintLE", "writeUintBE", "readFloat_ieee754", "readUint", "uint", "readUintLE", "readUintBE", "f64", "writeDouble_f64_cpy", "writeDouble_f64_rev", "readDouble_f64_cpy", "readDouble_f64_rev", "writeDouble_ieee754", "off0", "off1", "readDouble_ieee754", "lo", "hi", "require_inquire", "__commonJSMin", "init_esbuild_inject", "e", "require_utf8", "__commonJSMin", "exports", "init_esbuild_inject", "utf8", "string", "len", "c", "i", "buffer", "start", "end", "parts", "chunk", "t", "offset", "c1", "c2", "require_pool", "__commonJSMin", "exports", "module", "init_esbuild_inject", "pool", "alloc", "slice", "size", "SIZE", "MAX", "slab", "offset", "buf", "require_longbits", "__commonJSMin", "exports", "module", "init_esbuild_inject", "LongBits", "util", "lo", "hi", "zero", "zeroHash", "value", "sign", "unsigned", "charCodeAt", "hash", "mask", "part0", "part1", "part2", "require_minimal", "__commonJSMin", "exports", "init_esbuild_inject", "util", "value", "obj", "prop", "Buffer", "e", "sizeOrArray", "hash", "unsigned", "bits", "merge", "dst", "src", "ifNotSet", "keys", "i", "str", "newError", "name", "CustomError", "message", "properties", "fieldNames", "fieldMap", "encoding", "size", "require_writer", "__commonJSMin", "exports", "module", "init_esbuild_inject", "Writer", "util", "BufferWriter", "LongBits", "base64", "utf8", "Op", "fn", "len", "val", "noop", "State", "writer", "create", "size", "writeByte", "buf", "pos", "writeVarint32", "VarintOp", "value", "writeVarint64", "bits", "writeFixed32", "writeBytes", "i", "head", "tail", "BufferWriter_", "require_writer_buffer", "__commonJSMin", "exports", "module", "init_esbuild_inject", "BufferWriter", "Writer", "util", "val", "buf", "pos", "i", "value", "len", "writeStringBuffer", "require_reader", "__commonJSMin", "exports", "module", "init_esbuild_inject", "Reader", "util", "BufferReader", "LongBits", "utf8", "indexOutOfRange", "reader", "writeLength", "buffer", "create_array", "create", "value", "readLongVarint", "bits", "i", "readFixed32_end", "buf", "end", "readFixed64", "length", "start", "bytes", "wireType", "BufferReader_", "fn", "require_reader_buffer", "__commonJSMin", "exports", "module", "init_esbuild_inject", "BufferReader", "Reader", "util", "buffer", "len", "require_service", "__commonJSMin", "exports", "module", "init_esbuild_inject", "Service", "util", "rpcImpl", "requestDelimited", "responseDelimited", "rpcCall", "method", "requestCtor", "responseCtor", "request", "callback", "self", "err", "response", "endedByRPC", "require_rpc", "__commonJSMin", "exports", "init_esbuild_inject", "rpc", "require_roots", "__commonJSMin", "exports", "module", "init_esbuild_inject", "require_index_minimal", "__commonJSMin", "exports", "init_esbuild_inject", "protobuf", "configure", "require_minimal", "__commonJSMin", "exports", "module", "init_esbuild_inject", "require_protobuf", "__commonJSMin", "exports", "module", "init_esbuild_inject", "$protobuf", "$Reader", "$Writer", "$util", "$root", "valuesById", "values", "AuthMessage", "properties", "keys", "message", "writer", "reader", "length", "end", "tag", "ClusterMessage", "ConnectionMessage", "EventMessage", "i", "Message", "LockMessage", "MonitoringMessage", "ParserMessage", "PresenceMessage", "RecordMessage", "key", "value", "end2", "tag2", "RpcMessage", "StateMessage", "protobuf_1", "exports", "protobuf_map_1", "protobuf_1", "all_1", "parse", "data", "msg", "message", "e", "exports", "parseData", "require_state_machine", "__commonJSMin", "exports", "init_esbuild_inject", "StateMachine", "logger", "stateMachine", "transitionName", "transition", "oldState", "details", "debugHistory", "result", "entry", "require_utils", "__commonJSMin", "exports", "init_esbuild_inject", "deepEquals", "objA", "objB", "deepCopy", "obj", "shallowCopy", "copy", "props", "hasUrlProtocol", "unsupportedProtocol", "parseUrl", "initialURl", "defaultPath", "url", "protocol", "host", "path", "getUid", "timestamp", "randomString", "normalizeSetArguments", "args", "startIndex", "result", "isRootData", "data", "isNestedData", "isPath", "isCallback", "callback", "normalizeArguments", "i", "PromiseDelay", "time", "done", "require_package", "__commonJSMin", "exports", "module", "require_connection", "__commonJSMin", "exports", "init_esbuild_inject", "constants_1", "message_parser_1", "state_machine_1", "utils", "emitter_1", "pkg", "Connection", "services", "options", "url", "emitter", "_this", "isReconnecting", "firstOpen", "newState", "oldState", "callback", "topic", "message", "authParamsOrCallback", "connState", "error", "msg", "parseResults", "parseResult", "res", "handler", "heartBeatTolerance", "clientData", "reason", "data", "newClientData", "protobuf_map_1", "protobuf_1", "getMessage", "message", "isAck", "serializedMessage", "exports", "require_socket_factory", "__commonJSMin", "exports", "init_esbuild_inject", "__assign", "t", "s", "i", "n", "p", "message_parser_1", "message_builder_1", "constants_1", "BrowserWebsocket", "socketFactory", "url", "options", "heartBeatInterval", "socket", "buildMessage", "message", "isAck", "pingMessage", "pingInterval", "lastRecievedMessageTimestamp", "raw", "parseResults", "e", "require_listener", "__commonJSMin", "exports", "init_esbuild_inject", "constants_1", "Listener", "topic", "services", "pattern", "callback", "subscription", "message", "listener", "stopCallback", "_this", "require_bulk_subscription_service", "__commonJSMin", "exports", "init_esbuild_inject", "__read", "o", "n", "m", "r", "ar", "e", "error", "__spreadArray", "to", "from", "pack", "l", "BulkSubscriptionService", "services", "subscriptionInterval", "topic", "subscribeBulkAction", "unsubscribeBulkAction", "onSubscriptionSent", "name", "message", "users", "require_event_handler", "__commonJSMin", "exports", "init_esbuild_inject", "__assign", "t", "s", "i", "n", "p", "constants_1", "listener_1", "emitter_1", "bulk_subscription_service_1", "EventHandler", "services", "options", "listeners", "name", "callback", "data", "message", "pattern", "require_rpc", "__commonJSMin", "exports", "init_esbuild_inject", "constants_1", "RPC", "name", "correlationId", "data", "response", "options", "services", "message", "require_rpc_response", "__commonJSMin", "exports", "init_esbuild_inject", "constants_1", "RPCResponse", "message", "options", "services", "error", "data", "require_rpc_handler", "__commonJSMin", "exports", "init_esbuild_inject", "__read", "o", "n", "m", "r", "ar", "e", "error", "__spreadArray", "to", "from", "pack", "l", "constants_1", "rpc_1", "rpc_response_1", "utils_1", "bulk_subscription_service_1", "RPCHandler", "services", "options", "name", "callback", "data", "_this", "correlationId", "resolve", "reject", "result", "message", "provider", "invalidRPC", "rpc", "i", "_a", "name_1", "require_json_path", "__commonJSMin", "exports", "init_esbuild_inject", "utils", "SPLIT_REG_EXP", "get", "data", "path", "deepCopy", "tokens", "tokenize", "value", "i", "setValue", "root", "rootCopy", "valueCopy", "node", "token", "array", "parts", "part", "arrayIndexes", "j", "require_record_core", "__commonJSMin", "exports", "init_esbuild_inject", "__extends", "extendStatics", "d", "b", "p", "__", "__assign", "t", "s", "i", "n", "constants_1", "json_path_1", "emitter_1", "utils", "state_machine_1", "RecordCore", "_super", "name", "services", "options", "recordServices", "whenComplete", "_this", "prefix", "recordStateTransitions", "ref", "recordName", "version", "data", "error", "newState", "oldState", "context", "callback", "realContext", "resolve", "_a", "path", "oldValue", "newValue", "args", "reject", "mergeStrategy", "writeCallbacks", "oldData", "newData", "runFns", "err", "message", "subscribeMsg", "actionMsg", "remoteVersion", "force", "save", "paths", "recordMessage", "mergedData", "remoteData", "methodName", "require_record", "__commonJSMin", "exports", "init_esbuild_inject", "__extends", "extendStatics", "d", "b", "p", "__", "utils", "constants_1", "emitter_1", "Record", "_super", "record", "_this", "callback", "path", "dataOrPath", "dataOrCallback", "pathOrData", "pathOrCallback", "callbackOrTriggerNow", "triggerNow", "parameters", "subscription", "i", "mergeStrategy", "require_anonymous_record", "__commonJSMin", "exports", "init_esbuild_inject", "__extends", "extendStatics", "d", "b", "p", "__", "utils", "emitter_1", "AnonymousRecord", "_super", "getRecordCore", "_this", "callback", "recordName", "i", "path", "data", "triggerNow", "parameters", "subscription", "mergeStrategy", "require_list", "__commonJSMin", "exports", "init_esbuild_inject", "__extends", "extendStatics", "d", "b", "p", "__", "__read", "o", "n", "m", "r", "ar", "e", "error", "__spreadArray", "to", "from", "pack", "l", "utils", "constants_1", "emitter_1", "List", "_super", "record", "_this", "args", "_i", "callback", "entries", "resolve", "reject", "errorMsg", "i", "entry", "index", "currentEntries", "hasIndex", "parameters", "listCallback", "scope", "cb", "listenCallback", "subscription", "message", "after", "before", "structure", "require_dequeue", "__commonJSMin", "exports", "init_esbuild_inject", "__extends", "extendStatics", "d", "b", "p", "__", "__assign", "t", "s", "i", "n", "__read", "o", "m", "r", "ar", "e", "error", "__spreadArray", "to", "from", "pack", "l", "utils", "constants_1", "emitter_1", "Dequeue", "_super", "record", "_this", "args", "_i", "callback", "head", "next", "entries", "node", "resolve", "reject", "_a", "_b", "errorMsg", "nodes", "index", "pop", "last", "shift", "first", "sortedKeys", "a", "key", "entry", "nodeKey", "position", "hasIndex", "positionOrCallback", "parameters", "listCallback", "scope", "cb", "listenCallback", "subscription", "message", "after", "before", "structure", "require_single_notifier", "__commonJSMin", "exports", "init_esbuild_inject", "constants_1", "SingleNotifier", "services", "action", "timeoutDuration", "name", "callback", "req", "message", "context", "request", "error", "data", "responses", "internalResponses", "i", "response", "requests", "cb", "require_write_ack_service", "__commonJSMin", "exports", "init_esbuild_inject", "__assign", "t", "s", "i", "n", "p", "constants_1", "WriteAcknowledgementService", "services", "message", "callback", "correlationId", "id", "response", "require_dirty_service", "__commonJSMin", "exports", "init_esbuild_inject", "__read", "o", "n", "m", "r", "ar", "e", "error", "__spreadArray", "to", "from", "pack", "l", "DirtyService", "storage", "dirtyStorageName", "recordName", "isDirty", "changed", "context", "callback", "_this", "version", "data", "_a", "require_merge_strategy_service", "__commonJSMin", "exports", "init_esbuild_inject", "__values", "o", "s", "m", "__read", "n", "r", "ar", "e", "error", "constants_1", "MergeStrategyService", "services", "defaultStrategy", "recordName", "strategy", "pattern", "remoteRecord", "localVersion", "localData", "callback", "context", "e_1", "_a", "exactMergeStrategy", "data", "_b", "_c", "_d", "patternMergeStrategy", "e_1_1", "require_record_handler", "__commonJSMin", "exports", "init_esbuild_inject", "__read", "o", "n", "m", "r", "ar", "e", "error", "__spreadArray", "to", "from", "pack", "l", "__values", "s", "utils", "constants_1", "record_core_1", "record_1", "anonymous_record_1", "list_1", "dequeue_1", "listener_1", "single_notifier_1", "write_ack_service_1", "dirty_service_1", "merge_strategy_service_1", "bulk_subscription_service_1", "RecordHandler", "services", "options", "recordServices", "listener", "_a", "recordName", "mergeStrategy", "regexp", "name", "pattern", "callback", "_this", "recordCore", "resolve", "reject", "data", "cb", "version", "rest", "_i", "args", "recordNames", "correlationId", "path", "recordCores", "action", "message", "e_1", "dirtyRecords", "dirtyRecords_1", "dirtyRecords_1_1", "_b", "e_1_1", "mergeData", "bulkSubscribe", "require_presence_handler", "__commonJSMin", "exports", "init_esbuild_inject", "constants_1", "emitter_1", "bulk_subscription_service_1", "ONLY_EVENT", "validateQueryArguments", "rest", "users", "callback", "PresenceHandler", "services", "options", "userOrCallback", "user", "_i", "_a", "message", "emitter", "emitterAction", "queryId", "resolve", "reject", "error", "results", "keys", "hasGlobalSubscription", "_this", "correlationId", "require_indexdb_storage_service", "__commonJSMin", "exports", "init_esbuild_inject", "__values", "o", "s", "m", "__read", "n", "r", "ar", "e", "error", "Operation", "IndexdbStorage", "options", "_this", "_a", "objectStoreNames", "storageDatabaseName", "defaultObjectStoreName", "primaryKey", "dbVersion", "previousDBStructureSerialized", "previousDBStructure", "objectStoreChanged", "name", "request", "event", "db", "objectStoreName", "i", "recordName", "callback", "ignore", "prefix", "version", "data", "deleteDBReqeust", "errorMessage", "e_1", "transaction", "_loop_1", "key", "queuedRequests", "objectStore", "_b", "operation", "request_1", "_c", "_d", "e_1_1", "firstSlashIndex", "requests", "require_localstorage_storage_service", "__commonJSMin", "exports", "init_esbuild_inject", "LocalstorageStorage", "options", "LocalStorage", "e", "recordName", "callback", "ignore", "prefix", "item", "doc", "version", "data", "error", "require_noop_storage_service", "__commonJSMin", "exports", "init_esbuild_inject", "NoopStorage", "recordName", "callback", "version", "data", "require_deepstream_client", "__commonJSMin", "exports", "init_esbuild_inject", "__extends", "extendStatics", "d", "b", "p", "__", "__assign", "t", "s", "i", "n", "client_options_1", "C", "logger_1", "timeout_registry_1", "interval_timer_registry_1", "native_timer_registry_1", "connection_1", "socket_factory_1", "event_handler_1", "rpc_handler_1", "record_handler_1", "presence_handler_1", "emitter_1", "indexdb_storage_service_1", "localstorage_storage_service_1", "noop_storage_service_1", "DeepstreamClient", "_super", "url", "options", "_this", "services", "detailsOrCallback", "callback", "resolve", "reject", "success", "data", "serviceName", "error", "timestamp", "randomString", "require_deepstream", "__commonJSMin", "exports", "init_esbuild_inject", "deepstream_client_1", "init_esbuild_inject", "init_esbuild_inject", "init_esbuild_inject", "version", "init_esbuild_inject", "debug", "makeLogger", "log", "alert", "warn", "error", "type", "prefix", "style", "styled", "init_esbuild_inject", "import_client", "import_constants", "init_esbuild_inject", "import_constants", "isJSONValue", "value", "name", "isJSON", "validateJSONValue", "details", "validationError", "warn", "isJSONObject", "isEmpty", "o", "validationError", "validateJSONValue", "value", "path", "i", "v", "k", "init_esbuild_inject", "init_esbuild_inject", "init_esbuild_inject", "PATH_SEPARATOR", "TARGET", "UNSUBSCRIBE", "init_esbuild_inject", "isBuiltinWithMutableMethods", "value", "isBuiltinWithoutMutableMethods", "init_esbuild_inject", "init_esbuild_inject", "is_array_default", "init_esbuild_inject", "isSymbol", "value", "path", "subPath", "is_array_default", "key", "PATH_SEPARATOR", "isSymbol", "index", "_a", "callback", "position", "object", "i", "path_default", "init_esbuild_inject", "isIterator", "value", "init_esbuild_inject", "wrapIterator", "iterator", "target", "thisArgument", "applyPath", "prepareValue", "originalNext", "result", "keyIterator", "TARGET", "init_esbuild_inject", "ignoreProperty", "cache", "options", "property", "isSymbol", "init_esbuild_inject", "Cache", "equals", "target", "descriptorCache", "properties", "property", "descriptor", "path", "handler", "proxyTarget", "reflectTarget", "source", "proxy", "object", "path_default", "value", "receiver", "previous", "a", "b", "init_esbuild_inject", "init_esbuild_inject", "isObject", "value", "init_esbuild_inject", "init_esbuild_inject", "init_esbuild_inject", "isDiffCertain", "init_esbuild_inject", "isDiffArrays", "clone", "value", "item", "index", "init_esbuild_inject", "IMMUTABLE_OBJECT_METHODS", "IMMUTABLE_ARRAY_METHODS", "MUTABLE_ARRAY_METHODS", "isDiffCertain", "isDiffArrays", "HANDLED_ARRAY_METHODS", "IMMUTABLE_OBJECT_METHODS", "init_esbuild_inject", "init_esbuild_inject", "isDiffSets", "clone", "value", "element", "COLLECTION_ITERATOR_METHODS", "IMMUTABLE_SET_METHODS", "MUTABLE_SET_METHODS", "isDiffSets", "HANDLED_SET_METHODS", "init_esbuild_inject", "init_esbuild_inject", "isDiffMaps", "clone", "value", "bValue", "key", "aValue", "IMMUTABLE_MAP_METHODS", "IMMUTABLE_SET_METHODS", "MUTABLE_MAP_METHODS", "isDiffMaps", "HANDLED_MAP_METHODS", "COLLECTION_ITERATOR_METHODS", "CloneObject", "value", "path", "argumentsList", "hasOnValidate", "name", "IMMUTABLE_OBJECT_METHODS", "clone", "isObject", "__spreadValues", "is_array_default", "item", "key", "isHandledMethod", "thisArgument", "thisProxyTarget", "MUTABLE_ARRAY_METHODS", "MUTABLE_SET_METHODS", "MUTABLE_MAP_METHODS", "fullPath", "property", "changePath", "path_default", "object", "change", "index", "init_esbuild_inject", "CloneArray", "CloneObject", "name", "HANDLED_ARRAY_METHODS", "init_esbuild_inject", "CloneDate", "CloneObject", "object", "value", "equals", "init_esbuild_inject", "CloneSet", "CloneObject", "name", "HANDLED_SET_METHODS", "object", "value", "init_esbuild_inject", "CloneMap", "CloneObject", "name", "HANDLED_MAP_METHODS", "object", "key", "value", "init_esbuild_inject", "CloneWeakSet", "CloneObject", "value", "path", "argumentsList", "hasOnValidate", "object", "init_esbuild_inject", "CloneWeakMap", "CloneObject", "value", "path", "argumentsList", "hasOnValidate", "object", "weakHas", "SmartClone", "_SmartClone", "hasOnValidate", "value", "isObject", "is_array_default", "isBuiltinWithMutableMethods", "target", "name", "CloneObject", "CloneArray", "CloneSet", "CloneMap", "path", "argumentsList", "CloneClass", "CloneDate", "CloneWeakSet", "CloneWeakMap", "fullPath", "property", "thisArgument", "thisProxyTarget", "isHandledMethod", "isMutable", "equals", "changePath", "object", "defaultOptions", "onChange", "object", "options", "__spreadValues", "proxyTarget", "equals", "isShallow", "ignoreDetached", "details", "cache", "Cache", "hasOnValidate", "smartClone", "SmartClone", "validate", "target", "property", "value", "previous", "applyData", "path_default", "handleChangeOnTarget", "ignoreProperty", "handleChange", "changePath", "getProxyTarget", "_a", "prepareValue", "basePath", "isBuiltinWithoutMutableMethods", "childPath", "existingPath", "isSameObjectTree", "handler", "isSymbol", "is_array_default", "childParts", "PATH_SEPARATOR", "existingParts", "part", "index", "receiver", "TARGET", "UNSUBSCRIBE", "isBuiltinWithMutableMethods", "reflectTarget", "isValid", "descriptor", "thisArg", "argumentsList", "thisProxyTarget", "applyPath", "isHandledMethod", "result", "argument", "isChanged", "isIterator", "wrapIterator", "proxy", "on_change_default", "import_constants", "init_esbuild_inject", "patchInPlace", "oldObject", "newObject", "path", "error", "oldKeys", "newKeys", "key", "oldType", "getMergeType", "newType", "value", "sharedRecordLookup", "_ds", "_name", "_dsRecord", "_shared", "_watchedShared", "_whenLoaded", "_Record_instances", "onClientValidateData_fn", "onClientChangeData_fn", "onServerChangeData_fn", "Record", "ds", "name", "__privateAdd", "__privateSet", "on_change_default", "__privateGet", "__privateMethod", "initObject", "overwrite", "__async", "warn", "error", "data", "_a", "isEmpty", "isJSONObject", "path", "cb", "triggerNow", "resolve", "_b", "value", "key", "watchedShared", "shared", "newValue", "oldValue", "isJSONValue", "patchInPlace", "_ds", "_appName", "_roomName", "_roomId", "_guestName", "_guestRecords", "_guestShareds", "_publishedGuestShareds", "_myGuestRecord", "_whenConnected", "_guestNames", "_hostName", "_Room_instances", "connect_fn", "updateHost_fn", "updateGuestNames_fn", "onPresence_fn", "updateGuestShareds_fn", "Room", "host", "appName", "roomName", "__privateAdd", "__privateSet", "__privateGet", "Record", "__privateMethod", "name", "event", "cb", "data", "isJSONValue", "error", "__async", "topic", "everyone", "guestName", "username", "isLoggedIn", "updatePublishedGuestShareds", "nonemptyShareds", "s", "isEmpty", "r", "styled", "version", "room", "partyConnect", "host", "appName", "roomName", "cb", "error", "__async", "Room", "log", "partyDisconnect", "warn", "partyLoadShared", "name", "initObject", "record", "overwrite", "partyLoadMyShared", "partyLoadGuestShareds", "partyIsHost", "partySetShared", "shared", "object", "_a", "Record", "partyWatchShared", "a", "b", "c", "partyEmit", "event", "data", "partySubscribe", "partyUnsubscribe", "partyCountGuests", "partyGetRoom", "init_esbuild_inject", "emit", "type", "detail", "elem", "document", "event", "CustomEvent", "bubbles", "cancelable", "dispatchEvent", "getElem", "querySelector", "getType", "obj", "Object", "prototype", "toString", "call", "slice", "toLowerCase", "handler", "name", "data", "get", "prop", "includes", "_isSignal", "Proxy", "set", "value", "action", "deleteProperty", "signal", "formFields", "formAtts", "formAttsNoVal", "isFalsy", "str", "includes", "listen", "elem", "event", "val", "events", "startsWith", "listener", "split", "skipAttribute", "name", "value", "replace", "toLowerCase", "addAttribute", "att", "setAttribute", "removeAttribute", "addDefaultAtts", "nodeType", "Array", "from", "attributes", "attName", "slice", "childNodes", "node", "getNodeContent", "length", "textContent", "diff", "template", "existing", "templateNodes", "existingNodes", "scripts", "querySelectorAll", "script", "remove", "forEach", "index", "clone", "cloneNode", "append", "node1", "node2", "tagName", "id", "getAttribute", "src", "ahead", "key", "selector", "querySelector", "before", "hasAttribute", "templateAtts", "existingAtts", "nodeName", "templateContent", "fragment", "document", "createDocumentFragment", "appendChild", "innerHTML", "extra", "render", "getElem", "html", "doc", "DOMParser", "parseFromString", "body", "firstElementChild", "content", "createElement", "emit", "Component", "options", "instance", "this", "signals", "map", "signal", "handler", "debounce", "start", "addEventListener", "stop", "removeEventListener", "self", "window", "cancelAnimationFrame", "requestAnimationFrame", "component", "info_default", "infoDiv", "refreshId", "infoComponent", "eventsReady", "isInfoShown", "e", "partyToggleInfo", "show", "room", "partyGetRoom", "error", "createInfo", "destroyInfo", "__async", "data", "i", "__spreadValues", "template", "appName", "roomName", "guestNames", "isHost", "isConnected", "info_default", "A", "event", "action", "sender", "warn"]
}
