vanilla-party
Version:
An easy to use library for simple multi-user JavaScript apps.
8 lines • 1.07 MB
Source Map (JSON)
{
"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/client/node_modules/@deepstream/protobuf/types/general.ts", "../node_modules/@deepstream/client/node_modules/@deepstream/protobuf/types/record.ts", "../node_modules/@deepstream/client/node_modules/@deepstream/protobuf/types/auth.ts", "../node_modules/@deepstream/client/node_modules/@deepstream/protobuf/types/event.ts", "../node_modules/@deepstream/client/node_modules/@deepstream/protobuf/types/rpc.ts", "../node_modules/@deepstream/client/node_modules/@deepstream/protobuf/types/presence.ts", "../node_modules/@deepstream/client/node_modules/@deepstream/protobuf/types/connection.ts", "../node_modules/@deepstream/client/node_modules/@deepstream/protobuf/types/cluster.ts", "../node_modules/@deepstream/client/node_modules/@deepstream/protobuf/types/lock.ts", "../node_modules/@deepstream/client/node_modules/@deepstream/protobuf/types/parser.ts", "../node_modules/@deepstream/client/node_modules/@deepstream/protobuf/types/monitoring.ts", "../node_modules/@deepstream/client/node_modules/@deepstream/protobuf/types/state.ts", "../node_modules/@deepstream/client/node_modules/@deepstream/protobuf/types/all.ts", "../node_modules/@deepstream/client/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/src/util/aspromise.js", "../node_modules/protobufjs/src/util/base64.js", "../node_modules/protobufjs/src/util/eventemitter.js", "../node_modules/protobufjs/src/util/float.js", "../node_modules/protobufjs/src/util/utf8.js", "../node_modules/protobufjs/src/util/pool.js", "../node_modules/protobufjs/src/util/longbits.js", "../node_modules/long/umd/index.js", "../node_modules/protobufjs/src/util/minimal.js", "../node_modules/protobufjs/src/writer.js", "../node_modules/protobufjs/src/writer_buffer.js", "../node_modules/protobufjs/src/reader.js", "../node_modules/protobufjs/src/reader_buffer.js", "../node_modules/protobufjs/src/rpc/service.js", "../node_modules/protobufjs/src/rpc.js", "../node_modules/protobufjs/src/roots.js", "../node_modules/protobufjs/src/index-minimal.js", "../node_modules/protobufjs/minimal.js", "../node_modules/@deepstream/client/node_modules/@deepstream/protobuf/dist/generated/protobuf.js", "../node_modules/@deepstream/client/node_modules/@deepstream/protobuf/src/protobuf-map.ts", "../node_modules/@deepstream/client/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/client/node_modules/@deepstream/protobuf/src/message-builder.ts", "../node_modules/@deepstream/client/dist/src/connection/socket-factory-shared.js", "../node_modules/@deepstream/client/node_modules/ws/browser.js", "../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/source/index.js", "../node_modules/on-change/source/constants.js", "../node_modules/on-change/source/is-builtin.js", "../node_modules/on-change/source/path.js", "../node_modules/on-change/source/is-symbol.js", "../node_modules/on-change/source/is-object.js", "../node_modules/on-change/source/is-iterator.js", "../node_modules/on-change/source/wrap-iterator.js", "../node_modules/on-change/source/ignore-property.js", "../node_modules/on-change/source/cache.js", "../node_modules/on-change/source/smart-clone/smart-clone.js", "../node_modules/on-change/source/is-array.js", "../node_modules/on-change/source/smart-clone/clone/clone-object.js", "../node_modules/on-change/source/smart-clone/methods/array.js", "../node_modules/on-change/source/smart-clone/diff/is-diff-certain.js", "../node_modules/on-change/source/smart-clone/diff/is-diff-arrays.js", "../node_modules/on-change/source/smart-clone/methods/object.js", "../node_modules/on-change/source/smart-clone/methods/set.js", "../node_modules/on-change/source/smart-clone/diff/is-diff-sets.js", "../node_modules/on-change/source/smart-clone/methods/map.js", "../node_modules/on-change/source/smart-clone/diff/is-diff-maps.js", "../node_modules/on-change/source/smart-clone/clone/clone-array.js", "../node_modules/on-change/source/smart-clone/clone/clone-date.js", "../node_modules/on-change/source/smart-clone/clone/clone-set.js", "../node_modules/on-change/source/smart-clone/clone/clone-map.js", "../node_modules/on-change/source/smart-clone/clone/clone-weakset.js", "../node_modules/on-change/source/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 PATCH_MULTI = 35,\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\";\nmodule.exports = asPromise;\n\n/**\n * Callback as used by {@link util.asPromise}.\n * @typedef asPromiseCallback\n * @type {function}\n * @param {Error|null} error Error, if any\n * @param {...*} params Additional arguments\n * @returns {undefined}\n */\n\n/**\n * Returns a promise from a node-style callback function.\n * @memberof util\n * @param {asPromiseCallback} fn Function to call\n * @param {*} ctx Function context\n * @param {...*} params Function arguments\n * @returns {Promise<*>} Promisified function\n */\nfunction asPromise(fn, ctx/*, varargs */) {\n var params = new Array(arguments.length - 1),\n offset = 0,\n index = 2,\n pending = true;\n while (index < arguments.length)\n params[offset++] = arguments[index++];\n return new Promise(function executor(resolve, reject) {\n params[offset] = function callback(err/*, varargs */) {\n if (pending) {\n pending = false;\n if (err)\n reject(err);\n else {\n var params = new Array(arguments.length - 1),\n offset = 0;\n while (offset < params.length)\n params[offset++] = arguments[offset];\n resolve.apply(null, params);\n }\n }\n };\n try {\n fn.apply(ctx || null, params);\n } catch (err) {\n if (pending) {\n pending = false;\n reject(err);\n }\n }\n });\n}\n", "\"use strict\";\n\n/**\n * A minimal base64 implementation for number arrays.\n * @memberof util\n * @namespace\n */\nvar base64 = exports;\n\n/**\n * Calculates the byte length of a base64 encoded string.\n * @param {string} string Base64 encoded string\n * @returns {number} Byte length\n */\nbase64.length = function length(string) {\n var p = string.length;\n if (!p)\n return 0;\n while (p > 0 && string.charAt(p - 1) === \"=\")\n --p;\n return Math.floor(p * 3 / 4);\n};\n\n// Base64 encoding table\nvar b64 = new Array(64);\n\n// Base64 decoding table\nvar s64 = new Array(123);\n\n// 65..90, 97..122, 48..57, 43, 47\nfor (var i = 0; i < 64;)\n s64[b64[i] = i < 26 ? i + 65 : i < 52 ? i + 71 : i < 62 ? i - 4 : i - 59 | 43] = i++;\n\ns64[45] = 62; // - -> +\ns64[95] = 63; // _ -> /\n\n/**\n * Encodes a buffer to a base64 encoded string.\n * @param {Uint8Array} buffer Source buffer\n * @param {number} start Source start\n * @param {number} end Source end\n * @returns {string} Base64 encoded string\n */\nbase64.encode = function encode(buffer, start, end) {\n var parts = null,\n chunk = [];\n var i = 0, // output index\n j = 0, // goto index\n t; // temporary\n while (start < end) {\n var b = buffer[start++];\n switch (j) {\n case 0:\n chunk[i++] = b64[b >> 2];\n t = (b & 3) << 4;\n j = 1;\n break;\n case 1:\n chunk[i++] = b64[t | b >> 4];\n t = (b & 15) << 2;\n j = 2;\n break;\n case 2:\n chunk[i++] = b64[t | b >> 6];\n chunk[i++] = b64[b & 63];\n j = 0;\n break;\n }\n if (i > 8191) {\n (parts || (parts = [])).push(String.fromCharCode.apply(String, chunk));\n i = 0;\n }\n }\n if (j) {\n chunk[i++] = b64[t];\n chunk[i++] = 61;\n if (j === 1)\n chunk[i++] = 61;\n }\n if (parts) {\n if (i)\n parts.push(String.fromCharCode.apply(String, chunk.slice(0, i)));\n return parts.join(\"\");\n }\n return String.fromCharCode.apply(String, chunk.slice(0, i));\n};\n\nvar invalidEncoding = \"invalid encoding\";\n\n/**\n * Decodes a base64 encoded string to a buffer.\n * @param {string} string Source string\n * @param {Uint8Array} buffer Destination buffer\n * @param {number} offset Destination offset\n * @returns {number} Number of bytes written\n * @throws {Error} If encoding is invalid\n */\nbase64.decode = function decode(string, buffer, offset) {\n var start = offset;\n var j = 0, // goto index\n t; // temporary\n for (var i = 0; i < string.length;) {\n var c = string.charCodeAt(i++);\n if (c === 61 && j > 1)\n break;\n if ((c = s64[c]) === undefined)\n throw Error(invalidEncoding);\n switch (j) {\n case 0:\n t = c;\n j = 1;\n break;\n case 1:\n buffer[offset++] = t << 2 | (c & 48) >> 4;\n t = c;\n j = 2;\n break;\n case 2:\n buffer[offset++] = (t & 15) << 4 | (c & 60) >> 2;\n t = c;\n j = 3;\n break;\n case 3:\n buffer[offset++] = (t & 3) << 6 | c;\n j = 0;\n break;\n }\n }\n if (j === 1)\n throw Error(invalidEncoding);\n return offset - start;\n};\n\nvar base64Re = /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/,\n base64UrlRe = /[-_]/,\n base64UrlNoPaddingRe = /^(?:[A-Za-z0-9_-]{4})*(?:[A-Za-z0-9_-]{2}(?:==)?|[A-Za-z0-9_-]{3}=?)?$/;\n\n/**\n * Tests if the specified string appears to be base64 encoded.\n * @param {string} string String to test\n * @returns {boolean} `true` if probably base64 encoded, otherwise false\n */\nbase64.test = function test(string) {\n return base64Re.test(string)\n || base64UrlRe.test(string) && base64UrlNoPaddingRe.test(string);\n};\n", "\"use strict\";\nmodule.exports = EventEmitter;\n\n/**\n * Constructs a new event emitter instance.\n * @classdesc A minimal event emitter.\n * @memberof util\n * @constructor\n */\nfunction EventEmitter() {\n\n /**\n * Registered listeners.\n * @type {Object.<string,*>}\n * @private\n */\n this._listeners = Object.create(null);\n}\n\n/**\n * Event listener as used by {@link util.EventEmitter}.\n * @typedef EventEmitterListener\n * @type {function}\n * @param {...*} args Arguments\n * @returns {undefined}\n */\n\n/**\n * Registers an event listener.\n * @param {string} evt Event name\n * @param {EventEmitterListener} fn Listener\n * @param {*} [ctx] Listener context\n * @returns {this} `this`\n */\nEventEmitter.prototype.on = function on(evt, fn, ctx) {\n (this._listeners[evt] || (this._listeners[evt] = [])).push({\n fn : fn,\n ctx : ctx || this\n });\n return this;\n};\n\n/**\n * Removes an event listener or any matching listeners if arguments are omitted.\n * @param {string} [evt] Event name. Removes all listeners if omitted.\n * @param {EventEmitterListener} [fn] Listener to remove. Removes all listeners of `evt` if omitted.\n * @returns {this} `this`\n */\nEventEmitter.prototype.off = function off(evt, fn) {\n if (evt === undefined)\n this._listeners = Object.create(null);\n else {\n if (fn === undefined)\n this._listeners[evt] = [];\n else {\n var listeners = this._listeners[evt];\n if (!listeners)\n return this;\n for (var i = 0; i < listeners.length;)\n if (listeners[i].fn === fn)\n listeners.splice(i, 1);\n else\n ++i;\n }\n }\n return this;\n};\n\n/**\n * Emits an event by calling its listeners with the specified arguments.\n * @param {string} evt Event name\n * @param {...*} args Arguments\n * @returns {this} `this`\n */\nEventEmitter.prototype.emit = function emit(evt) {\n var listeners = this._listeners[evt];\n if (listeners) {\n var args = [],\n i = 1;\n for (; i < arguments.length;)\n args.push(arguments[i++]);\n for (i = 0; i < listeners.length;)\n listeners[i].fn.apply(listeners[i++].ctx, args);\n }\n return this;\n};\n", "\"use strict\";\n\nmodule.exports = factory(factory);\n\n/**\n * Reads / writes floats / doubles from / to buffers.\n * @name util.float\n * @namespace\n */\n\n/**\n * Writes a 32 bit float to a buffer using little endian byte order.\n * @name util.float.writeFloatLE\n * @function\n * @param {number} val Value to write\n * @param {Uint8Array} buf Target buffer\n * @param {number} pos Target buffer offset\n * @returns {undefined}\n */\n\n/**\n * Writes a 32 bit float to a buffer using big endian byte order.\n * @name util.float.writeFloatBE\n * @function\n * @param {number} val Value to write\n * @param {Uint8Array} buf Target buffer\n * @param {number} pos Target buffer offset\n * @returns {undefined}\n */\n\n/**\n * Reads a 32 bit float from a buffer using little endian byte order.\n * @name util.float.readFloatLE\n * @function\n * @param {Uint8Array} buf Source buffer\n * @param {number} pos Source buffer offset\n * @returns {number} Value read\n */\n\n/**\n * Reads a 32 bit float from a buffer using big endian byte order.\n * @name util.float.readFloatBE\n * @function\n * @param {Uint8Array} buf Source buffer\n * @param {number} pos Source buffer offset\n * @returns {number} Value read\n */\n\n/**\n * Writes a 64 bit double to a buffer using little endian byte order.\n * @name util.float.writeDoubleLE\n * @function\n * @param {number} val Value to write\n * @param {Uint8Array} buf Target buffer\n * @param {number} pos Target buffer offset\n * @returns {undefined}\n */\n\n/**\n * Writes a 64 bit double to a buffer using big endian byte order.\n * @name util.float.writeDoubleBE\n * @function\n * @param {number} val Value to write\n * @param {Uint8Array} buf Target buffer\n * @param {number} pos Target buffer offset\n * @returns {undefined}\n */\n\n/**\n * Reads a 64 bit double from a buffer using little endian byte order.\n * @name util.float.readDoubleLE\n * @function\n * @param {Uint8Array} buf Source buffer\n * @param {number} pos Source buffer offset\n * @returns {number} Value read\n */\n\n/**\n * Reads a 64 bit double from a buffer using big endian byte order.\n * @name util.float.readDoubleBE\n * @function\n * @param {Uint8Array} buf Source buffer\n * @param {number} pos Source buffer offset\n * @returns {number} Value read\n */\n\n// Factory function for the purpose of node-based testing in modified global environments\nfunction factory(exports) {\n\n // float: typed array\n if (typeof Float32Array !== \"undefined\") (function() {\n\n var f32 = new Float32Array([ -0 ]),\n f8b = new Uint8Array(f32.buffer),\n le = f8b[3] === 128;\n\n function writeFloat_f32_cpy(val, buf, pos) {\n f32[0] = val;\n buf[pos ] = f8b[0];\n buf[pos + 1] = f8b[1];\n buf[pos + 2] = f8b[2];\n buf[pos + 3] = f8b[3];\n }\n\n function writeFloat_f32_rev(val, buf, pos) {\n f32[0] = val;\n buf[pos ] = f8b[3];\n buf[pos + 1] = f8b[2];\n buf[pos + 2] = f8b[1];\n buf[pos + 3] = f8b[0];\n }\n\n /* istanbul ignore next */\n exports.writeFloatLE = le ? writeFloat_f32_cpy : writeFloat_f32_rev;\n /* istanbul ignore next */\n exports.writeFloatBE = le ? writeFloat_f32_rev : writeFloat_f32_cpy;\n\n function readFloat_f32_cpy(buf, pos) {\n f8b[0] = buf[pos ];\n f8b[1] = buf[pos + 1];\n f8b[2] = buf[pos + 2];\n f8b[3] = buf[pos + 3];\n return f32[0];\n }\n\n function readFloat_f32_rev(buf, pos) {\n f8b[3] = buf[pos ];\n f8b[2] = buf[pos + 1];\n f8b[1] = buf[pos + 2];\n f8b[0] = buf[pos + 3];\n return f32[0];\n }\n\n /* istanbul ignore next */\n exports.readFloatLE = le ? readFloat_f32_cpy : readFloat_f32_rev;\n /* istanbul ignore next */\n exports.readFloatBE = le ? readFloat_f32_rev : readFloat_f32_cpy;\n\n // float: ieee754\n })(); else (function() {\n\n function writeFloat_ieee754(writeUint, val, buf, pos) {\n var sign = val < 0 ? 1 : 0;\n if (sign)\n val = -val;\n if (val === 0)\n writeUint(1 / val > 0 ? /* positive */ 0 : /* negative 0 */ 2147483648, buf, pos);\n else if (isNaN(val))\n writeUint(2143289344, buf, pos);\n else if (val > 3.4028234663852886e+38) // +-Infinity\n writeUint((sign << 31 | 2139095040) >>> 0, buf, pos);\n else if (val < 1.1754943508222875e-38) // denormal\n writeUint((sign << 31 | Math.round(val / 1.401298464324817e-45)) >>> 0, buf, pos);\n else {\n var exponent = Math.floor(Math.log(val) / Math.LN2),\n mantissa = Math.round(val * Math.pow(2, -exponent) * 8388608) & 8388607;\n writeUint((sign << 31 | exponent + 127 << 23 | mantissa) >>> 0, buf, pos);\n }\n }\n\n exports.writeFloatLE = writeFloat_ieee754.bind(null, writeUintLE);\n exports.writeFloatBE = writeFloat_ieee754.bind(null, writeUintBE);\n\n function readFloat_ieee754(readUint, buf, pos) {\n var uint = readUint(buf, pos),\n sign = (uint >> 31) * 2 + 1,\n exponent = uint >>> 23 & 255,\n mantissa = uint & 8388607;\n return exponent === 255\n ? mantissa\n ? NaN\n : sign * Infinity\n : exponent === 0 // denormal\n ? sign * 1.401298464324817e-45 * mantissa\n : sign * Math.pow(2, exponent - 150) * (mantissa + 8388608);\n }\n\n exports.readFloatLE = readFloat_ieee754.bind(null, readUintLE);\n exports.readFloatBE = readFloat_ieee754.bind(null, readUintBE);\n\n })();\n\n // double: typed array\n if (typeof Float64Array !== \"undefined\") (function() {\n\n var f64 = new Float64Array([-0]),\n f8b = new Uint8Array(f64.buffer),\n le = f8b[7] === 128;\n\n function writeDouble_f64_cpy(val, buf, pos) {\n f64[0] = val;\n buf[pos ] = f8b[0];\n buf[pos + 1] = f8b[1];\n buf[pos + 2] = f8b[2];\n buf[pos + 3] = f8b[3];\n buf[pos + 4] = f8b[4];\n buf[pos + 5] = f8b[5];\n buf[pos + 6] = f8b[6];\n buf[pos + 7] = f8b[7];\n }\n\n function writeDouble_f64_rev(val, buf, pos) {\n f64[0] = val;\n buf[pos ] = f8b[7];\n buf[pos + 1] = f8b[6];\n buf[pos + 2] = f8b[5];\n buf[pos + 3] = f8b[4];\n buf[pos + 4] = f8b[3];\n buf[pos + 5] = f8b[2];\n buf[pos + 6] = f8b[1];\n buf[pos + 7] = f8b[0];\n }\n\n /* istanbul ignore next */\n exports.writeDoubleLE = le ? writeDouble_f64_cpy : writeDouble_f64_rev;\n /* istanbul ignore next */\n exports.writeDoubleBE = le ? writeDouble_f64_rev : writeDouble_f64_cpy;\n\n function readDouble_f64_cpy(buf, pos) {\n f8b[0] = buf[pos ];\n f8b[1] = buf[pos + 1];\n f8b[2] = buf[pos + 2];\n f8b[3] = buf[pos + 3];\n f8b[4] = buf[pos + 4];\n f8b[5] = buf[pos + 5];\n f8b[6] = buf[pos + 6];\n f8b[7] = buf[pos + 7];\n return f64[0];\n }\n\n function readDouble_f64_rev(buf, pos) {\n f8b[7] = buf[pos ];\n f8b[6] = buf[pos + 1];\n f8b[5] = buf[pos + 2];\n f8b[4] = buf[pos + 3];\n f8b[3] = buf[pos + 4];\n f8b[2] = buf[pos + 5];\n f8b[1] = buf[pos + 6];\n f8b[0] = buf[pos + 7];\n return f64[0];\n }\n\n /* istanbul ignore next */\n exports.readDoubleLE = le ? readDouble_f64_cpy : readDouble_f64_rev;\n /* istanbul ignore next */\n exports.readDoubleBE = le ? readDouble_f64_rev : readDouble_f64_cpy;\n\n // double: ieee754\n })(); else (function() {\n\n function writeDouble_ieee754(writeUint, off0, off1, val, buf, pos) {\n var sign = val < 0 ? 1 : 0;\n if (sign)\n val = -val;\n if (val === 0) {\n writeUint(0, buf, pos + off0);\n writeUint(1 / val > 0 ? /* positive */ 0 : /* negative 0 */ 2147483648, buf, pos + off1);\n } else if (isNaN(val)) {\n writeUint(0, buf, pos + off0);\n writeUint(2146959360, buf, pos + off1);\n } else if (val > 1.7976931348623157e+308) { // +-Infinity\n writeUint(0, buf, pos + off0);\n writeUint((sign << 31 | 2146435072) >>> 0, buf, pos + off1);\n } else {\n var mantissa;\n if (val < 2.2250738585072014e-308) { // denormal\n mantissa = val / 5e-324;\n writeUint(mantissa >>> 0, buf, pos + off0);\n writeUint((sign << 31 | mantissa / 4294967296) >>> 0, buf, pos + off1);\n } else {\n var exponent = Math.floor(Math.log(val) / Math.LN2);\n if (exponent === 1024)\n exponent = 1023;\n mantissa = val * Math.pow(2, -exponent);\n writeUint(mantissa * 4503599627370496 >>> 0, buf, pos + off0);\n writeUint((sign << 31 | exponent + 1023 << 20 | mantissa * 1048576 & 1048575) >>> 0, buf, pos + off1);\n }\n }\n }\n\n exports.writeDoubleLE = writeDouble_ieee754.bind(null, writeUintLE, 0, 4);\n exports.writeDoubleBE = writeDouble_ieee754.bind(null, writeUintBE, 4, 0);\n\n function readDouble_ieee754(readUint, off0, off1, buf, pos) {\n var lo = readUint(buf, pos + off0),\n hi = readUint(buf, pos + off1);\n var sign = (hi >> 31) * 2 + 1,\n exponent = hi >>> 20 & 2047,\n mantissa = 4294967296 * (hi & 1048575) + lo;\n return exponent === 2047\n ? mantissa\n ? NaN\n : sign * Infinity\n : exponent === 0 // denormal\n ? sign * 5e-324 * mantissa\n : sign * Math.pow(2, exponent - 1075) * (mantissa + 4503599627370496);\n }\n\n exports.readDoubleLE = readDouble_ieee754.bind(null, readUintLE, 0, 4);\n exports.readDoubleBE = readDouble_ieee754.bind(null, readUintBE, 4, 0);\n\n })();\n\n return exports;\n}\n\n// uint helpers\n\nfunction writeUintLE(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\nfunction writeUintBE(val, buf, pos) {\n buf[pos ] = val >>> 24;\n buf[pos + 1] = val >>> 16 & 255;\n buf[pos + 2] = val >>> 8 & 255;\n buf[pos + 3] = val & 255;\n}\n\nfunction readUintLE(buf, pos) {\n return (buf[pos ]\n | buf[pos + 1] << 8\n | buf[pos + 2] << 16\n | buf[pos + 3] << 24) >>> 0;\n}\n\nfunction readUintBE(buf, pos) {\n return (buf[pos ] << 24\n | buf[pos + 1] << 16\n | buf[pos + 2] << 8\n | buf[pos + 3]) >>> 0;\n}\n", "\"use strict\";\n\n/**\n * A minimal UTF8 implementation for number arrays.\n * @memberof util\n * @namespace\n */\nvar utf8 = exports,\n replacementChar = \"\\ufffd\",\n strictDecoder;\n\ntry {\n strictDecoder = new TextDecoder(\"utf-8\", { fatal: true, ignoreBOM: true });\n} catch (err) {\n // \"fatal\" option is not supported on Node.js compiled without ICU\n strictDecoder = new TextDecoder(\"utf-8\", { ignoreBOM: true });\n}\n\n/**\n * Calculates the UTF8 byte length of a string.\n * @param {string} string String\n * @returns {number} Byte length\n */\nutf8.length = function utf8_length(string) {\n var len = 0,\n c = 0;\n for (var i = 0; i < string.length; ++i) {\n c = string.charCodeAt(i);\n if (c < 128)\n len += 1;\n else if (c < 2048)\n len += 2;\n else if ((c & 0xFC00) === 0xD800 && (string.charCodeAt(i + 1) & 0xFC00) === 0xDC00) {\n ++i;\n len += 4;\n } else\n len += 3;\n }\n return len;\n};\n\nfunction utf8_read_js(buffer, start, end, str) {\n for (var i = start; i < end;) {\n var t = buffer[i++];\n if (t <= 0x7F) {\n str += String.fromCharCode(t);\n } else if (t >= 0xC0 && t < 0xE0) {\n var c2 = (t & 0x1F) << 6 | buffer[i++] & 0x3F;\n str += c2 >= 0x80 ? String.fromCharCode(c2) : replacementChar;\n } else if (t >= 0xE0 && t < 0xF0) {\n var c3 = (t & 0xF) << 12 | (buffer[i++] & 0x3F) << 6 | buffer[i++] & 0x3F;\n str += c3 >= 0x800 ? String.fromCharCode(c3) : replacementChar;\n } else if (t >= 0xF0) {\n var t2 = (t & 7) << 18 | (buffer[i++] & 0x3F) << 12 | (buffer[i++] & 0x3F) << 6 | buffer[i++] & 0x3F;\n if (t2 < 0x10000 || t2 > 0x10FFFF)\n str += replacementChar;\n else {\n t2 -= 0x10000;\n str += String.fromCharCode(0xD800 + (t2 >> 10));\n str += String.fromCharCode(0xDC00 + (t2 & 0x3FF));\n }\n }\n }\n return str;\n}\n\n/**\n * Reads UTF8 bytes as a string.\n * @param {Uint8Array} buffer Source buffer\n * @param {number} start Source start\n * @param {number} end Source end\n * @returns {string} String read\n */\nutf8.read = function utf8_read_ascii(buffer, start, end) {\n if (end - start < 1)\n return \"\";\n\n var str = \"\",\n i = start,\n c1, c2, c3, c4, c5, c6, c7, c8;\n\n for (; i + 7 < end; i += 8) {\n c1 = buffer[i];\n c2 = buffer[i + 1];\n c3 = buffer[i + 2];\n c4 = buffer[i + 3];\n c5 = buffer[i + 4];\n c6 = buffer[i + 5];\n c7 = buffer[i + 6];\n c8 = buffer[i + 7];\n if ((c1 | c2 | c3 | c4 | c5 | c6 | c7 | c8) & 0x80)\n return utf8_read_js(buffer, i, end, str);\n str += String.fromCharCode(c1, c2, c3, c4, c5, c6, c7, c8);\n }\n\n for (; i < end; ++i) {\n c1 = buffer[i];\n if (c1 & 0x80)\n return utf8_read_js(buffer, i, end, str);\n str += String.fromCharCode(c1);\n }\n\n return str;\n};\n\nfunction utf8_read_strict(buffer, start, end) {\n var source = start === 0 && end === buffer.length\n ? buffer\n : buffer.subarray\n ? buffer.subarray(start, end)\n : buffer.slice(start, end);\n if (Array.isArray(source))\n source = Uint8Array.from(source);\n return strictDecoder.decode(source);\n}\n\n/**\n * Reads UTF8 bytes as a string, rejecting invalid UTF8.\n * @param {Uint8Array} buffer Source buffer\n * @param {number} start Source start\n * @param {number} end Source end\n * @returns {string} String read\n */\nutf8.readStrict = function utf8_read_strict_ascii(buffer, start, end) {\n if (end - start < 1)\n return \"\";\n\n var str = \"\",\n i = start,\n c1, c2, c3, c4, c5, c6, c7, c8;\n\n for (; i + 7 < end; i += 8) {\n c1 = buffer[i];\n c2 = buffer[i + 1];\n c3 = buffer[i + 2];\n c4 = buffer[i + 3];\n c5 = buffer[i + 4];\n c6 = buffer[i + 5];\n c7 = buffer[i + 6];\n c8 = buffer[i + 7];\n if ((c1 | c2 | c3 | c4 | c5 | c6 | c7 | c8) & 0x80)\n return str + utf8_read_strict(buffer, i, end);\n str += String.fromCharCode(c1, c2, c3, c4, c5, c6, c7, c8);\n }\n\n for (; i < end; ++i) {\n c1 = buffer[i];\n if (c1 & 0x80)\n return str + utf8_read_strict(buffer, i, end);\n str += String.fromCharCode(c1);\n }\n\n return str;\n};\n\n/**\n * Writes a string as UTF8 bytes.\n * @param {string} string Source string\n * @param {Uint8Array} buffer Destination buffer\n * @param {number} offset Destination offset\n * @returns {number} Bytes written\n */\nutf8.write = function utf8_write(string, buffer, offset) {\n var start = offset,\n c1, // character 1\n c2; // character 2\n for (var i = 0; i < string.length; ++i) {\n c1 = string.charCodeAt(i);\n if (c1 < 128) {\n buffer[offset++] = c1;\n } else if (c1 < 2048) {\n buffer[offset++] = c1 >> 6 | 192;\n buffer[offset++] = c1 & 63 | 128;\n } else if ((c1 & 0xFC00) === 0xD800 && ((c2 = string.charCodeAt(i + 1)) & 0xFC00) === 0xDC00) {\n c1 = 0x10000 + ((c1 & 0x03FF) << 10) + (c2 & 0x03FF);\n ++i;\n buffer[offset++] = c1 >> 18 | 240;\n buffer[offset++] = c1 >> 12 & 63 | 128;\n buffer[offset++] = c1 >> 6 & 63 | 128;\n buffer[offset++] = c1 & 63 | 128;\n } else {\n buffer[offset++] = c1 >> 12 | 224;\n buffer[offset++] = c1 >> 6 & 63 | 128;\n buffer[offset++] = c1 & 63 | 128;\n }\n }\n return offset - start;\n};\n", "\"use strict\";\nmodule.exports = pool;\n\n/**\n * An allocator as used by {@link util.pool}.\n * @typedef PoolAllocator\n * @type {function}\n * @param {number} size Buffer size\n * @returns {Uint8Array} Buffer\n */\n\n/**\n * A slicer as used by {@link util.pool}.\n * @typedef PoolSlicer\n * @type {function}\n * @param {number} start Start offset\n * @param {number} end End offset\n * @returns {Uint8Array} Buffer slice\n * @this Uint8Array\n */\n\n/**\n * A general purpose buffer pool.\n * @memberof util\n * @function\n * @param {PoolAllocator} alloc Allocator\n * @param {PoolSlicer} slice Slicer\n * @param {number} [size=8192] Slab size\n * @returns {PoolAllocator} Pooled allocator\n */\nfunction pool(alloc, slice, size) {\n var SIZE = size || 8192;\n var MAX = SIZE >>> 1;\n var slab = null;\n var offset = SIZE;\n return function pool_alloc(size) {\n if (size < 1 || size > MAX)\n return alloc(size);\n if (offset + size > SIZE) {\n slab = alloc(SIZE);\n offset = 0;\n }\n var buf = slice.call(slab, offset, offset += size);\n if (offset & 7) // align to 32 bit\n offset = (offset | 7) + 1;\n return buf;\n };\n}\n", "\"use strict\";\nmodule.exports = LongBits;\n\nvar util = require(\"../util/minimal\");\n\n/**\n * Constructs new long bits.\n * @classdesc Helper class for working with the low and high bits of a 64 bit value.\n * @memberof util\n * @constructor\n * @param {number} lo Low 32 bits, unsigned\n * @param {number} hi High 32 bits, unsigned\n */\nfunction LongBits(lo, hi) {\n\n // note that the casts below are theoretically unnecessary as of today, but older statically\n // generated converter code might still call the ctor with signed 32bits. kept for compat.\n\n /**\n * Low bits.\n * @type {number}\n */\n this.lo = lo >>> 0;\n\n /**\n * High bits.\n * @type {number}\n */\n this.hi = hi >>> 0;\n}\n\n/**\n * Zero bits.\n * @memberof util.LongBits\n * @type {util.LongBits}\n */\nvar zero = LongBits.zero = new LongBits(0, 0);\n\nzero.toNumber = function() { return 0; };\nzero.zzEncode = zero.zzDecode = function() { return this; };\nzero.length = function() { return 1; };\n\n/**\n * Zero hash.\n * @memberof util.LongBits\n * @type {string}\n */\nvar zeroHash = LongBits.zeroHash = \"\\0\\0\\0\\0\\0\\0\\0\\0\";\n\n/**\n * Constructs new long bits from the specified number.\n * @param {number} value Value\n * @returns {util.LongBits} Instance\n */\nLongBits.fromNumber = function fromNumber(value) {\n if (value === 0)\n return zero;\n var sign = value < 0;\n if (sign)\n value = -value;\n var lo = value >>> 0,\n hi = (value - lo) / 4294967296 >>> 0;\n if (sign) {\n hi = ~hi >>> 0;\n lo = ~lo >>> 0;\n if (++lo > 4294967295) {\n lo = 0;\n if (++hi > 4294967295)\n hi = 0;\n }\n }\n return new LongBits(lo, hi);\n};\n\n/**\n * Constructs new long bits from a number, long or string.\n * @param {Long|number|string} value Value\n * @returns {util.LongBits} Instance\n */\nLongBits.from = function from(value) {\n if (typeof value === \"number\")\n return LongBits.fromNumber(value);\n if (util.isString(value)) {\n /* istanbul ignore else */\n if (util.Long)\n value = util.Long.fromString(value);\n else\n return LongBits.fromNumber(parseInt(value, 10));\n }\n return value.low || value.high ? new LongBits(value.low >>> 0, value.high >>> 0) : zero;\n};\n\n/**\n * Converts this long bits to a possibly unsafe JavaScript number.\n * @param {boolean} [unsigned=false] Whether unsigned or not\n * @returns {number} Possibly unsafe number\n */\nLongBits.prototype.toNumber = function toNumber(unsigned) {\n if (!unsigned && this.hi >>> 31) {\n var lo = ~this.lo + 1 >>> 0,\n hi = ~this.hi >>> 0;\n if (!lo)\n hi = hi + 1 >>> 0;\n return -(lo + hi * 4294967296);\n }\n return this.lo + this.hi * 4294967296;\n};\n\n/**\n * Converts this long bits to a long.\n * @param {boolean} [unsigned=false] Whether unsigned or not\n * @returns {Long} Long\n */\nLongBits.prototype.toLong = function toLong(unsigned) {\n return util.Long\n ? new util.Long(this.lo | 0, this.hi | 0, Boolean(unsigned))\n /* istanbul ignore next */\n : { low: this.lo | 0, high: this.hi | 0, unsigned: Boolean(unsigned) };\n};\n\nvar charCodeAt = String.prototype.charCodeAt;\n\n/**\n * Constructs new long bits from the specified 8 characters long hash.\n * @param {string} hash Hash\n * @returns {util.LongBits} Bits\n */\nLongBits.fromHash = function fromHash(hash) {\n if (hash === zeroHash)\n return zero;\n return new LongBits(\n ( charCodeAt.call(hash, 0)\n | charCodeAt.call(hash, 1) << 8\n | charCodeAt.call(hash, 2) << 16\n | charCodeAt.call(hash, 3) << 24) >>> 0\n ,\n ( charCodeAt.call(hash, 4)\n | charCodeAt.call(hash, 5) << 8\n | charCodeAt.call(hash, 6) << 16\n | charCodeAt.call(hash, 7) << 24) >>> 0\n );\n};\n\n/**\n * Converts this long bits to a 8 characters long hash.\n * @returns {string} Hash\n */\nLongBits.prototype.toHash = function toHash() {\n return String.fromCharCode(\n this.lo & 255,\n this.lo >>> 8 & 255,\n this.lo >>> 16 & 255,\n this.lo >>> 24 ,\n this.hi & 255,\n this.hi >>> 8 & 255,\n this.hi >>> 16 & 255,\n this.hi >>> 24\n );\n};\n\n/**\n * Zig-zag encodes this long bits.\n * @returns {util.LongBits} `this`\n */\nLongBits.prototype.zzEncode = function zzEncode() {\n var mask = this.hi >> 31;\n this.hi = ((this.hi << 1 | this.lo >>> 31) ^ mask) >>> 0;\n this.lo = ( this.lo << 1 ^ mask) >>> 0;\n return this;\n};\n\n/**\n * Zig-zag decodes this long bits.\n * @returns {util.LongBits} `this`\n */\nLongBits.prototype.zzDecode = function zzDecode() {\n var mask = -(this.lo & 1);\n this.lo = ((this.lo >>> 1 | this.hi << 31) ^ mask) >>> 0;\n this.hi = ( this.hi >>> 1 ^ mask) >>> 0;\n return this;\n};\n\n/**\n * Calculates the length of this longbits when encoded as a varint.\n * @returns {number} Length\n */\nLongBits.prototype.length = function length() {\n var part0 = this.lo,\n part1 = (this.lo >>> 28 | this.hi << 4) >>> 0,\n part2 = this.hi >>> 24;\n return part2 === 0\n ? part1 === 0\n ? part0 < 16384\n ? part0 < 128 ? 1 : 2\n : part0 < 2097152 ? 3 : 4\n : part1 < 16384\n ? part1 < 128 ? 5 : 6\n : part1 < 2097152 ? 7 : 8\n : part2 < 128 ? 9 : 10;\n};\n", "// GENERATED FILE. DO NOT EDIT.\n(function (global, factory) {\n function preferDefault(exports) {\n return exports.default || exports;\n }\n if (typeof define === \"function\" && define.amd) {\n define([], function () {\n var exports = {};\n factory(exports);\n return preferDefault(exports);\n });\n } else if (typeof exports === \"object\") {\n factory(exports);\n if (typeof module === \"object\") module.exports = preferDefault(exports);\n } else {\n (function () {\n var exports = {};\n factory(exports);\n global.Long = preferDefault(exports);\n })();\n }\n})(\n typeof globalThis !== \"undefined\"\n ? globalThis\n : typeof self !== \"undefined\"\n ? self\n : this,\n function (_exports) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true,\n });\n _exports.default = void 0;\n /**\n * @license\n * Copyright 2009 The Closure Library Authors\n * Copyright 2020 Daniel Wirtz / The long.js Authors.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\n // WebAssembly optimizations to do native i64 multiplication and divide\n var wasm = null;\n try {\n wasm = new WebAssembly.Instance(\n new WebAssembly.Module(\n new Uint8Array([\n // \\0asm\n 0, 97, 115, 109,\n // version 1\n 1, 0, 0, 0,\n // section \"type\"\n 1, 13, 2,\n // 0, () => i32\n 96, 0, 1, 127,\n // 1, (i32, i32, i32, i32) => i32\n 96, 4, 127, 127, 127, 127, 1, 127,\n // section \"function\"\n 3, 7, 6,\n // 0, type 0\n 0,\n // 1, type 1\n 1,\n // 2, type 1\n 1,\n // 3, type 1\n 1,\n // 4, type 1\n 1,\n // 5, type 1\n 1,\n // section \"global\"\n 6, 6, 1,\n // 0, \"high\", mutable i32\n 127, 1, 65, 0, 11,\n // section \"export\"\n 7, 50, 6,\n // 0, \"mul\"\n 3, 109, 117, 108, 0, 1,\n // 1, \"div_s\"\n 5, 100, 105, 118, 95, 115, 0, 2,\n // 2, \"div_u\"\n 5, 100, 105, 118, 95, 117, 0, 3,\n // 3, \"rem_s\"\n 5, 114, 101, 109, 95, 115, 0, 4,\n // 4, \"rem_u\"\n 5, 114, 101, 109, 95, 117, 0, 5,\n // 5, \"get_high\"\n 8, 103, 101, 116, 95, 104, 105, 103, 104, 0, 0,\n // section \"code\"\n 10, 191, 1, 6,\n // 0, \"get_high\"\n 4, 0, 35, 0, 11,\n // 1, \"mul\"\n 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173,\n 32, 3, 173, 66, 32, 134, 132, 126, 34, 4, 66, 32, 135, 167, 36, 0,\n 32, 4, 167, 11,\n // 2, \"div_s\"\n 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173,\n 32, 3, 173, 66, 32, 134, 132, 127, 34, 4, 66, 32, 135, 167, 36, 0,\n 32, 4, 167, 11,\n // 3, \"div_u\"\n 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173,\n 32, 3, 173, 66, 32, 134, 132, 128, 34, 4, 66, 32, 135, 167, 36, 0,\n 32, 4, 167, 11,\n // 4, \"rem_s\"\n 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173,\n 32, 3, 173, 66, 32, 134, 132, 129, 34, 4, 66, 32, 135, 167, 36, 0,\n 32, 4, 167, 11,\n // 5, \"rem_u\"\n 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173,\n 32, 3, 173, 66, 32, 134, 132, 130, 34, 4, 66, 32, 135, 167, 36, 0,\n 32, 4, 167, 11,\n ]),\n ),\n {},\n ).exports;\n } catch {\n // no wasm support :(\n }\n\n /**\n * Constructs a 64 bit two's-complement integer, given its low and high 32 bit values as *signed* integers.\n * See the from* functions below for more convenient ways of constructing Longs.\n * @exports Long\n * @class A Long class for representing a 64 bit two's-complement integer value.\n * @param {number} low The low (signed) 32 bits of the long\n * @param {number} high The high (signed) 32 bits of the long\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\n * @constructor\n */\n function Long(low, high, unsigned) {\n /**\n * The low 32 bits as a signed value.\n * @type {number}\n */\n this.low = low | 0;\n\n /**\n * The high 32 bits as a signed value.\n * @type {number}\n */\n this.high = high | 0;\n\n /**\n * Whether unsigned or not.\n * @type {boolean}\n */\n this.unsigned = !!unsigned;\n }\n\n // The internal representation of a long is the two given signed, 32-bit values.\n // We use 32-bit pieces because these are the size of integers on which\n // Javascript performs bit-operations. For operations like addition and\n // multiplication, we split each number into 16 bit pieces, which can easily be\n // multiplied within Javascript's floating-point representation without overflow\n // or change in sign.\n //\n // In the algorithms below, we frequently reduce the negative case to the\n // positive case by negating the input(s) and then post-processing the result.\n // Note that we must ALWAYS check specially whether those values are MIN_VALUE\n // (-2^63) because -MIN_VALUE == MIN_VALUE (since 2^63 cannot be represented as\n // a positive number, it overflows back into a negative). Not handling this\n // case would often result in infinite recursion.\n //\n // Common constant values ZERO, ONE, NEG_ONE, etc. are defined below the from*\n // methods on which they depend.\n\n /**\n * An indicator used to reliably determine if an object is a Long or not.\n * @type {boolean}\n * @const\n * @private\n */\n Long.prototype.__isLong__;\n Object.defineProperty(Long.prototype, \"__isLong__\", {\n value: true,\n });\n\n /**\n * @function\n * @param {*} obj Object\n * @returns {boolean}\n * @inner\n */\n function isLong(obj) {\n return (obj && obj[\"__isLong__\"]) === true;\n }\n\n /**\n * @function\n * @param {*} value number\n * @returns {number}\n * @inner\n */\n function ctz32(value) {\n var c = Math.clz32(value & -value);\n return value ? 31 - c : c;\n }\n\n /**\n * Tests if the specified object is a Long.\n * @function\n * @param {*} obj Object\n * @returns {boolean}\n */\n Long.isLong = isLong;\n\n /**\n * A cache of the Long representations of small integer values.\n * @type {!Object}\n * @inner\n */\n var INT_CACHE = {};\n\n /**\n * A cache of the Long representations of small unsigned integer values.\n * @type {!Object}\n * @inner\n */\n var UINT_CACHE = {};\n\n /**\n * @param {number} value\n * @param {boolean=} unsigned\n * @returns {!Long}\n * @inner\n */\n function fromInt(value, unsigned) {\n var obj, cachedObj, cache;\n if (unsigned) {\n value >>>= 0;\n if ((cache = 0 <= value && value < 256)) {\n cachedObj = UINT_CACHE[value];\n if (cachedObj) return cachedObj;\n }\n obj = fromBits(value, 0, true);\n if (cache) UINT_CACHE[value] = obj;\n return obj;\n } else {\n value |= 0;\n if ((cache = -128 <= value && value < 128)) {\n cachedObj = INT_CACHE[value];\n if (cachedObj) return cachedObj;\n }\n obj = fromBits(value, value < 0 ? -1 : 0, false);\n if (cache) INT_CACHE[value] = obj;\n return obj;\n }\n }\n\n /**\n * Returns a Long representing the given 32 bit integer value.\n * @function\n * @param {number} value The 32 bit integer in question\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\n * @returns {!Long} The corresponding Long value\n */\n Long.fromInt = fromInt;\n\n /**\n * @param {number} value\n * @param {boolean=} unsigned\n * @returns {!Long}\n * @inner\n */\n function fromNumber(value, unsigned) {\n if (isNaN(value)) return unsigned ? UZERO : ZERO;\n if (unsigned) {\n if (value < 0) return UZERO;\n if (value >= TWO_PWR_64_DBL) return MAX_UNSIGNED_VALUE;\n } else {\n if (value <= -TWO_PWR_63_DBL) return MIN_VALUE;\n if (value + 1 >= TWO_PWR_63_DBL) return MAX_VALUE;\n }\n if (value < 0) return fromNumber(-value, unsigned).neg();\n return fromBits(\n value % TWO_PWR_32_DBL | 0,\n (value / TWO_PWR_32_DBL) | 0,\n unsigned,\n );\n }\n\n /**\n * Returns a Long representing the given value, provided that it is a finite number. Otherwise, zero is returned.\n * @function\n * @param {number} value The number in question\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\n * @returns {!Long} The corresponding Long value\n */\n Long.fromNumber = fromNumber;\n\n /**\n * @param {number} lowBits\n * @param {number} highBits\n * @param {boolean=} unsigned\n * @returns {!Long}\n * @inner\n */\n function fromBits(lowBits, highBits, unsigned) {\n return new Long(lowBits, highBits, unsigned);\n }\n\n /**\n * Returns a Long representing the 64 bit integer that comes by concatenating the given low and high bits. Each is\n * assumed to use 32 bits.\n * @function\n * @param {number} lowBits The low 32 bits\n * @param {number} highBits The high 32 bits\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\n * @returns {!Long} The corresponding Long value\n */\n Long.fromBits = fromBits;\n\n /**\n * @function\n * @param {number} base\n * @param {number} exponent\n * @returns {number}\n * @inner\n */\n var pow_dbl = Math.pow; // Used 4 times (4*8 to 15+4)\n\n /**\n * @param {string} str\n * @param {(boolean|number)=} unsigned\n * @param {number=} radix\n * @returns {!Long}\n * @inner\n */\n function fromString(str, unsigned, radix) {\n if (str.length === 0) throw Error(\"empty string\");\n if (typeof unsigned === \"number\") {\n // For goog.math.long compatibility\n radix = unsigned;\n unsigned = false;\n } else {\n unsigned = !!unsigned;\n }\n if (\n str === \"NaN\" ||\n str === \"Infinity\" ||\n str === \"+Infinity\" ||\n str === \"-Infinity\"\n )\n return unsigned ? UZERO : ZERO;\n radix = radix || 10;\n if (radix < 2 || 36 < radix) throw RangeError(\"radix\");\n var p;\n if ((p = str.indexOf(\"-\")) > 0) throw Error(\"interior hyphen\");\n else if (p === 0) {\n return fromString(str.substring(1), unsigned, radix).neg();\n }\n\n // Do several (8) digits each time through the loop, so as to\n // minimize the calls to the very expensive emulated div.\n var radixToPower = fromNumber(pow_dbl(radix, 8));\n var result = ZERO;\n for (var i = 0; i < str.length; i += 8) {\n var size = Math.min(8, str.length - i),\n value = parseInt(str.substring(i, i + size), radix);\n if (size < 8) {\n var power = fromNumber(pow_dbl(radix, size));\n result = result.mul(power).add(fromNumber(value));\n } else {\n result = result.mul(radixToPower);\n result = result.add(fromNumber(value));\n }\n }\n result.unsigned = unsigned;\n return result;\n }\n\n /**\n * Returns a Long representation of the given string, written using the specified radix.\n * @function\n * @param {string} str The textual representation of the Long\n * @param {(boolean|number)=} unsigned Whether unsigned or not, defaults to signed\n * @param {number=} radix The radix in which the text is written (2-36), defaults to 10\n * @returns {!Long} The corresponding Long value\n */\n Long.fromString = fromString;\n\n /**\n * @function\n * @param {!Long|number|string|!{low: number, high: number, unsigned: boolean}} val\n * @param {boolean=} unsigned\n * @returns {!Long}\n * @inner\n */\n function fromValue(val, unsigned) {\n if (typeof val === \"number\") return fromNumber(val, unsigned);\n if (typeof val === \"string\") return fromString(val, unsigned);\n // Throws for non-objects, converts non-instanceof Long:\n return fromBits(\n val.low,\n val.high,\n typeof unsigned === \"boolean\" ? unsigned : val.unsigned,\n );\n }\n\n /**\n * Converts the specified value to a Long using the appropriate from* function for its type.\n * @function\n * @param {!Long|number|bigint|string|!{low: number, high: number, unsigned: boolean}} val Value\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\n * @returns {!Long}\n */\n Long.fromValue = fromValue;\n\n // NOTE: the compiler should inline these constant values below and then remove these variables, so there should be\n // no runtime penalty for these.\n\n /**\n * @type {number}\n * @const\n * @inner\n */\n var TWO_PWR_16_DBL = 1 << 16;\n\n /**\n * @type {number}\n * @const\n * @inner\n */\n var TWO_PWR_24_DBL = 1 << 24;\n\n /**\n * @type {number}\n * @const\n * @inner\n */\n var TWO_PWR_32_DBL = TWO_PWR_16_DBL * TWO_PWR_16_DBL;\n\n /**\n * @type {number}\n * @const\n * @inner\n */\n var TWO_PWR_64_DBL = TWO_PWR_32_DBL * TWO_PWR_32_DBL;\n\n /**\n * @type {number}\n * @const\n * @inner\n */\n var TWO_PWR_63_DBL = TWO_PWR_64_DBL / 2;\n\n /**\n * @type {!Long}\n * @const\n * @inner\n */\n var TWO_PWR_24 = fromInt(TWO_PWR_24_DBL);\n\n /**\n * @type {!Long}\n * @inner\n */\n var ZERO = fromInt(0);\n\n /**\n * Signed zero.\n * @type {!Long}\n */\n Long.ZERO = ZERO;\n\n /**\n * @type {!Long}\n * @inner\n */\n var UZERO = fromInt(0, true);\n\n /**\n * Unsigned zero.\n * @type {!Long}\n */\n Long.UZERO = UZERO;\n\n /**\n * @type {!Long}\n * @inner\n */\n var ONE = fromInt(1);\n\n /**\n * Signed one.\n * @type {!Long}\n */\n Long.ONE = ONE;\n\n /**\n * @type {!Long}\n * @inner\n */\n var UONE = fromInt(1, true);\n\n /**\n * Unsigned one.\n * @type {!Long}\n */\n Long.UONE = UONE;\n\n /**\n * @type {!Long}\n * @inner\n */\n var NEG_ONE = fromInt(-1);\n\n /**\n * Signed negative one.\n * @type {!Long}\n */\n Long.NEG_ONE = NEG_ONE;\n\n /**\n * @type {!Long}\n * @inner\n */\n var MAX_VALUE = fromBits(0xffffffff | 0, 0x7fffffff | 0, false);\n\n /**\n * Maximum signed value.\n * @type {!Long}\n */\n Long.MAX_VALUE = MAX_VALUE;\n\n /**\n * @type {!Long}\n * @inner\n */\n var MAX_UNSIGNED_VALUE = fromBits(0xffffffff | 0, 0xffffffff | 0, true);\n\n /**\n * Maximum unsigned value.\n * @type {!Long}\n */\n Long.MAX_UNSIGNED_VALUE = MAX_UNSIGNED_VALUE;\n\n /**\n * @type {!Long}\n * @inner\n */\n var MIN_VALUE = fromBits(0, 0x80000000 | 0, false);\n\n /**\n * Minimum signed value.\n * @type {!Long}\n */\n Long.MIN_VALUE = MIN_VALUE;\n\n /**\n * @alias Long.prototype\n * @inner\n */\n var LongPrototype = Long.prototype;\n\n /**\n * Converts the Long to a 32 bit integer, assuming it is a 32 bit integer.\n * @this {!Long}\n * @returns {number}\n */\n LongPrototype.toInt = function toInt() {\n return this.unsigned ? this.low >>> 0 : this.low;\n };\n\n /**\n * Converts the Long to a the nearest floating-point representation of this value (double, 53 bit mantissa).\n * @this {!Long}\n * @returns {number}\n */\n LongPrototype.toNumber = function toNumber() {\n if (this.unsigned)\n return (this.high >>> 0) * TWO_PWR_32_DBL + (this.low >>> 0);\n return this.high * TWO_PWR_32_DBL + (this.low >>> 0);\n };\n\n /**\n * Converts the Long to a string written in the specified radix.\n * @this {!Long}\n * @param {number=} radix Radix (2-36), defaults to 10\n * @returns {string}\n * @override\n * @throws {RangeError} If `radix` is out of range\n */\n LongPrototype.toString = function toString(radix) {\n radix = radix || 10;\n if (radix < 2 || 36 < radix) throw RangeError(\"radix\");\n if (this.isZero()) return \"0\";\n if (this.isNegative()) {\n // Unsigned Longs are never negative\n if (this.eq(MIN_VALUE)) {\n // We need to change the Long value before it can be negated, so we remove\n // the bottom-most digit in this base and then recurse to do the rest.\n var radixLong = fromNumber(radix),\n div = this.div(radixLong),\n rem1 = div.mul(radixLong).sub(this);\n return div.toString(radix) + rem1.toInt().toString(radix);\n } else return \"-\" + this.neg().toString(radix);\n }\n\n // Do several (6) digits each time through the loop, so as to\n // minimize the calls to the very expensive emulated div.\n var radixToPower = fromNumber(pow_dbl(radix, 6), this.unsigned),\n rem = this;\n var result = \"\";\n while (true) {\n var remDiv = rem.div(radixToPower),\n intval = rem.sub(remDiv.mul(radixToPower)).toInt() >>> 0,\n digits = intval.toString(radix);\n rem = remDiv;\n if (rem.isZero()) return digits + result;\n else {\n while (digits.length < 6) digits = \"0\" + digits;\n result = \"\" + digits + result;\n }\n }\n };\n\n /**\n * Gets the high 32 bits as a signed integer.\n * @this {!Long}\n * @returns {number} Signed high bits\n */\n LongPrototype.getHighBits = function getHighBits() {\n return this.high;\n };\n\n /**\n * Gets the high 32 bits as an unsigned integer.\n * @this {!Long}\n * @returns {number} Unsigned high bits\n */\n LongPrototype.getHighBitsUnsigned = function getHighBitsUnsigned() {\n return this.high >>> 0;\n };\n\n /**\n * Gets the low 32 bits as a signed integer.\n * @this {!Long}\n * @returns {number} Signed low bits\n */\n LongPrototype.getLowBits = function getLowBits() {\n return this.low;\n };\n\n /**\n * Gets the low 32 bits as an unsigned integer.\n * @this {!Long}\n * @returns {number} Unsigned low bits\n */\n LongPrototype.getLowBitsUnsigned = function getLowBitsUnsigned() {\n return this.low >>> 0;\n };\n\n /**\n * Gets the number of bits needed to represent the absolute value of this Long.\n * @this {!Long}\n * @returns {number}\n */\n LongPrototype.getNumBitsAbs = function getNumBitsAbs() {\n if (this.isNegative())\n // Unsigned Longs are never negative\n return this.eq(MIN_VALUE) ? 64 : this.neg().getNumBitsAbs();\n var val = this.high != 0 ? this.high : this.low;\n for (var bit = 31; bit > 0; bit--) if ((val & (1 << bit)) != 0) break;\n return this.high != 0 ? bit + 33 : bit + 1;\n };\n\n /**\n * Tests if this Long can be safely represented as a JavaScript number.\n * @this {!Long}\n * @returns {boolean}\n */\n LongPrototype.isSafeInteger = function isSafeInteger() {\n // 2^53-1 is the maximum safe value\n var top11Bits = this.high >> 21;\n // [0, 2^53-1]\n if (!top11Bits) return true;\n // > 2^53-1\n if (this.unsigned) return false;\n // [-2^53, -1] except -2^53\n return top11Bits === -1 && !(this.low === 0 && this.high === -0x200000);\n };\n\n /**\n * Tests if this Long's value equals zero.\n * @this {!Long}\n * @returns {boolean}\n */\n LongPrototype.isZero = function isZero() {\n return this.high === 0 && this.low === 0;\n };\n\n /**\n * Tests if this Long's value equals zero. This is an alias of {@link Long#isZero}.\n * @returns {boolean}\n */\n LongPrototype.eqz = LongPrototype.isZero;\n\n /**\n * Tests if this Long's value is negative.\n * @this {!Long}\n * @returns {boolean}\n */\n LongPrototype.isNegative = function isNegative() {\n return !this.unsigned && this.high < 0;\n };\n\n /**\n * Tests if this Long's value is positive or zero.\n * @this {!Long}\n * @returns {boolean}\n */\n LongPrototype.isPositive = function isPositive() {\n return this.unsigned || this.high >= 0;\n };\n\n /**\n * Tests if this Long's value is odd.\n * @this {!Long}\n * @returns {boolean}\n */\n LongPrototype.isOdd = function isOdd() {\n return (this.low & 1) === 1;\n };\n\n /**\n * Tests if this Long's value is even.\n * @this {!Long}\n * @returns {boolean}\n */\n LongPrototype.isEven = function isEven() {\n return (this.low & 1) === 0;\n };\n\n /**\n * Tests if this Long's value equals the specified's.\n * @this {!Long}\n * @param {!Long|number|bigint|string} other Other value\n * @returns {boolean}\n */\n LongPrototype.equals = function equals(other) {\n if (!isLong(other)) other = fromValue(other);\n if (\n this.unsigned !== other.unsigned &&\n this.high >>> 31 === 1 &&\n other.high >>> 31 === 1\n )\n return false;\n return this.high === other.high && this.low === other.low;\n };\n\n /**\n * Tests if this Long's value equals the specified's. This is an alias of {@link Long#equals}.\n * @function\n * @param {!Long|number|bigint|string} other Other value\n * @returns {boolean}\n */\n LongPrototype.eq = LongPrototype.equals;\n\n /**\n * Tests if this Long's value differs from the specified's.\n * @this {!Long}\n * @param {!Long|number|bigint|string} other Other value\n * @returns {boolean}\n */\n LongPrototype.notEquals = function notEquals(other) {\n return !this.eq(/* validates */ other);\n };\n\n /**\n * Tests if this Long's value differs from the specified's. This is an alias of {@link Long#notEquals}.\n * @function\n * @param {!Long|number|bigint|string} other Other value\n * @returns {boolean}\n */\n LongPrototype.neq = LongPrototype.notEquals;\n\n /**\n * Tests if this Long's value differs from the specified's. This is an alias of {@link Long#notEquals}.\n * @function\n * @param {!Long|number|bigint|string} other Other value\n * @returns {boolean}\n */\n LongPrototype.ne = LongPrototype.notEquals;\n\n /**\n * Tests if this Long's value is less than the specified's.\n * @this {!Long}\n * @param {!Long|number|bigint|string} other Other value\n * @returns {boolean}\n */\n LongPrototype.lessThan = function lessThan(other) {\n return this.comp(/* validates */ other) < 0;\n };\n\n /**\n * Tests if this Long's value is less than the specified's. This is an alias of {@link Long#lessThan}.\n * @function\n * @param {!Long|number|bigint|string} other Other value\n * @returns {boolean}\n */\n LongPrototype.lt = LongPrototype.lessThan;\n\n /**\n * Tests if this Long's value is less than or equal the specified's.\n * @this {!Long}\n * @param {!Long|number|bigint|string} other Other value\n * @returns {boolean}\n */\n LongPrototype.lessThanOrEqual = function lessThanOrEqual(other) {\n return this.comp(/* validates */ other) <= 0;\n };\n\n /**\n * Tests if this Long's value is less than or equal the specified's. This is an alias of {@link Long#lessThanOrEqual}.\n * @function\n * @param {!Long|number|bigint|string} other Other value\n * @returns {boolean}\n */\n LongPrototype.lte = LongPrototype.lessThanOrEqual;\n\n /**\n * Tests if this Long's value is less than or equal the specified's. This is an alias of {@link Long#lessThanOrEqual}.\n * @function\n * @param {!Long|number|bigint|string} other Other value\n * @returns {boolean}\n */\n LongPrototype.le = LongPrototype.lessThanOrEqual;\n\n /**\n * Tests if this Long's value is greater than the specified's.\n * @this {!Long}\n * @param {!Long|number|bigint|string} other Other value\n * @returns {boolean}\n */\n LongPrototype.greaterThan = function greaterThan(other) {\n return this.comp(/* validates */ other) > 0;\n };\n\n /**\n * Tests if this Long's value is greater than the specified's. This is an alias of {@link Long#greaterThan}.\n * @function\n * @param {!Long|number|bigint|string} other Other value\n * @returns {boolean}\n */\n LongPrototype.gt = LongPrototype.greaterThan;\n\n /**\n * Tests if this Long's value is greater than or equal the specified's.\n * @this {!Long}\n * @param {!Long|number|bigint|string} other Other value\n * @returns {boolean}\n */\n LongPrototype.greaterThanOrEqual = function greaterThanOrEqual(other) {\n return this.comp(/* validates */ other) >= 0;\n };\n\n /**\n * Tests if this Long's value is greater than or equal the specified's. This is an alias of {@link Long#greaterThanOrEqual}.\n * @function\n * @param {!Long|number|bigint|string} other Other value\n * @returns {boolean}\n */\n LongPrototype.gte = LongPrototype.greaterThanOrEqual;\n\n /**\n * Tests if this Long's value is greater than or equal the specified's. This is an alias of {@link Long#greaterThanOrEqual}.\n * @function\n * @param {!Long|number|bigint|string} other Other value\n * @returns {boolean}\n */\n LongPrototype.ge = LongPrototype.greaterThanOrEqual;\n\n /**\n * Compares this Long's value with the specified's.\n * @this {!Long}\n * @param {!Long|number|bigint|string} other Other value\n * @returns {number} 0 if they are the same, 1 if the this is greater and -1\n * if the given one is greater\n */\n LongPrototype.compare = function compare(other) {\n if (!isLong(other)) other = fromValue(other);\n if (this.eq(other)) return 0;\n var thisNeg = this.isNegative(),\n otherNeg = other.isNegative();\n if (thisNeg && !otherNeg) return -1;\n if (!thisNeg && otherNeg) return 1;\n // At this point the sign bits are the same\n if (!this.unsigned) return this.sub(other).isNegative() ? -1 : 1;\n // Both are positive if at least one is unsigned\n return other.high >>> 0 > this.high >>> 0 ||\n (other.high === this.high && other.low >>> 0 > this.low >>> 0)\n ? -1\n : 1;\n };\n\n /**\n * Compares this Long's value with the specified's. This is an alias of {@link Long#compare}.\n * @function\n * @param {!Long|number|bigint|string} other Other value\n * @returns {number} 0 if they are the same, 1 if the this is greater and -1\n * if the given one is greater\n */\n LongPrototype.comp = LongPrototype.compare;\n\n /**\n * Negates this Long's value.\n * @this {!Long}\n * @returns {!Long} Negated Long\n */\n LongPrototype.negate = function negate() {\n if (!this.unsigned && this.eq(MIN_VALUE)) return MIN_VALUE;\n return this.not().add(ONE);\n };\n\n /**\n * Negates this Long's value. This is an alias of {@link Long#negate}.\n * @function\n * @returns {!Long} Negated Long\n */\n LongPrototype.neg = LongPrototype.negate;\n\n /**\n * Returns the sum of this and the specified Long.\n * @this {!Long}\n * @param {!Long|number|bigint|string} addend Addend\n * @returns {!Long} Sum\n */\n LongPrototype.add = function add(addend) {\n if (!isLong(addend)) addend = fromValue(addend);\n\n // Divide each number into 4 chunks of 16 bits, and then sum the chunks.\n\n var a48 = this.high >>> 16;\n var a32 = this.high & 0xffff;\n var a16 = this.low >>> 16;\n var a00 = this.low & 0xffff;\n var b48 = addend.high >>> 16;\n var b32 = addend.high & 0xffff;\n var b16 = addend.low >>> 16;\n var b00 = addend.low & 0xffff;\n var c48 = 0,\n c32 = 0,\n c16 = 0,\n c00 = 0;\n c00 += a00 + b00;\n c16 += c00 >>> 16;\n c00 &= 0xffff;\n c16 += a16 + b16;\n c32 += c16 >>> 16;\n c16 &= 0xffff;\n c32 += a32 + b32;\n c48 += c32 >>> 16;\n c32 &= 0xffff;\n c48 += a48 + b48;\n c48 &= 0xffff;\n return fromBits((c16 << 16) | c00, (c48 << 16) | c32, this.unsigned);\n };\n\n /**\n * Returns the difference of this and the specified Long.\n * @this {!Long}\n * @param {!Long|number|bigint|string} subtrahend Subtrahend\n * @returns {!Long} Difference\n */\n LongPrototype.subtract = function subtract(subtrahend) {\n if (!isLong(subtrahend)) subtrahend = fromValue(subtrahend);\n return this.add(subtrahend.neg());\n };\n\n /**\n * Returns the difference of this and the specified Long. This is an alias of {@link Long#subtract}.\n * @function\n * @param {!Long|number|bigint|string} subtrahend Subtrahend\n * @returns {!Long} Difference\n */\n LongPrototype.sub = LongPrototype.subtract;\n\n /**\n * Returns the product of this and the specified Long.\n * @this {!Long}\n * @param {!Long|number|bigint|string} multiplier Multiplier\n * @returns {!Long} Product\n */\n LongPrototype.multiply = function multiply(multiplier) {\n if (this.isZero()) return this;\n if (!isLong(multiplier)) multiplier = fromValue(multiplier);\n\n // use wasm support if present\n if (wasm) {\n var low = wasm[\"mul\"](\n this.low,\n this.high,\n multiplier.low,\n multiplier.high,\n );\n return fromBits(low, wasm[\"get_high\"](), this.unsigned);\n }\n if (multiplier.isZero()) return this.unsigned ? UZERO : ZERO;\n if (this.eq(MIN_VALUE)) return multiplier.isOdd() ? MIN_VALUE : ZERO;\n if (multiplier.eq(MIN_VALUE)) return this.isOdd() ? MIN_VALUE : ZERO;\n if (this.isNegative()) {\n if (multiplier.isNegative()) return this.neg().mul(multiplier.neg());\n else return this.neg().mul(multiplier).neg();\n } else if (multiplier.isNegative())\n return this.mul(multiplier.neg()).neg();\n\n // If both longs are small, use float multiplication\n if (this.lt(TWO_PWR_24) && multiplier.lt(TWO_PWR_24))\n return fromNumber(\n this.toNumber() * multiplier.toNumber(),\n this.unsigned,\n );\n\n // Divide each long into 4 chunks of 16 bits, and then add up 4x4 products.\n // We can skip products that would overflow.\n\n var a48 = this.high >>> 16;\n var a32 = this.high & 0xffff;\n var a16 = this.low >>> 16;\n var a00 = this.low & 0xffff;\n var b48 = multiplier.high >>> 16;\n var b32 = multiplier.high & 0xffff;\n var b16 = multiplier.low >>> 16;\n var b00 = multiplier.low & 0xffff;\n var c48 = 0,\n c32 = 0,\n c16 = 0,\n c00 = 0;\n c00 += a00 * b00;\n c16 += c00 >>> 16;\n c00 &= 0xffff;\n c16 += a16 * b00;\n c32 += c16 >>> 16;\n c16 &= 0xffff;\n c16 += a00 * b16;\n c32 += c16 >>> 16;\n c16 &= 0xffff;\n c32 += a32 * b00;\n c48 += c32 >>> 16;\n c32 &= 0xffff;\n c32 += a16 * b16;\n c48 += c32 >>> 16;\n c32 &= 0xffff;\n c32 += a00 * b32;\n c48 += c32 >>> 16;\n c32 &= 0xffff;\n c48 += a48 * b00 + a32 * b16 + a16 * b32 + a00 * b48;\n c48 &= 0xffff;\n return fromBits((c16 << 16) | c00, (c48 << 16) | c32, this.unsigned);\n };\n\n /**\n * Returns the product of this and the specified Long. This is an alias of {@link Long#multiply}.\n * @function\n * @param {!Long|number|bigint|string} multiplier Multiplier\n * @returns {!Long} Product\n */\n LongPrototype.mul = LongPrototype.multiply;\n\n /**\n * Returns this Long divided by the specified. The result is signed if this Long is signed or\n * unsigned if this Long is unsigned.\n * @this {!Long}\n * @param {!Long|number|bigint|string} divisor Divisor\n * @returns {!Long} Quotient\n */\n LongPrototype.divide = function divide(divisor) {\n if (!isLong(divisor)) divisor = fromValue(divisor);\n if (divisor.isZero()) throw Error(\"division by zero\");\n\n // use wasm support if present\n if (wasm) {\n // guard against signed division overflow: the largest\n // negative number / -1 would be 1 larger than the largest\n // positive number, due to two's complement.\n if (\n !this.unsigned &&\n this.high === -0x80000000 &&\n divisor.low === -1 &&\n divisor.high === -1\n ) {\n // be consistent with non-wasm code path\n return this;\n }\n var low = (this.unsigned ? wasm[\"div_u\"] : wasm[\"div_s\"])(\n this.low,\n this.high,\n divisor.low,\n divisor.high,\n );\n return fromBits(low, wasm[\"get_high\"](), this.unsigned);\n }\n if (this.isZero()) return this.unsigned ? UZERO : ZERO;\n var approx, rem, res;\n if (!this.unsigned) {\n // This section is only relevant for signed longs and is derived from the\n // closure library as a whole.\n if (this.eq(MIN_VALUE)) {\n if (divisor.eq(ONE) || divisor.eq(NEG_ONE))\n return MIN_VALUE; // recall that -MIN_VALUE == MIN_VALUE\n else if (divisor.eq(MIN_VALUE)) return ONE;\n else {\n // At this point, we have |other| >= 2, so |this/other| < |MIN_VALUE|.\n var halfThis = this.shr(1);\n approx = halfThis.div(divisor).shl(1);\n if (approx.eq(ZERO)) {\n return divisor.isNegative() ? ONE : NEG_ONE;\n } else {\n rem = this.sub(divisor.mul(approx));\n res = approx.add(rem.div(divisor));\n return res;\n }\n }\n } else if (divisor.eq(MIN_VALUE)) return this.unsigned ? UZERO : ZERO;\n if (this.isNegative()) {\n if (divisor.isNegative()) return this.neg().div(divisor.neg());\n return this.neg().div(divisor).neg();\n } else if (divisor.isNegative()) return this.div(divisor.neg()).neg();\n res = ZERO;\n } else {\n // The algorithm below has not been made for unsigned longs. It's therefore\n // required to take special care of the MSB prior to running it.\n if (!divisor.unsigned) divisor = divisor.toUnsigned();\n if (divisor.gt(this)) return UZERO;\n if (divisor.gt(this.shru(1)))\n // 15 >>> 1 = 7 ; with divisor = 8 ; true\n return UONE;\n res = UZERO;\n }\n\n // Repeat the following until the remainder is less than other: find a\n // floating-point that approximates remainder / other *from below*, add this\n // into the result, and subtract it from the remainder. It is critical that\n // the approximate value is less than or equal to the real value so that the\n // remainder never becomes negative.\n rem = this;\n while (rem.gte(divisor)) {\n // Approximate the result of division. This may be a little greater or\n // smaller than the actual value.\n approx = Math.max(1, Math.floor(rem.toNumber() / divisor.toNumber()));\n\n // We will tweak the approximate result by changing it in the 48-th digit or\n // the smallest non-fractional digit, whichever is larger.\n var log2 = Math.ceil(Math.log(approx) / Math.LN2),\n delta = log2 <= 48 ? 1 : pow_dbl(2, log2 - 48),\n // Decrease the approximation until it is smaller than the remainder. Note\n // that if it is too large, the product overflows and is negative.\n approxRes = fromNumber(approx),\n approxRem = approxRes.mul(divisor);\n while (approxRem.isNegative() || approxRem.gt(rem)) {\n approx -= delta;\n approxRes = fromNumber(approx, this.unsigned);\n approxRem = approxRes.mul(divisor);\n }\n\n // We know the answer can't be zero... and actually, zero would cause\n // infinite recursion since we would make no progress.\n if (approxRes.isZero()) approxRes = ONE;\n res = res.add(approxRes);\n rem = rem.sub(approxRem);\n }\n return res;\n };\n\n /**\n * Returns this Long divided by the specified. This is an alias of {@link Long#divide}.\n * @function\n * @param {!Long|number|bigint|string} divisor Divisor\n * @returns {!Long} Quotient\n */\n LongPrototype.div = LongPrototype.divide;\n\n /**\n * Returns this Long modulo the specified.\n * @this {!Long}\n * @param {!Long|number|bigint|string} divisor Divisor\n * @returns {!Long} Remainder\n */\n LongPrototype.modulo = function modulo(divisor) {\n if (!isLong(divisor)) divisor = fromValue(divisor);\n\n // use wasm support if present\n if (wasm) {\n var low = (this.unsigned ? wasm[\"rem_u\"] : wasm[\"rem_s\"])(\n this.low,\n this.high,\n divisor.low,\n divisor.high,\n );\n return fromBits(low, wasm[\"get_high\"](), this.unsigned);\n }\n return this.sub(this.div(divisor).mul(divisor));\n };\n\n /**\n * Returns this Long modulo the specified. This is an alias of {@link Long#modulo}.\n * @function\n * @param {!Long|number|bigint|string} divisor Divisor\n * @returns {!Long} Remainder\n */\n LongPrototype.mod = LongPrototype.modulo;\n\n /**\n * Returns this Long modulo the specified. This is an alias of {@link Long#modulo}.\n * @function\n * @param {!Long|number|bigint|string} divisor Divisor\n * @returns {!Long} Remainder\n */\n LongPrototype.rem = LongPrototype.modulo;\n\n /**\n * Returns the bitwise NOT of this Long.\n * @this {!Long}\n * @returns {!Long}\n */\n LongPrototype.not = function not() {\n return fromBits(~this.low, ~this.high, this.unsigned);\n };\n\n /**\n * Returns count leading zeros of this Long.\n * @this {!Long}\n * @returns {!number}\n */\n LongPrototype.countLeadingZeros = function countLeadingZeros() {\n return this.high ? Math.clz32(this.high) : Math.clz32(this.low) + 32;\n };\n\n /**\n * Returns count leading zeros. This is an alias of {@link Long#countLeadingZeros}.\n * @function\n * @param {!Long}\n * @returns {!number}\n */\n LongPrototype.clz = LongPrototype.countLeadingZeros;\n\n /**\n * Returns count trailing zeros of this Long.\n * @this {!Long}\n * @returns {!number}\n */\n LongPrototype.countTrailingZeros = function countTrailingZeros() {\n return this.low ? ctz32(this.low) : ctz32(this.high) + 32;\n };\n\n /**\n * Returns count trailing zeros. This is an alias of {@link Long#countTrailingZeros}.\n * @function\n * @param {!Long}\n * @returns {!number}\n */\n LongPrototype.ctz = LongPrototype.countTrailingZeros;\n\n /**\n * Returns the bitwise AND of this Long and the specified.\n * @this {!Long}\n * @param {!Long|number|bigint|string} other Other Long\n * @returns {!Long}\n */\n LongPrototype.and = function and(other) {\n if (!isLong(other)) other = fromValue(other);\n return fromBits(\n this.low & other.low,\n this.high & other.high,\n this.unsigned,\n );\n };\n\n /**\n * Returns the bitwise OR of this Long and the specified.\n * @this {!Long}\n * @param {!Long|number|bigint|string} other Other Long\n * @returns {!Long}\n */\n LongPrototype.or = function or(other) {\n if (!isLong(other)) other = fromValue(other);\n return fromBits(\n this.low | other.low,\n this.high | other.high,\n this.unsigned,\n );\n };\n\n /**\n * Returns the bitwise XOR of this Long and the given one.\n * @this {!Long}\n * @param {!Long|number|bigint|string} other Other Long\n * @returns {!Long}\n */\n LongPrototype.xor = function xor(other) {\n if (!isLong(other)) other = fromValue(other);\n return fromBits(\n this.low ^ other.low,\n this.high ^ other.high,\n this.unsigned,\n );\n };\n\n /**\n * Returns this Long with bits shifted to the left by the given amount.\n * @this {!Long}\n * @param {number|!Long} numBits Number of bits\n * @returns {!Long} Shifted Long\n */\n LongPrototype.shiftLeft = function shiftLeft(numBits) {\n if (isLong(numBits)) numBits = numBits.toInt();\n if ((numBits &= 63) === 0) return this;\n else if (numBits < 32)\n return fromBits(\n this.low << numBits,\n (this.high << numBits) | (this.low >>> (32 - numBits)),\n this.unsigned,\n );\n else return fromBits(0, this.low << (numBits - 32), this.unsigned);\n };\n\n /**\n * Returns this Long with bits shifted to the left by the given amount. This is an alias of {@link Long#shiftLeft}.\n * @function\n * @param {number|!Long} numBits Number of bits\n * @returns {!Long} Shifted Long\n */\n LongPrototype.shl = LongPrototype.shiftLeft;\n\n /**\n * Returns this Long with bits arithmetically shifted to the right by the given amount.\n * @this {!Long}\n * @param {number|!Long} numBits Number of bits\n * @returns {!Long} Shifted Long\n */\n LongPrototype.shiftRight = function shiftRight(numBits) {\n if (isLong(numBits)) numBits = numBits.toInt();\n if ((numBits &= 63) === 0) return this;\n else if (numBits < 32)\n return fromBits(\n (this.low >>> numBits) | (this.high << (32 - numBits)),\n this.high >> numBits,\n this.unsigned,\n );\n else\n return fromBits(\n this.high >> (numBits - 32),\n this.high >= 0 ? 0 : -1,\n this.unsigned,\n );\n };\n\n /**\n * Returns this Long with bits arithmetically shifted to the right by the given amount. This is an alias of {@link Long#shiftRight}.\n * @function\n * @param {number|!Long} numBits Number of bits\n * @returns {!Long} Shifted Long\n */\n LongPrototype.shr = LongPrototype.shiftRight;\n\n /**\n * Returns this Long with bits logically shifted to the right by the given amount.\n * @this {!Long}\n * @param {number|!Long} numBits Number of bits\n * @returns {!Long} Shifted Long\n */\n LongPrototype.shiftRightUnsigned = function shiftRightUnsigned(numBits) {\n if (isLong(numBits)) numBits = numBits.toInt();\n if ((numBits &= 63) === 0) return this;\n if (numBits < 32)\n return fromBits(\n (this.low >>> numBits) | (this.high << (32 - numBits)),\n this.high >>> numBits,\n this.unsigned,\n );\n if (numBits === 32) return fromBits(this.high, 0, this.unsigned);\n return fromBits(this.high >>> (numBits - 32), 0, this.unsigned);\n };\n\n /**\n * Returns this Long with bits logically shifted to the right by the given amount. This is an alias of {@link Long#shiftRightUnsigned}.\n * @function\n * @param {number|!Long} numBits Number of bits\n * @returns {!Long} Shifted Long\n */\n LongPrototype.shru = LongPrototype.shiftRightUnsigned;\n\n /**\n * Returns this Long with bits logically shifted to the right by the given amount. This is an alias of {@link Long#shiftRightUnsigned}.\n * @function\n * @param {number|!Long} numBits Number of bits\n * @returns {!Long} Shifted Long\n */\n LongPrototype.shr_u = LongPrototype.shiftRightUnsigned;\n\n /**\n * Returns this Long with bits rotated to the left by the given amount.\n * @this {!Long}\n * @param {number|!Long} numBits Number of bits\n * @returns {!Long} Rotated Long\n */\n LongPrototype.rotateLeft = function rotateLeft(numBits) {\n var b;\n if (isLong(numBits)) numBits = numBits.toInt();\n if ((numBits &= 63) === 0) return this;\n if (numBits === 32) return fromBits(this.high, this.low, this.unsigned);\n if (numBits < 32) {\n b = 32 - numBits;\n return fromBits(\n (this.low << numBits) | (this.high >>> b),\n (this.high << numBits) | (this.low >>> b),\n this.unsigned,\n );\n }\n numBits -= 32;\n b = 32 - numBits;\n return fromBits(\n (this.high << numBits) | (this.low >>> b),\n (this.low << numBits) | (this.high >>> b),\n this.unsigned,\n );\n };\n /**\n * Returns this Long with bits rotated to the left by the given amount. This is an alias of {@link Long#rotateLeft}.\n * @function\n * @param {number|!Long} numBits Number of bits\n * @returns {!Long} Rotated Long\n */\n LongPrototype.rotl = LongPrototype.rotateLeft;\n\n /**\n * Returns this Long with bits rotated to the right by the given amount.\n * @this {!Long}\n * @param {number|!Long} numBits Number of bits\n * @returns {!Long} Rotated Long\n */\n LongPrototype.rotateRight = function rotateRight(numBits) {\n var b;\n if (isLong(numBits)) numBits = numBits.toInt();\n if ((numBits &= 63) === 0) return this;\n if (numBits === 32) return fromBits(this.high, this.low, this.unsigned);\n if (numBits < 32) {\n b = 32 - numBits;\n return fromBits(\n (this.high << b) | (this.low >>> numBits),\n (this.low << b) | (this.high >>> numBits),\n this.unsigned,\n );\n }\n numBits -= 32;\n b = 32 - numBits;\n return fromBits(\n (this.low << b) | (this.high >>> numBits),\n (this.high << b) | (this.low >>> numBits),\n this.unsigned,\n );\n };\n /**\n * Returns this Long with bits rotated to the right by the given amount. This is an alias of {@link Long#rotateRight}.\n * @function\n * @param {number|!Long} numBits Number of bits\n * @returns {!Long} Rotated Long\n */\n LongPrototype.rotr = LongPrototype.rotateRight;\n\n /**\n * Converts this Long to signed.\n * @this {!Long}\n * @returns {!Long} Signed long\n */\n LongPrototype.toSigned = function toSigned() {\n if (!this.unsigned) return this;\n return fromBits(this.low, this.high, false);\n };\n\n /**\n * Converts this Long to unsigned.\n * @this {!Long}\n * @returns {!Long} Unsigned long\n */\n LongPrototype.toUnsigned = function toUnsigned() {\n if (this.unsigned) return this;\n return fromBits(this.low, this.high, true);\n };\n\n /**\n * Converts this Long to its byte representation.\n * @param {boolean=} le Whether little or big endian, defaults to big endian\n * @this {!Long}\n * @returns {!Array.<number>} Byte representation\n */\n LongPrototype.toBytes = function toBytes(le) {\n return le ? this.toBytesLE() : this.toBytesBE();\n };\n\n /**\n * Converts this Long to its little endian byte representation.\n * @this {!Long}\n * @returns {!Array.<number>} Little endian byte representation\n */\n LongPrototype.toBytesLE = function toBytesLE() {\n var hi = this.high,\n lo = this.low;\n return [\n lo & 0xff,\n (lo >>> 8) & 0xff,\n (lo >>> 16) & 0xff,\n lo >>> 24,\n hi & 0xff,\n (hi >>> 8) & 0xff,\n (hi >>> 16) & 0xff,\n hi >>> 24,\n ];\n };\n\n /**\n * Converts this Long to its big endian byte representation.\n * @this {!Long}\n * @returns {!Array.<number>} Big endian byte representation\n */\n LongPrototype.toBytesBE = function toBytesBE() {\n var hi = this.high,\n lo = this.low;\n return [\n hi >>> 24,\n (hi >>> 16) & 0xff,\n (hi >>> 8) & 0xff,\n hi & 0xff,\n lo >>> 24,\n (lo >>> 16) & 0xff,\n (lo >>> 8) & 0xff,\n lo & 0xff,\n ];\n };\n\n /**\n * Creates a Long from its byte representation.\n * @param {!Array.<number>} bytes Byte representation\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\n * @param {boolean=} le Whether little or big endian, defaults to big endian\n * @returns {Long} The corresponding Long value\n */\n Long.fromBytes = function fromBytes(bytes, unsigned, le) {\n return le\n ? Long.fromBytesLE(bytes, unsigned)\n : Long.fromBytesBE(bytes, unsigned);\n };\n\n /**\n * Creates a Long from its little endian byte representation.\n * @param {!Array.<number>} bytes Little endian byte representation\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\n * @returns {Long} The corresponding Long value\n */\n Long.fromBytesLE = function fromBytesLE(bytes, unsigned) {\n return new Long(\n bytes[0] | (bytes[1] << 8) | (bytes[2] << 16) | (bytes[3] << 24),\n bytes[4] | (bytes[5] << 8) | (bytes[6] << 16) | (bytes[7] << 24),\n unsigned,\n );\n };\n\n /**\n * Creates a Long from its big endian byte representation.\n * @param {!Array.<number>} bytes Big endian byte representation\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\n * @returns {Long} The corresponding Long value\n */\n Long.fromBytesBE = function fromBytesBE(bytes, unsigned) {\n return new Long(\n (bytes[4] << 24) | (bytes[5] << 16) | (bytes[6] << 8) | bytes[7],\n (bytes[0] << 24) | (bytes[1] << 16) | (bytes[2] << 8) | bytes[3],\n unsigned,\n );\n };\n\n // Support conversion to/from BigInt where available\n if (typeof BigInt === \"function\") {\n /**\n * Returns a Long representing the given big integer.\n * @function\n * @param {number} value The big integer value\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\n * @returns {!Long} The corresponding Long value\n */\n Long.fromBigInt = function fromBigInt(value, unsigned) {\n var lowBits = Number(BigInt.asIntN(32, value));\n var highBits = Number(BigInt.asIntN(32, value >> BigInt(32)));\n return fromBits(lowBits, highBits, unsigned);\n };\n\n // Override\n Long.fromValue = function fromValueWithBigInt(value, unsigned) {\n if (typeof value === \"bigint\") return Long.fromBigInt(value, unsigned);\n return fromValue(value, unsigned);\n };\n\n /**\n * Converts the Long to its big integer representation.\n * @this {!Long}\n * @returns {bigint}\n */\n LongPrototype.toBigInt = function toBigInt() {\n var lowBigInt = BigInt(this.low >>> 0);\n var highBigInt = BigInt(this.unsigned ? this.high >>> 0 : this.high);\n return (highBigInt << BigInt(32)) | lowBigInt;\n };\n }\n var _default = (_exports.default = Long);\n },\n);\n", "\"use strict\";\nvar util = exports;\n\n// used to return a Promise where callback is omitted\nutil.asPromise = require(\"./aspromise\");\n\n// converts to / from base64 encoded strings\nutil.base64 = require(\"./base64\");\n\n// base class of rpc.Service\nutil.EventEmitter = require(\"./eventemitter\");\n\n// float handling accross browsers\nutil.float = require(\"./float\");\n\n// converts to / from utf8 encoded strings\nutil.utf8 = require(\"./utf8\");\n\n// provides a node-like buffer pool in the browser\nutil.pool = require(\"./pool\");\n\n// utility to work with the low and high bits of a 64 bit value\nutil.LongBits = require(\"./longbits\");\n\n/**\n * Tests if the specified key can affect object prototypes.\n * @memberof util\n * @param {string} key Key to test\n * @returns {boolean} `true` if the key is unsafe\n */\nfunction isUnsafeProperty(key) {\n return key === \"__proto__\" || key === \"prototype\" || key === \"constructor\";\n}\n\nutil.isUnsafeProperty = isUnsafeProperty;\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 && Object.hasOwnProperty.call(obj, prop)) // eslint-disable-line eqeqeq\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.global.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 || (function() {\n try {\n var Long = require(\"long\");\n return Long && Long.isLong ? Long : null;\n } catch (e) {\n /* istanbul ignore next */\n return null;\n }\n })();\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]*))$/; // eslint-disable-line no-control-regex\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 * Converts a 64 bit key to a long or number if it is an 8 characters long hash string.\n * @param {string} key Map key\n * @param {boolean} [unsigned=false] Whether unsigned or not\n * @returns {Long|number|string} Original value\n */\nutil.longFromKey = function longFromKey(key, unsigned) {\n return util.key64Re.test(key) && !util.key32Re.test(key)\n ? util.longFromHash(key, unsigned)\n : key;\n};\n\n/**\n * Converts a boolean key to a boolean value.\n * @param {string} key Map key\n * @returns {boolean} Boolean value\n */\nutil.boolFromKey = function boolFromKey(key) {\n return key === \"true\" || key === \"1\";\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,*>|boolean)} src Source objects, optionally followed by an `ifNotSet` flag\n * @returns {Object.<string,*>} Destination object\n */\nfunction merge(dst) { // used by converters\n var ifNotSet = typeof arguments[arguments.length - 1] === \"boolean\",\n limit = ifNotSet ? arguments.length - 1 : arguments.length;\n ifNotSet = ifNotSet && arguments[arguments.length - 1];\n for (var a = 1; a < limit; ++a) {\n var src = arguments[a];\n if (!src)\n continue;\n for (var keys = Object.keys(src), i = 0; i < keys.length; ++i)\n if (!isUnsafeProperty(keys[i]) && (dst[keys[i]] === undefined || !ifNotSet))\n dst[keys[i]] = src[keys[i]];\n }\n return dst;\n}\n\nutil.merge = merge;\n\n/**\n * Schema declaration nesting limit.\n * @memberof util\n * @type {number}\n */\nutil.nestingLimit = 32; // protoc: MaxMessageDeclarationNestingDepth\n\n/**\n * Recursion limit.\n * @memberof util\n * @type {number}\n */\nutil.recursionLimit = 100; // protoc: CodedInputStream::default_recursion_limit_\n\n/**\n * Makes a property safe for assignment as an own property.\n * @memberof util\n * @param {Object.<string,*>} obj Object\n * @param {string} key Property key\n * @param {boolean} [enumerable=true] Whether the property should be enumerable\n * @returns {undefined}\n */\nutil.makeProp = function makeProp(obj, key, enumerable) {\n if (Object.prototype.hasOwnProperty.call(obj, key))\n return;\n Object.defineProperty(obj, key, {\n enumerable: enumerable === undefined ? true : enumerable,\n configurable: true,\n writable: true\n });\n};\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, {\n constructor: {\n value: CustomError,\n writable: true,\n enumerable: false,\n configurable: true,\n },\n name: {\n get: function get() { return name; },\n set: undefined,\n enumerable: false,\n // configurable: false would accurately preserve the behavior of\n // the original, but I'm guessing that was not intentional.\n // For an actual error subclass, this property would\n // be configurable.\n configurable: true,\n },\n toString: {\n value: function value() { return this.name + \": \" + this.message; },\n writable: true,\n enumerable: false,\n configurable: true,\n },\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 writeStringAscii(val, buf, pos) {\n for (var i = 0; i < val.length;)\n buf[pos++] = val.charCodeAt(i++);\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) < 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 var lo = val.lo,\n hi = val.hi;\n while (hi) {\n buf[pos++] = lo & 127 | 128;\n lo = (lo >>> 7 | hi << 25) >>> 0;\n hi >>>= 7;\n }\n while (lo > 127) {\n buf[pos++] = lo & 127 | 128;\n lo = lo >>> 7;\n }\n buf[pos++] = 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 raw bytes without a tag or length prefix.\n * @param {Uint8Array} value Raw bytes\n * @returns {Writer} `this`\n */\nWriter.prototype.raw = function write_raw(value) {\n var len = value.length >>> 0;\n return len ? this._push(writeBytes, len, value) : this;\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(len === value.length ? writeStringAscii : 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 return this.finishInto(this.constructor.alloc(this.len), 0);\n};\n\n/**\n * Finishes the write operation, writing into the provided buffer.\n * The caller must ensure that `buf` has enough space starting at `offset`\n * to hold {@link Writer#len} bytes.\n * @param {T} buf Target buffer\n * @param {number} [offset=0] Offset to start writing at\n * @returns {T} The provided buffer\n * @template T extends Uint8Array\n */\nWriter.prototype.finishInto = function finishInto(buf, offset) {\n if (offset === undefined)\n offset = 0;\n var head = this.head.next,\n pos = offset;\n while (head) {\n head.fn(head.val, buf, pos);\n pos += head.len;\n head = head.next;\n }\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\n/**\n * Writes raw bytes without a tag or length prefix.\n * @name BufferWriter#raw\n * @function\n * @param {Uint8Array} value Raw bytes\n * @returns {BufferWriter} `this`\n */\nBufferWriter.prototype.raw = function write_raw_buffer(value) {\n var len = value.length >>> 0;\n return len ? this._push(BufferWriter.writeBytesBuffer, len, value) : this;\n};\n\nfunction writeStringBufferAscii(val, buf, pos) {\n for (var i = 0; i < val.length;)\n buf[pos++] = val.charCodeAt(i++);\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(len === value.length && len < 40 ? writeStringBufferAscii : 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 /**\n * Whether to discard unknown fields while decoding.\n * @type {boolean}\n */\n this.discardUnknown = Reader.discardUnknown;\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 * Returns raw bytes from the backing buffer without advancing the reader.\n * @param {number} start Start offset\n * @param {number} end End offset\n * @returns {Uint8Array} Raw bytes\n */\nReader.prototype.raw = function read_raw(start, end) {\n if (Array.isArray(this.buf)) // plain array\n return this.buf.slice(start, end);\n\n if (start === end) // fix for IE 10/Win8 and others' subarray returning array of size 1\n return new this.buf.constructor(0);\n return this._slice.call(this.buf, start, end);\n};\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() {\n var buf = this.buf,\n pos = this.pos,\n value = (buf[pos] & 127) >>> 0;\n if (buf[pos++] < 128) {\n this.pos = pos;\n return value;\n }\n value = (value | (buf[pos] & 127) << 7) >>> 0;\n if (buf[pos++] < 128) {\n this.pos = pos;\n return value;\n }\n value = (value | (buf[pos] & 127) << 14) >>> 0;\n if (buf[pos++] < 128) {\n this.pos = pos;\n return value;\n }\n value = (value | (buf[pos] & 127) << 21) >>> 0;\n if (buf[pos++] < 128) {\n this.pos = pos;\n return value;\n }\n value = (value | (buf[pos] & 15) << 28) >>> 0;\n if (buf[pos++] < 128) {\n this.pos = pos;\n return value;\n }\n\n for (var i = 0; i < 5; ++i) {\n /* istanbul ignore if */\n if (pos >= this.len) {\n this.pos = pos;\n throw indexOutOfRange(this);\n }\n if (buf[pos++] < 128) {\n this.pos = pos;\n return value;\n }\n }\n /* istanbul ignore next */\n this.pos = pos;\n throw Error(\"invalid varint encoding\");\n};\n\n/**\n * Reads a field tag.\n * @function\n * @returns {number} Tag read\n */\nReader.prototype.tag = function read_tag() {\n var buf = this.buf,\n pos = this.pos,\n value = (buf[pos] & 127) >>> 0;\n if (buf[pos++] < 128) {\n this.pos = pos;\n return value;\n }\n value = (value | (buf[pos] & 127) << 7) >>> 0;\n if (buf[pos++] < 128) {\n this.pos = pos;\n return value;\n }\n value = (value | (buf[pos] & 127) << 14) >>> 0;\n if (buf[pos++] < 128) {\n this.pos = pos;\n return value;\n }\n value = (value | (buf[pos] & 127) << 21) >>> 0;\n if (buf[pos++] < 128) {\n this.pos = pos;\n return value;\n }\n value = (value | (buf[pos] & 15) << 28) >>> 0;\n if (buf[pos] < 128 && (buf[pos] & 112) === 0) {\n this.pos = pos + 1;\n return value;\n }\n\n this.pos = pos + 1;\n throw Error(\"invalid tag encoding\");\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 < 4; ++i) {\n /* istanbul ignore if */\n if (this.pos >= this.len)\n throw indexOutOfRange(this);\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 throw indexOutOfRange(this);\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 var value = false,\n b;\n for (var i = 0; i < 10; ++i) {\n /* istanbul ignore if */\n if (this.pos >= this.len)\n throw indexOutOfRange(this);\n b = this.buf[this.pos++];\n if (b & 127)\n value = true;\n if (b < 128)\n return value;\n }\n /* istanbul ignore next */\n throw Error(\"invalid varint encoding\");\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 = end;\n return this.raw(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 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 = end;\n return utf8.read(this.buf, start, end);\n};\n\n/**\n * Reads a string preceeded by its byte length as a varint, rejecting invalid UTF8.\n * @returns {string} Value read\n */\nReader.prototype.stringVerify = function read_string_verify() {\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 = end;\n return utf8.readStrict(this.buf, start, end);\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 * Recursion limit.\n * @type {number}\n */\nReader.recursionLimit = util.recursionLimit;\n\n/**\n * Whether readers discard unknown fields while decoding.\n * @type {boolean}\n */\nReader.discardUnknown = true;\n\n/**\n * Skips the next element of the specified wire type.\n * @param {number} wireType Wire type received\n * @param {number} [depth] Depth of recursion to control nested calls; 0 if omitted\n * @param {number} [fieldNumber] Field number for validating group end tags\n * @returns {Reader} `this`\n */\nReader.prototype.skipType = function(wireType, depth, fieldNumber) {\n if (depth === undefined) depth = 0;\n if (depth > Reader.recursionLimit)\n throw Error(\"max depth exceeded\");\n if (fieldNumber === 0)\n throw Error(\"illegal tag: field number 0\");\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 (true) {\n var tag = this.tag();\n var nestedField = tag >>> 3;\n wireType = tag & 7;\n if (!nestedField)\n throw Error(\"illegal tag: field number 0\");\n if (wireType === 4) {\n if (fieldNumber !== undefined && nestedField !== fieldNumber)\n throw Error(\"invalid end group tag\");\n break;\n }\n this.skipType(wireType, depth + 1, nestedField);\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 * Returns raw bytes from the backing buffer without advancing the reader.\n * @name BufferReader#raw\n * @function\n * @param {number} start Start offset\n * @param {number} end End offset\n * @returns {Buffer} Raw bytes\n */\nBufferReader.prototype.raw = function read_raw_buffer(start, end) {\n if (start === end)\n return util.Buffer.alloc(0);\n return this._slice.call(this.buf, start, end);\n};\n\n/**\n * @override\n */\nBufferReader.prototype.string = function read_string_buffer() {\n var len = this.uint32(), // modifies pos\n start = this.pos,\n end = this.pos + len;\n\n /* istanbul ignore if */\n if (end > this.len)\n throw RangeError(\"index out of range: \" + this.pos + \" + \" + len + \" > \" + this.len);\n\n this.pos = end;\n return this.buf.utf8Slice\n ? this.buf.utf8Slice(start, end)\n : this.buf.toString(\"utf-8\", start, end);\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 {{\n * (request: TReq|Properties<TReq>, callback: rpc.ServiceMethodCallback<TRes>): void;\n * (request: TReq|Properties<TReq>): Promise<TRes>;\n * readonly name: string;\n * readonly path: string;\n * readonly requestType: string;\n * readonly responseType: string;\n * readonly requestStream: true|undefined;\n * readonly responseStream: true|undefined;\n * }}\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 = Object.create(null);\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 across 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\";\n\n/**\n * Build type, one of `\"full\"`, `\"light\"` or `\"minimal\"`.\n * @name build\n * @type {string}\n * @const\n */\nexports.build = \"minimal\";\n\n// Serialization\nexports.Writer = require(\"./writer\");\nexports.BufferWriter = require(\"./writer_buffer\");\nexports.Reader = require(\"./reader\");\nexports.BufferReader = require(\"./reader_buffer\");\n\n// Utility\nexports.util = require(\"./util/minimal\");\nexports.rpc = require(\"./rpc\");\nexports.roots = require(\"./roots\");\nexports.configure = configure;\n\n/* istanbul ignore next */\n/**\n * Reconfigures the library according to the environment.\n * @returns {undefined}\n */\nfunction configure() {\n exports.util._configure();\n exports.Writer._configure(exports.BufferWriter);\n exports.Reader._configure(exports.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 * @name 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 && keys[i] !== \"__proto__\")\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, error, long) {\n if (!(reader instanceof $Reader))\n reader = $Reader.create(reader);\n if (long === undefined)\n long = 0;\n if (long > $Reader.recursionLimit)\n throw Error(\"maximum nesting depth exceeded\");\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 if (tag === error)\n break;\n switch (tag >>> 3) {\n case 1: {\n message.action = reader.int32();\n break;\n }\n case 2: {\n message.data = reader.string();\n break;\n }\n case 3: {\n message.isError = reader.bool();\n break;\n }\n case 4: {\n message.isAck = reader.bool();\n break;\n }\n default:\n reader.skipType(tag & 7, long);\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 /**\n * Gets the default type url for AuthMessage\n * @function getTypeUrl\n * @memberof AuthMessage\n * @static\n * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n * @returns {string} The default type url\n */\n AuthMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n if (typeUrlPrefix === undefined) {\n typeUrlPrefix = \"type.googleapis.com\";\n }\n return typeUrlPrefix + \"/AuthMessage\";\n };\n\n return AuthMessage;\n})();\n\n/**\n * CLUSTER_ACTION enum.\n * @name 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 && keys[i] !== \"__proto__\")\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, error, long) {\n if (!(reader instanceof $Reader))\n reader = $Reader.create(reader);\n if (long === undefined)\n long = 0;\n if (long > $Reader.recursionLimit)\n throw Error(\"maximum nesting depth exceeded\");\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 if (tag === error)\n break;\n switch (tag >>> 3) {\n case 1: {\n message.action = reader.int32();\n break;\n }\n case 2: {\n message.data = reader.string();\n break;\n }\n case 3: {\n message.isError = reader.bool();\n break;\n }\n case 4: {\n message.isAck = reader.bool();\n break;\n }\n case 5: {\n message.leaderScore = reader.int32();\n break;\n }\n case 7: {\n message.role = reader.string();\n break;\n }\n default:\n reader.skipType(tag & 7, long);\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 /**\n * Gets the default type url for ClusterMessage\n * @function getTypeUrl\n * @memberof ClusterMessage\n * @static\n * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n * @returns {string} The default type url\n */\n ClusterMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n if (typeUrlPrefix === undefined) {\n typeUrlPrefix = \"type.googleapis.com\";\n }\n return typeUrlPrefix + \"/ClusterMessage\";\n };\n\n return ClusterMessage;\n})();\n\n/**\n * CONNECTION_ACTION enum.\n * @name 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 && keys[i] !== \"__proto__\")\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, error, long) {\n if (!(reader instanceof $Reader))\n reader = $Reader.create(reader);\n if (long === undefined)\n long = 0;\n if (long > $Reader.recursionLimit)\n throw Error(\"maximum nesting depth exceeded\");\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 if (tag === error)\n break;\n switch (tag >>> 3) {\n case 1: {\n message.action = reader.int32();\n break;\n }\n case 2: {\n message.data = reader.string();\n break;\n }\n case 3: {\n message.isError = reader.bool();\n break;\n }\n case 4: {\n message.isAck = reader.bool();\n break;\n }\n case 5: {\n message.url = reader.string();\n break;\n }\n case 6: {\n message.protocolVersion = reader.string();\n break;\n }\n case 8: {\n message.sdkType = reader.string();\n break;\n }\n case 7: {\n message.sdkVersion = reader.string();\n break;\n }\n default:\n reader.skipType(tag & 7, long);\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 /**\n * Gets the default type url for ConnectionMessage\n * @function getTypeUrl\n * @memberof ConnectionMessage\n * @static\n * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n * @returns {string} The default type url\n */\n ConnectionMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n if (typeUrlPrefix === undefined) {\n typeUrlPrefix = \"type.googleapis.com\";\n }\n return typeUrlPrefix + \"/ConnectionMessage\";\n };\n\n return ConnectionMessage;\n})();\n\n/**\n * EVENT_ACTION enum.\n * @name 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 && keys[i] !== \"__proto__\")\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, error, long) {\n if (!(reader instanceof $Reader))\n reader = $Reader.create(reader);\n if (long === undefined)\n long = 0;\n if (long > $Reader.recursionLimit)\n throw Error(\"maximum nesting depth exceeded\");\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 if (tag === error)\n break;\n switch (tag >>> 3) {\n case 1: {\n message.action = reader.int32();\n break;\n }\n case 2: {\n message.data = reader.string();\n break;\n }\n case 3: {\n message.correlationId = reader.string();\n break;\n }\n case 4: {\n message.isError = reader.bool();\n break;\n }\n case 5: {\n message.isAck = reader.bool();\n break;\n }\n case 6: {\n message.name = reader.string();\n break;\n }\n case 7: {\n if (!(message.names && message.names.length))\n message.names = [];\n message.names.push(reader.string());\n break;\n }\n case 8: {\n message.subscription = reader.string();\n break;\n }\n case 10: {\n message.originalTOPIC = reader.int32();\n break;\n }\n case 11: {\n message.originalAction = reader.int32();\n break;\n }\n default:\n reader.skipType(tag & 7, long);\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 /**\n * Gets the default type url for EventMessage\n * @function getTypeUrl\n * @memberof EventMessage\n * @static\n * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n * @returns {string} The default type url\n */\n EventMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n if (typeUrlPrefix === undefined) {\n typeUrlPrefix = \"type.googleapis.com\";\n }\n return typeUrlPrefix + \"/EventMessage\";\n };\n\n return EventMessage;\n})();\n\n/**\n * TOPIC enum.\n * @name 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 && keys[i] !== \"__proto__\")\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, error, long) {\n if (!(reader instanceof $Reader))\n reader = $Reader.create(reader);\n if (long === undefined)\n long = 0;\n if (long > $Reader.recursionLimit)\n throw Error(\"maximum nesting depth exceeded\");\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 if (tag === error)\n break;\n switch (tag >>> 3) {\n case 2: {\n message.topic = reader.int32();\n break;\n }\n case 3: {\n message.message = reader.bytes();\n break;\n }\n default:\n reader.skipType(tag & 7, long);\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 /**\n * Gets the default type url for Message\n * @function getTypeUrl\n * @memberof Message\n * @static\n * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n * @returns {string} The default type url\n */\n Message.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n if (typeUrlPrefix === undefined) {\n typeUrlPrefix = \"type.googleapis.com\";\n }\n return typeUrlPrefix + \"/Message\";\n };\n\n return Message;\n})();\n\n/**\n * LOCK_ACTION enum.\n * @name 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 && keys[i] !== \"__proto__\")\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, error, long) {\n if (!(reader instanceof $Reader))\n reader = $Reader.create(reader);\n if (long === undefined)\n long = 0;\n if (long > $Reader.recursionLimit)\n throw Error(\"maximum nesting depth exceeded\");\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 if (tag === error)\n break;\n switch (tag >>> 3) {\n case 1: {\n message.action = reader.int32();\n break;\n }\n case 3: {\n message.locked = reader.bool();\n break;\n }\n default:\n reader.skipType(tag & 7, long);\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 /**\n * Gets the default type url for LockMessage\n * @function getTypeUrl\n * @memberof LockMessage\n * @static\n * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n * @returns {string} The default type url\n */\n LockMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n if (typeUrlPrefix === undefined) {\n typeUrlPrefix = \"type.googleapis.com\";\n }\n return typeUrlPrefix + \"/LockMessage\";\n };\n\n return LockMessage;\n})();\n\n/**\n * MONITORING_ACTION enum.\n * @name 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 && keys[i] !== \"__proto__\")\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, error, long) {\n if (!(reader instanceof $Reader))\n reader = $Reader.create(reader);\n if (long === undefined)\n long = 0;\n if (long > $Reader.recursionLimit)\n throw Error(\"maximum nesting depth exceeded\");\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 if (tag === error)\n break;\n switch (tag >>> 3) {\n case 1: {\n message.action = reader.int32();\n break;\n }\n case 2: {\n message.data = reader.string();\n break;\n }\n case 3: {\n message.correlationId = reader.string();\n break;\n }\n case 4: {\n message.isError = reader.bool();\n break;\n }\n case 5: {\n message.isAck = reader.bool();\n break;\n }\n default:\n reader.skipType(tag & 7, long);\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 /**\n * Gets the default type url for MonitoringMessage\n * @function getTypeUrl\n * @memberof MonitoringMessage\n * @static\n * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n * @returns {string} The default type url\n */\n MonitoringMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n if (typeUrlPrefix === undefined) {\n typeUrlPrefix = \"type.googleapis.com\";\n }\n return typeUrlPrefix + \"/MonitoringMessage\";\n };\n\n return MonitoringMessage;\n})();\n\n/**\n * PARSER_ACTION enum.\n * @name 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 && keys[i] !== \"__proto__\")\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, error, long) {\n if (!(reader instanceof $Reader))\n reader = $Reader.create(reader);\n if (long === undefined)\n long = 0;\n if (long > $Reader.recursionLimit)\n throw Error(\"maximum nesting depth exceeded\");\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 if (tag === error)\n break;\n switch (tag >>> 3) {\n case 1: {\n message.action = reader.int32();\n break;\n }\n case 2: {\n message.data = reader.string();\n break;\n }\n case 8: {\n message.originalTOPIC = reader.int32();\n break;\n }\n case 9: {\n message.originalAction = reader.int32();\n break;\n }\n default:\n reader.skipType(tag & 7, long);\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 /**\n * Gets the default type url for ParserMessage\n * @function getTypeUrl\n * @memberof ParserMessage\n * @static\n * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n * @returns {string} The default type url\n */\n ParserMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n if (typeUrlPrefix === undefined) {\n typeUrlPrefix = \"type.googleapis.com\";\n }\n return typeUrlPrefix + \"/ParserMessage\";\n };\n\n return ParserMessage;\n})();\n\n/**\n * PRESENCE_ACTION enum.\n * @name 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 && keys[i] !== \"__proto__\")\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, error, long) {\n if (!(reader instanceof $Reader))\n reader = $Reader.create(reader);\n if (long === undefined)\n long = 0;\n if (long > $Reader.recursionLimit)\n throw Error(\"maximum nesting depth exceeded\");\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 if (tag === error)\n break;\n switch (tag >>> 3) {\n case 1: {\n message.action = reader.int32();\n break;\n }\n case 2: {\n message.originalTOPIC = reader.int32();\n break;\n }\n case 3: {\n message.originalAction = reader.int32();\n break;\n }\n case 4: {\n message.data = reader.string();\n break;\n }\n case 5: {\n message.correlationId = reader.string();\n break;\n }\n case 6: {\n message.isError = reader.bool();\n break;\n }\n case 7: {\n message.isAck = reader.bool();\n break;\n }\n case 8: {\n message.name = reader.string();\n break;\n }\n case 9: {\n if (!(message.names && message.names.length))\n message.names = [];\n message.names.push(reader.string());\n break;\n }\n default:\n reader.skipType(tag & 7, long);\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 /**\n * Gets the default type url for PresenceMessage\n * @function getTypeUrl\n * @memberof PresenceMessage\n * @static\n * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n * @returns {string} The default type url\n */\n PresenceMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n if (typeUrlPrefix === undefined) {\n typeUrlPrefix = \"type.googleapis.com\";\n }\n return typeUrlPrefix + \"/PresenceMessage\";\n };\n\n return PresenceMessage;\n})();\n\n/**\n * RECORD_ACTION enum.\n * @name 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_PATCH_MULTI=35 RECORD_PATCH_MULTI 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[35] = \"RECORD_PATCH_MULTI\"] = 35;\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 && keys[i] !== \"__proto__\")\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, error, long) {\n if (!(reader instanceof $Reader))\n reader = $Reader.create(reader);\n if (long === undefined)\n long = 0;\n if (long > $Reader.recursionLimit)\n throw Error(\"maximum nesting depth exceeded\");\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 if (tag === error)\n break;\n switch (tag >>> 3) {\n case 1: {\n message.action = reader.int32();\n break;\n }\n case 2: {\n message.data = reader.string();\n break;\n }\n case 3: {\n message.correlationId = reader.string();\n break;\n }\n case 4: {\n message.isError = reader.bool();\n break;\n }\n case 5: {\n message.isAck = reader.bool();\n break;\n }\n case 6: {\n message.name = reader.string();\n break;\n }\n case 7: {\n if (!(message.names && message.names.length))\n message.names = [];\n message.names.push(reader.string());\n break;\n }\n case 8: {\n message.pattern = reader.string();\n break;\n }\n case 9: {\n message.subscription = reader.string();\n break;\n }\n case 10: {\n message.originalAction = reader.int32();\n break;\n }\n case 11: {\n message.isWriteAck = reader.bool();\n break;\n }\n case 12: {\n message.path = reader.string();\n break;\n }\n case 13: {\n message.version = reader.int32();\n break;\n }\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, long);\n break;\n }\n }\n if (key === \"__proto__\")\n $util.makeProp(message.versions, key);\n message.versions[key] = value;\n break;\n }\n default:\n reader.skipType(tag & 7, long);\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 /**\n * Gets the default type url for RecordMessage\n * @function getTypeUrl\n * @memberof RecordMessage\n * @static\n * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n * @returns {string} The default type url\n */\n RecordMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n if (typeUrlPrefix === undefined) {\n typeUrlPrefix = \"type.googleapis.com\";\n }\n return typeUrlPrefix + \"/RecordMessage\";\n };\n\n return RecordMessage;\n})();\n\n/**\n * RPC_ACTION enum.\n * @name 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 && keys[i] !== \"__proto__\")\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, error, long) {\n if (!(reader instanceof $Reader))\n reader = $Reader.create(reader);\n if (long === undefined)\n long = 0;\n if (long > $Reader.recursionLimit)\n throw Error(\"maximum nesting depth exceeded\");\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 if (tag === error)\n break;\n switch (tag >>> 3) {\n case 1: {\n message.action = reader.int32();\n break;\n }\n case 2: {\n message.data = reader.string();\n break;\n }\n case 3: {\n message.correlationId = reader.string();\n break;\n }\n case 4: {\n message.isError = reader.bool();\n break;\n }\n case 5: {\n message.isAck = reader.bool();\n break;\n }\n case 6: {\n if (!(message.names && message.names.length))\n message.names = [];\n message.names.push(reader.string());\n break;\n }\n case 7: {\n message.name = reader.string();\n break;\n }\n case 9: {\n message.originalAction = reader.int32();\n break;\n }\n case 10: {\n message.requestorName = reader.string();\n break;\n }\n case 11: {\n message.requestorData = reader.string();\n break;\n }\n default:\n reader.skipType(tag & 7, long);\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 /**\n * Gets the default type url for RpcMessage\n * @function getTypeUrl\n * @memberof RpcMessage\n * @static\n * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n * @returns {string} The default type url\n */\n RpcMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n if (typeUrlPrefix === undefined) {\n typeUrlPrefix = \"type.googleapis.com\";\n }\n return typeUrlPrefix + \"/RpcMessage\";\n };\n\n return RpcMessage;\n})();\n\n/**\n * STATE_REGISTRY_TOPIC enum.\n * @name 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 * @name 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 && keys[i] !== \"__proto__\")\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, error, long) {\n if (!(reader instanceof $Reader))\n reader = $Reader.create(reader);\n if (long === undefined)\n long = 0;\n if (long > $Reader.recursionLimit)\n throw Error(\"maximum nesting depth exceeded\");\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 if (tag === error)\n break;\n switch (tag >>> 3) {\n case 1: {\n message.action = reader.int32();\n break;\n }\n case 2: {\n message.data = reader.string();\n break;\n }\n case 3: {\n message.isError = reader.bool();\n break;\n }\n case 19: {\n message.checksum = reader.int32();\n break;\n }\n case 20: {\n if (!(message.fullState && message.fullState.length))\n message.fullState = [];\n message.fullState.push(reader.string());\n break;\n }\n case 21: {\n message.serverName = reader.string();\n break;\n }\n case 22: {\n message.registryTOPIC = reader.int32();\n break;\n }\n default:\n reader.skipType(tag & 7, long);\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 /**\n * Gets the default type url for StateMessage\n * @function getTypeUrl\n * @memberof StateMessage\n * @static\n * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n * @returns {string} The default type url\n */\n StateMessage.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n if (typeUrlPrefix === undefined) {\n typeUrlPrefix = \"type.googleapis.com\";\n }\n return typeUrlPrefix + \"/StateMessage\";\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.1.0\",\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.1.0\",\n \"protobufjs\": \"^8.0.3\",\n \"ws\": \"^8.20.0\"\n },\n \"browser\": {\n \"net\": false,\n \"./dist/src/connection/socket-factory.js\": \"./dist/src/connection/socket-factory-browser.js\"\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\": \"^8.18.1\",\n \"buffer\": \"^6.0.3\",\n \"chai\": \"^4.5.0\",\n \"husky\": \"^4.3.0\",\n \"mocha\": \"^11.7.5\",\n \"mocha-lcov-reporter\": \"^1.3.0\",\n \"nyc\": \"^18.0.0\",\n \"rimraf\": \"^3.0.2\",\n \"sinon\": \"^9.2.1\",\n \"terser-webpack-plugin\": \"^5.3.16\",\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, this.services.logger);\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};\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.hasMeaningfulSocketOptions = exports.wireSocket = 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 wireSocket = function (socket, options, heartBeatInterval, isNative) {\n if (isNative && 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)(isNative ? 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.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.wireSocket = wireSocket;\nvar hasMeaningfulSocketOptions = function (options) {\n var e_1, _a;\n if (!options)\n return false;\n try {\n for (var _b = __values(Object.keys(options)), _c = _b.next(); !_c.done; _c = _b.next()) {\n var key = _c.value;\n if (key !== 'jsonTransportMode')\n return true;\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 return false;\n};\nexports.hasMeaningfulSocketOptions = hasMeaningfulSocketOptions;\n", "'use strict';\n\nmodule.exports = function () {\n throw new Error(\n 'ws does not work in the browser. Browser clients must use the native ' +\n 'WebSocket object'\n );\n};\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.socketFactory = void 0;\nvar socket_factory_shared_1 = require(\"./socket-factory-shared\");\nvar NativeWS = global.WebSocket;\nvar socketFactory = function (url, options, heartBeatInterval) {\n if (options === void 0) { options = { jsonTransportMode: false }; }\n if (NativeWS && !(0, socket_factory_shared_1.hasMeaningfulSocketOptions)(options)) {\n return (0, socket_factory_shared_1.wireSocket)(new NativeWS(url, []), options, heartBeatInterval, true);\n }\n var WS = require('ws');\n return (0, socket_factory_shared_1.wireSocket)(new WS(url, options), options, heartBeatInterval, false);\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 * Apply an ordered batch of {path, data} patches to the record atomically\n * (one version bump, one PATCH_MULTI message on the wire). data === undefined\n * on a patch deletes the path.\n */\n RecordCore.prototype.setMulti = function (_a) {\n var _this = this;\n var patches = _a.patches, callback = _a.callback;\n if (this.checkDestroyed('setMulti')) {\n return;\n }\n if (!Array.isArray(patches) || patches.length === 0) {\n throw new Error('setMulti requires a non-empty array of patches');\n }\n for (var i = 0; i < patches.length; i++) {\n if (!patches[i] || typeof patches[i].path !== 'string' || patches[i].path.length === 0) {\n throw new Error('setMulti patches must each have a non-empty path string');\n }\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 // Decompose into individual pendingWrites; they will be coalesced and\n // flushed as a single UPDATE by applyPendingWrites once ready.\n for (var i = 0; i < patches.length - 1; i++) {\n this.pendingWrites.push({ path: patches[i].path, data: patches[i].data });\n }\n var last = patches[patches.length - 1];\n this.pendingWrites.push({ path: last.path, data: last.data, callback: callback });\n return;\n }\n var oldValue = this.data;\n var newValue = oldValue;\n for (var i = 0; i < patches.length; i++) {\n newValue = (0, json_path_1.setValue)(newValue, patches[i].path, patches[i].data);\n }\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.sendPatchMulti(patches, callback);\n }\n else {\n if (callback) {\n callback(constants_1.EVENT.CLIENT_OFFLINE, this.name);\n }\n this.saveUpdate();\n }\n };\n RecordCore.prototype.setMultiWithAck = function (args) {\n var _this = this;\n if (args.callback) {\n this.setMulti(args);\n return;\n }\n return new Promise(function (resolve, reject) {\n args.callback = function (error) { return error === null ? resolve() : reject(error); };\n _this.setMulti(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 || message.action === constants_1.RECORD_ACTION.PATCH_MULTI) {\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.sendPatchMulti = function (patches, callback) {\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 action: constants_1.RECORD_ACTION.PATCH_MULTI,\n name: this.name,\n version: this.version,\n parsedData: patches\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 message.action === constants_1.RECORD_ACTION.PATCH_MULTI) {\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.PATCH_MULTI) {\n var ops = data;\n newData = this.data;\n for (var i = 0; i < ops.length; i++) {\n newData = (0, json_path_1.setValue)(newData, ops[i].path, ops[i].data);\n }\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 * Applies an ordered batch of {path, data} patches atomically (one PATCH_MULTI\n * message on the wire, one server-side version bump). Set `data: undefined`\n * on a patch to delete that path.\n */\n Record.prototype.setMulti = function (patches, callback) {\n this.record.setMulti({ patches: patches, callback: callback });\n };\n Record.prototype.setMultiWithAck = function (patches, callback) {\n return this.record.setMultiWithAck({ patches: patches, callback: callback });\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. Issues a single atomic PATCH_MULTI message\n * to the server (one version bump, no race window between sub-writes).\n * Pass a callback (or use unshiftWithAck) to detect errors on old servers\n * that reject PATCH_MULTI as INVALID_MESSAGE_DATA \u2014 the caller can then\n * fall back to setEntries with the desired ordering.\n *\n * @param {String} entry\n */\n Dequeue.prototype.unshift = function (entry, callback) {\n // check if empty\n if (this.isEmpty()) {\n this.setEntries([entry], callback);\n return;\n }\n var head = this.record.get(this.headPath) || this.emptyHead;\n var key = this.getNodeKey();\n var patches = [\n { path: key, data: { d: entry, p: '', n: head.n } }\n ];\n if (head.n) {\n patches.push({ path: \"\".concat(head.n, \".p\"), data: key });\n }\n patches.push({ path: \"\".concat(this.headPath, \".n\"), data: key });\n this.beforeChange();\n this.record.setMulti({ patches: patches, callback: callback });\n this.afterChange();\n };\n Dequeue.prototype.unshiftWithAck = function (entry, callback) {\n var _this = this;\n if (!callback) {\n return new Promise(function (resolve, reject) {\n _this.unshift(entry, function (error) { return error ? reject(error) : resolve(); });\n });\n }\n this.unshift(entry, callback);\n };\n /**\n * Add value at last position. See unshift() for atomicity semantics.\n *\n * @param {String} entry\n */\n Dequeue.prototype.push = function (entry, callback) {\n // check if empty\n if (this.isEmpty()) {\n this.setEntries([entry], callback);\n return;\n }\n var head = this.record.get(this.headPath) || this.emptyHead;\n var key = this.getNodeKey();\n var patches = [\n { path: key, data: { d: entry, p: head.p, n: '' } }\n ];\n if (head.p) {\n patches.push({ path: \"\".concat(head.p, \".n\"), data: key });\n }\n patches.push({ path: \"\".concat(this.headPath, \".p\"), data: key });\n this.beforeChange();\n this.record.setMulti({ patches: patches, callback: callback });\n this.afterChange();\n };\n Dequeue.prototype.pushWithAck = function (entry, callback) {\n var _this = this;\n if (!callback) {\n return new Promise(function (resolve, reject) {\n _this.push(entry, function (error) { return error ? reject(error) : resolve(); });\n });\n }\n this.push(entry, callback);\n };\n /**\n * Remove a node \u2014 atomic PATCH_MULTI batch updating neighbour pointers,\n * head pointers if needed, and erasing the node itself.\n */\n Dequeue.prototype.removeNode = function (nodeKey, node, callback) {\n var head = this.record.get(this.headPath) || this.emptyHead;\n var patches = [];\n if (node.p) {\n patches.push({ path: \"\".concat(node.p, \".n\"), data: node.n });\n }\n if (node.n) {\n patches.push({ path: \"\".concat(node.n, \".p\"), data: node.p });\n }\n if (head.p === nodeKey) {\n patches.push({ path: \"\".concat(this.headPath, \".p\"), data: node.p });\n }\n if (head.n === nodeKey) {\n patches.push({ path: \"\".concat(this.headPath, \".n\"), data: node.n });\n }\n patches.push({ path: nodeKey, data: undefined });\n this.beforeChange();\n this.record.setMulti({ patches: patches, callback: callback });\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, callback) {\n var hasIndex = this.hasIndex(index);\n if (index === 0) {\n this.unshift(entry, callback);\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 var patches = [\n { path: key, data: { d: entry, n: next, p: node.p } },\n { path: \"\".concat(next, \".p\"), data: key }\n ];\n if (node.p) {\n patches.push({ path: \"\".concat(node.p, \".n\"), data: key });\n }\n this.beforeChange();\n this.record.setMulti({ patches: patches, callback: callback });\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.7.0';\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 './constants.js';\nimport {isBuiltinWithMutableMethods, isBuiltinWithoutMutableMethods} from './is-builtin.js';\nimport path from './path.js';\nimport isObject from './is-object.js';\nimport isSymbol from './is-symbol.js';\nimport isIterator from './is-iterator.js';\nimport wrapIterator from './wrap-iterator.js';\nimport ignoreProperty from './ignore-property.js';\nimport Cache from './cache.js';\nimport SmartClone from './smart-clone/smart-clone.js';\n\n// Constant set of iterator method names for efficient lookup\nconst ITERATOR_METHOD_NAMES = new Set(['values', 'keys', 'entries']);\n\n// Constant set of array search methods for efficient lookup\nconst ARRAY_SEARCH_METHODS = new Set(['indexOf', 'lastIndexOf', 'includes']);\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 shouldProvideApplyData = (details, methodName) => details === false\n\t|| details === true\n\t|| (Array.isArray(details) && details.includes(methodName));\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\t// eslint-disable-next-line max-params\n\tconst handleChangeOnTarget = (target, property, value, previous, applyData) => {\n\t\tif (\n\t\t\tignoreProperty(cache, options, property)\n\t\t\t|| (ignoreDetached && cache.isDetached(target, object))\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine which paths to notify\n\t\tconst allPaths = cache.getAllPaths(target);\n\t\tconst pathsToNotify = !smartClone.isCloning && allPaths && allPaths.length > 1\n\t\t\t? allPaths\n\t\t\t: [cache.getPath(target)];\n\n\t\t// Notify all relevant paths\n\t\tfor (const changePath of pathsToNotify) {\n\t\t\thandleChange(changePath, property, value, previous, applyData);\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 =>\n\t\t(value !== null && (typeof value === 'object' || typeof value === 'function'))\n\t\t\t? (value[proxyTarget] ?? value)\n\t\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 (Array.isArray(existingPath) && existingPath.length === 0) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst childParts = Array.isArray(childPath) ? childPath : childPath.split(PATH_SEPARATOR);\n\t\tconst existingParts = Array.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\t// Unified handler for SmartClone-based method execution\n\tconst handleMethodExecution = (target, thisArgument, thisProxyTarget, argumentsList) => {\n\t\t// Standard SmartClone path for all handled types including Date\n\t\tlet applyPath = path.initial(cache.getPath(target));\n\t\tconst isHandledMethod = SmartClone.isHandledMethod(thisProxyTarget, target.name);\n\n\t\tsmartClone.start(thisProxyTarget, applyPath, argumentsList);\n\n\t\tlet result;\n\t\t// Special handling for array search methods that need proxy-aware comparison\n\t\tif (Array.isArray(thisProxyTarget) && ARRAY_SEARCH_METHODS.has(target.name)) {\n\t\t\tresult = performProxyAwareArraySearch({\n\t\t\t\tproxyArray: thisProxyTarget,\n\t\t\t\tmethodName: target.name,\n\t\t\t\tsearchElement: argumentsList[0],\n\t\t\t\tfromIndex: argumentsList[1],\n\t\t\t\tgetProxyTarget,\n\t\t\t});\n\t\t} else {\n\t\t\tresult = Reflect.apply(\n\t\t\t\ttarget,\n\t\t\t\tsmartClone.preferredThisArg(target, thisArgument, thisProxyTarget),\n\t\t\t\tisHandledMethod\n\t\t\t\t\t? argumentsList.map(argument => getProxyTarget(argument))\n\t\t\t\t\t: argumentsList,\n\t\t\t);\n\t\t}\n\n\t\tconst isChanged = smartClone.isChanged(thisProxyTarget, equals);\n\t\tconst previous = smartClone.stop();\n\n\t\tif (SmartClone.isHandledType(result) && isHandledMethod) {\n\t\t\tif (thisArgument instanceof Map && target.name === 'get') {\n\t\t\t\tapplyPath = path.concat(applyPath, argumentsList[0]);\n\t\t\t}\n\n\t\t\tresult = cache.getProxy(result, applyPath, handler);\n\t\t}\n\n\t\tif (isChanged) {\n\t\t\t// Provide applyData based on details configuration\n\t\t\tconst applyData = shouldProvideApplyData(details, target.name)\n\t\t\t\t? {\n\t\t\t\t\tname: target.name,\n\t\t\t\t\targs: argumentsList,\n\t\t\t\t\tresult,\n\t\t\t\t}\n\t\t\t\t: undefined;\n\n\t\t\tconst changePath = smartClone.isCloning\n\t\t\t\t? path.initial(applyPath)\n\t\t\t\t: applyPath;\n\t\t\tconst property = smartClone.isCloning\n\t\t\t\t? path.last(applyPath)\n\t\t\t\t: '';\n\n\t\t\tif (validate(path.get(object, changePath), property, thisProxyTarget, previous, applyData)) {\n\t\t\t\thandleChange(changePath, property, thisProxyTarget, previous, applyData);\n\t\t\t} else {\n\t\t\t\tsmartClone.undo(thisProxyTarget);\n\t\t\t}\n\t\t}\n\n\t\tif (\n\t\t\t(thisArgument instanceof Map || thisArgument instanceof Set)\n\t\t\t&& isIterator(result)\n\t\t) {\n\t\t\treturn wrapIterator(result, target, thisArgument, applyPath, prepareValue);\n\t\t}\n\n\t\treturn result;\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)\n\t\t\t\t) {\n\t\t\t\t\t// For accessor descriptors (getters/setters), descriptor.value is undefined\n\t\t\t\t\t// We need to get the actual value after the property is defined\n\t\t\t\t\tconst hasValue = Object.hasOwn(descriptor, 'value');\n\t\t\t\t\tconst value = hasValue\n\t\t\t\t\t\t? descriptor.value\n\t\t\t\t\t\t: (() => {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t// Read the actual value through the getter\n\t\t\t\t\t\t\t\treturn target[property];\n\t\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\t\t// If the getter throws, use undefined\n\t\t\t\t\t\t\t\treturn undefined;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})();\n\n\t\t\t\t\thandleChangeOnTarget(target, property, 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, thisArgument, argumentsList) {\n\t\t\t// Handle case where thisArgument is undefined/null (e.g., extracted method calls)\n\t\t\tconst thisProxyTarget = thisArgument?.[proxyTarget] ?? thisArgument;\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\t// Check if SmartClone should be used for aggregate change tracking\n\t\t\tif (SmartClone.isHandledType(thisProxyTarget)) {\n\t\t\t\t// Skip SmartClone for custom methods on plain objects to enable property-level tracking\n\t\t\t\t// Note: This approach doesn't support private fields (#field) which require the original instance\n\t\t\t\tconst isPlainObjectCustomMethod = isObject(thisProxyTarget)\n\t\t\t\t\t&& !SmartClone.isHandledMethod(thisProxyTarget, target.name);\n\n\t\t\t\tif (!isPlainObjectCustomMethod) {\n\t\t\t\t\t// Use SmartClone for internal methods or based on details configuration\n\t\t\t\t\tconst isInternalMethod = typeof target.name === 'symbol'\n\t\t\t\t\t\t|| ITERATOR_METHOD_NAMES.has(target.name);\n\n\t\t\t\t\tconst shouldUseSmartClone = isInternalMethod\n\t\t\t\t\t\t|| details === false\n\t\t\t\t\t\t|| (Array.isArray(details) && !details.includes(target.name));\n\n\t\t\t\t\tif (shouldUseSmartClone) {\n\t\t\t\t\t\treturn handleMethodExecution(target, thisArgument, thisProxyTarget, argumentsList);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Special handling for Date mutations when details option is used\n\t\t\t// This allows tracking Date method calls with apply data\n\t\t\tif (thisProxyTarget instanceof Date && SmartClone.isHandledMethod(thisProxyTarget, target.name)) {\n\t\t\t\tconst previousTime = thisProxyTarget.getTime();\n\t\t\t\tconst result = Reflect.apply(target, thisProxyTarget, argumentsList);\n\t\t\t\tconst currentTime = thisProxyTarget.getTime();\n\n\t\t\t\tif (!equals(previousTime, currentTime)) {\n\t\t\t\t\tconst applyPath = cache.getPath(thisProxyTarget);\n\n\t\t\t\t\tif (shouldProvideApplyData(details, target.name)) {\n\t\t\t\t\t\tconst applyData = {\n\t\t\t\t\t\t\tname: target.name,\n\t\t\t\t\t\t\targs: argumentsList,\n\t\t\t\t\t\t\tresult,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tconst previousDate = new Date(previousTime);\n\n\t\t\t\t\t\tif (validate(path.get(object, applyPath), '', thisProxyTarget, previousDate, applyData)) {\n\t\t\t\t\t\t\thandleChange(applyPath, '', thisProxyTarget, previousDate, applyData);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Undo the change if validation fails\n\t\t\t\t\t\t\tthisProxyTarget.setTime(previousTime);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn result;\n\t\t\t}\n\n\t\t\t// For plain object custom methods or when SmartClone is not used,\n\t\t\t// use the proxy as 'this' to ensure property mutations go through proxy traps\n\t\t\treturn Reflect.apply(target, thisArgument, 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\n// Helper function for array search methods that need proxy-aware comparison\nconst performProxyAwareArraySearch = options => {\n\tconst {proxyArray, methodName, searchElement, fromIndex, getProxyTarget} = options;\n\tconst {length} = proxyArray;\n\n\tif (length === 0) {\n\t\treturn methodName === 'includes' ? false : -1;\n\t}\n\n\t// Parse fromIndex according to ECMAScript specification\n\tconst isLastIndexOf = methodName === 'lastIndexOf';\n\tlet startIndex = fromIndex === undefined\n\t\t? (isLastIndexOf ? length - 1 : 0)\n\t\t: Math.trunc(Number(fromIndex)) || 0;\n\n\tif (startIndex < 0) {\n\t\tstartIndex = Math.max(0, length + startIndex);\n\t} else if (isLastIndexOf) {\n\t\tstartIndex = Math.min(startIndex, length - 1);\n\t}\n\n\t// Cache the search element's target for efficiency\n\tconst searchTarget = getProxyTarget(searchElement);\n\n\t// Search with both proxy and target comparison\n\tconst searchBackward = methodName === 'lastIndexOf';\n\tconst endIndex = searchBackward ? -1 : length;\n\tconst step = searchBackward ? -1 : 1;\n\n\tfor (let index = startIndex; searchBackward ? index > endIndex : index < endIndex; index += step) {\n\t\tconst element = proxyArray[index];\n\t\tif (element === searchElement || getProxyTarget(element) === searchTarget) {\n\t\t\treturn methodName === 'includes' ? true : index;\n\t\t}\n\t}\n\n\treturn methodName === 'includes' ? false : -1;\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\t// Primitives and null \u2192 true. Functions \u2192 false. RegExp \u2192 true.\n\treturn value === null\n\t\t|| (typeof value !== 'object' && typeof value !== 'function')\n\t\t|| value instanceof RegExp\n\t\t|| value instanceof ArrayBuffer\n\t\t|| (typeof SharedArrayBuffer !== 'undefined' && value instanceof SharedArrayBuffer);\n}\n", "import {PATH_SEPARATOR} from './constants.js';\nimport isSymbol from './is-symbol.js';\n\nconst path = {\n\tafter(path, subPath) {\n\t\tif (Array.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 (Array.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 (Array.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 (Array.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 (Array.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\tobject &&= object[key];\n\t\t});\n\n\t\treturn object;\n\t},\n\tisSubPath(path, subPath) {\n\t\tif (Array.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 (Array.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 function isSymbol(value) {\n\treturn typeof value === 'symbol';\n}\n", "export default function isObject(value) {\n\treturn Object.prototype.toString.call(value) === '[object Object]';\n}\n", "export default function isIterator(value) {\n\treturn value !== null\n\t\t&& typeof value === 'object'\n\t\t&& typeof value.next === 'function';\n}\n", "import {TARGET} from './constants.js';\n\n/**\nWraps an iterator's `next()` so yielded values (or [key, value] pairs) are passed through `prepareValue` with the correct owner and path.\n*/\n// eslint-disable-next-line max-params\nexport default function wrapIterator(iterator, target, thisArgument, applyPath, prepareValue) {\n\tconst originalNext = iterator?.next;\n\tif (typeof originalNext !== 'function') {\n\t\treturn iterator;\n\t}\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 && 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 && 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 && 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\tif (cache.isUnsubscribed) {\n\t\treturn true;\n\t}\n\n\tif (options.ignoreSymbols && isSymbol(property)) {\n\t\treturn true;\n\t}\n\n\t// Only strings can be prefixed with \"_\"\n\tif (options.ignoreUnderscores && typeof property === 'string' && property.charAt(0) === '_') {\n\t\treturn true;\n\t}\n\n\tconst keys = options.ignoreKeys;\n\tif (keys) {\n\t\treturn Array.isArray(keys) ? keys.includes(property) : (keys instanceof Set ? keys.has(property) : false);\n\t}\n\n\treturn false;\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._allPathsCache = new WeakMap();\n\t\tthis.isUnsubscribed = false;\n\t}\n\n\t_pathsEqual(pathA, pathB) {\n\t\tif (!Array.isArray(pathA) || !Array.isArray(pathB)) {\n\t\t\treturn pathA === pathB;\n\t\t}\n\n\t\treturn pathA.length === pathB.length\n\t\t\t&& pathA.every((part, index) => part === pathB[index]);\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 = proxyTarget === undefined ? undefined : target[proxyTarget];\n\t\tconst source = reflectTarget ?? target;\n\n\t\t// Always set the primary path (for backward compatibility)\n\t\tthis._pathCache.set(source, path);\n\n\t\t// Track all paths for this object\n\t\tlet allPaths = this._allPathsCache.get(source);\n\t\tif (!allPaths) {\n\t\t\tallPaths = [];\n\t\t\tthis._allPathsCache.set(source, allPaths);\n\t\t}\n\n\t\t// Add path if it doesn't already exist\n\t\tconst pathExists = allPaths.some(existingPath => this._pathsEqual(existingPath, path));\n\t\tif (!pathExists) {\n\t\t\tallPaths.push(path);\n\t\t}\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\tgetAllPaths(target) {\n\t\tif (this.isUnsubscribed) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\treturn this._allPathsCache.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\t// Check if there's a setter anywhere in the prototype chain\n\t\t\tlet hasSetterInChain = false;\n\t\t\tlet current = target;\n\t\t\twhile (current) {\n\t\t\t\tconst descriptor = Reflect.getOwnPropertyDescriptor(current, property);\n\n\t\t\t\tif (descriptor && 'set' in descriptor) {\n\t\t\t\t\thasSetterInChain = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tcurrent = Object.getPrototypeOf(current);\n\t\t\t}\n\n\t\t\tif (hasSetterInChain) {\n\t\t\t\t// Use receiver to ensure setter gets proxy as 'this'\n\t\t\t\treturn Reflect.set(target, property, value, receiver);\n\t\t\t}\n\n\t\t\t// For simple properties, don't use receiver to maintain existing behavior\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._allPathsCache = 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(value, equals) {\n\t\treturn this._stack.at(-1).isChanged(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 Array.isArray;\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, _equals) {\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\tif (clone === value) {\n\t\treturn false;\n\t}\n\n\treturn clone.length !== value.length\n\t\t|| 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 === value) {\n\t\treturn false;\n\t}\n\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 === value) {\n\t\treturn false;\n\t}\n\n\tif (clone.size !== value.size) {\n\t\treturn true;\n\t}\n\n\tfor (const [key, aValue] of clone) {\n\t\tconst bValue = value.get(key);\n\t\t// Distinguish missing vs undefined and catch strict inequality\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\tundo(object) {\n\t\tsuper.undo(object);\n\t\tobject.length = this.clone.length;\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, _equals) {\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, _equals) {\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", "Buffer", "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", "b64", "s64", "i", "buffer", "start", "end", "parts", "chunk", "j", "t", "b", "invalidEncoding", "offset", "base64Re", "base64UrlRe", "base64UrlNoPaddingRe", "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_utf8", "__commonJSMin", "exports", "init_esbuild_inject", "utf8", "replacementChar", "strictDecoder", "err", "string", "len", "c", "i", "utf8_read_js", "buffer", "start", "end", "str", "t", "c2", "c3", "t2", "c1", "c4", "c5", "c6", "c7", "c8", "utf8_read_strict", "source", "offset", "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_umd", "__commonJSMin", "exports", "module", "init_esbuild_inject", "global", "factory", "preferDefault", "_exports", "wasm", "e", "Long", "low", "high", "unsigned", "isLong", "obj", "ctz32", "value", "c", "INT_CACHE", "UINT_CACHE", "fromInt", "cachedObj", "cache", "fromBits", "fromNumber", "UZERO", "ZERO", "TWO_PWR_64_DBL", "MAX_UNSIGNED_VALUE", "TWO_PWR_63_DBL", "MIN_VALUE", "MAX_VALUE", "TWO_PWR_32_DBL", "lowBits", "highBits", "pow_dbl", "fromString", "str", "radix", "p", "radixToPower", "result", "i", "size", "power", "fromValue", "val", "TWO_PWR_16_DBL", "TWO_PWR_24_DBL", "TWO_PWR_24", "ONE", "UONE", "NEG_ONE", "LongPrototype", "radixLong", "div", "rem1", "rem", "remDiv", "intval", "digits", "bit", "top11Bits", "other", "thisNeg", "otherNeg", "addend", "a48", "a32", "a16", "a00", "b48", "b32", "b16", "b00", "c48", "c32", "c16", "c00", "subtrahend", "multiplier", "divisor", "approx", "res", "halfThis", "log2", "delta", "approxRes", "approxRem", "numBits", "b", "le", "hi", "lo", "bytes", "lowBigInt", "highBigInt", "_default", "require_minimal", "__commonJSMin", "exports", "init_esbuild_inject", "util", "isUnsafeProperty", "key", "value", "obj", "prop", "Buffer", "sizeOrArray", "Long", "hash", "unsigned", "bits", "merge", "dst", "ifNotSet", "limit", "a", "src", "keys", "i", "enumerable", "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", "writeStringAscii", "writeVarint32", "VarintOp", "value", "writeVarint64", "lo", "hi", "bits", "writeFixed32", "writeBytes", "i", "head", "tail", "offset", "BufferWriter_", "require_writer_buffer", "__commonJSMin", "exports", "module", "init_esbuild_inject", "BufferWriter", "Writer", "util", "val", "buf", "pos", "i", "value", "len", "writeStringBufferAscii", "writeStringBuffer", "require_reader", "__commonJSMin", "exports", "module", "init_esbuild_inject", "Reader", "util", "BufferReader", "LongBits", "utf8", "indexOutOfRange", "reader", "writeLength", "buffer", "create_array", "create", "start", "end", "buf", "pos", "value", "i", "readLongVarint", "bits", "b", "readFixed32_end", "readFixed64", "length", "wireType", "depth", "fieldNumber", "tag", "nestedField", "BufferReader_", "fn", "require_reader_buffer", "__commonJSMin", "exports", "module", "init_esbuild_inject", "BufferReader", "Reader", "util", "buffer", "start", "end", "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", "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", "error", "long", "end", "tag", "typeUrlPrefix", "ClusterMessage", "ConnectionMessage", "EventMessage", "i", "Message", "LockMessage", "MonitoringMessage", "ParserMessage", "PresenceMessage", "RecordMessage", "key", "value", "end2", "tag2", "RpcMessage", "StateMessage", "protobuf_1", "exports", "exports", "parse", "parseData", "protobuf_map_1", "protobuf_1", "all_1", "data", "msg", "message", "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", "exports", "getMessage", "protobuf_map_1", "protobuf_1", "message", "isAck", "serializedMessage", "require_socket_factory_shared", "__commonJSMin", "exports", "init_esbuild_inject", "__assign", "t", "s", "i", "n", "p", "__values", "o", "m", "message_parser_1", "message_builder_1", "constants_1", "wireSocket", "socket", "options", "heartBeatInterval", "isNative", "buildMessage", "message", "isAck", "pingMessage", "pingInterval", "lastRecievedMessageTimestamp", "raw", "parseResults", "Buffer", "e", "hasMeaningfulSocketOptions", "e_1", "_a", "_b", "_c", "key", "e_1_1", "require_browser", "__commonJSMin", "exports", "module", "init_esbuild_inject", "require_socket_factory", "__commonJSMin", "exports", "init_esbuild_inject", "socket_factory_shared_1", "NativeWS", "socketFactory", "url", "options", "heartBeatInterval", "WS", "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", "patches", "last", "mergeStrategy", "writeCallbacks", "oldData", "newData", "runFns", "err", "message", "subscribeMsg", "actionMsg", "remoteVersion", "ops", "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", "patches", "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", "patches", "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", "TARGET", "UNSUBSCRIBE", "init_esbuild_inject", "isBuiltinWithMutableMethods", "value", "isBuiltinWithoutMutableMethods", "init_esbuild_inject", "init_esbuild_inject", "isSymbol", "value", "path", "subPath", "key", "isSymbol", "index", "_a", "callback", "position", "object", "i", "path_default", "init_esbuild_inject", "isObject", "value", "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", "keys", "init_esbuild_inject", "Cache", "equals", "pathA", "pathB", "part", "index", "target", "descriptorCache", "properties", "property", "descriptor", "path", "handler", "proxyTarget", "reflectTarget", "source", "allPaths", "existingPath", "proxy", "object", "path_default", "value", "receiver", "previous", "hasSetterInChain", "current", "a", "b", "init_esbuild_inject", "init_esbuild_inject", "is_array_default", "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", "key", "aValue", "bValue", "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", "_equals", "init_esbuild_inject", "CloneArray", "CloneObject", "name", "HANDLED_ARRAY_METHODS", "object", "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", "_equals", "object", "init_esbuild_inject", "CloneWeakMap", "CloneObject", "value", "path", "argumentsList", "hasOnValidate", "_equals", "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", "equals", "changePath", "object", "ITERATOR_METHOD_NAMES", "ARRAY_SEARCH_METHODS", "defaultOptions", "shouldProvideApplyData", "details", "methodName", "onChange", "object", "options", "__spreadValues", "proxyTarget", "equals", "isShallow", "ignoreDetached", "cache", "Cache", "hasOnValidate", "smartClone", "SmartClone", "validate", "target", "property", "value", "previous", "applyData", "path_default", "handleChangeOnTarget", "ignoreProperty", "allPaths", "pathsToNotify", "changePath", "handleChange", "getProxyTarget", "_a", "prepareValue", "basePath", "isBuiltinWithoutMutableMethods", "childPath", "existingPath", "isSameObjectTree", "handler", "isSymbol", "childParts", "existingParts", "part", "index", "handleMethodExecution", "thisArgument", "thisProxyTarget", "argumentsList", "applyPath", "isHandledMethod", "result", "performProxyAwareArraySearch", "argument", "isChanged", "isIterator", "wrapIterator", "receiver", "TARGET", "UNSUBSCRIBE", "isBuiltinWithMutableMethods", "reflectTarget", "isValid", "descriptor", "e", "isObject", "previousTime", "currentTime", "previousDate", "proxy", "proxyArray", "searchElement", "fromIndex", "length", "isLastIndexOf", "startIndex", "searchTarget", "searchBackward", "endIndex", "step", "element", "source_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", "source_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"]
}