@aslaluroba/help-center-react 3.2.0 → 3.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.esm.js +453 -328
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +453 -328
- package/dist/index.js.map +1 -1
- package/dist/services.esm.js +453 -328
- package/dist/services.esm.js.map +1 -1
- package/dist/services.js +453 -328
- package/dist/services.js.map +1 -1
- package/package.json +1 -1
- package/src/core/AblyService.ts +4 -1
package/dist/services.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"services.js","sources":["../node_modules/axios/lib/helpers/bind.js","../node_modules/axios/lib/utils.js","../node_modules/axios/lib/core/AxiosError.js","../node_modules/axios/lib/helpers/null.js","../node_modules/axios/lib/helpers/toFormData.js","../node_modules/axios/lib/helpers/AxiosURLSearchParams.js","../node_modules/axios/lib/helpers/buildURL.js","../node_modules/axios/lib/core/InterceptorManager.js","../node_modules/axios/lib/defaults/transitional.js","../node_modules/axios/lib/platform/browser/classes/URLSearchParams.js","../node_modules/axios/lib/platform/browser/classes/FormData.js","../node_modules/axios/lib/platform/browser/classes/Blob.js","../node_modules/axios/lib/platform/browser/index.js","../node_modules/axios/lib/platform/common/utils.js","../node_modules/axios/lib/platform/index.js","../node_modules/axios/lib/helpers/toURLEncodedForm.js","../node_modules/axios/lib/helpers/formDataToJSON.js","../node_modules/axios/lib/defaults/index.js","../node_modules/axios/lib/helpers/parseHeaders.js","../node_modules/axios/lib/core/AxiosHeaders.js","../node_modules/axios/lib/core/transformData.js","../node_modules/axios/lib/cancel/isCancel.js","../node_modules/axios/lib/cancel/CanceledError.js","../node_modules/axios/lib/core/settle.js","../node_modules/axios/lib/helpers/parseProtocol.js","../node_modules/axios/lib/helpers/speedometer.js","../node_modules/axios/lib/helpers/throttle.js","../node_modules/axios/lib/helpers/progressEventReducer.js","../node_modules/axios/lib/helpers/isURLSameOrigin.js","../node_modules/axios/lib/helpers/cookies.js","../node_modules/axios/lib/helpers/isAbsoluteURL.js","../node_modules/axios/lib/helpers/combineURLs.js","../node_modules/axios/lib/core/buildFullPath.js","../node_modules/axios/lib/core/mergeConfig.js","../node_modules/axios/lib/helpers/resolveConfig.js","../node_modules/axios/lib/adapters/xhr.js","../node_modules/axios/lib/helpers/composeSignals.js","../node_modules/axios/lib/helpers/trackStream.js","../node_modules/axios/lib/adapters/fetch.js","../node_modules/axios/lib/adapters/adapters.js","../node_modules/axios/lib/core/dispatchRequest.js","../node_modules/axios/lib/env/data.js","../node_modules/axios/lib/helpers/validator.js","../node_modules/axios/lib/core/Axios.js","../node_modules/axios/lib/cancel/CancelToken.js","../node_modules/axios/lib/helpers/spread.js","../node_modules/axios/lib/helpers/isAxiosError.js","../node_modules/axios/lib/helpers/HttpStatusCode.js","../node_modules/axios/lib/axios.js","../src/core/ApiService.ts","../node_modules/ably/build/ably.js","../src/core/AblyService.ts","../src/core/token-service.ts","../src/core/api.ts"],"sourcesContent":["'use strict';\n\nexport default function bind(fn, thisArg) {\n return function wrap() {\n return fn.apply(thisArg, arguments);\n };\n}\n","'use strict';\n\nimport bind from './helpers/bind.js';\n\n// utils is a library of generic helper functions non-specific to axios\n\nconst {toString} = Object.prototype;\nconst {getPrototypeOf} = Object;\nconst {iterator, toStringTag} = Symbol;\n\nconst kindOf = (cache => thing => {\n const str = toString.call(thing);\n return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());\n})(Object.create(null));\n\nconst kindOfTest = (type) => {\n type = type.toLowerCase();\n return (thing) => kindOf(thing) === type\n}\n\nconst typeOfTest = type => thing => typeof thing === type;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n *\n * @returns {boolean} True if value is an Array, otherwise false\n */\nconst {isArray} = Array;\n\n/**\n * Determine if a value is undefined\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nconst isUndefined = typeOfTest('undefined');\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)\n && isFunction(val.constructor.isBuffer) && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nconst isArrayBuffer = kindOfTest('ArrayBuffer');\n\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n let result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (isArrayBuffer(val.buffer));\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a String, otherwise false\n */\nconst isString = typeOfTest('string');\n\n/**\n * Determine if a value is a Function\n *\n * @param {*} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nconst isFunction = typeOfTest('function');\n\n/**\n * Determine if a value is a Number\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Number, otherwise false\n */\nconst isNumber = typeOfTest('number');\n\n/**\n * Determine if a value is an Object\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an Object, otherwise false\n */\nconst isObject = (thing) => thing !== null && typeof thing === 'object';\n\n/**\n * Determine if a value is a Boolean\n *\n * @param {*} thing The value to test\n * @returns {boolean} True if value is a Boolean, otherwise false\n */\nconst isBoolean = thing => thing === true || thing === false;\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a plain Object, otherwise false\n */\nconst isPlainObject = (val) => {\n if (kindOf(val) !== 'object') {\n return false;\n }\n\n const prototype = getPrototypeOf(val);\n return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(toStringTag in val) && !(iterator in val);\n}\n\n/**\n * Determine if a value is an empty object (safely handles Buffers)\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an empty object, otherwise false\n */\nconst isEmptyObject = (val) => {\n // Early return for non-objects or Buffers to prevent RangeError\n if (!isObject(val) || isBuffer(val)) {\n return false;\n }\n\n try {\n return Object.keys(val).length === 0 && Object.getPrototypeOf(val) === Object.prototype;\n } catch (e) {\n // Fallback for any other objects that might cause RangeError with Object.keys()\n return false;\n }\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Date, otherwise false\n */\nconst isDate = kindOfTest('Date');\n\n/**\n * Determine if a value is a File\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFile = kindOfTest('File');\n\n/**\n * Determine if a value is a Blob\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nconst isBlob = kindOfTest('Blob');\n\n/**\n * Determine if a value is a FileList\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFileList = kindOfTest('FileList');\n\n/**\n * Determine if a value is a Stream\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nconst isStream = (val) => isObject(val) && isFunction(val.pipe);\n\n/**\n * Determine if a value is a FormData\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nconst isFormData = (thing) => {\n let kind;\n return thing && (\n (typeof FormData === 'function' && thing instanceof FormData) || (\n isFunction(thing.append) && (\n (kind = kindOf(thing)) === 'formdata' ||\n // detect form-data instance\n (kind === 'object' && isFunction(thing.toString) && thing.toString() === '[object FormData]')\n )\n )\n )\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nconst isURLSearchParams = kindOfTest('URLSearchParams');\n\nconst [isReadableStream, isRequest, isResponse, isHeaders] = ['ReadableStream', 'Request', 'Response', 'Headers'].map(kindOfTest);\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n *\n * @returns {String} The String freed of excess whitespace\n */\nconst trim = (str) => str.trim ?\n str.trim() : str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n *\n * @param {Boolean} [allOwnKeys = false]\n * @returns {any}\n */\nfunction forEach(obj, fn, {allOwnKeys = false} = {}) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n let i;\n let l;\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Buffer check\n if (isBuffer(obj)) {\n return;\n }\n\n // Iterate over object keys\n const keys = allOwnKeys ? Object.getOwnPropertyNames(obj) : Object.keys(obj);\n const len = keys.length;\n let key;\n\n for (i = 0; i < len; i++) {\n key = keys[i];\n fn.call(null, obj[key], key, obj);\n }\n }\n}\n\nfunction findKey(obj, key) {\n if (isBuffer(obj)){\n return null;\n }\n\n key = key.toLowerCase();\n const keys = Object.keys(obj);\n let i = keys.length;\n let _key;\n while (i-- > 0) {\n _key = keys[i];\n if (key === _key.toLowerCase()) {\n return _key;\n }\n }\n return null;\n}\n\nconst _global = (() => {\n /*eslint no-undef:0*/\n if (typeof globalThis !== \"undefined\") return globalThis;\n return typeof self !== \"undefined\" ? self : (typeof window !== 'undefined' ? window : global)\n})();\n\nconst isContextDefined = (context) => !isUndefined(context) && context !== _global;\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n *\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n const {caseless, skipUndefined} = isContextDefined(this) && this || {};\n const result = {};\n const assignValue = (val, key) => {\n const targetKey = caseless && findKey(result, key) || key;\n if (isPlainObject(result[targetKey]) && isPlainObject(val)) {\n result[targetKey] = merge(result[targetKey], val);\n } else if (isPlainObject(val)) {\n result[targetKey] = merge({}, val);\n } else if (isArray(val)) {\n result[targetKey] = val.slice();\n } else if (!skipUndefined || !isUndefined(val)) {\n result[targetKey] = val;\n }\n }\n\n for (let i = 0, l = arguments.length; i < l; i++) {\n arguments[i] && forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n *\n * @param {Boolean} [allOwnKeys]\n * @returns {Object} The resulting value of object a\n */\nconst extend = (a, b, thisArg, {allOwnKeys}= {}) => {\n forEach(b, (val, key) => {\n if (thisArg && isFunction(val)) {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n }, {allOwnKeys});\n return a;\n}\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n *\n * @returns {string} content value without BOM\n */\nconst stripBOM = (content) => {\n if (content.charCodeAt(0) === 0xFEFF) {\n content = content.slice(1);\n }\n return content;\n}\n\n/**\n * Inherit the prototype methods from one constructor into another\n * @param {function} constructor\n * @param {function} superConstructor\n * @param {object} [props]\n * @param {object} [descriptors]\n *\n * @returns {void}\n */\nconst inherits = (constructor, superConstructor, props, descriptors) => {\n constructor.prototype = Object.create(superConstructor.prototype, descriptors);\n constructor.prototype.constructor = constructor;\n Object.defineProperty(constructor, 'super', {\n value: superConstructor.prototype\n });\n props && Object.assign(constructor.prototype, props);\n}\n\n/**\n * Resolve object with deep prototype chain to a flat object\n * @param {Object} sourceObj source object\n * @param {Object} [destObj]\n * @param {Function|Boolean} [filter]\n * @param {Function} [propFilter]\n *\n * @returns {Object}\n */\nconst toFlatObject = (sourceObj, destObj, filter, propFilter) => {\n let props;\n let i;\n let prop;\n const merged = {};\n\n destObj = destObj || {};\n // eslint-disable-next-line no-eq-null,eqeqeq\n if (sourceObj == null) return destObj;\n\n do {\n props = Object.getOwnPropertyNames(sourceObj);\n i = props.length;\n while (i-- > 0) {\n prop = props[i];\n if ((!propFilter || propFilter(prop, sourceObj, destObj)) && !merged[prop]) {\n destObj[prop] = sourceObj[prop];\n merged[prop] = true;\n }\n }\n sourceObj = filter !== false && getPrototypeOf(sourceObj);\n } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype);\n\n return destObj;\n}\n\n/**\n * Determines whether a string ends with the characters of a specified string\n *\n * @param {String} str\n * @param {String} searchString\n * @param {Number} [position= 0]\n *\n * @returns {boolean}\n */\nconst endsWith = (str, searchString, position) => {\n str = String(str);\n if (position === undefined || position > str.length) {\n position = str.length;\n }\n position -= searchString.length;\n const lastIndex = str.indexOf(searchString, position);\n return lastIndex !== -1 && lastIndex === position;\n}\n\n\n/**\n * Returns new array from array like object or null if failed\n *\n * @param {*} [thing]\n *\n * @returns {?Array}\n */\nconst toArray = (thing) => {\n if (!thing) return null;\n if (isArray(thing)) return thing;\n let i = thing.length;\n if (!isNumber(i)) return null;\n const arr = new Array(i);\n while (i-- > 0) {\n arr[i] = thing[i];\n }\n return arr;\n}\n\n/**\n * Checking if the Uint8Array exists and if it does, it returns a function that checks if the\n * thing passed in is an instance of Uint8Array\n *\n * @param {TypedArray}\n *\n * @returns {Array}\n */\n// eslint-disable-next-line func-names\nconst isTypedArray = (TypedArray => {\n // eslint-disable-next-line func-names\n return thing => {\n return TypedArray && thing instanceof TypedArray;\n };\n})(typeof Uint8Array !== 'undefined' && getPrototypeOf(Uint8Array));\n\n/**\n * For each entry in the object, call the function with the key and value.\n *\n * @param {Object<any, any>} obj - The object to iterate over.\n * @param {Function} fn - The function to call for each entry.\n *\n * @returns {void}\n */\nconst forEachEntry = (obj, fn) => {\n const generator = obj && obj[iterator];\n\n const _iterator = generator.call(obj);\n\n let result;\n\n while ((result = _iterator.next()) && !result.done) {\n const pair = result.value;\n fn.call(obj, pair[0], pair[1]);\n }\n}\n\n/**\n * It takes a regular expression and a string, and returns an array of all the matches\n *\n * @param {string} regExp - The regular expression to match against.\n * @param {string} str - The string to search.\n *\n * @returns {Array<boolean>}\n */\nconst matchAll = (regExp, str) => {\n let matches;\n const arr = [];\n\n while ((matches = regExp.exec(str)) !== null) {\n arr.push(matches);\n }\n\n return arr;\n}\n\n/* Checking if the kindOfTest function returns true when passed an HTMLFormElement. */\nconst isHTMLForm = kindOfTest('HTMLFormElement');\n\nconst toCamelCase = str => {\n return str.toLowerCase().replace(/[-_\\s]([a-z\\d])(\\w*)/g,\n function replacer(m, p1, p2) {\n return p1.toUpperCase() + p2;\n }\n );\n};\n\n/* Creating a function that will check if an object has a property. */\nconst hasOwnProperty = (({hasOwnProperty}) => (obj, prop) => hasOwnProperty.call(obj, prop))(Object.prototype);\n\n/**\n * Determine if a value is a RegExp object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a RegExp object, otherwise false\n */\nconst isRegExp = kindOfTest('RegExp');\n\nconst reduceDescriptors = (obj, reducer) => {\n const descriptors = Object.getOwnPropertyDescriptors(obj);\n const reducedDescriptors = {};\n\n forEach(descriptors, (descriptor, name) => {\n let ret;\n if ((ret = reducer(descriptor, name, obj)) !== false) {\n reducedDescriptors[name] = ret || descriptor;\n }\n });\n\n Object.defineProperties(obj, reducedDescriptors);\n}\n\n/**\n * Makes all methods read-only\n * @param {Object} obj\n */\n\nconst freezeMethods = (obj) => {\n reduceDescriptors(obj, (descriptor, name) => {\n // skip restricted props in strict mode\n if (isFunction(obj) && ['arguments', 'caller', 'callee'].indexOf(name) !== -1) {\n return false;\n }\n\n const value = obj[name];\n\n if (!isFunction(value)) return;\n\n descriptor.enumerable = false;\n\n if ('writable' in descriptor) {\n descriptor.writable = false;\n return;\n }\n\n if (!descriptor.set) {\n descriptor.set = () => {\n throw Error('Can not rewrite read-only method \\'' + name + '\\'');\n };\n }\n });\n}\n\nconst toObjectSet = (arrayOrString, delimiter) => {\n const obj = {};\n\n const define = (arr) => {\n arr.forEach(value => {\n obj[value] = true;\n });\n }\n\n isArray(arrayOrString) ? define(arrayOrString) : define(String(arrayOrString).split(delimiter));\n\n return obj;\n}\n\nconst noop = () => {}\n\nconst toFiniteNumber = (value, defaultValue) => {\n return value != null && Number.isFinite(value = +value) ? value : defaultValue;\n}\n\n\n\n/**\n * If the thing is a FormData object, return true, otherwise return false.\n *\n * @param {unknown} thing - The thing to check.\n *\n * @returns {boolean}\n */\nfunction isSpecCompliantForm(thing) {\n return !!(thing && isFunction(thing.append) && thing[toStringTag] === 'FormData' && thing[iterator]);\n}\n\nconst toJSONObject = (obj) => {\n const stack = new Array(10);\n\n const visit = (source, i) => {\n\n if (isObject(source)) {\n if (stack.indexOf(source) >= 0) {\n return;\n }\n\n //Buffer check\n if (isBuffer(source)) {\n return source;\n }\n\n if(!('toJSON' in source)) {\n stack[i] = source;\n const target = isArray(source) ? [] : {};\n\n forEach(source, (value, key) => {\n const reducedValue = visit(value, i + 1);\n !isUndefined(reducedValue) && (target[key] = reducedValue);\n });\n\n stack[i] = undefined;\n\n return target;\n }\n }\n\n return source;\n }\n\n return visit(obj, 0);\n}\n\nconst isAsyncFn = kindOfTest('AsyncFunction');\n\nconst isThenable = (thing) =>\n thing && (isObject(thing) || isFunction(thing)) && isFunction(thing.then) && isFunction(thing.catch);\n\n// original code\n// https://github.com/DigitalBrainJS/AxiosPromise/blob/16deab13710ec09779922131f3fa5954320f83ab/lib/utils.js#L11-L34\n\nconst _setImmediate = ((setImmediateSupported, postMessageSupported) => {\n if (setImmediateSupported) {\n return setImmediate;\n }\n\n return postMessageSupported ? ((token, callbacks) => {\n _global.addEventListener(\"message\", ({source, data}) => {\n if (source === _global && data === token) {\n callbacks.length && callbacks.shift()();\n }\n }, false);\n\n return (cb) => {\n callbacks.push(cb);\n _global.postMessage(token, \"*\");\n }\n })(`axios@${Math.random()}`, []) : (cb) => setTimeout(cb);\n})(\n typeof setImmediate === 'function',\n isFunction(_global.postMessage)\n);\n\nconst asap = typeof queueMicrotask !== 'undefined' ?\n queueMicrotask.bind(_global) : ( typeof process !== 'undefined' && process.nextTick || _setImmediate);\n\n// *********************\n\n\nconst isIterable = (thing) => thing != null && isFunction(thing[iterator]);\n\n\nexport default {\n isArray,\n isArrayBuffer,\n isBuffer,\n isFormData,\n isArrayBufferView,\n isString,\n isNumber,\n isBoolean,\n isObject,\n isPlainObject,\n isEmptyObject,\n isReadableStream,\n isRequest,\n isResponse,\n isHeaders,\n isUndefined,\n isDate,\n isFile,\n isBlob,\n isRegExp,\n isFunction,\n isStream,\n isURLSearchParams,\n isTypedArray,\n isFileList,\n forEach,\n merge,\n extend,\n trim,\n stripBOM,\n inherits,\n toFlatObject,\n kindOf,\n kindOfTest,\n endsWith,\n toArray,\n forEachEntry,\n matchAll,\n isHTMLForm,\n hasOwnProperty,\n hasOwnProp: hasOwnProperty, // an alias to avoid ESLint no-prototype-builtins detection\n reduceDescriptors,\n freezeMethods,\n toObjectSet,\n toCamelCase,\n noop,\n toFiniteNumber,\n findKey,\n global: _global,\n isContextDefined,\n isSpecCompliantForm,\n toJSONObject,\n isAsyncFn,\n isThenable,\n setImmediate: _setImmediate,\n asap,\n isIterable\n};\n","'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [config] The config.\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n *\n * @returns {Error} The created error.\n */\nfunction AxiosError(message, code, config, request, response) {\n Error.call(this);\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n } else {\n this.stack = (new Error()).stack;\n }\n\n this.message = message;\n this.name = 'AxiosError';\n code && (this.code = code);\n config && (this.config = config);\n request && (this.request = request);\n if (response) {\n this.response = response;\n this.status = response.status ? response.status : null;\n }\n}\n\nutils.inherits(AxiosError, Error, {\n toJSON: function toJSON() {\n return {\n // Standard\n message: this.message,\n name: this.name,\n // Microsoft\n description: this.description,\n number: this.number,\n // Mozilla\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n // Axios\n config: utils.toJSONObject(this.config),\n code: this.code,\n status: this.status\n };\n }\n});\n\nconst prototype = AxiosError.prototype;\nconst descriptors = {};\n\n[\n 'ERR_BAD_OPTION_VALUE',\n 'ERR_BAD_OPTION',\n 'ECONNABORTED',\n 'ETIMEDOUT',\n 'ERR_NETWORK',\n 'ERR_FR_TOO_MANY_REDIRECTS',\n 'ERR_DEPRECATED',\n 'ERR_BAD_RESPONSE',\n 'ERR_BAD_REQUEST',\n 'ERR_CANCELED',\n 'ERR_NOT_SUPPORT',\n 'ERR_INVALID_URL'\n// eslint-disable-next-line func-names\n].forEach(code => {\n descriptors[code] = {value: code};\n});\n\nObject.defineProperties(AxiosError, descriptors);\nObject.defineProperty(prototype, 'isAxiosError', {value: true});\n\n// eslint-disable-next-line func-names\nAxiosError.from = (error, code, config, request, response, customProps) => {\n const axiosError = Object.create(prototype);\n\n utils.toFlatObject(error, axiosError, function filter(obj) {\n return obj !== Error.prototype;\n }, prop => {\n return prop !== 'isAxiosError';\n });\n\n const msg = error && error.message ? error.message : 'Error';\n\n // Prefer explicit code; otherwise copy the low-level error's code (e.g. ECONNREFUSED)\n const errCode = code == null && error ? error.code : code;\n AxiosError.call(axiosError, msg, errCode, config, request, response);\n\n // Chain the original error on the standard field; non-enumerable to avoid JSON noise\n if (error && axiosError.cause == null) {\n Object.defineProperty(axiosError, 'cause', { value: error, configurable: true });\n }\n\n axiosError.name = (error && error.name) || 'Error';\n\n customProps && Object.assign(axiosError, customProps);\n\n return axiosError;\n};\n\nexport default AxiosError;\n","// eslint-disable-next-line strict\nexport default null;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\n// temporary hotfix to avoid circular references until AxiosURLSearchParams is refactored\nimport PlatformFormData from '../platform/node/classes/FormData.js';\n\n/**\n * Determines if the given thing is a array or js object.\n *\n * @param {string} thing - The object or array to be visited.\n *\n * @returns {boolean}\n */\nfunction isVisitable(thing) {\n return utils.isPlainObject(thing) || utils.isArray(thing);\n}\n\n/**\n * It removes the brackets from the end of a string\n *\n * @param {string} key - The key of the parameter.\n *\n * @returns {string} the key without the brackets.\n */\nfunction removeBrackets(key) {\n return utils.endsWith(key, '[]') ? key.slice(0, -2) : key;\n}\n\n/**\n * It takes a path, a key, and a boolean, and returns a string\n *\n * @param {string} path - The path to the current key.\n * @param {string} key - The key of the current object being iterated over.\n * @param {string} dots - If true, the key will be rendered with dots instead of brackets.\n *\n * @returns {string} The path to the current key.\n */\nfunction renderKey(path, key, dots) {\n if (!path) return key;\n return path.concat(key).map(function each(token, i) {\n // eslint-disable-next-line no-param-reassign\n token = removeBrackets(token);\n return !dots && i ? '[' + token + ']' : token;\n }).join(dots ? '.' : '');\n}\n\n/**\n * If the array is an array and none of its elements are visitable, then it's a flat array.\n *\n * @param {Array<any>} arr - The array to check\n *\n * @returns {boolean}\n */\nfunction isFlatArray(arr) {\n return utils.isArray(arr) && !arr.some(isVisitable);\n}\n\nconst predicates = utils.toFlatObject(utils, {}, null, function filter(prop) {\n return /^is[A-Z]/.test(prop);\n});\n\n/**\n * Convert a data object to FormData\n *\n * @param {Object} obj\n * @param {?Object} [formData]\n * @param {?Object} [options]\n * @param {Function} [options.visitor]\n * @param {Boolean} [options.metaTokens = true]\n * @param {Boolean} [options.dots = false]\n * @param {?Boolean} [options.indexes = false]\n *\n * @returns {Object}\n **/\n\n/**\n * It converts an object into a FormData object\n *\n * @param {Object<any, any>} obj - The object to convert to form data.\n * @param {string} formData - The FormData object to append to.\n * @param {Object<string, any>} options\n *\n * @returns\n */\nfunction toFormData(obj, formData, options) {\n if (!utils.isObject(obj)) {\n throw new TypeError('target must be an object');\n }\n\n // eslint-disable-next-line no-param-reassign\n formData = formData || new (PlatformFormData || FormData)();\n\n // eslint-disable-next-line no-param-reassign\n options = utils.toFlatObject(options, {\n metaTokens: true,\n dots: false,\n indexes: false\n }, false, function defined(option, source) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n return !utils.isUndefined(source[option]);\n });\n\n const metaTokens = options.metaTokens;\n // eslint-disable-next-line no-use-before-define\n const visitor = options.visitor || defaultVisitor;\n const dots = options.dots;\n const indexes = options.indexes;\n const _Blob = options.Blob || typeof Blob !== 'undefined' && Blob;\n const useBlob = _Blob && utils.isSpecCompliantForm(formData);\n\n if (!utils.isFunction(visitor)) {\n throw new TypeError('visitor must be a function');\n }\n\n function convertValue(value) {\n if (value === null) return '';\n\n if (utils.isDate(value)) {\n return value.toISOString();\n }\n\n if (utils.isBoolean(value)) {\n return value.toString();\n }\n\n if (!useBlob && utils.isBlob(value)) {\n throw new AxiosError('Blob is not supported. Use a Buffer instead.');\n }\n\n if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) {\n return useBlob && typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value);\n }\n\n return value;\n }\n\n /**\n * Default visitor.\n *\n * @param {*} value\n * @param {String|Number} key\n * @param {Array<String|Number>} path\n * @this {FormData}\n *\n * @returns {boolean} return true to visit the each prop of the value recursively\n */\n function defaultVisitor(value, key, path) {\n let arr = value;\n\n if (value && !path && typeof value === 'object') {\n if (utils.endsWith(key, '{}')) {\n // eslint-disable-next-line no-param-reassign\n key = metaTokens ? key : key.slice(0, -2);\n // eslint-disable-next-line no-param-reassign\n value = JSON.stringify(value);\n } else if (\n (utils.isArray(value) && isFlatArray(value)) ||\n ((utils.isFileList(value) || utils.endsWith(key, '[]')) && (arr = utils.toArray(value))\n )) {\n // eslint-disable-next-line no-param-reassign\n key = removeBrackets(key);\n\n arr.forEach(function each(el, index) {\n !(utils.isUndefined(el) || el === null) && formData.append(\n // eslint-disable-next-line no-nested-ternary\n indexes === true ? renderKey([key], index, dots) : (indexes === null ? key : key + '[]'),\n convertValue(el)\n );\n });\n return false;\n }\n }\n\n if (isVisitable(value)) {\n return true;\n }\n\n formData.append(renderKey(path, key, dots), convertValue(value));\n\n return false;\n }\n\n const stack = [];\n\n const exposedHelpers = Object.assign(predicates, {\n defaultVisitor,\n convertValue,\n isVisitable\n });\n\n function build(value, path) {\n if (utils.isUndefined(value)) return;\n\n if (stack.indexOf(value) !== -1) {\n throw Error('Circular reference detected in ' + path.join('.'));\n }\n\n stack.push(value);\n\n utils.forEach(value, function each(el, key) {\n const result = !(utils.isUndefined(el) || el === null) && visitor.call(\n formData, el, utils.isString(key) ? key.trim() : key, path, exposedHelpers\n );\n\n if (result === true) {\n build(el, path ? path.concat(key) : [key]);\n }\n });\n\n stack.pop();\n }\n\n if (!utils.isObject(obj)) {\n throw new TypeError('data must be an object');\n }\n\n build(obj);\n\n return formData;\n}\n\nexport default toFormData;\n","'use strict';\n\nimport toFormData from './toFormData.js';\n\n/**\n * It encodes a string by replacing all characters that are not in the unreserved set with\n * their percent-encoded equivalents\n *\n * @param {string} str - The string to encode.\n *\n * @returns {string} The encoded string.\n */\nfunction encode(str) {\n const charMap = {\n '!': '%21',\n \"'\": '%27',\n '(': '%28',\n ')': '%29',\n '~': '%7E',\n '%20': '+',\n '%00': '\\x00'\n };\n return encodeURIComponent(str).replace(/[!'()~]|%20|%00/g, function replacer(match) {\n return charMap[match];\n });\n}\n\n/**\n * It takes a params object and converts it to a FormData object\n *\n * @param {Object<string, any>} params - The parameters to be converted to a FormData object.\n * @param {Object<string, any>} options - The options object passed to the Axios constructor.\n *\n * @returns {void}\n */\nfunction AxiosURLSearchParams(params, options) {\n this._pairs = [];\n\n params && toFormData(params, this, options);\n}\n\nconst prototype = AxiosURLSearchParams.prototype;\n\nprototype.append = function append(name, value) {\n this._pairs.push([name, value]);\n};\n\nprototype.toString = function toString(encoder) {\n const _encode = encoder ? function(value) {\n return encoder.call(this, value, encode);\n } : encode;\n\n return this._pairs.map(function each(pair) {\n return _encode(pair[0]) + '=' + _encode(pair[1]);\n }, '').join('&');\n};\n\nexport default AxiosURLSearchParams;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosURLSearchParams from '../helpers/AxiosURLSearchParams.js';\n\n/**\n * It replaces all instances of the characters `:`, `$`, `,`, `+`, `[`, and `]` with their\n * URI encoded counterparts\n *\n * @param {string} val The value to be encoded.\n *\n * @returns {string} The encoded value.\n */\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @param {?(object|Function)} options\n *\n * @returns {string} The formatted url\n */\nexport default function buildURL(url, params, options) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n \n const _encode = options && options.encode || encode;\n\n if (utils.isFunction(options)) {\n options = {\n serialize: options\n };\n } \n\n const serializeFn = options && options.serialize;\n\n let serializedParams;\n\n if (serializeFn) {\n serializedParams = serializeFn(params, options);\n } else {\n serializedParams = utils.isURLSearchParams(params) ?\n params.toString() :\n new AxiosURLSearchParams(params, options).toString(_encode);\n }\n\n if (serializedParams) {\n const hashmarkIndex = url.indexOf(\"#\");\n\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\nclass InterceptorManager {\n constructor() {\n this.handlers = [];\n }\n\n /**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\n use(fulfilled, rejected, options) {\n this.handlers.push({\n fulfilled,\n rejected,\n synchronous: options ? options.synchronous : false,\n runWhen: options ? options.runWhen : null\n });\n return this.handlers.length - 1;\n }\n\n /**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n *\n * @returns {Boolean} `true` if the interceptor was removed, `false` otherwise\n */\n eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n }\n\n /**\n * Clear all interceptors from the stack\n *\n * @returns {void}\n */\n clear() {\n if (this.handlers) {\n this.handlers = [];\n }\n }\n\n /**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n *\n * @returns {void}\n */\n forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n }\n}\n\nexport default InterceptorManager;\n","'use strict';\n\nexport default {\n silentJSONParsing: true,\n forcedJSONParsing: true,\n clarifyTimeoutError: false\n};\n","'use strict';\n\nimport AxiosURLSearchParams from '../../../helpers/AxiosURLSearchParams.js';\nexport default typeof URLSearchParams !== 'undefined' ? URLSearchParams : AxiosURLSearchParams;\n","'use strict';\n\nexport default typeof FormData !== 'undefined' ? FormData : null;\n","'use strict'\n\nexport default typeof Blob !== 'undefined' ? Blob : null\n","import URLSearchParams from './classes/URLSearchParams.js'\nimport FormData from './classes/FormData.js'\nimport Blob from './classes/Blob.js'\n\nexport default {\n isBrowser: true,\n classes: {\n URLSearchParams,\n FormData,\n Blob\n },\n protocols: ['http', 'https', 'file', 'blob', 'url', 'data']\n};\n","const hasBrowserEnv = typeof window !== 'undefined' && typeof document !== 'undefined';\n\nconst _navigator = typeof navigator === 'object' && navigator || undefined;\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n *\n * @returns {boolean}\n */\nconst hasStandardBrowserEnv = hasBrowserEnv &&\n (!_navigator || ['ReactNative', 'NativeScript', 'NS'].indexOf(_navigator.product) < 0);\n\n/**\n * Determine if we're running in a standard browser webWorker environment\n *\n * Although the `isStandardBrowserEnv` method indicates that\n * `allows axios to run in a web worker`, the WebWorker will still be\n * filtered out due to its judgment standard\n * `typeof window !== 'undefined' && typeof document !== 'undefined'`.\n * This leads to a problem when axios post `FormData` in webWorker\n */\nconst hasStandardBrowserWebWorkerEnv = (() => {\n return (\n typeof WorkerGlobalScope !== 'undefined' &&\n // eslint-disable-next-line no-undef\n self instanceof WorkerGlobalScope &&\n typeof self.importScripts === 'function'\n );\n})();\n\nconst origin = hasBrowserEnv && window.location.href || 'http://localhost';\n\nexport {\n hasBrowserEnv,\n hasStandardBrowserWebWorkerEnv,\n hasStandardBrowserEnv,\n _navigator as navigator,\n origin\n}\n","import platform from './node/index.js';\nimport * as utils from './common/utils.js';\n\nexport default {\n ...utils,\n ...platform\n}\n","'use strict';\n\nimport utils from '../utils.js';\nimport toFormData from './toFormData.js';\nimport platform from '../platform/index.js';\n\nexport default function toURLEncodedForm(data, options) {\n return toFormData(data, new platform.classes.URLSearchParams(), {\n visitor: function(value, key, path, helpers) {\n if (platform.isNode && utils.isBuffer(value)) {\n this.append(key, value.toString('base64'));\n return false;\n }\n\n return helpers.defaultVisitor.apply(this, arguments);\n },\n ...options\n });\n}\n","'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * It takes a string like `foo[x][y][z]` and returns an array like `['foo', 'x', 'y', 'z']\n *\n * @param {string} name - The name of the property to get.\n *\n * @returns An array of strings.\n */\nfunction parsePropPath(name) {\n // foo[x][y][z]\n // foo.x.y.z\n // foo-x-y-z\n // foo x y z\n return utils.matchAll(/\\w+|\\[(\\w*)]/g, name).map(match => {\n return match[0] === '[]' ? '' : match[1] || match[0];\n });\n}\n\n/**\n * Convert an array to an object.\n *\n * @param {Array<any>} arr - The array to convert to an object.\n *\n * @returns An object with the same keys and values as the array.\n */\nfunction arrayToObject(arr) {\n const obj = {};\n const keys = Object.keys(arr);\n let i;\n const len = keys.length;\n let key;\n for (i = 0; i < len; i++) {\n key = keys[i];\n obj[key] = arr[key];\n }\n return obj;\n}\n\n/**\n * It takes a FormData object and returns a JavaScript object\n *\n * @param {string} formData The FormData object to convert to JSON.\n *\n * @returns {Object<string, any> | null} The converted object.\n */\nfunction formDataToJSON(formData) {\n function buildPath(path, value, target, index) {\n let name = path[index++];\n\n if (name === '__proto__') return true;\n\n const isNumericKey = Number.isFinite(+name);\n const isLast = index >= path.length;\n name = !name && utils.isArray(target) ? target.length : name;\n\n if (isLast) {\n if (utils.hasOwnProp(target, name)) {\n target[name] = [target[name], value];\n } else {\n target[name] = value;\n }\n\n return !isNumericKey;\n }\n\n if (!target[name] || !utils.isObject(target[name])) {\n target[name] = [];\n }\n\n const result = buildPath(path, value, target[name], index);\n\n if (result && utils.isArray(target[name])) {\n target[name] = arrayToObject(target[name]);\n }\n\n return !isNumericKey;\n }\n\n if (utils.isFormData(formData) && utils.isFunction(formData.entries)) {\n const obj = {};\n\n utils.forEachEntry(formData, (name, value) => {\n buildPath(parsePropPath(name), value, obj, 0);\n });\n\n return obj;\n }\n\n return null;\n}\n\nexport default formDataToJSON;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\nimport transitionalDefaults from './transitional.js';\nimport toFormData from '../helpers/toFormData.js';\nimport toURLEncodedForm from '../helpers/toURLEncodedForm.js';\nimport platform from '../platform/index.js';\nimport formDataToJSON from '../helpers/formDataToJSON.js';\n\n/**\n * It takes a string, tries to parse it, and if it fails, it returns the stringified version\n * of the input\n *\n * @param {any} rawValue - The value to be stringified.\n * @param {Function} parser - A function that parses a string into a JavaScript object.\n * @param {Function} encoder - A function that takes a value and returns a string.\n *\n * @returns {string} A stringified version of the rawValue.\n */\nfunction stringifySafely(rawValue, parser, encoder) {\n if (utils.isString(rawValue)) {\n try {\n (parser || JSON.parse)(rawValue);\n return utils.trim(rawValue);\n } catch (e) {\n if (e.name !== 'SyntaxError') {\n throw e;\n }\n }\n }\n\n return (encoder || JSON.stringify)(rawValue);\n}\n\nconst defaults = {\n\n transitional: transitionalDefaults,\n\n adapter: ['xhr', 'http', 'fetch'],\n\n transformRequest: [function transformRequest(data, headers) {\n const contentType = headers.getContentType() || '';\n const hasJSONContentType = contentType.indexOf('application/json') > -1;\n const isObjectPayload = utils.isObject(data);\n\n if (isObjectPayload && utils.isHTMLForm(data)) {\n data = new FormData(data);\n }\n\n const isFormData = utils.isFormData(data);\n\n if (isFormData) {\n return hasJSONContentType ? JSON.stringify(formDataToJSON(data)) : data;\n }\n\n if (utils.isArrayBuffer(data) ||\n utils.isBuffer(data) ||\n utils.isStream(data) ||\n utils.isFile(data) ||\n utils.isBlob(data) ||\n utils.isReadableStream(data)\n ) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n headers.setContentType('application/x-www-form-urlencoded;charset=utf-8', false);\n return data.toString();\n }\n\n let isFileList;\n\n if (isObjectPayload) {\n if (contentType.indexOf('application/x-www-form-urlencoded') > -1) {\n return toURLEncodedForm(data, this.formSerializer).toString();\n }\n\n if ((isFileList = utils.isFileList(data)) || contentType.indexOf('multipart/form-data') > -1) {\n const _FormData = this.env && this.env.FormData;\n\n return toFormData(\n isFileList ? {'files[]': data} : data,\n _FormData && new _FormData(),\n this.formSerializer\n );\n }\n }\n\n if (isObjectPayload || hasJSONContentType ) {\n headers.setContentType('application/json', false);\n return stringifySafely(data);\n }\n\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n const transitional = this.transitional || defaults.transitional;\n const forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n const JSONRequested = this.responseType === 'json';\n\n if (utils.isResponse(data) || utils.isReadableStream(data)) {\n return data;\n }\n\n if (data && utils.isString(data) && ((forcedJSONParsing && !this.responseType) || JSONRequested)) {\n const silentJSONParsing = transitional && transitional.silentJSONParsing;\n const strictJSONParsing = !silentJSONParsing && JSONRequested;\n\n try {\n return JSON.parse(data, this.parseReviver);\n } catch (e) {\n if (strictJSONParsing) {\n if (e.name === 'SyntaxError') {\n throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, this.response);\n }\n throw e;\n }\n }\n }\n\n return data;\n }],\n\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n maxBodyLength: -1,\n\n env: {\n FormData: platform.classes.FormData,\n Blob: platform.classes.Blob\n },\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n },\n\n headers: {\n common: {\n 'Accept': 'application/json, text/plain, */*',\n 'Content-Type': undefined\n }\n }\n};\n\nutils.forEach(['delete', 'get', 'head', 'post', 'put', 'patch'], (method) => {\n defaults.headers[method] = {};\n});\n\nexport default defaults;\n","'use strict';\n\nimport utils from './../utils.js';\n\n// RawAxiosHeaders whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nconst ignoreDuplicateOf = utils.toObjectSet([\n 'age', 'authorization', 'content-length', 'content-type', 'etag',\n 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n 'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n 'referer', 'retry-after', 'user-agent'\n]);\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} rawHeaders Headers needing to be parsed\n *\n * @returns {Object} Headers parsed into an object\n */\nexport default rawHeaders => {\n const parsed = {};\n let key;\n let val;\n let i;\n\n rawHeaders && rawHeaders.split('\\n').forEach(function parser(line) {\n i = line.indexOf(':');\n key = line.substring(0, i).trim().toLowerCase();\n val = line.substring(i + 1).trim();\n\n if (!key || (parsed[key] && ignoreDuplicateOf[key])) {\n return;\n }\n\n if (key === 'set-cookie') {\n if (parsed[key]) {\n parsed[key].push(val);\n } else {\n parsed[key] = [val];\n }\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n });\n\n return parsed;\n};\n","'use strict';\n\nimport utils from '../utils.js';\nimport parseHeaders from '../helpers/parseHeaders.js';\n\nconst $internals = Symbol('internals');\n\nfunction normalizeHeader(header) {\n return header && String(header).trim().toLowerCase();\n}\n\nfunction normalizeValue(value) {\n if (value === false || value == null) {\n return value;\n }\n\n return utils.isArray(value) ? value.map(normalizeValue) : String(value);\n}\n\nfunction parseTokens(str) {\n const tokens = Object.create(null);\n const tokensRE = /([^\\s,;=]+)\\s*(?:=\\s*([^,;]+))?/g;\n let match;\n\n while ((match = tokensRE.exec(str))) {\n tokens[match[1]] = match[2];\n }\n\n return tokens;\n}\n\nconst isValidHeaderName = (str) => /^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(str.trim());\n\nfunction matchHeaderValue(context, value, header, filter, isHeaderNameFilter) {\n if (utils.isFunction(filter)) {\n return filter.call(this, value, header);\n }\n\n if (isHeaderNameFilter) {\n value = header;\n }\n\n if (!utils.isString(value)) return;\n\n if (utils.isString(filter)) {\n return value.indexOf(filter) !== -1;\n }\n\n if (utils.isRegExp(filter)) {\n return filter.test(value);\n }\n}\n\nfunction formatHeader(header) {\n return header.trim()\n .toLowerCase().replace(/([a-z\\d])(\\w*)/g, (w, char, str) => {\n return char.toUpperCase() + str;\n });\n}\n\nfunction buildAccessors(obj, header) {\n const accessorName = utils.toCamelCase(' ' + header);\n\n ['get', 'set', 'has'].forEach(methodName => {\n Object.defineProperty(obj, methodName + accessorName, {\n value: function(arg1, arg2, arg3) {\n return this[methodName].call(this, header, arg1, arg2, arg3);\n },\n configurable: true\n });\n });\n}\n\nclass AxiosHeaders {\n constructor(headers) {\n headers && this.set(headers);\n }\n\n set(header, valueOrRewrite, rewrite) {\n const self = this;\n\n function setHeader(_value, _header, _rewrite) {\n const lHeader = normalizeHeader(_header);\n\n if (!lHeader) {\n throw new Error('header name must be a non-empty string');\n }\n\n const key = utils.findKey(self, lHeader);\n\n if(!key || self[key] === undefined || _rewrite === true || (_rewrite === undefined && self[key] !== false)) {\n self[key || _header] = normalizeValue(_value);\n }\n }\n\n const setHeaders = (headers, _rewrite) =>\n utils.forEach(headers, (_value, _header) => setHeader(_value, _header, _rewrite));\n\n if (utils.isPlainObject(header) || header instanceof this.constructor) {\n setHeaders(header, valueOrRewrite)\n } else if(utils.isString(header) && (header = header.trim()) && !isValidHeaderName(header)) {\n setHeaders(parseHeaders(header), valueOrRewrite);\n } else if (utils.isObject(header) && utils.isIterable(header)) {\n let obj = {}, dest, key;\n for (const entry of header) {\n if (!utils.isArray(entry)) {\n throw TypeError('Object iterator must return a key-value pair');\n }\n\n obj[key = entry[0]] = (dest = obj[key]) ?\n (utils.isArray(dest) ? [...dest, entry[1]] : [dest, entry[1]]) : entry[1];\n }\n\n setHeaders(obj, valueOrRewrite)\n } else {\n header != null && setHeader(valueOrRewrite, header, rewrite);\n }\n\n return this;\n }\n\n get(header, parser) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils.findKey(this, header);\n\n if (key) {\n const value = this[key];\n\n if (!parser) {\n return value;\n }\n\n if (parser === true) {\n return parseTokens(value);\n }\n\n if (utils.isFunction(parser)) {\n return parser.call(this, value, key);\n }\n\n if (utils.isRegExp(parser)) {\n return parser.exec(value);\n }\n\n throw new TypeError('parser must be boolean|regexp|function');\n }\n }\n }\n\n has(header, matcher) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils.findKey(this, header);\n\n return !!(key && this[key] !== undefined && (!matcher || matchHeaderValue(this, this[key], key, matcher)));\n }\n\n return false;\n }\n\n delete(header, matcher) {\n const self = this;\n let deleted = false;\n\n function deleteHeader(_header) {\n _header = normalizeHeader(_header);\n\n if (_header) {\n const key = utils.findKey(self, _header);\n\n if (key && (!matcher || matchHeaderValue(self, self[key], key, matcher))) {\n delete self[key];\n\n deleted = true;\n }\n }\n }\n\n if (utils.isArray(header)) {\n header.forEach(deleteHeader);\n } else {\n deleteHeader(header);\n }\n\n return deleted;\n }\n\n clear(matcher) {\n const keys = Object.keys(this);\n let i = keys.length;\n let deleted = false;\n\n while (i--) {\n const key = keys[i];\n if(!matcher || matchHeaderValue(this, this[key], key, matcher, true)) {\n delete this[key];\n deleted = true;\n }\n }\n\n return deleted;\n }\n\n normalize(format) {\n const self = this;\n const headers = {};\n\n utils.forEach(this, (value, header) => {\n const key = utils.findKey(headers, header);\n\n if (key) {\n self[key] = normalizeValue(value);\n delete self[header];\n return;\n }\n\n const normalized = format ? formatHeader(header) : String(header).trim();\n\n if (normalized !== header) {\n delete self[header];\n }\n\n self[normalized] = normalizeValue(value);\n\n headers[normalized] = true;\n });\n\n return this;\n }\n\n concat(...targets) {\n return this.constructor.concat(this, ...targets);\n }\n\n toJSON(asStrings) {\n const obj = Object.create(null);\n\n utils.forEach(this, (value, header) => {\n value != null && value !== false && (obj[header] = asStrings && utils.isArray(value) ? value.join(', ') : value);\n });\n\n return obj;\n }\n\n [Symbol.iterator]() {\n return Object.entries(this.toJSON())[Symbol.iterator]();\n }\n\n toString() {\n return Object.entries(this.toJSON()).map(([header, value]) => header + ': ' + value).join('\\n');\n }\n\n getSetCookie() {\n return this.get(\"set-cookie\") || [];\n }\n\n get [Symbol.toStringTag]() {\n return 'AxiosHeaders';\n }\n\n static from(thing) {\n return thing instanceof this ? thing : new this(thing);\n }\n\n static concat(first, ...targets) {\n const computed = new this(first);\n\n targets.forEach((target) => computed.set(target));\n\n return computed;\n }\n\n static accessor(header) {\n const internals = this[$internals] = (this[$internals] = {\n accessors: {}\n });\n\n const accessors = internals.accessors;\n const prototype = this.prototype;\n\n function defineAccessor(_header) {\n const lHeader = normalizeHeader(_header);\n\n if (!accessors[lHeader]) {\n buildAccessors(prototype, _header);\n accessors[lHeader] = true;\n }\n }\n\n utils.isArray(header) ? header.forEach(defineAccessor) : defineAccessor(header);\n\n return this;\n }\n}\n\nAxiosHeaders.accessor(['Content-Type', 'Content-Length', 'Accept', 'Accept-Encoding', 'User-Agent', 'Authorization']);\n\n// reserved names hotfix\nutils.reduceDescriptors(AxiosHeaders.prototype, ({value}, key) => {\n let mapped = key[0].toUpperCase() + key.slice(1); // map `set` => `Set`\n return {\n get: () => value,\n set(headerValue) {\n this[mapped] = headerValue;\n }\n }\n});\n\nutils.freezeMethods(AxiosHeaders);\n\nexport default AxiosHeaders;\n","'use strict';\n\nimport utils from './../utils.js';\nimport defaults from '../defaults/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Array|Function} fns A single function or Array of functions\n * @param {?Object} response The response object\n *\n * @returns {*} The resulting transformed data\n */\nexport default function transformData(fns, response) {\n const config = this || defaults;\n const context = response || config;\n const headers = AxiosHeaders.from(context.headers);\n let data = context.data;\n\n utils.forEach(fns, function transform(fn) {\n data = fn.call(config, data, headers.normalize(), response ? response.status : undefined);\n });\n\n headers.normalize();\n\n return data;\n}\n","'use strict';\n\nexport default function isCancel(value) {\n return !!(value && value.__CANCEL__);\n}\n","'use strict';\n\nimport AxiosError from '../core/AxiosError.js';\nimport utils from '../utils.js';\n\n/**\n * A `CanceledError` is an object that is thrown when an operation is canceled.\n *\n * @param {string=} message The message.\n * @param {Object=} config The config.\n * @param {Object=} request The request.\n *\n * @returns {CanceledError} The created error.\n */\nfunction CanceledError(message, config, request) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n AxiosError.call(this, message == null ? 'canceled' : message, AxiosError.ERR_CANCELED, config, request);\n this.name = 'CanceledError';\n}\n\nutils.inherits(CanceledError, AxiosError, {\n __CANCEL__: true\n});\n\nexport default CanceledError;\n","'use strict';\n\nimport AxiosError from './AxiosError.js';\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n *\n * @returns {object} The response.\n */\nexport default function settle(resolve, reject, response) {\n const validateStatus = response.config.validateStatus;\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(new AxiosError(\n 'Request failed with status code ' + response.status,\n [AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4],\n response.config,\n response.request,\n response\n ));\n }\n}\n","'use strict';\n\nexport default function parseProtocol(url) {\n const match = /^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(url);\n return match && match[1] || '';\n}\n","'use strict';\n\n/**\n * Calculate data maxRate\n * @param {Number} [samplesCount= 10]\n * @param {Number} [min= 1000]\n * @returns {Function}\n */\nfunction speedometer(samplesCount, min) {\n samplesCount = samplesCount || 10;\n const bytes = new Array(samplesCount);\n const timestamps = new Array(samplesCount);\n let head = 0;\n let tail = 0;\n let firstSampleTS;\n\n min = min !== undefined ? min : 1000;\n\n return function push(chunkLength) {\n const now = Date.now();\n\n const startedAt = timestamps[tail];\n\n if (!firstSampleTS) {\n firstSampleTS = now;\n }\n\n bytes[head] = chunkLength;\n timestamps[head] = now;\n\n let i = tail;\n let bytesCount = 0;\n\n while (i !== head) {\n bytesCount += bytes[i++];\n i = i % samplesCount;\n }\n\n head = (head + 1) % samplesCount;\n\n if (head === tail) {\n tail = (tail + 1) % samplesCount;\n }\n\n if (now - firstSampleTS < min) {\n return;\n }\n\n const passed = startedAt && now - startedAt;\n\n return passed ? Math.round(bytesCount * 1000 / passed) : undefined;\n };\n}\n\nexport default speedometer;\n","/**\n * Throttle decorator\n * @param {Function} fn\n * @param {Number} freq\n * @return {Function}\n */\nfunction throttle(fn, freq) {\n let timestamp = 0;\n let threshold = 1000 / freq;\n let lastArgs;\n let timer;\n\n const invoke = (args, now = Date.now()) => {\n timestamp = now;\n lastArgs = null;\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n fn(...args);\n }\n\n const throttled = (...args) => {\n const now = Date.now();\n const passed = now - timestamp;\n if ( passed >= threshold) {\n invoke(args, now);\n } else {\n lastArgs = args;\n if (!timer) {\n timer = setTimeout(() => {\n timer = null;\n invoke(lastArgs)\n }, threshold - passed);\n }\n }\n }\n\n const flush = () => lastArgs && invoke(lastArgs);\n\n return [throttled, flush];\n}\n\nexport default throttle;\n","import speedometer from \"./speedometer.js\";\nimport throttle from \"./throttle.js\";\nimport utils from \"../utils.js\";\n\nexport const progressEventReducer = (listener, isDownloadStream, freq = 3) => {\n let bytesNotified = 0;\n const _speedometer = speedometer(50, 250);\n\n return throttle(e => {\n const loaded = e.loaded;\n const total = e.lengthComputable ? e.total : undefined;\n const progressBytes = loaded - bytesNotified;\n const rate = _speedometer(progressBytes);\n const inRange = loaded <= total;\n\n bytesNotified = loaded;\n\n const data = {\n loaded,\n total,\n progress: total ? (loaded / total) : undefined,\n bytes: progressBytes,\n rate: rate ? rate : undefined,\n estimated: rate && total && inRange ? (total - loaded) / rate : undefined,\n event: e,\n lengthComputable: total != null,\n [isDownloadStream ? 'download' : 'upload']: true\n };\n\n listener(data);\n }, freq);\n}\n\nexport const progressEventDecorator = (total, throttled) => {\n const lengthComputable = total != null;\n\n return [(loaded) => throttled[0]({\n lengthComputable,\n total,\n loaded\n }), throttled[1]];\n}\n\nexport const asyncDecorator = (fn) => (...args) => utils.asap(() => fn(...args));\n","import platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ? ((origin, isMSIE) => (url) => {\n url = new URL(url, platform.origin);\n\n return (\n origin.protocol === url.protocol &&\n origin.host === url.host &&\n (isMSIE || origin.port === url.port)\n );\n})(\n new URL(platform.origin),\n platform.navigator && /(msie|trident)/i.test(platform.navigator.userAgent)\n) : () => true;\n","import utils from './../utils.js';\nimport platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ?\n\n // Standard browser envs support document.cookie\n {\n write(name, value, expires, path, domain, secure) {\n const cookie = [name + '=' + encodeURIComponent(value)];\n\n utils.isNumber(expires) && cookie.push('expires=' + new Date(expires).toGMTString());\n\n utils.isString(path) && cookie.push('path=' + path);\n\n utils.isString(domain) && cookie.push('domain=' + domain);\n\n secure === true && cookie.push('secure');\n\n document.cookie = cookie.join('; ');\n },\n\n read(name) {\n const match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return (match ? decodeURIComponent(match[3]) : null);\n },\n\n remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n }\n\n :\n\n // Non-standard browser env (web workers, react-native) lack needed support.\n {\n write() {},\n read() {\n return null;\n },\n remove() {}\n };\n\n","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n *\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nexport default function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"<scheme>://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\n}\n","'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n *\n * @returns {string} The combined URL\n */\nexport default function combineURLs(baseURL, relativeURL) {\n return relativeURL\n ? baseURL.replace(/\\/?\\/$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n : baseURL;\n}\n","'use strict';\n\nimport isAbsoluteURL from '../helpers/isAbsoluteURL.js';\nimport combineURLs from '../helpers/combineURLs.js';\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n *\n * @returns {string} The combined full path\n */\nexport default function buildFullPath(baseURL, requestedURL, allowAbsoluteUrls) {\n let isRelativeUrl = !isAbsoluteURL(requestedURL);\n if (baseURL && (isRelativeUrl || allowAbsoluteUrls == false)) {\n return combineURLs(baseURL, requestedURL);\n }\n return requestedURL;\n}\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosHeaders from \"./AxiosHeaders.js\";\n\nconst headersToObject = (thing) => thing instanceof AxiosHeaders ? { ...thing } : thing;\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n *\n * @returns {Object} New object resulting from merging config2 to config1\n */\nexport default function mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n const config = {};\n\n function getMergedValue(target, source, prop, caseless) {\n if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n return utils.merge.call({caseless}, target, source);\n } else if (utils.isPlainObject(source)) {\n return utils.merge({}, source);\n } else if (utils.isArray(source)) {\n return source.slice();\n }\n return source;\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDeepProperties(a, b, prop , caseless) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(a, b, prop , caseless);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a, prop , caseless);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function valueFromConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function defaultToConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDirectKeys(a, b, prop) {\n if (prop in config2) {\n return getMergedValue(a, b);\n } else if (prop in config1) {\n return getMergedValue(undefined, a);\n }\n }\n\n const mergeMap = {\n url: valueFromConfig2,\n method: valueFromConfig2,\n data: valueFromConfig2,\n baseURL: defaultToConfig2,\n transformRequest: defaultToConfig2,\n transformResponse: defaultToConfig2,\n paramsSerializer: defaultToConfig2,\n timeout: defaultToConfig2,\n timeoutMessage: defaultToConfig2,\n withCredentials: defaultToConfig2,\n withXSRFToken: defaultToConfig2,\n adapter: defaultToConfig2,\n responseType: defaultToConfig2,\n xsrfCookieName: defaultToConfig2,\n xsrfHeaderName: defaultToConfig2,\n onUploadProgress: defaultToConfig2,\n onDownloadProgress: defaultToConfig2,\n decompress: defaultToConfig2,\n maxContentLength: defaultToConfig2,\n maxBodyLength: defaultToConfig2,\n beforeRedirect: defaultToConfig2,\n transport: defaultToConfig2,\n httpAgent: defaultToConfig2,\n httpsAgent: defaultToConfig2,\n cancelToken: defaultToConfig2,\n socketPath: defaultToConfig2,\n responseEncoding: defaultToConfig2,\n validateStatus: mergeDirectKeys,\n headers: (a, b , prop) => mergeDeepProperties(headersToObject(a), headersToObject(b),prop, true)\n };\n\n utils.forEach(Object.keys({...config1, ...config2}), function computeConfigValue(prop) {\n const merge = mergeMap[prop] || mergeDeepProperties;\n const configValue = merge(config1[prop], config2[prop], prop);\n (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);\n });\n\n return config;\n}\n","import platform from \"../platform/index.js\";\nimport utils from \"../utils.js\";\nimport isURLSameOrigin from \"./isURLSameOrigin.js\";\nimport cookies from \"./cookies.js\";\nimport buildFullPath from \"../core/buildFullPath.js\";\nimport mergeConfig from \"../core/mergeConfig.js\";\nimport AxiosHeaders from \"../core/AxiosHeaders.js\";\nimport buildURL from \"./buildURL.js\";\n\nexport default (config) => {\n const newConfig = mergeConfig({}, config);\n\n let { data, withXSRFToken, xsrfHeaderName, xsrfCookieName, headers, auth } = newConfig;\n\n newConfig.headers = headers = AxiosHeaders.from(headers);\n\n newConfig.url = buildURL(buildFullPath(newConfig.baseURL, newConfig.url, newConfig.allowAbsoluteUrls), config.params, config.paramsSerializer);\n\n // HTTP basic authentication\n if (auth) {\n headers.set('Authorization', 'Basic ' +\n btoa((auth.username || '') + ':' + (auth.password ? unescape(encodeURIComponent(auth.password)) : ''))\n );\n }\n\n if (utils.isFormData(data)) {\n if (platform.hasStandardBrowserEnv || platform.hasStandardBrowserWebWorkerEnv) {\n headers.setContentType(undefined); // browser handles it\n } else if (utils.isFunction(data.getHeaders)) {\n // Node.js FormData (like form-data package)\n const formHeaders = data.getHeaders();\n // Only set safe headers to avoid overwriting security headers\n const allowedHeaders = ['content-type', 'content-length'];\n Object.entries(formHeaders).forEach(([key, val]) => {\n if (allowedHeaders.includes(key.toLowerCase())) {\n headers.set(key, val);\n }\n });\n }\n } \n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n\n if (platform.hasStandardBrowserEnv) {\n withXSRFToken && utils.isFunction(withXSRFToken) && (withXSRFToken = withXSRFToken(newConfig));\n\n if (withXSRFToken || (withXSRFToken !== false && isURLSameOrigin(newConfig.url))) {\n // Add xsrf header\n const xsrfValue = xsrfHeaderName && xsrfCookieName && cookies.read(xsrfCookieName);\n\n if (xsrfValue) {\n headers.set(xsrfHeaderName, xsrfValue);\n }\n }\n }\n\n return newConfig;\n}\n\n","import utils from './../utils.js';\nimport settle from './../core/settle.js';\nimport transitionalDefaults from '../defaults/transitional.js';\nimport AxiosError from '../core/AxiosError.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport parseProtocol from '../helpers/parseProtocol.js';\nimport platform from '../platform/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport {progressEventReducer} from '../helpers/progressEventReducer.js';\nimport resolveConfig from \"../helpers/resolveConfig.js\";\n\nconst isXHRAdapterSupported = typeof XMLHttpRequest !== 'undefined';\n\nexport default isXHRAdapterSupported && function (config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n const _config = resolveConfig(config);\n let requestData = _config.data;\n const requestHeaders = AxiosHeaders.from(_config.headers).normalize();\n let {responseType, onUploadProgress, onDownloadProgress} = _config;\n let onCanceled;\n let uploadThrottled, downloadThrottled;\n let flushUpload, flushDownload;\n\n function done() {\n flushUpload && flushUpload(); // flush events\n flushDownload && flushDownload(); // flush events\n\n _config.cancelToken && _config.cancelToken.unsubscribe(onCanceled);\n\n _config.signal && _config.signal.removeEventListener('abort', onCanceled);\n }\n\n let request = new XMLHttpRequest();\n\n request.open(_config.method.toUpperCase(), _config.url, true);\n\n // Set the request timeout in MS\n request.timeout = _config.timeout;\n\n function onloadend() {\n if (!request) {\n return;\n }\n // Prepare the response\n const responseHeaders = AxiosHeaders.from(\n 'getAllResponseHeaders' in request && request.getAllResponseHeaders()\n );\n const responseData = !responseType || responseType === 'text' || responseType === 'json' ?\n request.responseText : request.response;\n const response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config,\n request\n };\n\n settle(function _resolve(value) {\n resolve(value);\n done();\n }, function _reject(err) {\n reject(err);\n done();\n }, response);\n\n // Clean up request\n request = null;\n }\n\n if ('onloadend' in request) {\n // Use onloadend if available\n request.onloadend = onloadend;\n } else {\n // Listen for ready state to emulate onloadend\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n // readystate handler is calling before onerror or ontimeout handlers,\n // so we should call onloadend on the next 'tick'\n setTimeout(onloadend);\n };\n }\n\n // Handle browser request cancellation (as opposed to a manual cancellation)\n request.onabort = function handleAbort() {\n if (!request) {\n return;\n }\n\n reject(new AxiosError('Request aborted', AxiosError.ECONNABORTED, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError(event) {\n // Browsers deliver a ProgressEvent in XHR onerror\n // (message may be empty; when present, surface it)\n // See https://developer.mozilla.org/docs/Web/API/XMLHttpRequest/error_event\n const msg = event && event.message ? event.message : 'Network Error';\n const err = new AxiosError(msg, AxiosError.ERR_NETWORK, config, request);\n // attach the underlying event for consumers who want details\n err.event = event || null;\n reject(err);\n request = null;\n };\n \n // Handle timeout\n request.ontimeout = function handleTimeout() {\n let timeoutErrorMessage = _config.timeout ? 'timeout of ' + _config.timeout + 'ms exceeded' : 'timeout exceeded';\n const transitional = _config.transitional || transitionalDefaults;\n if (_config.timeoutErrorMessage) {\n timeoutErrorMessage = _config.timeoutErrorMessage;\n }\n reject(new AxiosError(\n timeoutErrorMessage,\n transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,\n config,\n request));\n\n // Clean up request\n request = null;\n };\n\n // Remove Content-Type if data is undefined\n requestData === undefined && requestHeaders.setContentType(null);\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders.toJSON(), function setRequestHeader(val, key) {\n request.setRequestHeader(key, val);\n });\n }\n\n // Add withCredentials to request if needed\n if (!utils.isUndefined(_config.withCredentials)) {\n request.withCredentials = !!_config.withCredentials;\n }\n\n // Add responseType to request if needed\n if (responseType && responseType !== 'json') {\n request.responseType = _config.responseType;\n }\n\n // Handle progress if needed\n if (onDownloadProgress) {\n ([downloadThrottled, flushDownload] = progressEventReducer(onDownloadProgress, true));\n request.addEventListener('progress', downloadThrottled);\n }\n\n // Not all browsers support upload events\n if (onUploadProgress && request.upload) {\n ([uploadThrottled, flushUpload] = progressEventReducer(onUploadProgress));\n\n request.upload.addEventListener('progress', uploadThrottled);\n\n request.upload.addEventListener('loadend', flushUpload);\n }\n\n if (_config.cancelToken || _config.signal) {\n // Handle cancellation\n // eslint-disable-next-line func-names\n onCanceled = cancel => {\n if (!request) {\n return;\n }\n reject(!cancel || cancel.type ? new CanceledError(null, config, request) : cancel);\n request.abort();\n request = null;\n };\n\n _config.cancelToken && _config.cancelToken.subscribe(onCanceled);\n if (_config.signal) {\n _config.signal.aborted ? onCanceled() : _config.signal.addEventListener('abort', onCanceled);\n }\n }\n\n const protocol = parseProtocol(_config.url);\n\n if (protocol && platform.protocols.indexOf(protocol) === -1) {\n reject(new AxiosError('Unsupported protocol ' + protocol + ':', AxiosError.ERR_BAD_REQUEST, config));\n return;\n }\n\n\n // Send the request\n request.send(requestData || null);\n });\n}\n","import CanceledError from \"../cancel/CanceledError.js\";\nimport AxiosError from \"../core/AxiosError.js\";\nimport utils from '../utils.js';\n\nconst composeSignals = (signals, timeout) => {\n const {length} = (signals = signals ? signals.filter(Boolean) : []);\n\n if (timeout || length) {\n let controller = new AbortController();\n\n let aborted;\n\n const onabort = function (reason) {\n if (!aborted) {\n aborted = true;\n unsubscribe();\n const err = reason instanceof Error ? reason : this.reason;\n controller.abort(err instanceof AxiosError ? err : new CanceledError(err instanceof Error ? err.message : err));\n }\n }\n\n let timer = timeout && setTimeout(() => {\n timer = null;\n onabort(new AxiosError(`timeout ${timeout} of ms exceeded`, AxiosError.ETIMEDOUT))\n }, timeout)\n\n const unsubscribe = () => {\n if (signals) {\n timer && clearTimeout(timer);\n timer = null;\n signals.forEach(signal => {\n signal.unsubscribe ? signal.unsubscribe(onabort) : signal.removeEventListener('abort', onabort);\n });\n signals = null;\n }\n }\n\n signals.forEach((signal) => signal.addEventListener('abort', onabort));\n\n const {signal} = controller;\n\n signal.unsubscribe = () => utils.asap(unsubscribe);\n\n return signal;\n }\n}\n\nexport default composeSignals;\n","\nexport const streamChunk = function* (chunk, chunkSize) {\n let len = chunk.byteLength;\n\n if (!chunkSize || len < chunkSize) {\n yield chunk;\n return;\n }\n\n let pos = 0;\n let end;\n\n while (pos < len) {\n end = pos + chunkSize;\n yield chunk.slice(pos, end);\n pos = end;\n }\n}\n\nexport const readBytes = async function* (iterable, chunkSize) {\n for await (const chunk of readStream(iterable)) {\n yield* streamChunk(chunk, chunkSize);\n }\n}\n\nconst readStream = async function* (stream) {\n if (stream[Symbol.asyncIterator]) {\n yield* stream;\n return;\n }\n\n const reader = stream.getReader();\n try {\n for (;;) {\n const {done, value} = await reader.read();\n if (done) {\n break;\n }\n yield value;\n }\n } finally {\n await reader.cancel();\n }\n}\n\nexport const trackStream = (stream, chunkSize, onProgress, onFinish) => {\n const iterator = readBytes(stream, chunkSize);\n\n let bytes = 0;\n let done;\n let _onFinish = (e) => {\n if (!done) {\n done = true;\n onFinish && onFinish(e);\n }\n }\n\n return new ReadableStream({\n async pull(controller) {\n try {\n const {done, value} = await iterator.next();\n\n if (done) {\n _onFinish();\n controller.close();\n return;\n }\n\n let len = value.byteLength;\n if (onProgress) {\n let loadedBytes = bytes += len;\n onProgress(loadedBytes);\n }\n controller.enqueue(new Uint8Array(value));\n } catch (err) {\n _onFinish(err);\n throw err;\n }\n },\n cancel(reason) {\n _onFinish(reason);\n return iterator.return();\n }\n }, {\n highWaterMark: 2\n })\n}\n","import platform from \"../platform/index.js\";\nimport utils from \"../utils.js\";\nimport AxiosError from \"../core/AxiosError.js\";\nimport composeSignals from \"../helpers/composeSignals.js\";\nimport {trackStream} from \"../helpers/trackStream.js\";\nimport AxiosHeaders from \"../core/AxiosHeaders.js\";\nimport {progressEventReducer, progressEventDecorator, asyncDecorator} from \"../helpers/progressEventReducer.js\";\nimport resolveConfig from \"../helpers/resolveConfig.js\";\nimport settle from \"../core/settle.js\";\n\nconst DEFAULT_CHUNK_SIZE = 64 * 1024;\n\nconst {isFunction} = utils;\n\nconst globalFetchAPI = (({Request, Response}) => ({\n Request, Response\n}))(utils.global);\n\nconst {\n ReadableStream, TextEncoder\n} = utils.global;\n\n\nconst test = (fn, ...args) => {\n try {\n return !!fn(...args);\n } catch (e) {\n return false\n }\n}\n\nconst factory = (env) => {\n env = utils.merge.call({\n skipUndefined: true\n }, globalFetchAPI, env);\n\n const {fetch: envFetch, Request, Response} = env;\n const isFetchSupported = envFetch ? isFunction(envFetch) : typeof fetch === 'function';\n const isRequestSupported = isFunction(Request);\n const isResponseSupported = isFunction(Response);\n\n if (!isFetchSupported) {\n return false;\n }\n\n const isReadableStreamSupported = isFetchSupported && isFunction(ReadableStream);\n\n const encodeText = isFetchSupported && (typeof TextEncoder === 'function' ?\n ((encoder) => (str) => encoder.encode(str))(new TextEncoder()) :\n async (str) => new Uint8Array(await new Request(str).arrayBuffer())\n );\n\n const supportsRequestStream = isRequestSupported && isReadableStreamSupported && test(() => {\n let duplexAccessed = false;\n\n const hasContentType = new Request(platform.origin, {\n body: new ReadableStream(),\n method: 'POST',\n get duplex() {\n duplexAccessed = true;\n return 'half';\n },\n }).headers.has('Content-Type');\n\n return duplexAccessed && !hasContentType;\n });\n\n const supportsResponseStream = isResponseSupported && isReadableStreamSupported &&\n test(() => utils.isReadableStream(new Response('').body));\n\n const resolvers = {\n stream: supportsResponseStream && ((res) => res.body)\n };\n\n isFetchSupported && ((() => {\n ['text', 'arrayBuffer', 'blob', 'formData', 'stream'].forEach(type => {\n !resolvers[type] && (resolvers[type] = (res, config) => {\n let method = res && res[type];\n\n if (method) {\n return method.call(res);\n }\n\n throw new AxiosError(`Response type '${type}' is not supported`, AxiosError.ERR_NOT_SUPPORT, config);\n })\n });\n })());\n\n const getBodyLength = async (body) => {\n if (body == null) {\n return 0;\n }\n\n if (utils.isBlob(body)) {\n return body.size;\n }\n\n if (utils.isSpecCompliantForm(body)) {\n const _request = new Request(platform.origin, {\n method: 'POST',\n body,\n });\n return (await _request.arrayBuffer()).byteLength;\n }\n\n if (utils.isArrayBufferView(body) || utils.isArrayBuffer(body)) {\n return body.byteLength;\n }\n\n if (utils.isURLSearchParams(body)) {\n body = body + '';\n }\n\n if (utils.isString(body)) {\n return (await encodeText(body)).byteLength;\n }\n }\n\n const resolveBodyLength = async (headers, body) => {\n const length = utils.toFiniteNumber(headers.getContentLength());\n\n return length == null ? getBodyLength(body) : length;\n }\n\n return async (config) => {\n let {\n url,\n method,\n data,\n signal,\n cancelToken,\n timeout,\n onDownloadProgress,\n onUploadProgress,\n responseType,\n headers,\n withCredentials = 'same-origin',\n fetchOptions\n } = resolveConfig(config);\n\n let _fetch = envFetch || fetch;\n\n responseType = responseType ? (responseType + '').toLowerCase() : 'text';\n\n let composedSignal = composeSignals([signal, cancelToken && cancelToken.toAbortSignal()], timeout);\n\n let request = null;\n\n const unsubscribe = composedSignal && composedSignal.unsubscribe && (() => {\n composedSignal.unsubscribe();\n });\n\n let requestContentLength;\n\n try {\n if (\n onUploadProgress && supportsRequestStream && method !== 'get' && method !== 'head' &&\n (requestContentLength = await resolveBodyLength(headers, data)) !== 0\n ) {\n let _request = new Request(url, {\n method: 'POST',\n body: data,\n duplex: \"half\"\n });\n\n let contentTypeHeader;\n\n if (utils.isFormData(data) && (contentTypeHeader = _request.headers.get('content-type'))) {\n headers.setContentType(contentTypeHeader)\n }\n\n if (_request.body) {\n const [onProgress, flush] = progressEventDecorator(\n requestContentLength,\n progressEventReducer(asyncDecorator(onUploadProgress))\n );\n\n data = trackStream(_request.body, DEFAULT_CHUNK_SIZE, onProgress, flush);\n }\n }\n\n if (!utils.isString(withCredentials)) {\n withCredentials = withCredentials ? 'include' : 'omit';\n }\n\n // Cloudflare Workers throws when credentials are defined\n // see https://github.com/cloudflare/workerd/issues/902\n const isCredentialsSupported = isRequestSupported && \"credentials\" in Request.prototype;\n\n const resolvedOptions = {\n ...fetchOptions,\n signal: composedSignal,\n method: method.toUpperCase(),\n headers: headers.normalize().toJSON(),\n body: data,\n duplex: \"half\",\n credentials: isCredentialsSupported ? withCredentials : undefined\n };\n\n request = isRequestSupported && new Request(url, resolvedOptions);\n\n let response = await (isRequestSupported ? _fetch(request, fetchOptions) : _fetch(url, resolvedOptions));\n\n const isStreamResponse = supportsResponseStream && (responseType === 'stream' || responseType === 'response');\n\n if (supportsResponseStream && (onDownloadProgress || (isStreamResponse && unsubscribe))) {\n const options = {};\n\n ['status', 'statusText', 'headers'].forEach(prop => {\n options[prop] = response[prop];\n });\n\n const responseContentLength = utils.toFiniteNumber(response.headers.get('content-length'));\n\n const [onProgress, flush] = onDownloadProgress && progressEventDecorator(\n responseContentLength,\n progressEventReducer(asyncDecorator(onDownloadProgress), true)\n ) || [];\n\n response = new Response(\n trackStream(response.body, DEFAULT_CHUNK_SIZE, onProgress, () => {\n flush && flush();\n unsubscribe && unsubscribe();\n }),\n options\n );\n }\n\n responseType = responseType || 'text';\n\n let responseData = await resolvers[utils.findKey(resolvers, responseType) || 'text'](response, config);\n\n !isStreamResponse && unsubscribe && unsubscribe();\n\n return await new Promise((resolve, reject) => {\n settle(resolve, reject, {\n data: responseData,\n headers: AxiosHeaders.from(response.headers),\n status: response.status,\n statusText: response.statusText,\n config,\n request\n })\n })\n } catch (err) {\n unsubscribe && unsubscribe();\n\n if (err && err.name === 'TypeError' && /Load failed|fetch/i.test(err.message)) {\n throw Object.assign(\n new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request),\n {\n cause: err.cause || err\n }\n )\n }\n\n throw AxiosError.from(err, err && err.code, config, request);\n }\n }\n}\n\nconst seedCache = new Map();\n\nexport const getFetch = (config) => {\n let env = config ? config.env : {};\n const {fetch, Request, Response} = env;\n const seeds = [\n Request, Response, fetch\n ];\n\n let len = seeds.length, i = len,\n seed, target, map = seedCache;\n\n while (i--) {\n seed = seeds[i];\n target = map.get(seed);\n\n target === undefined && map.set(seed, target = (i ? new Map() : factory(env)))\n\n map = target;\n }\n\n return target;\n};\n\nconst adapter = getFetch();\n\nexport default adapter;\n","import utils from '../utils.js';\nimport httpAdapter from './http.js';\nimport xhrAdapter from './xhr.js';\nimport * as fetchAdapter from './fetch.js';\nimport AxiosError from \"../core/AxiosError.js\";\n\nconst knownAdapters = {\n http: httpAdapter,\n xhr: xhrAdapter,\n fetch: {\n get: fetchAdapter.getFetch,\n }\n}\n\nutils.forEach(knownAdapters, (fn, value) => {\n if (fn) {\n try {\n Object.defineProperty(fn, 'name', {value});\n } catch (e) {\n // eslint-disable-next-line no-empty\n }\n Object.defineProperty(fn, 'adapterName', {value});\n }\n});\n\nconst renderReason = (reason) => `- ${reason}`;\n\nconst isResolvedHandle = (adapter) => utils.isFunction(adapter) || adapter === null || adapter === false;\n\nexport default {\n getAdapter: (adapters, config) => {\n adapters = utils.isArray(adapters) ? adapters : [adapters];\n\n const {length} = adapters;\n let nameOrAdapter;\n let adapter;\n\n const rejectedReasons = {};\n\n for (let i = 0; i < length; i++) {\n nameOrAdapter = adapters[i];\n let id;\n\n adapter = nameOrAdapter;\n\n if (!isResolvedHandle(nameOrAdapter)) {\n adapter = knownAdapters[(id = String(nameOrAdapter)).toLowerCase()];\n\n if (adapter === undefined) {\n throw new AxiosError(`Unknown adapter '${id}'`);\n }\n }\n\n if (adapter && (utils.isFunction(adapter) || (adapter = adapter.get(config)))) {\n break;\n }\n\n rejectedReasons[id || '#' + i] = adapter;\n }\n\n if (!adapter) {\n\n const reasons = Object.entries(rejectedReasons)\n .map(([id, state]) => `adapter ${id} ` +\n (state === false ? 'is not supported by the environment' : 'is not available in the build')\n );\n\n let s = length ?\n (reasons.length > 1 ? 'since :\\n' + reasons.map(renderReason).join('\\n') : ' ' + renderReason(reasons[0])) :\n 'as no adapter specified';\n\n throw new AxiosError(\n `There is no suitable adapter to dispatch the request ` + s,\n 'ERR_NOT_SUPPORT'\n );\n }\n\n return adapter;\n },\n adapters: knownAdapters\n}\n","'use strict';\n\nimport transformData from './transformData.js';\nimport isCancel from '../cancel/isCancel.js';\nimport defaults from '../defaults/index.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport adapters from \"../adapters/adapters.js\";\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n *\n * @param {Object} config The config that is to be used for the request\n *\n * @returns {void}\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n\n if (config.signal && config.signal.aborted) {\n throw new CanceledError(null, config);\n }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n *\n * @returns {Promise} The Promise to be fulfilled\n */\nexport default function dispatchRequest(config) {\n throwIfCancellationRequested(config);\n\n config.headers = AxiosHeaders.from(config.headers);\n\n // Transform request data\n config.data = transformData.call(\n config,\n config.transformRequest\n );\n\n if (['post', 'put', 'patch'].indexOf(config.method) !== -1) {\n config.headers.setContentType('application/x-www-form-urlencoded', false);\n }\n\n const adapter = adapters.getAdapter(config.adapter || defaults.adapter, config);\n\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n response.data = transformData.call(\n config,\n config.transformResponse,\n response\n );\n\n response.headers = AxiosHeaders.from(response.headers);\n\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n if (reason && reason.response) {\n reason.response.data = transformData.call(\n config,\n config.transformResponse,\n reason.response\n );\n reason.response.headers = AxiosHeaders.from(reason.response.headers);\n }\n }\n\n return Promise.reject(reason);\n });\n}\n","export const VERSION = \"1.12.2\";","'use strict';\n\nimport {VERSION} from '../env/data.js';\nimport AxiosError from '../core/AxiosError.js';\n\nconst validators = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach((type, i) => {\n validators[type] = function validator(thing) {\n return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n };\n});\n\nconst deprecatedWarnings = {};\n\n/**\n * Transitional option validator\n *\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\n * @param {string?} version - deprecated version / removed since version\n * @param {string?} message - some message with additional info\n *\n * @returns {function}\n */\nvalidators.transitional = function transitional(validator, version, message) {\n function formatMessage(opt, desc) {\n return '[Axios v' + VERSION + '] Transitional option \\'' + opt + '\\'' + desc + (message ? '. ' + message : '');\n }\n\n // eslint-disable-next-line func-names\n return (value, opt, opts) => {\n if (validator === false) {\n throw new AxiosError(\n formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')),\n AxiosError.ERR_DEPRECATED\n );\n }\n\n if (version && !deprecatedWarnings[opt]) {\n deprecatedWarnings[opt] = true;\n // eslint-disable-next-line no-console\n console.warn(\n formatMessage(\n opt,\n ' has been deprecated since v' + version + ' and will be removed in the near future'\n )\n );\n }\n\n return validator ? validator(value, opt, opts) : true;\n };\n};\n\nvalidators.spelling = function spelling(correctSpelling) {\n return (value, opt) => {\n // eslint-disable-next-line no-console\n console.warn(`${opt} is likely a misspelling of ${correctSpelling}`);\n return true;\n }\n};\n\n/**\n * Assert object's properties type\n *\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n *\n * @returns {object}\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n if (typeof options !== 'object') {\n throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE);\n }\n const keys = Object.keys(options);\n let i = keys.length;\n while (i-- > 0) {\n const opt = keys[i];\n const validator = schema[opt];\n if (validator) {\n const value = options[opt];\n const result = value === undefined || validator(value, opt, options);\n if (result !== true) {\n throw new AxiosError('option ' + opt + ' must be ' + result, AxiosError.ERR_BAD_OPTION_VALUE);\n }\n continue;\n }\n if (allowUnknown !== true) {\n throw new AxiosError('Unknown option ' + opt, AxiosError.ERR_BAD_OPTION);\n }\n }\n}\n\nexport default {\n assertOptions,\n validators\n};\n","'use strict';\n\nimport utils from './../utils.js';\nimport buildURL from '../helpers/buildURL.js';\nimport InterceptorManager from './InterceptorManager.js';\nimport dispatchRequest from './dispatchRequest.js';\nimport mergeConfig from './mergeConfig.js';\nimport buildFullPath from './buildFullPath.js';\nimport validator from '../helpers/validator.js';\nimport AxiosHeaders from './AxiosHeaders.js';\n\nconst validators = validator.validators;\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n *\n * @return {Axios} A new instance of Axios\n */\nclass Axios {\n constructor(instanceConfig) {\n this.defaults = instanceConfig || {};\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n }\n\n /**\n * Dispatch a request\n *\n * @param {String|Object} configOrUrl The config specific for this request (merged with this.defaults)\n * @param {?Object} config\n *\n * @returns {Promise} The Promise to be fulfilled\n */\n async request(configOrUrl, config) {\n try {\n return await this._request(configOrUrl, config);\n } catch (err) {\n if (err instanceof Error) {\n let dummy = {};\n\n Error.captureStackTrace ? Error.captureStackTrace(dummy) : (dummy = new Error());\n\n // slice off the Error: ... line\n const stack = dummy.stack ? dummy.stack.replace(/^.+\\n/, '') : '';\n try {\n if (!err.stack) {\n err.stack = stack;\n // match without the 2 top stack lines\n } else if (stack && !String(err.stack).endsWith(stack.replace(/^.+\\n.+\\n/, ''))) {\n err.stack += '\\n' + stack\n }\n } catch (e) {\n // ignore the case where \"stack\" is an un-writable property\n }\n }\n\n throw err;\n }\n }\n\n _request(configOrUrl, config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof configOrUrl === 'string') {\n config = config || {};\n config.url = configOrUrl;\n } else {\n config = configOrUrl || {};\n }\n\n config = mergeConfig(this.defaults, config);\n\n const {transitional, paramsSerializer, headers} = config;\n\n if (transitional !== undefined) {\n validator.assertOptions(transitional, {\n silentJSONParsing: validators.transitional(validators.boolean),\n forcedJSONParsing: validators.transitional(validators.boolean),\n clarifyTimeoutError: validators.transitional(validators.boolean)\n }, false);\n }\n\n if (paramsSerializer != null) {\n if (utils.isFunction(paramsSerializer)) {\n config.paramsSerializer = {\n serialize: paramsSerializer\n }\n } else {\n validator.assertOptions(paramsSerializer, {\n encode: validators.function,\n serialize: validators.function\n }, true);\n }\n }\n\n // Set config.allowAbsoluteUrls\n if (config.allowAbsoluteUrls !== undefined) {\n // do nothing\n } else if (this.defaults.allowAbsoluteUrls !== undefined) {\n config.allowAbsoluteUrls = this.defaults.allowAbsoluteUrls;\n } else {\n config.allowAbsoluteUrls = true;\n }\n\n validator.assertOptions(config, {\n baseUrl: validators.spelling('baseURL'),\n withXsrfToken: validators.spelling('withXSRFToken')\n }, true);\n\n // Set config.method\n config.method = (config.method || this.defaults.method || 'get').toLowerCase();\n\n // Flatten headers\n let contextHeaders = headers && utils.merge(\n headers.common,\n headers[config.method]\n );\n\n headers && utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n (method) => {\n delete headers[method];\n }\n );\n\n config.headers = AxiosHeaders.concat(contextHeaders, headers);\n\n // filter out skipped interceptors\n const requestInterceptorChain = [];\n let synchronousRequestInterceptors = true;\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n return;\n }\n\n synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n\n requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n const responseInterceptorChain = [];\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n let promise;\n let i = 0;\n let len;\n\n if (!synchronousRequestInterceptors) {\n const chain = [dispatchRequest.bind(this), undefined];\n chain.unshift(...requestInterceptorChain);\n chain.push(...responseInterceptorChain);\n len = chain.length;\n\n promise = Promise.resolve(config);\n\n while (i < len) {\n promise = promise.then(chain[i++], chain[i++]);\n }\n\n return promise;\n }\n\n len = requestInterceptorChain.length;\n\n let newConfig = config;\n\n while (i < len) {\n const onFulfilled = requestInterceptorChain[i++];\n const onRejected = requestInterceptorChain[i++];\n try {\n newConfig = onFulfilled(newConfig);\n } catch (error) {\n onRejected.call(this, error);\n break;\n }\n }\n\n try {\n promise = dispatchRequest.call(this, newConfig);\n } catch (error) {\n return Promise.reject(error);\n }\n\n i = 0;\n len = responseInterceptorChain.length;\n\n while (i < len) {\n promise = promise.then(responseInterceptorChain[i++], responseInterceptorChain[i++]);\n }\n\n return promise;\n }\n\n getUri(config) {\n config = mergeConfig(this.defaults, config);\n const fullPath = buildFullPath(config.baseURL, config.url, config.allowAbsoluteUrls);\n return buildURL(fullPath, config.params, config.paramsSerializer);\n }\n}\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n url,\n data: (config || {}).data\n }));\n };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n\n function generateHTTPMethod(isForm) {\n return function httpMethod(url, data, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n headers: isForm ? {\n 'Content-Type': 'multipart/form-data'\n } : {},\n url,\n data\n }));\n };\n }\n\n Axios.prototype[method] = generateHTTPMethod();\n\n Axios.prototype[method + 'Form'] = generateHTTPMethod(true);\n});\n\nexport default Axios;\n","'use strict';\n\nimport CanceledError from './CanceledError.js';\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @param {Function} executor The executor function.\n *\n * @returns {CancelToken}\n */\nclass CancelToken {\n constructor(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n let resolvePromise;\n\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n\n const token = this;\n\n // eslint-disable-next-line func-names\n this.promise.then(cancel => {\n if (!token._listeners) return;\n\n let i = token._listeners.length;\n\n while (i-- > 0) {\n token._listeners[i](cancel);\n }\n token._listeners = null;\n });\n\n // eslint-disable-next-line func-names\n this.promise.then = onfulfilled => {\n let _resolve;\n // eslint-disable-next-line func-names\n const promise = new Promise(resolve => {\n token.subscribe(resolve);\n _resolve = resolve;\n }).then(onfulfilled);\n\n promise.cancel = function reject() {\n token.unsubscribe(_resolve);\n };\n\n return promise;\n };\n\n executor(function cancel(message, config, request) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new CanceledError(message, config, request);\n resolvePromise(token.reason);\n });\n }\n\n /**\n * Throws a `CanceledError` if cancellation has been requested.\n */\n throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n }\n\n /**\n * Subscribe to the cancel signal\n */\n\n subscribe(listener) {\n if (this.reason) {\n listener(this.reason);\n return;\n }\n\n if (this._listeners) {\n this._listeners.push(listener);\n } else {\n this._listeners = [listener];\n }\n }\n\n /**\n * Unsubscribe from the cancel signal\n */\n\n unsubscribe(listener) {\n if (!this._listeners) {\n return;\n }\n const index = this._listeners.indexOf(listener);\n if (index !== -1) {\n this._listeners.splice(index, 1);\n }\n }\n\n toAbortSignal() {\n const controller = new AbortController();\n\n const abort = (err) => {\n controller.abort(err);\n };\n\n this.subscribe(abort);\n\n controller.signal.unsubscribe = () => this.unsubscribe(abort);\n\n return controller.signal;\n }\n\n /**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\n static source() {\n let cancel;\n const token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token,\n cancel\n };\n }\n}\n\nexport default CancelToken;\n","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n *\n * @returns {Function}\n */\nexport default function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n *\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nexport default function isAxiosError(payload) {\n return utils.isObject(payload) && (payload.isAxiosError === true);\n}\n","const HttpStatusCode = {\n Continue: 100,\n SwitchingProtocols: 101,\n Processing: 102,\n EarlyHints: 103,\n Ok: 200,\n Created: 201,\n Accepted: 202,\n NonAuthoritativeInformation: 203,\n NoContent: 204,\n ResetContent: 205,\n PartialContent: 206,\n MultiStatus: 207,\n AlreadyReported: 208,\n ImUsed: 226,\n MultipleChoices: 300,\n MovedPermanently: 301,\n Found: 302,\n SeeOther: 303,\n NotModified: 304,\n UseProxy: 305,\n Unused: 306,\n TemporaryRedirect: 307,\n PermanentRedirect: 308,\n BadRequest: 400,\n Unauthorized: 401,\n PaymentRequired: 402,\n Forbidden: 403,\n NotFound: 404,\n MethodNotAllowed: 405,\n NotAcceptable: 406,\n ProxyAuthenticationRequired: 407,\n RequestTimeout: 408,\n Conflict: 409,\n Gone: 410,\n LengthRequired: 411,\n PreconditionFailed: 412,\n PayloadTooLarge: 413,\n UriTooLong: 414,\n UnsupportedMediaType: 415,\n RangeNotSatisfiable: 416,\n ExpectationFailed: 417,\n ImATeapot: 418,\n MisdirectedRequest: 421,\n UnprocessableEntity: 422,\n Locked: 423,\n FailedDependency: 424,\n TooEarly: 425,\n UpgradeRequired: 426,\n PreconditionRequired: 428,\n TooManyRequests: 429,\n RequestHeaderFieldsTooLarge: 431,\n UnavailableForLegalReasons: 451,\n InternalServerError: 500,\n NotImplemented: 501,\n BadGateway: 502,\n ServiceUnavailable: 503,\n GatewayTimeout: 504,\n HttpVersionNotSupported: 505,\n VariantAlsoNegotiates: 506,\n InsufficientStorage: 507,\n LoopDetected: 508,\n NotExtended: 510,\n NetworkAuthenticationRequired: 511,\n};\n\nObject.entries(HttpStatusCode).forEach(([key, value]) => {\n HttpStatusCode[value] = key;\n});\n\nexport default HttpStatusCode;\n","'use strict';\n\nimport utils from './utils.js';\nimport bind from './helpers/bind.js';\nimport Axios from './core/Axios.js';\nimport mergeConfig from './core/mergeConfig.js';\nimport defaults from './defaults/index.js';\nimport formDataToJSON from './helpers/formDataToJSON.js';\nimport CanceledError from './cancel/CanceledError.js';\nimport CancelToken from './cancel/CancelToken.js';\nimport isCancel from './cancel/isCancel.js';\nimport {VERSION} from './env/data.js';\nimport toFormData from './helpers/toFormData.js';\nimport AxiosError from './core/AxiosError.js';\nimport spread from './helpers/spread.js';\nimport isAxiosError from './helpers/isAxiosError.js';\nimport AxiosHeaders from \"./core/AxiosHeaders.js\";\nimport adapters from './adapters/adapters.js';\nimport HttpStatusCode from './helpers/HttpStatusCode.js';\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n *\n * @returns {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n const context = new Axios(defaultConfig);\n const instance = bind(Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, Axios.prototype, context, {allOwnKeys: true});\n\n // Copy context to instance\n utils.extend(instance, context, null, {allOwnKeys: true});\n\n // Factory for creating new instances\n instance.create = function create(instanceConfig) {\n return createInstance(mergeConfig(defaultConfig, instanceConfig));\n };\n\n return instance;\n}\n\n// Create the default instance to be exported\nconst axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Expose Cancel & CancelToken\naxios.CanceledError = CanceledError;\naxios.CancelToken = CancelToken;\naxios.isCancel = isCancel;\naxios.VERSION = VERSION;\naxios.toFormData = toFormData;\n\n// Expose AxiosError class\naxios.AxiosError = AxiosError;\n\n// alias for CanceledError for backward compatibility\naxios.Cancel = axios.CanceledError;\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\n\naxios.spread = spread;\n\n// Expose isAxiosError\naxios.isAxiosError = isAxiosError;\n\n// Expose mergeConfig\naxios.mergeConfig = mergeConfig;\n\naxios.AxiosHeaders = AxiosHeaders;\n\naxios.formToJSON = thing => formDataToJSON(utils.isHTMLForm(thing) ? new FormData(thing) : thing);\n\naxios.getAdapter = adapters.getAdapter;\n\naxios.HttpStatusCode = HttpStatusCode;\n\naxios.default = axios;\n\n// this module should only have a default export\nexport default axios\n",null,"/*@license Copyright 2015-2022 Ably Real-time Ltd (ably.com)\n\nAbly JavaScript Library v2.13.0\nhttps://github.com/ably/ably-js\n\nReleased under the Apache Licence v2.0*/(function (g, f) {\n if (\"object\" == typeof exports && \"object\" == typeof module) {\n module.exports = f();\n } else if (\"function\" == typeof define && define.amd) {\n define([], f);\n } else if (\"object\" == typeof exports) {\n exports[\"Ably\"] = f();\n } else {\n g[\"Ably\"] = f();\n }\n }(this, () => {\nvar exports = {};\nvar module = { exports };\n\"use strict\";\nvar __defProp = Object.defineProperty;\nvar __defProps = Object.defineProperties;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropDescs = Object.getOwnPropertyDescriptors;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n if (__getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(b)) {\n if (__propIsEnum.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));\nvar __objRest = (source, exclude) => {\n var target = {};\n for (var prop in source)\n if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)\n target[prop] = source[prop];\n if (source != null && __getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(source)) {\n if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))\n target[prop] = source[prop];\n }\n return target;\n};\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\n\n// src/platform/web/index.ts\nvar web_exports = {};\n__export(web_exports, {\n ErrorInfo: () => ErrorInfo,\n Realtime: () => DefaultRealtime,\n Rest: () => DefaultRest,\n default: () => web_default,\n makeProtocolMessageFromDeserialized: () => makeFromDeserializedWithDependencies,\n msgpack: () => msgpack_default\n});\nmodule.exports = __toCommonJS(web_exports);\n\n// src/common/platform.ts\nvar Platform = class {\n};\n\n// src/common/lib/util/logger.ts\nvar globalObject = typeof global !== \"undefined\" ? global : typeof window !== \"undefined\" ? window : self;\nfunction pad(timeSegment, three) {\n return `${timeSegment}`.padStart(three ? 3 : 2, \"0\");\n}\nfunction getHandler(logger) {\n return Platform.Config.logTimestamps ? function(msg) {\n const time = /* @__PURE__ */ new Date();\n logger(\n pad(time.getHours()) + \":\" + pad(time.getMinutes()) + \":\" + pad(time.getSeconds()) + \".\" + pad(time.getMilliseconds(), 1) + \" \" + msg\n );\n } : function(msg) {\n logger(msg);\n };\n}\nvar getDefaultLoggers = () => {\n var _a2;\n let consoleLogger;\n let errorLogger;\n if (typeof ((_a2 = globalObject == null ? void 0 : globalObject.console) == null ? void 0 : _a2.log) === \"function\") {\n consoleLogger = function(...args) {\n console.log.apply(console, args);\n };\n errorLogger = console.warn ? function(...args) {\n console.warn.apply(console, args);\n } : consoleLogger;\n } else {\n consoleLogger = errorLogger = function() {\n };\n }\n return [consoleLogger, errorLogger].map(getHandler);\n};\nvar _Logger = class _Logger {\n constructor() {\n this.deprecated = (description, msg) => {\n this.deprecationWarning(`${description} is deprecated and will be removed in a future version. ${msg}`);\n };\n /* Where a logging operation is expensive, such as serialisation of data, use shouldLog will prevent\n the object being serialised if the log level will not output the message */\n this.shouldLog = (level) => {\n return level <= this.logLevel;\n };\n this.setLog = (level, handler) => {\n if (level !== void 0)\n this.logLevel = level;\n if (handler !== void 0)\n this.logHandler = this.logErrorHandler = handler;\n };\n this.logLevel = _Logger.defaultLogLevel;\n this.logHandler = _Logger.defaultLogHandler;\n this.logErrorHandler = _Logger.defaultLogErrorHandler;\n }\n static initLogHandlers() {\n const [logHandler, logErrorHandler] = getDefaultLoggers();\n this.defaultLogHandler = logHandler;\n this.defaultLogErrorHandler = logErrorHandler;\n this.defaultLogger = new _Logger();\n }\n /**\n * Calls to this method are never stripped by the `stripLogs` esbuild plugin. Use it for log statements that you wish to always be included in the modular variant of the SDK.\n */\n static logActionNoStrip(logger, level, action, message) {\n logger.logAction(level, action, message);\n }\n logAction(level, action, message) {\n if (this.shouldLog(level)) {\n (level === 1 /* Error */ ? this.logErrorHandler : this.logHandler)(\"Ably: \" + action + \": \" + message, level);\n }\n }\n renamedClientOption(oldName, newName) {\n this.deprecationWarning(\n `The \\`${oldName}\\` client option has been renamed to \\`${newName}\\`. Please update your code to use \\`${newName}\\` instead. \\`${oldName}\\` will be removed in a future version.`\n );\n }\n renamedMethod(className, oldName, newName) {\n this.deprecationWarning(\n `\\`${className}\\`\\u2019s \\`${oldName}\\` method has been renamed to \\`${newName}\\`. Please update your code to use \\`${newName}\\` instead. \\`${oldName}\\` will be removed in a future version.`\n );\n }\n deprecationWarning(message) {\n if (this.shouldLog(1 /* Error */)) {\n this.logErrorHandler(`Ably: Deprecation warning - ${message}`, 1 /* Error */);\n }\n }\n};\n_Logger.defaultLogLevel = 1 /* Error */;\n// public constants\n_Logger.LOG_NONE = 0 /* None */;\n_Logger.LOG_ERROR = 1 /* Error */;\n_Logger.LOG_MAJOR = 2 /* Major */;\n_Logger.LOG_MINOR = 3 /* Minor */;\n_Logger.LOG_MICRO = 4 /* Micro */;\n/* public static functions */\n/**\n * In the modular variant of the SDK, the `stripLogs` esbuild plugin strips out all calls to this method (when invoked as `Logger.logAction(...)`) except when called with level `Logger.LOG_ERROR`. If you wish for a log statement to never be stripped, use the {@link logActionNoStrip} method instead.\n *\n * The aforementioned plugin expects `level` to be an expression of the form `Logger.LOG_*`; that is, you can’t dynamically specify the log level.\n */\n_Logger.logAction = (logger, level, action, message) => {\n _Logger.logActionNoStrip(logger, level, action, message);\n};\nvar Logger = _Logger;\nvar logger_default = Logger;\n\n// src/common/lib/util/utils.ts\nvar utils_exports = {};\n__export(utils_exports, {\n Format: () => Format,\n allSame: () => allSame,\n allToLowerCase: () => allToLowerCase,\n allToUpperCase: () => allToUpperCase,\n arrChooseN: () => arrChooseN,\n arrDeleteValue: () => arrDeleteValue,\n arrEquals: () => arrEquals,\n arrIntersect: () => arrIntersect,\n arrIntersectOb: () => arrIntersectOb,\n arrPopRandomElement: () => arrPopRandomElement,\n arrWithoutValue: () => arrWithoutValue,\n cheapRandStr: () => cheapRandStr,\n containsValue: () => containsValue,\n copy: () => copy,\n createMissingPluginError: () => createMissingPluginError,\n dataSizeBytes: () => dataSizeBytes,\n decodeBody: () => decodeBody,\n encodeBody: () => encodeBody,\n ensureArray: () => ensureArray,\n forInOwnNonNullProperties: () => forInOwnNonNullProperties,\n getBackoffCoefficient: () => getBackoffCoefficient,\n getGlobalObject: () => getGlobalObject,\n getJitterCoefficient: () => getJitterCoefficient,\n getRetryTime: () => getRetryTime,\n inherits: () => inherits,\n inspectBody: () => inspectBody,\n inspectError: () => inspectError,\n intersect: () => intersect,\n isEmpty: () => isEmpty,\n isErrorInfoOrPartialErrorInfo: () => isErrorInfoOrPartialErrorInfo,\n isNil: () => isNil,\n isObject: () => isObject,\n keysArray: () => keysArray,\n matchDerivedChannel: () => matchDerivedChannel,\n mixin: () => mixin,\n parseQueryString: () => parseQueryString,\n prototypicalClone: () => prototypicalClone,\n randomString: () => randomString,\n shallowClone: () => shallowClone,\n shallowEquals: () => shallowEquals,\n throwMissingPluginError: () => throwMissingPluginError,\n toBase64: () => toBase64,\n toQueryString: () => toQueryString,\n valuesArray: () => valuesArray,\n whenPromiseSettles: () => whenPromiseSettles,\n withTimeoutAsync: () => withTimeoutAsync\n});\n\n// src/common/lib/types/errorinfo.ts\nfunction toString(err) {\n let result = \"[\" + err.constructor.name;\n if (err.message)\n result += \": \" + err.message;\n if (err.statusCode)\n result += \"; statusCode=\" + err.statusCode;\n if (err.code)\n result += \"; code=\" + err.code;\n if (err.cause)\n result += \"; cause=\" + inspectError(err.cause);\n if (err.href && !(err.message && err.message.indexOf(\"help.ably.io\") > -1))\n result += \"; see \" + err.href + \" \";\n result += \"]\";\n return result;\n}\nvar ErrorInfo = class _ErrorInfo extends Error {\n constructor(message, code, statusCode, cause) {\n super(message);\n if (typeof Object.setPrototypeOf !== \"undefined\") {\n Object.setPrototypeOf(this, _ErrorInfo.prototype);\n }\n this.code = code;\n this.statusCode = statusCode;\n this.cause = cause;\n }\n toString() {\n return toString(this);\n }\n static fromValues(values) {\n const { message, code, statusCode } = values;\n if (typeof message !== \"string\" || typeof code !== \"number\" || typeof statusCode !== \"number\") {\n throw new Error(\"ErrorInfo.fromValues(): invalid values: \" + Platform.Config.inspect(values));\n }\n const result = Object.assign(new _ErrorInfo(message, code, statusCode), values);\n if (result.code && !result.href) {\n result.href = \"https://help.ably.io/error/\" + result.code;\n }\n return result;\n }\n};\nvar PartialErrorInfo = class _PartialErrorInfo extends Error {\n constructor(message, code, statusCode, cause) {\n super(message);\n if (typeof Object.setPrototypeOf !== \"undefined\") {\n Object.setPrototypeOf(this, _PartialErrorInfo.prototype);\n }\n this.code = code;\n this.statusCode = statusCode;\n this.cause = cause;\n }\n toString() {\n return toString(this);\n }\n static fromValues(values) {\n const { message, code, statusCode } = values;\n if (typeof message !== \"string\" || !isNil(code) && typeof code !== \"number\" || !isNil(statusCode) && typeof statusCode !== \"number\") {\n throw new Error(\"PartialErrorInfo.fromValues(): invalid values: \" + Platform.Config.inspect(values));\n }\n const result = Object.assign(new _PartialErrorInfo(message, code, statusCode), values);\n if (result.code && !result.href) {\n result.href = \"https://help.ably.io/error/\" + result.code;\n }\n return result;\n }\n};\n\n// src/common/lib/util/utils.ts\nfunction randomPosn(arrOrStr) {\n return Math.floor(Math.random() * arrOrStr.length);\n}\nfunction mixin(target, ...args) {\n for (let i = 0; i < args.length; i++) {\n const source = args[i];\n if (!source) {\n break;\n }\n for (const key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n}\nfunction copy(src) {\n return mixin({}, src);\n}\nfunction ensureArray(obj) {\n if (isNil(obj)) {\n return [];\n }\n if (Array.isArray(obj)) {\n return obj;\n }\n return [obj];\n}\nfunction isObject(ob) {\n return Object.prototype.toString.call(ob) == \"[object Object]\";\n}\nfunction isEmpty(ob) {\n for (const prop in ob)\n return false;\n return true;\n}\nfunction isNil(arg) {\n return arg == null;\n}\nfunction shallowClone(ob) {\n const result = new Object();\n for (const prop in ob)\n result[prop] = ob[prop];\n return result;\n}\nfunction prototypicalClone(ob, ownProperties) {\n class F {\n }\n F.prototype = ob;\n const result = new F();\n if (ownProperties)\n mixin(result, ownProperties);\n return result;\n}\nvar inherits = function(ctor, superCtor) {\n if (Platform.Config.inherits) {\n Platform.Config.inherits(ctor, superCtor);\n return;\n }\n ctor.super_ = superCtor;\n ctor.prototype = prototypicalClone(superCtor.prototype, { constructor: ctor });\n};\nfunction containsValue(ob, val) {\n for (const i in ob) {\n if (ob[i] == val)\n return true;\n }\n return false;\n}\nfunction intersect(arr, ob) {\n return Array.isArray(ob) ? arrIntersect(arr, ob) : arrIntersectOb(arr, ob);\n}\nfunction arrIntersect(arr1, arr2) {\n const result = [];\n for (let i = 0; i < arr1.length; i++) {\n const member = arr1[i];\n if (arr2.indexOf(member) != -1)\n result.push(member);\n }\n return result;\n}\nfunction arrIntersectOb(arr, ob) {\n const result = [];\n for (let i = 0; i < arr.length; i++) {\n const member = arr[i];\n if (member in ob)\n result.push(member);\n }\n return result;\n}\nfunction arrDeleteValue(arr, val) {\n const idx = arr.indexOf(val);\n const res = idx != -1;\n if (res)\n arr.splice(idx, 1);\n return res;\n}\nfunction arrWithoutValue(arr, val) {\n const newArr = arr.slice();\n arrDeleteValue(newArr, val);\n return newArr;\n}\nfunction keysArray(ob, ownOnly) {\n const result = [];\n for (const prop in ob) {\n if (ownOnly && !Object.prototype.hasOwnProperty.call(ob, prop))\n continue;\n result.push(prop);\n }\n return result;\n}\nfunction valuesArray(ob, ownOnly) {\n const result = [];\n for (const prop in ob) {\n if (ownOnly && !Object.prototype.hasOwnProperty.call(ob, prop))\n continue;\n result.push(ob[prop]);\n }\n return result;\n}\nfunction forInOwnNonNullProperties(ob, fn) {\n for (const prop in ob) {\n if (Object.prototype.hasOwnProperty.call(ob, prop) && ob[prop]) {\n fn(prop);\n }\n }\n}\nfunction allSame(arr, prop) {\n if (arr.length === 0) {\n return true;\n }\n const first = arr[0][prop];\n return arr.every(function(item) {\n return item[prop] === first;\n });\n}\nvar Format = /* @__PURE__ */ ((Format2) => {\n Format2[\"msgpack\"] = \"msgpack\";\n Format2[\"json\"] = \"json\";\n return Format2;\n})(Format || {});\nfunction arrPopRandomElement(arr) {\n return arr.splice(randomPosn(arr), 1)[0];\n}\nfunction toQueryString(params) {\n const parts = [];\n if (params) {\n for (const key in params)\n parts.push(encodeURIComponent(key) + \"=\" + encodeURIComponent(params[key]));\n }\n return parts.length ? \"?\" + parts.join(\"&\") : \"\";\n}\nfunction parseQueryString(query) {\n let match;\n const search = /([^?&=]+)=?([^&]*)/g;\n const result = {};\n while (match = search.exec(query))\n result[decodeURIComponent(match[1])] = decodeURIComponent(match[2]);\n return result;\n}\nfunction isErrorInfoOrPartialErrorInfo(err) {\n return typeof err == \"object\" && err !== null && (err instanceof ErrorInfo || err instanceof PartialErrorInfo);\n}\nfunction inspectError(err) {\n var _a2, _b;\n if (err instanceof Error || ((_a2 = err == null ? void 0 : err.constructor) == null ? void 0 : _a2.name) === \"ErrorInfo\" || ((_b = err == null ? void 0 : err.constructor) == null ? void 0 : _b.name) === \"PartialErrorInfo\")\n return err.toString();\n return Platform.Config.inspect(err);\n}\nfunction inspectBody(body) {\n if (Platform.BufferUtils.isBuffer(body)) {\n return body.toString();\n } else if (typeof body === \"string\") {\n return body;\n } else {\n return Platform.Config.inspect(body);\n }\n}\nfunction dataSizeBytes(data) {\n if (Platform.BufferUtils.isBuffer(data)) {\n return Platform.BufferUtils.byteLength(data);\n }\n if (typeof data === \"string\") {\n return Platform.Config.stringByteSize(data);\n }\n if (typeof data === \"number\") {\n return 8;\n }\n if (typeof data === \"boolean\") {\n return 1;\n }\n throw new Error(\n `Expected input of Utils.dataSizeBytes to be a string, a number, a boolean or a buffer, but was: ${typeof data}`\n );\n}\nfunction cheapRandStr() {\n return String(Math.random()).substr(2);\n}\nvar randomString = async (numBytes) => {\n const buffer = await Platform.Config.getRandomArrayBuffer(numBytes);\n return Platform.BufferUtils.base64Encode(buffer);\n};\nfunction arrChooseN(arr, n2) {\n const numItems = Math.min(n2, arr.length), mutableArr = arr.slice(), result = [];\n for (let i = 0; i < numItems; i++) {\n result.push(arrPopRandomElement(mutableArr));\n }\n return result;\n}\nfunction whenPromiseSettles(promise, callback) {\n promise.then((result) => {\n callback == null ? void 0 : callback(null, result);\n }).catch((err) => {\n callback == null ? void 0 : callback(err);\n });\n}\nfunction decodeBody(body, MsgPack, format) {\n if (format == \"msgpack\") {\n if (!MsgPack) {\n throwMissingPluginError(\"MsgPack\");\n }\n return MsgPack.decode(body);\n }\n return JSON.parse(String(body));\n}\nfunction encodeBody(body, MsgPack, format) {\n if (format == \"msgpack\") {\n if (!MsgPack) {\n throwMissingPluginError(\"MsgPack\");\n }\n return MsgPack.encode(body, true);\n }\n return JSON.stringify(body);\n}\nfunction allToLowerCase(arr) {\n return arr.map(function(element) {\n return element && element.toLowerCase();\n });\n}\nfunction allToUpperCase(arr) {\n return arr.map(function(element) {\n return element && element.toUpperCase();\n });\n}\nfunction getBackoffCoefficient(count) {\n return Math.min((count + 2) / 3, 2);\n}\nfunction getJitterCoefficient() {\n return 1 - Math.random() * 0.2;\n}\nfunction getRetryTime(initialTimeout, retryAttempt) {\n return initialTimeout * getBackoffCoefficient(retryAttempt) * getJitterCoefficient();\n}\nfunction getGlobalObject() {\n if (typeof global !== \"undefined\") {\n return global;\n }\n if (typeof window !== \"undefined\") {\n return window;\n }\n return self;\n}\nfunction shallowEquals(source, target) {\n return Object.keys(source).every((key) => source[key] === target[key]) && Object.keys(target).every((key) => target[key] === source[key]);\n}\nfunction matchDerivedChannel(name) {\n const regex = /^(\\[([^?]*)(?:(.*))\\])?(.+)$/;\n const match = name.match(regex);\n if (!match || !match.length || match.length < 5) {\n throw new ErrorInfo(\"regex match failed\", 400, 40010);\n }\n if (match[2]) {\n throw new ErrorInfo(`cannot use a derived option with a ${match[2]} channel`, 400, 40010);\n }\n return {\n qualifierParam: match[3] || \"\",\n channelName: match[4]\n };\n}\nfunction toBase64(str) {\n const bufferUtils = Platform.BufferUtils;\n const textBuffer = bufferUtils.utf8Encode(str);\n return bufferUtils.base64Encode(textBuffer);\n}\nfunction arrEquals(a, b) {\n return a.length === b.length && a.every(function(val, i) {\n return val === b[i];\n });\n}\nfunction createMissingPluginError(pluginName) {\n return new ErrorInfo(`${pluginName} plugin not provided`, 40019, 400);\n}\nfunction throwMissingPluginError(pluginName) {\n throw createMissingPluginError(pluginName);\n}\nasync function withTimeoutAsync(promise, timeout = 5e3, err = \"Timeout expired\") {\n const e = new ErrorInfo(err, 5e4, 500);\n return Promise.race([promise, new Promise((_resolve, reject) => setTimeout(() => reject(e), timeout))]);\n}\n\n// package.json\nvar version = \"2.13.0\";\n\n// src/common/lib/util/defaults.ts\nvar agent = \"ably-js/\" + version;\nvar Defaults = {\n ENDPOINT: \"main\",\n ENVIRONMENT: \"\",\n REST_HOST: \"rest.ably.io\",\n REALTIME_HOST: \"realtime.ably.io\",\n FALLBACK_HOSTS: [\n \"main.a.fallback.ably-realtime.com\",\n \"main.b.fallback.ably-realtime.com\",\n \"main.c.fallback.ably-realtime.com\",\n \"main.d.fallback.ably-realtime.com\",\n \"main.e.fallback.ably-realtime.com\"\n ],\n PORT: 80,\n TLS_PORT: 443,\n TIMEOUTS: {\n /* Documented as options params: */\n disconnectedRetryTimeout: 15e3,\n suspendedRetryTimeout: 3e4,\n /* Undocumented, but part of the api and can be used by customers: */\n httpRequestTimeout: 1e4,\n httpMaxRetryDuration: 15e3,\n channelRetryTimeout: 15e3,\n fallbackRetryTimeout: 6e5,\n /* For internal / test use only: */\n connectionStateTtl: 12e4,\n realtimeRequestTimeout: 1e4,\n recvTimeout: 9e4,\n webSocketConnectTimeout: 1e4,\n webSocketSlowTimeout: 4e3\n },\n httpMaxRetryCount: 3,\n maxMessageSize: 65536,\n version,\n protocolVersion: 4,\n agent,\n getPort,\n getHttpScheme,\n getPrimaryDomainFromEndpoint,\n getEndpointFallbackHosts,\n getFallbackHosts,\n getHosts,\n checkHost,\n objectifyOptions,\n normaliseOptions,\n defaultGetHeaders,\n defaultPostHeaders\n};\nfunction getPort(options, tls) {\n return tls || options.tls ? options.tlsPort : options.port;\n}\nfunction getHttpScheme(options) {\n return options.tls ? \"https://\" : \"http://\";\n}\nfunction isFqdnIpOrLocalhost(endpoint) {\n return endpoint.includes(\".\") || endpoint.includes(\"::\") || endpoint === \"localhost\";\n}\nfunction getPrimaryDomainFromEndpoint(endpoint) {\n if (isFqdnIpOrLocalhost(endpoint))\n return endpoint;\n if (endpoint.startsWith(\"nonprod:\")) {\n const routingPolicyId = endpoint.replace(\"nonprod:\", \"\");\n return `${routingPolicyId}.realtime.ably-nonprod.net`;\n }\n return `${endpoint}.realtime.ably.net`;\n}\nfunction getEndpointFallbackHosts(endpoint) {\n if (isFqdnIpOrLocalhost(endpoint))\n return [];\n if (endpoint.startsWith(\"nonprod:\")) {\n const routingPolicyId = endpoint.replace(\"nonprod:\", \"\");\n return endpointFallbacks(routingPolicyId, \"ably-realtime-nonprod.com\");\n }\n return endpointFallbacks(endpoint, \"ably-realtime.com\");\n}\nfunction endpointFallbacks(routingPolicyId, domain) {\n return [\"a\", \"b\", \"c\", \"d\", \"e\"].map((id) => `${routingPolicyId}.${id}.fallback.${domain}`);\n}\nfunction getFallbackHosts(options) {\n const fallbackHosts = options.fallbackHosts, httpMaxRetryCount = typeof options.httpMaxRetryCount !== \"undefined\" ? options.httpMaxRetryCount : Defaults.httpMaxRetryCount;\n return fallbackHosts ? arrChooseN(fallbackHosts, httpMaxRetryCount) : [];\n}\nfunction getHosts(options) {\n return [options.primaryDomain].concat(getFallbackHosts(options));\n}\nfunction checkHost(host) {\n if (typeof host !== \"string\") {\n throw new ErrorInfo(\"host must be a string; was a \" + typeof host, 4e4, 400);\n }\n if (!host.length) {\n throw new ErrorInfo(\"host must not be zero-length\", 4e4, 400);\n }\n}\nfunction getTimeouts(options) {\n const timeouts = {};\n for (const prop in Defaults.TIMEOUTS) {\n timeouts[prop] = options[prop] || Defaults.TIMEOUTS[prop];\n }\n return timeouts;\n}\nfunction getAgentString(options) {\n let agentStr = Defaults.agent;\n if (options.agents) {\n for (var agent2 in options.agents) {\n agentStr += \" \" + agent2 + \"/\" + options.agents[agent2];\n }\n }\n return agentStr;\n}\nfunction objectifyOptions(options, allowKeyOrToken, sourceForErrorMessage, logger, modularPluginsToInclude) {\n if (options === void 0) {\n const msg = allowKeyOrToken ? `${sourceForErrorMessage} must be initialized with either a client options object, an Ably API key, or an Ably Token` : `${sourceForErrorMessage} must be initialized with a client options object`;\n logger_default.logAction(logger, logger_default.LOG_ERROR, `${sourceForErrorMessage}()`, msg);\n throw new Error(msg);\n }\n let optionsObj;\n if (typeof options === \"string\") {\n if (options.indexOf(\":\") == -1) {\n if (!allowKeyOrToken) {\n const msg = `${sourceForErrorMessage} cannot be initialized with just an Ably Token; you must provide a client options object with a \\`plugins\\` property. (Set this Ably Token as the object\\u2019s \\`token\\` property.)`;\n logger_default.logAction(logger, logger_default.LOG_ERROR, `${sourceForErrorMessage}()`, msg);\n throw new Error(msg);\n }\n optionsObj = { token: options };\n } else {\n if (!allowKeyOrToken) {\n const msg = `${sourceForErrorMessage} cannot be initialized with just an Ably API key; you must provide a client options object with a \\`plugins\\` property. (Set this Ably API key as the object\\u2019s \\`key\\` property.)`;\n logger_default.logAction(logger, logger_default.LOG_ERROR, `${sourceForErrorMessage}()`, msg);\n throw new Error(msg);\n }\n optionsObj = { key: options };\n }\n } else {\n optionsObj = options;\n }\n if (modularPluginsToInclude) {\n optionsObj = __spreadProps(__spreadValues({}, optionsObj), { plugins: __spreadValues(__spreadValues({}, modularPluginsToInclude), optionsObj.plugins) });\n }\n return optionsObj;\n}\nfunction checkIfClientOptionsAreValid(options) {\n if (options.endpoint && (options.environment || options.restHost || options.realtimeHost)) {\n throw new ErrorInfo(\n \"The `endpoint` option cannot be used in conjunction with the `environment`, `restHost`, or `realtimeHost` options.\",\n 40106,\n 400\n );\n }\n if (options.environment && (options.restHost || options.realtimeHost)) {\n throw new ErrorInfo(\n \"The `environment` option cannot be used in conjunction with the `restHost`, or `realtimeHost` options.\",\n 40106,\n 400\n );\n }\n}\nfunction normaliseOptions(options, MsgPack, logger) {\n const loggerToUse = logger != null ? logger : logger_default.defaultLogger;\n if (options.environment) {\n loggerToUse.deprecated(\"The `environment` client option\", \"Use the `endpoint` client option instead.\");\n }\n if (options.restHost) {\n loggerToUse.deprecated(\"The `restHost` client option\", \"Use the `endpoint` client option instead.\");\n }\n if (options.realtimeHost) {\n loggerToUse.deprecated(\"The `realtimeHost` client option\", \"Use the `endpoint` client option instead.\");\n }\n checkIfClientOptionsAreValid(options);\n if (typeof options.recover === \"function\" && options.closeOnUnload === true) {\n logger_default.logAction(\n loggerToUse,\n logger_default.LOG_ERROR,\n \"Defaults.normaliseOptions\",\n \"closeOnUnload was true and a session recovery function was set - these are mutually exclusive, so unsetting the latter\"\n );\n options.recover = void 0;\n }\n if (!(\"closeOnUnload\" in options)) {\n options.closeOnUnload = !options.recover;\n }\n if (!(\"queueMessages\" in options))\n options.queueMessages = true;\n const endpoint = options.endpoint || Defaults.ENDPOINT;\n if (!options.fallbackHosts && !options.restHost && !options.realtimeHost && !options.port && !options.tlsPort) {\n options.fallbackHosts = getEndpointFallbackHosts(options.environment || endpoint);\n }\n const primaryDomainFromEnvironment = options.environment && `${options.environment}.realtime.ably.net`;\n const primaryDomainFromLegacyOptions = options.restHost || options.realtimeHost || primaryDomainFromEnvironment;\n const primaryDomain = primaryDomainFromLegacyOptions || getPrimaryDomainFromEndpoint(endpoint);\n (options.fallbackHosts || []).concat(primaryDomain).forEach(checkHost);\n options.port = options.port || Defaults.PORT;\n options.tlsPort = options.tlsPort || Defaults.TLS_PORT;\n if (!(\"tls\" in options))\n options.tls = true;\n const timeouts = getTimeouts(options);\n if (MsgPack) {\n if (\"useBinaryProtocol\" in options) {\n options.useBinaryProtocol = Platform.Config.supportsBinary && options.useBinaryProtocol;\n } else {\n options.useBinaryProtocol = Platform.Config.preferBinary;\n }\n } else {\n options.useBinaryProtocol = false;\n }\n const headers = {};\n if (options.clientId) {\n headers[\"X-Ably-ClientId\"] = Platform.BufferUtils.base64Encode(Platform.BufferUtils.utf8Encode(options.clientId));\n }\n if (!(\"idempotentRestPublishing\" in options)) {\n options.idempotentRestPublishing = true;\n }\n let connectivityCheckParams = null;\n let connectivityCheckUrl = options.connectivityCheckUrl;\n if (options.connectivityCheckUrl) {\n let [uri, qs] = options.connectivityCheckUrl.split(\"?\");\n connectivityCheckParams = qs ? parseQueryString(qs) : {};\n if (uri.indexOf(\"://\") === -1) {\n uri = \"https://\" + uri;\n }\n connectivityCheckUrl = uri;\n }\n let wsConnectivityCheckUrl = options.wsConnectivityCheckUrl;\n if (wsConnectivityCheckUrl && wsConnectivityCheckUrl.indexOf(\"://\") === -1) {\n wsConnectivityCheckUrl = \"wss://\" + wsConnectivityCheckUrl;\n }\n return __spreadProps(__spreadValues({}, options), {\n primaryDomain,\n maxMessageSize: options.maxMessageSize || Defaults.maxMessageSize,\n timeouts,\n connectivityCheckParams,\n connectivityCheckUrl,\n wsConnectivityCheckUrl,\n headers\n });\n}\nfunction normaliseChannelOptions(Crypto2, logger, options) {\n const channelOptions = options || {};\n if (channelOptions.cipher) {\n if (!Crypto2)\n throwMissingPluginError(\"Crypto\");\n const cipher = Crypto2.getCipher(channelOptions.cipher, logger);\n channelOptions.cipher = cipher.cipherParams;\n channelOptions.channelCipher = cipher.cipher;\n } else if (\"cipher\" in channelOptions) {\n channelOptions.cipher = void 0;\n channelOptions.channelCipher = null;\n }\n return channelOptions;\n}\nvar contentTypes = {\n json: \"application/json\",\n xml: \"application/xml\",\n html: \"text/html\",\n msgpack: \"application/x-msgpack\",\n text: \"text/plain\"\n};\nvar defaultHeadersOptions = {\n format: \"json\" /* json */,\n protocolVersion: Defaults.protocolVersion\n};\nfunction defaultGetHeaders(options, {\n format = defaultHeadersOptions.format,\n protocolVersion = defaultHeadersOptions.protocolVersion\n} = {}) {\n const accept = contentTypes[format];\n return {\n accept,\n \"X-Ably-Version\": protocolVersion.toString(),\n \"Ably-Agent\": getAgentString(options)\n };\n}\nfunction defaultPostHeaders(options, {\n format = defaultHeadersOptions.format,\n protocolVersion = defaultHeadersOptions.protocolVersion\n} = {}) {\n let contentType;\n const accept = contentType = contentTypes[format];\n return {\n accept,\n \"content-type\": contentType,\n \"X-Ably-Version\": protocolVersion.toString(),\n \"Ably-Agent\": getAgentString(options)\n };\n}\nvar defaults_default = Defaults;\nfunction getDefaults(platformDefaults) {\n return Object.assign(Defaults, platformDefaults);\n}\n\n// src/common/lib/util/multicaster.ts\nvar Multicaster = class _Multicaster {\n // Private constructor; use static Multicaster.create instead\n constructor(logger, members) {\n this.logger = logger;\n this.members = members || [];\n }\n call(err, result) {\n for (const member of this.members) {\n if (member) {\n try {\n member(err, result);\n } catch (e) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_ERROR,\n \"Multicaster multiple callback handler\",\n \"Unexpected exception: \" + e + \"; stack = \" + e.stack\n );\n }\n }\n }\n }\n push(...args) {\n this.members.push(...args);\n }\n createPromise() {\n return new Promise((resolve, reject) => {\n this.push((err, result) => {\n err ? reject(err) : resolve(result);\n });\n });\n }\n resolveAll(result) {\n this.call(null, result);\n }\n rejectAll(err) {\n this.call(err);\n }\n static create(logger, members) {\n const instance = new _Multicaster(logger, members);\n return Object.assign((err, result) => instance.call(err, result), {\n push: (fn) => instance.push(fn),\n createPromise: () => instance.createPromise(),\n resolveAll: (result) => instance.resolveAll(result),\n rejectAll: (err) => instance.rejectAll(err)\n });\n }\n};\nvar multicaster_default = Multicaster;\n\n// src/common/constants/HttpMethods.ts\nvar HttpMethods = /* @__PURE__ */ ((HttpMethods2) => {\n HttpMethods2[\"Get\"] = \"get\";\n HttpMethods2[\"Delete\"] = \"delete\";\n HttpMethods2[\"Post\"] = \"post\";\n HttpMethods2[\"Put\"] = \"put\";\n HttpMethods2[\"Patch\"] = \"patch\";\n return HttpMethods2;\n})(HttpMethods || {});\nvar HttpMethods_default = HttpMethods;\n\n// src/common/constants/HttpStatusCodes.ts\nvar HttpStatusCodes = /* @__PURE__ */ ((HttpStatusCodes2) => {\n HttpStatusCodes2[HttpStatusCodes2[\"Success\"] = 200] = \"Success\";\n HttpStatusCodes2[HttpStatusCodes2[\"NoContent\"] = 204] = \"NoContent\";\n HttpStatusCodes2[HttpStatusCodes2[\"BadRequest\"] = 400] = \"BadRequest\";\n HttpStatusCodes2[HttpStatusCodes2[\"Unauthorized\"] = 401] = \"Unauthorized\";\n HttpStatusCodes2[HttpStatusCodes2[\"Forbidden\"] = 403] = \"Forbidden\";\n HttpStatusCodes2[HttpStatusCodes2[\"RequestTimeout\"] = 408] = \"RequestTimeout\";\n HttpStatusCodes2[HttpStatusCodes2[\"InternalServerError\"] = 500] = \"InternalServerError\";\n return HttpStatusCodes2;\n})(HttpStatusCodes || {});\nfunction isSuccessCode(statusCode) {\n return statusCode >= 200 /* Success */ && statusCode < 400 /* BadRequest */;\n}\nvar HttpStatusCodes_default = HttpStatusCodes;\n\n// src/common/lib/client/auth.ts\nvar MAX_TOKEN_LENGTH = Math.pow(2, 17);\nfunction random() {\n return (\"000000\" + Math.floor(Math.random() * 1e16)).slice(-16);\n}\nfunction isRealtime(client) {\n return !!client.connection;\n}\nfunction normaliseAuthcallbackError(err) {\n if (!isErrorInfoOrPartialErrorInfo(err)) {\n return new ErrorInfo(inspectError(err), err.code || 40170, err.statusCode || 401);\n }\n if (!err.code) {\n if (err.statusCode === 403) {\n err.code = 40300;\n } else {\n err.code = 40170;\n err.statusCode = 401;\n }\n }\n return err;\n}\nvar hmac = (text, key) => {\n const bufferUtils = Platform.BufferUtils;\n const textBuffer = bufferUtils.utf8Encode(text);\n const keyBuffer = bufferUtils.utf8Encode(key);\n const digest = bufferUtils.hmacSha256(textBuffer, keyBuffer);\n return bufferUtils.base64Encode(digest);\n};\nfunction c14n(capability) {\n if (!capability)\n return \"\";\n if (typeof capability == \"string\")\n capability = JSON.parse(capability);\n const c14nCapability = /* @__PURE__ */ Object.create(null);\n const keys = keysArray(capability, true);\n if (!keys)\n return \"\";\n keys.sort();\n for (let i = 0; i < keys.length; i++) {\n c14nCapability[keys[i]] = capability[keys[i]].sort();\n }\n return JSON.stringify(c14nCapability);\n}\nfunction logAndValidateTokenAuthMethod(authOptions, logger) {\n if (authOptions.authCallback) {\n logger_default.logAction(logger, logger_default.LOG_MINOR, \"Auth()\", \"using token auth with authCallback\");\n } else if (authOptions.authUrl) {\n logger_default.logAction(logger, logger_default.LOG_MINOR, \"Auth()\", \"using token auth with authUrl\");\n } else if (authOptions.key) {\n logger_default.logAction(logger, logger_default.LOG_MINOR, \"Auth()\", \"using token auth with client-side signing\");\n } else if (authOptions.tokenDetails) {\n logger_default.logAction(logger, logger_default.LOG_MINOR, \"Auth()\", \"using token auth with supplied token only\");\n } else {\n const msg = \"authOptions must include valid authentication parameters\";\n logger_default.logAction(logger, logger_default.LOG_ERROR, \"Auth()\", msg);\n throw new Error(msg);\n }\n}\nfunction basicAuthForced(options) {\n return \"useTokenAuth\" in options && !options.useTokenAuth;\n}\nfunction useTokenAuth(options) {\n return options.useTokenAuth || !basicAuthForced(options) && (options.authCallback || options.authUrl || options.token || options.tokenDetails);\n}\nfunction noWayToRenew(options) {\n return !options.key && !options.authCallback && !options.authUrl;\n}\nvar trId = 0;\nfunction getTokenRequestId() {\n return trId++;\n}\nvar Auth = class {\n constructor(client, options) {\n // This initialization is always overwritten and only used to prevent a TypeScript compiler error\n this.authOptions = {};\n this.client = client;\n this.tokenParams = options.defaultTokenParams || {};\n this.currentTokenRequestId = null;\n this.waitingForTokenRequest = null;\n if (useTokenAuth(options)) {\n if (noWayToRenew(options)) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_ERROR,\n \"Auth()\",\n \"Warning: library initialized with a token literal without any way to renew the token when it expires (no authUrl, authCallback, or key). See https://help.ably.io/error/40171 for help\"\n );\n }\n this._saveTokenOptions(options.defaultTokenParams, options);\n logAndValidateTokenAuthMethod(this.authOptions, this.logger);\n } else {\n if (!options.key) {\n const msg = \"No authentication options provided; need one of: key, authUrl, or authCallback (or for testing only, token or tokenDetails)\";\n logger_default.logAction(this.logger, logger_default.LOG_ERROR, \"Auth()\", msg);\n throw new ErrorInfo(msg, 40160, 401);\n }\n logger_default.logAction(this.logger, logger_default.LOG_MINOR, \"Auth()\", \"anonymous, using basic auth\");\n this._saveBasicOptions(options);\n }\n }\n get logger() {\n return this.client.logger;\n }\n async authorize(tokenParams, authOptions) {\n if (authOptions && authOptions.key && this.authOptions.key !== authOptions.key) {\n throw new ErrorInfo(\"Unable to update auth options with incompatible key\", 40102, 401);\n }\n try {\n let tokenDetails = await this._forceNewToken(tokenParams != null ? tokenParams : null, authOptions != null ? authOptions : null);\n if (isRealtime(this.client)) {\n return new Promise((resolve, reject) => {\n this.client.connection.connectionManager.onAuthUpdated(\n tokenDetails,\n (err, tokenDetails2) => err ? reject(err) : resolve(tokenDetails2)\n );\n });\n } else {\n return tokenDetails;\n }\n } catch (err) {\n if (this.client.connection && err.statusCode === HttpStatusCodes_default.Forbidden) {\n this.client.connection.connectionManager.actOnErrorFromAuthorize(err);\n }\n throw err;\n }\n }\n /* For internal use, eg by connectionManager - useful when want to call back\n * as soon as we have the new token, rather than waiting for it to take\n * effect on the connection as #authorize does */\n async _forceNewToken(tokenParams, authOptions) {\n this.tokenDetails = null;\n this._saveTokenOptions(tokenParams, authOptions);\n logAndValidateTokenAuthMethod(this.authOptions, this.logger);\n try {\n return this._ensureValidAuthCredentials(true);\n } finally {\n delete this.tokenParams.timestamp;\n delete this.authOptions.queryTime;\n }\n }\n async requestToken(tokenParams, authOptions) {\n const resolvedAuthOptions = authOptions || this.authOptions;\n const resolvedTokenParams = tokenParams || copy(this.tokenParams);\n let tokenRequestCallback, client = this.client;\n if (resolvedAuthOptions.authCallback) {\n logger_default.logAction(this.logger, logger_default.LOG_MINOR, \"Auth.requestToken()\", \"using token auth with authCallback\");\n tokenRequestCallback = resolvedAuthOptions.authCallback;\n } else if (resolvedAuthOptions.authUrl) {\n logger_default.logAction(this.logger, logger_default.LOG_MINOR, \"Auth.requestToken()\", \"using token auth with authUrl\");\n tokenRequestCallback = (params, cb) => {\n const authHeaders = mixin(\n { accept: \"application/json, text/plain\" },\n resolvedAuthOptions.authHeaders\n );\n const usePost = resolvedAuthOptions.authMethod && resolvedAuthOptions.authMethod.toLowerCase() === \"post\";\n let providedQsParams;\n const queryIdx = resolvedAuthOptions.authUrl.indexOf(\"?\");\n if (queryIdx > -1) {\n providedQsParams = parseQueryString(resolvedAuthOptions.authUrl.slice(queryIdx));\n resolvedAuthOptions.authUrl = resolvedAuthOptions.authUrl.slice(0, queryIdx);\n if (!usePost) {\n resolvedAuthOptions.authParams = mixin(\n providedQsParams,\n resolvedAuthOptions.authParams\n );\n }\n }\n const authParams = mixin({}, resolvedAuthOptions.authParams || {}, params);\n const authUrlRequestCallback = (result) => {\n var _a2, _b;\n let body = (_a2 = result.body) != null ? _a2 : null;\n let contentType = null;\n if (result.error) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MICRO,\n \"Auth.requestToken().tokenRequestCallback\",\n \"Received Error: \" + inspectError(result.error)\n );\n } else {\n const contentTypeHeaderOrHeaders = (_b = result.headers[\"content-type\"]) != null ? _b : null;\n if (Array.isArray(contentTypeHeaderOrHeaders)) {\n contentType = contentTypeHeaderOrHeaders.join(\", \");\n } else {\n contentType = contentTypeHeaderOrHeaders;\n }\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MICRO,\n \"Auth.requestToken().tokenRequestCallback\",\n \"Received; content-type: \" + contentType + \"; body: \" + inspectBody(body)\n );\n }\n if (result.error) {\n cb(result.error, null);\n return;\n }\n if (result.unpacked) {\n cb(null, body);\n return;\n }\n if (Platform.BufferUtils.isBuffer(body))\n body = body.toString();\n if (!contentType) {\n cb(new ErrorInfo(\"authUrl response is missing a content-type header\", 40170, 401), null);\n return;\n }\n const json = contentType.indexOf(\"application/json\") > -1, text = contentType.indexOf(\"text/plain\") > -1 || contentType.indexOf(\"application/jwt\") > -1;\n if (!json && !text) {\n cb(\n new ErrorInfo(\n \"authUrl responded with unacceptable content-type \" + contentType + \", should be either text/plain, application/jwt or application/json\",\n 40170,\n 401\n ),\n null\n );\n return;\n }\n if (json) {\n if (body.length > MAX_TOKEN_LENGTH) {\n cb(new ErrorInfo(\"authUrl response exceeded max permitted length\", 40170, 401), null);\n return;\n }\n try {\n body = JSON.parse(body);\n } catch (e) {\n cb(\n new ErrorInfo(\n \"Unexpected error processing authURL response; err = \" + e.message,\n 40170,\n 401\n ),\n null\n );\n return;\n }\n }\n cb(null, body, contentType);\n };\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MICRO,\n \"Auth.requestToken().tokenRequestCallback\",\n \"Requesting token from \" + resolvedAuthOptions.authUrl + \"; Params: \" + JSON.stringify(authParams) + \"; method: \" + (usePost ? \"POST\" : \"GET\")\n );\n if (usePost) {\n const headers = authHeaders || {};\n headers[\"content-type\"] = \"application/x-www-form-urlencoded\";\n const body = toQueryString(authParams).slice(1);\n whenPromiseSettles(\n this.client.http.doUri(\n HttpMethods_default.Post,\n resolvedAuthOptions.authUrl,\n headers,\n body,\n providedQsParams\n ),\n (err, result) => err ? authUrlRequestCallback(err) : authUrlRequestCallback(result)\n );\n } else {\n whenPromiseSettles(\n this.client.http.doUri(HttpMethods_default.Get, resolvedAuthOptions.authUrl, authHeaders || {}, null, authParams),\n (err, result) => err ? authUrlRequestCallback(err) : authUrlRequestCallback(result)\n );\n }\n };\n } else if (resolvedAuthOptions.key) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MINOR,\n \"Auth.requestToken()\",\n \"using token auth with client-side signing\"\n );\n tokenRequestCallback = (params, cb) => {\n whenPromiseSettles(\n this.createTokenRequest(params, resolvedAuthOptions),\n (err, result) => cb(err, result != null ? result : null)\n );\n };\n } else {\n const msg = \"Need a new token, but authOptions does not include any way to request one (no authUrl, authCallback, or key)\";\n logger_default.logAction(\n this.logger,\n logger_default.LOG_ERROR,\n \"Auth()\",\n \"library initialized with a token literal without any way to renew the token when it expires (no authUrl, authCallback, or key). See https://help.ably.io/error/40171 for help\"\n );\n throw new ErrorInfo(msg, 40171, 403);\n }\n if (\"capability\" in resolvedTokenParams)\n resolvedTokenParams.capability = c14n(\n resolvedTokenParams.capability\n );\n const tokenRequest = (signedTokenParams, tokenCb) => {\n const keyName = signedTokenParams.keyName, path = \"/keys/\" + keyName + \"/requestToken\", tokenUri = function(host) {\n return client.baseUri(host) + path;\n };\n const requestHeaders = defaults_default.defaultPostHeaders(this.client.options);\n if (resolvedAuthOptions.requestHeaders)\n mixin(requestHeaders, resolvedAuthOptions.requestHeaders);\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MICRO,\n \"Auth.requestToken().requestToken\",\n \"Sending POST to \" + path + \"; Token params: \" + JSON.stringify(signedTokenParams)\n );\n whenPromiseSettles(\n this.client.http.do(HttpMethods_default.Post, tokenUri, requestHeaders, JSON.stringify(signedTokenParams), null),\n (err, result) => err ? tokenCb(err) : tokenCb(result.error, result.body, result.unpacked)\n );\n };\n return new Promise((resolve, reject) => {\n let tokenRequestCallbackTimeoutExpired = false, timeoutLength = this.client.options.timeouts.realtimeRequestTimeout, tokenRequestCallbackTimeout = setTimeout(() => {\n tokenRequestCallbackTimeoutExpired = true;\n const msg = \"Token request callback timed out after \" + timeoutLength / 1e3 + \" seconds\";\n logger_default.logAction(this.logger, logger_default.LOG_ERROR, \"Auth.requestToken()\", msg);\n reject(new ErrorInfo(msg, 40170, 401));\n }, timeoutLength);\n tokenRequestCallback(resolvedTokenParams, (err, tokenRequestOrDetails, contentType) => {\n if (tokenRequestCallbackTimeoutExpired)\n return;\n clearTimeout(tokenRequestCallbackTimeout);\n if (err) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_ERROR,\n \"Auth.requestToken()\",\n \"token request signing call returned error; err = \" + inspectError(err)\n );\n reject(normaliseAuthcallbackError(err));\n return;\n }\n if (typeof tokenRequestOrDetails === \"string\") {\n if (tokenRequestOrDetails.length === 0) {\n reject(new ErrorInfo(\"Token string is empty\", 40170, 401));\n } else if (tokenRequestOrDetails.length > MAX_TOKEN_LENGTH) {\n reject(\n new ErrorInfo(\n \"Token string exceeded max permitted length (was \" + tokenRequestOrDetails.length + \" bytes)\",\n 40170,\n 401\n )\n );\n } else if (tokenRequestOrDetails === \"undefined\" || tokenRequestOrDetails === \"null\") {\n reject(new ErrorInfo(\"Token string was literal null/undefined\", 40170, 401));\n } else if (tokenRequestOrDetails[0] === \"{\" && !(contentType && contentType.indexOf(\"application/jwt\") > -1)) {\n reject(\n new ErrorInfo(\n \"Token was double-encoded; make sure you're not JSON-encoding an already encoded token request or details\",\n 40170,\n 401\n )\n );\n } else {\n resolve({ token: tokenRequestOrDetails });\n }\n return;\n }\n if (typeof tokenRequestOrDetails !== \"object\" || tokenRequestOrDetails === null) {\n const msg = \"Expected token request callback to call back with a token string or token request/details object, but got a \" + typeof tokenRequestOrDetails;\n logger_default.logAction(this.logger, logger_default.LOG_ERROR, \"Auth.requestToken()\", msg);\n reject(new ErrorInfo(msg, 40170, 401));\n return;\n }\n const objectSize = JSON.stringify(tokenRequestOrDetails).length;\n if (objectSize > MAX_TOKEN_LENGTH && !resolvedAuthOptions.suppressMaxLengthCheck) {\n reject(\n new ErrorInfo(\n \"Token request/details object exceeded max permitted stringified size (was \" + objectSize + \" bytes)\",\n 40170,\n 401\n )\n );\n return;\n }\n if (\"issued\" in tokenRequestOrDetails) {\n resolve(tokenRequestOrDetails);\n return;\n }\n if (!(\"keyName\" in tokenRequestOrDetails)) {\n const msg = \"Expected token request callback to call back with a token string, token request object, or token details object\";\n logger_default.logAction(this.logger, logger_default.LOG_ERROR, \"Auth.requestToken()\", msg);\n reject(new ErrorInfo(msg, 40170, 401));\n return;\n }\n tokenRequest(tokenRequestOrDetails, (err2, tokenResponse, unpacked) => {\n if (err2) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_ERROR,\n \"Auth.requestToken()\",\n \"token request API call returned error; err = \" + inspectError(err2)\n );\n reject(normaliseAuthcallbackError(err2));\n return;\n }\n if (!unpacked)\n tokenResponse = JSON.parse(tokenResponse);\n logger_default.logAction(this.logger, logger_default.LOG_MINOR, \"Auth.getToken()\", \"token received\");\n resolve(tokenResponse);\n });\n });\n });\n }\n /**\n * Create and sign a token request based on the given options.\n * NOTE this can only be used when the key value is available locally.\n * Otherwise, signed token requests must be obtained from the key\n * owner (either using the token request callback or url).\n *\n * @param authOptions\n * an object containing the request options:\n * - key: the key to use. If not specified, a key passed in constructing\n * the Rest interface will be used\n *\n * - queryTime (optional) boolean indicating that the ably system should be\n * queried for the current time when none is specified explicitly\n *\n * - requestHeaders (optional, unsupported, for testing only) extra headers to add to the\n * requestToken request\n *\n * @param tokenParams\n * an object containing the parameters for the requested token:\n * - ttl: (optional) the requested life of the token in ms. If none is specified\n * a default of 1 hour is provided. The maximum lifetime is 24hours; any request\n * exceeding that lifetime will be rejected with an error.\n *\n * - capability: (optional) the capability to associate with the access token.\n * If none is specified, a token will be requested with all of the\n * capabilities of the specified key.\n *\n * - clientId: (optional) a client ID to associate with the token; if not\n * specified, a clientId passed in constructing the Rest interface will be used\n *\n * - timestamp: (optional) the time in ms since the epoch. If none is specified,\n * the system will be queried for a time value to use.\n */\n async createTokenRequest(tokenParams, authOptions) {\n authOptions = authOptions || this.authOptions;\n tokenParams = tokenParams || copy(this.tokenParams);\n const key = authOptions.key;\n if (!key) {\n throw new ErrorInfo(\"No key specified\", 40101, 403);\n }\n const keyParts = key.split(\":\"), keyName = keyParts[0], keySecret = keyParts[1];\n if (!keySecret) {\n throw new ErrorInfo(\"Invalid key specified\", 40101, 403);\n }\n if (tokenParams.clientId === \"\") {\n throw new ErrorInfo(\"clientId can\\u2019t be an empty string\", 40012, 400);\n }\n if (\"capability\" in tokenParams) {\n tokenParams.capability = c14n(tokenParams.capability);\n }\n const request = mixin({ keyName }, tokenParams), clientId = tokenParams.clientId || \"\", ttl = tokenParams.ttl || \"\", capability = tokenParams.capability || \"\";\n if (!request.timestamp) {\n request.timestamp = await this._getTimestamp(authOptions && authOptions.queryTime);\n }\n const nonce = request.nonce || (request.nonce = random()), timestamp = request.timestamp;\n const signText = request.keyName + \"\\n\" + ttl + \"\\n\" + capability + \"\\n\" + clientId + \"\\n\" + timestamp + \"\\n\" + nonce + \"\\n\";\n request.mac = request.mac || hmac(signText, keySecret);\n logger_default.logAction(this.logger, logger_default.LOG_MINOR, \"Auth.getTokenRequest()\", \"generated signed request\");\n return request;\n }\n /**\n * Get the auth query params to use for a websocket connection,\n * based on the current auth parameters\n */\n async getAuthParams() {\n if (this.method == \"basic\")\n return { key: this.key };\n else {\n let tokenDetails = await this._ensureValidAuthCredentials(false);\n if (!tokenDetails) {\n throw new Error(\"Auth.getAuthParams(): _ensureValidAuthCredentials returned no error or tokenDetails\");\n }\n return { access_token: tokenDetails.token };\n }\n }\n /**\n * Get the authorization header to use for a REST or comet request,\n * based on the current auth parameters\n */\n async getAuthHeaders() {\n if (this.method == \"basic\") {\n return { authorization: \"Basic \" + this.basicKey };\n } else {\n const tokenDetails = await this._ensureValidAuthCredentials(false);\n if (!tokenDetails) {\n throw new Error(\"Auth.getAuthParams(): _ensureValidAuthCredentials returned no error or tokenDetails\");\n }\n return { authorization: \"Bearer \" + toBase64(tokenDetails.token) };\n }\n }\n _saveBasicOptions(authOptions) {\n this.method = \"basic\";\n this.key = authOptions.key;\n this.basicKey = toBase64(authOptions.key);\n this.authOptions = authOptions || {};\n if (\"clientId\" in authOptions) {\n this._userSetClientId(authOptions.clientId);\n }\n }\n _saveTokenOptions(tokenParams, authOptions) {\n this.method = \"token\";\n if (tokenParams) {\n this.tokenParams = tokenParams;\n }\n if (authOptions) {\n if (authOptions.token) {\n authOptions.tokenDetails = typeof authOptions.token === \"string\" ? { token: authOptions.token } : authOptions.token;\n }\n if (authOptions.tokenDetails) {\n this.tokenDetails = authOptions.tokenDetails;\n }\n if (\"clientId\" in authOptions) {\n this._userSetClientId(authOptions.clientId);\n }\n this.authOptions = authOptions;\n }\n }\n /* @param forceSupersede: force a new token request even if there's one in\n * progress, making all pending callbacks wait for the new one */\n async _ensureValidAuthCredentials(forceSupersede) {\n const token = this.tokenDetails;\n if (token) {\n if (this._tokenClientIdMismatch(token.clientId)) {\n throw new ErrorInfo(\n \"Mismatch between clientId in token (\" + token.clientId + \") and current clientId (\" + this.clientId + \")\",\n 40102,\n 403\n );\n }\n if (!this.client.isTimeOffsetSet() || !token.expires || token.expires >= this.client.getTimestampUsingOffset()) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MINOR,\n \"Auth.getToken()\",\n \"using cached token; expires = \" + token.expires\n );\n return token;\n }\n logger_default.logAction(this.logger, logger_default.LOG_MINOR, \"Auth.getToken()\", \"deleting expired token\");\n this.tokenDetails = null;\n }\n const promise = (this.waitingForTokenRequest || (this.waitingForTokenRequest = multicaster_default.create(this.logger))).createPromise();\n if (this.currentTokenRequestId !== null && !forceSupersede) {\n return promise;\n }\n const tokenRequestId = this.currentTokenRequestId = getTokenRequestId();\n let tokenResponse, caughtError = null;\n try {\n tokenResponse = await this.requestToken(this.tokenParams, this.authOptions);\n } catch (err) {\n caughtError = err;\n }\n if (this.currentTokenRequestId > tokenRequestId) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MINOR,\n \"Auth._ensureValidAuthCredentials()\",\n \"Discarding token request response; overtaken by newer one\"\n );\n return promise;\n }\n this.currentTokenRequestId = null;\n const multicaster = this.waitingForTokenRequest;\n this.waitingForTokenRequest = null;\n if (caughtError) {\n multicaster == null ? void 0 : multicaster.rejectAll(caughtError);\n return promise;\n }\n multicaster == null ? void 0 : multicaster.resolveAll(this.tokenDetails = tokenResponse);\n return promise;\n }\n /* User-set: check types, '*' is disallowed, throw any errors */\n _userSetClientId(clientId) {\n if (!(typeof clientId === \"string\" || clientId === null)) {\n throw new ErrorInfo(\"clientId must be either a string or null\", 40012, 400);\n } else if (clientId === \"*\") {\n throw new ErrorInfo(\n 'Can\\u2019t use \"*\" as a clientId as that string is reserved. (To change the default token request behaviour to use a wildcard clientId, instantiate the library with {defaultTokenParams: {clientId: \"*\"}}), or if calling authorize(), pass it in as a tokenParam: authorize({clientId: \"*\"}, authOptions)',\n 40012,\n 400\n );\n } else {\n const err = this._uncheckedSetClientId(clientId);\n if (err)\n throw err;\n }\n }\n /* Ably-set: no typechecking, '*' is allowed but not set on this.clientId), return errors to the caller */\n _uncheckedSetClientId(clientId) {\n if (this._tokenClientIdMismatch(clientId)) {\n const msg = \"Unexpected clientId mismatch: client has \" + this.clientId + \", requested \" + clientId;\n const err = new ErrorInfo(msg, 40102, 401);\n logger_default.logAction(this.logger, logger_default.LOG_ERROR, \"Auth._uncheckedSetClientId()\", msg);\n return err;\n } else {\n this.clientId = this.tokenParams.clientId = clientId;\n return null;\n }\n }\n _tokenClientIdMismatch(tokenClientId) {\n return !!(this.clientId && this.clientId !== \"*\" && tokenClientId && tokenClientId !== \"*\" && this.clientId !== tokenClientId);\n }\n static isTokenErr(error) {\n return error.code && error.code >= 40140 && error.code < 40150;\n }\n revokeTokens(specifiers, options) {\n return this.client.rest.revokeTokens(specifiers, options);\n }\n /**\n * Same as {@link BaseClient.getTimestamp} but also takes into account {@link Auth.authOptions}\n */\n async _getTimestamp(queryTime) {\n return this.client.getTimestamp(queryTime || !!this.authOptions.queryTime);\n }\n};\nvar auth_default = Auth;\n\n// src/common/types/http.ts\nfunction paramString(params) {\n const paramPairs = [];\n if (params) {\n for (const needle in params) {\n paramPairs.push(needle + \"=\" + params[needle]);\n }\n }\n return paramPairs.join(\"&\");\n}\nfunction appendingParams(uri, params) {\n return uri + (params ? \"?\" : \"\") + paramString(params);\n}\nfunction logResult(result, method, uri, params, logger) {\n if (result.error) {\n logger_default.logActionNoStrip(\n logger,\n logger_default.LOG_MICRO,\n \"Http.\" + method + \"()\",\n \"Received Error; \" + appendingParams(uri, params) + \"; Error: \" + inspectError(result.error)\n );\n } else {\n logger_default.logActionNoStrip(\n logger,\n logger_default.LOG_MICRO,\n \"Http.\" + method + \"()\",\n \"Received; \" + appendingParams(uri, params) + \"; Headers: \" + paramString(result.headers) + \"; StatusCode: \" + result.statusCode + \"; Body\" + (Platform.BufferUtils.isBuffer(result.body) ? \" (Base64): \" + Platform.BufferUtils.base64Encode(result.body) : \": \" + result.body)\n );\n }\n}\nfunction logRequest(method, uri, body, params, logger) {\n if (logger.shouldLog(logger_default.LOG_MICRO)) {\n logger_default.logActionNoStrip(\n logger,\n logger_default.LOG_MICRO,\n \"Http.\" + method + \"()\",\n \"Sending; \" + appendingParams(uri, params) + \"; Body\" + (Platform.BufferUtils.isBuffer(body) ? \" (Base64): \" + Platform.BufferUtils.base64Encode(body) : \": \" + body)\n );\n }\n}\nvar Http = class {\n constructor(client) {\n this.client = client;\n this.platformHttp = new Platform.Http(client);\n this.checkConnectivity = this.platformHttp.checkConnectivity ? () => this.platformHttp.checkConnectivity() : void 0;\n }\n get logger() {\n var _a2, _b;\n return (_b = (_a2 = this.client) == null ? void 0 : _a2.logger) != null ? _b : logger_default.defaultLogger;\n }\n get supportsAuthHeaders() {\n return this.platformHttp.supportsAuthHeaders;\n }\n get supportsLinkHeaders() {\n return this.platformHttp.supportsLinkHeaders;\n }\n _getHosts(client) {\n const connection = client.connection, connectionHost = connection && connection.connectionManager.host;\n if (connectionHost) {\n return [connectionHost].concat(defaults_default.getFallbackHosts(client.options));\n }\n return defaults_default.getHosts(client.options);\n }\n /**\n * This method will not throw any errors; rather, it will communicate any error by populating the {@link RequestResult.error} property of the returned {@link RequestResult}.\n */\n async do(method, path, headers, body, params) {\n try {\n const client = this.client;\n if (!client) {\n return { error: new ErrorInfo(\"http.do called without client\", 5e4, 500) };\n }\n const uriFromHost = typeof path === \"function\" ? path : function(host) {\n return client.baseUri(host) + path;\n };\n const currentFallback = client._currentFallback;\n if (currentFallback) {\n if (currentFallback.validUntil > Date.now()) {\n const result = await this.doUri(method, uriFromHost(currentFallback.host), headers, body, params);\n if (result.error && this.platformHttp.shouldFallback(result.error)) {\n client._currentFallback = null;\n return this.do(method, path, headers, body, params);\n }\n return result;\n } else {\n client._currentFallback = null;\n }\n }\n const hosts = this._getHosts(client);\n if (hosts.length === 1) {\n return this.doUri(method, uriFromHost(hosts[0]), headers, body, params);\n }\n let tryAHostStartedAt = null;\n const tryAHost = async (candidateHosts, persistOnSuccess) => {\n const host = candidateHosts.shift();\n tryAHostStartedAt = tryAHostStartedAt != null ? tryAHostStartedAt : /* @__PURE__ */ new Date();\n const result = await this.doUri(method, uriFromHost(host), headers, body, params);\n if (result.error && this.platformHttp.shouldFallback(result.error) && candidateHosts.length) {\n const elapsedTime = Date.now() - tryAHostStartedAt.getTime();\n if (elapsedTime > client.options.timeouts.httpMaxRetryDuration) {\n return {\n error: new ErrorInfo(\n `Timeout for trying fallback hosts retries. Total elapsed time exceeded the ${client.options.timeouts.httpMaxRetryDuration}ms limit`,\n 50003,\n 500\n )\n };\n }\n return tryAHost(candidateHosts, true);\n }\n if (persistOnSuccess) {\n client._currentFallback = {\n host,\n validUntil: Date.now() + client.options.timeouts.fallbackRetryTimeout\n };\n }\n return result;\n };\n return tryAHost(hosts);\n } catch (err) {\n return { error: new ErrorInfo(`Unexpected error in Http.do: ${inspectError(err)}`, 500, 5e4) };\n }\n }\n /**\n * This method will not throw any errors; rather, it will communicate any error by populating the {@link RequestResult.error} property of the returned {@link RequestResult}.\n */\n async doUri(method, uri, headers, body, params) {\n try {\n logRequest(method, uri, body, params, this.logger);\n const result = await this.platformHttp.doUri(method, uri, headers, body, params);\n if (this.logger.shouldLog(logger_default.LOG_MICRO)) {\n logResult(result, method, uri, params, this.logger);\n }\n return result;\n } catch (err) {\n return { error: new ErrorInfo(`Unexpected error in Http.doUri: ${inspectError(err)}`, 500, 5e4) };\n }\n }\n};\n\n// src/common/lib/util/eventemitter.ts\nfunction callListener(logger, eventThis, listener, args) {\n try {\n listener.apply(eventThis, args);\n } catch (e) {\n logger_default.logAction(\n logger,\n logger_default.LOG_ERROR,\n \"EventEmitter.emit()\",\n \"Unexpected listener exception: \" + e + \"; stack = \" + (e && e.stack)\n );\n }\n}\nfunction removeListener(targetListeners, listener, eventFilter) {\n let listeners;\n let index;\n let eventName;\n for (let targetListenersIndex = 0; targetListenersIndex < targetListeners.length; targetListenersIndex++) {\n listeners = targetListeners[targetListenersIndex];\n if (eventFilter) {\n listeners = listeners[eventFilter];\n }\n if (Array.isArray(listeners)) {\n while ((index = listeners.indexOf(listener)) !== -1) {\n listeners.splice(index, 1);\n }\n if (eventFilter && listeners.length === 0) {\n delete targetListeners[targetListenersIndex][eventFilter];\n }\n } else if (isObject(listeners)) {\n for (eventName in listeners) {\n if (Object.prototype.hasOwnProperty.call(listeners, eventName) && Array.isArray(listeners[eventName])) {\n removeListener([listeners], listener, eventName);\n }\n }\n }\n }\n}\nvar EventEmitter = class {\n constructor(logger) {\n this.logger = logger;\n this.any = [];\n this.events = /* @__PURE__ */ Object.create(null);\n this.anyOnce = [];\n this.eventsOnce = /* @__PURE__ */ Object.create(null);\n }\n on(...args) {\n if (args.length === 1) {\n const listener = args[0];\n if (typeof listener === \"function\") {\n this.any.push(listener);\n } else {\n throw new Error(\"EventListener.on(): Invalid arguments: \" + Platform.Config.inspect(args));\n }\n }\n if (args.length === 2) {\n const [event, listener] = args;\n if (typeof listener !== \"function\") {\n throw new Error(\"EventListener.on(): Invalid arguments: \" + Platform.Config.inspect(args));\n }\n if (isNil(event)) {\n this.any.push(listener);\n } else if (Array.isArray(event)) {\n event.forEach((eventName) => {\n this.on(eventName, listener);\n });\n } else {\n if (typeof event !== \"string\") {\n throw new Error(\"EventListener.on(): Invalid arguments: \" + Platform.Config.inspect(args));\n }\n const listeners = this.events[event] || (this.events[event] = []);\n listeners.push(listener);\n }\n }\n }\n off(...args) {\n if (args.length == 0 || isNil(args[0]) && isNil(args[1])) {\n this.any = [];\n this.events = /* @__PURE__ */ Object.create(null);\n this.anyOnce = [];\n this.eventsOnce = /* @__PURE__ */ Object.create(null);\n return;\n }\n const [firstArg, secondArg] = args;\n let listener = null;\n let event = null;\n if (args.length === 1 || !secondArg) {\n if (typeof firstArg === \"function\") {\n listener = firstArg;\n } else {\n event = firstArg;\n }\n } else {\n if (typeof secondArg !== \"function\") {\n throw new Error(\"EventEmitter.off(): invalid arguments:\" + Platform.Config.inspect(args));\n }\n [event, listener] = [firstArg, secondArg];\n }\n if (listener && isNil(event)) {\n removeListener([this.any, this.events, this.anyOnce, this.eventsOnce], listener);\n return;\n }\n if (Array.isArray(event)) {\n event.forEach((eventName) => {\n this.off(eventName, listener);\n });\n return;\n }\n if (typeof event !== \"string\") {\n throw new Error(\"EventEmitter.off(): invalid arguments:\" + Platform.Config.inspect(args));\n }\n if (listener) {\n removeListener([this.events, this.eventsOnce], listener, event);\n } else {\n delete this.events[event];\n delete this.eventsOnce[event];\n }\n }\n /**\n * Get the array of listeners for a given event; excludes once events\n * @param event (optional) the name of the event, or none for 'any'\n * @return array of events, or null if none\n */\n listeners(event) {\n if (event) {\n const listeners = this.events[event] || [];\n if (this.eventsOnce[event])\n Array.prototype.push.apply(listeners, this.eventsOnce[event]);\n return listeners.length ? listeners : null;\n }\n return this.any.length ? this.any : null;\n }\n /**\n * Emit an event\n * @param event the event name\n * @param args the arguments to pass to the listener\n */\n emit(event, ...args) {\n const eventThis = { event };\n const listeners = [];\n if (this.anyOnce.length) {\n Array.prototype.push.apply(listeners, this.anyOnce);\n this.anyOnce = [];\n }\n if (this.any.length) {\n Array.prototype.push.apply(listeners, this.any);\n }\n const eventsOnceListeners = this.eventsOnce[event];\n if (eventsOnceListeners) {\n Array.prototype.push.apply(listeners, eventsOnceListeners);\n delete this.eventsOnce[event];\n }\n const eventsListeners = this.events[event];\n if (eventsListeners) {\n Array.prototype.push.apply(listeners, eventsListeners);\n }\n listeners.forEach((listener) => {\n callListener(this.logger, eventThis, listener, args);\n });\n }\n once(...args) {\n const argCount = args.length;\n if (argCount === 0 || argCount === 1 && typeof args[0] !== \"function\") {\n const event = args[0];\n return new Promise((resolve) => {\n this.once(event, resolve);\n });\n }\n const [firstArg, secondArg] = args;\n if (args.length === 1 && typeof firstArg === \"function\") {\n this.anyOnce.push(firstArg);\n } else if (isNil(firstArg)) {\n if (typeof secondArg !== \"function\") {\n throw new Error(\"EventEmitter.once(): Invalid arguments:\" + Platform.Config.inspect(args));\n }\n this.anyOnce.push(secondArg);\n } else if (Array.isArray(firstArg)) {\n const self2 = this;\n const listenerWrapper = function() {\n const innerArgs = Array.prototype.slice.call(arguments);\n firstArg.forEach(function(eventName) {\n self2.off(eventName, listenerWrapper);\n });\n if (typeof secondArg !== \"function\") {\n throw new Error(\"EventEmitter.once(): Invalid arguments:\" + Platform.Config.inspect(args));\n }\n secondArg.apply(this, innerArgs);\n };\n firstArg.forEach(function(eventName) {\n self2.on(eventName, listenerWrapper);\n });\n } else {\n if (typeof firstArg !== \"string\") {\n throw new Error(\"EventEmitter.once(): Invalid arguments:\" + Platform.Config.inspect(args));\n }\n const listeners = this.eventsOnce[firstArg] || (this.eventsOnce[firstArg] = []);\n if (secondArg) {\n if (typeof secondArg !== \"function\") {\n throw new Error(\"EventEmitter.once(): Invalid arguments:\" + Platform.Config.inspect(args));\n }\n listeners.push(secondArg);\n }\n }\n }\n /**\n * Listen for a single occurrence of a state event and fire immediately if currentState matches targetState\n * @param targetState the name of the state event to listen to\n * @param currentState the name of the current state of this object\n */\n async whenState(targetState, currentState) {\n if (typeof targetState !== \"string\" || typeof currentState !== \"string\") {\n throw new Error(\"whenState requires a valid state String argument\");\n }\n if (targetState === currentState) {\n return null;\n } else {\n return this.once(targetState);\n }\n }\n};\nvar eventemitter_default = EventEmitter;\n\n// src/common/lib/types/protocolmessagecommon.ts\nvar actions = {\n HEARTBEAT: 0,\n ACK: 1,\n NACK: 2,\n CONNECT: 3,\n CONNECTED: 4,\n DISCONNECT: 5,\n DISCONNECTED: 6,\n CLOSE: 7,\n CLOSED: 8,\n ERROR: 9,\n ATTACH: 10,\n ATTACHED: 11,\n DETACH: 12,\n DETACHED: 13,\n PRESENCE: 14,\n MESSAGE: 15,\n SYNC: 16,\n AUTH: 17,\n ACTIVATE: 18,\n OBJECT: 19,\n OBJECT_SYNC: 20,\n ANNOTATION: 21\n};\nvar ActionName = [];\nObject.keys(actions).forEach(function(name) {\n ActionName[actions[name]] = name;\n});\nvar flags = {\n /* Channel attach state flags */\n HAS_PRESENCE: 1 << 0,\n HAS_BACKLOG: 1 << 1,\n RESUMED: 1 << 2,\n TRANSIENT: 1 << 4,\n ATTACH_RESUME: 1 << 5,\n HAS_OBJECTS: 1 << 7,\n /* Channel mode flags */\n PRESENCE: 1 << 16,\n PUBLISH: 1 << 17,\n SUBSCRIBE: 1 << 18,\n PRESENCE_SUBSCRIBE: 1 << 19,\n ANNOTATION_PUBLISH: 1 << 21,\n ANNOTATION_SUBSCRIBE: 1 << 22,\n OBJECT_SUBSCRIBE: 1 << 24,\n OBJECT_PUBLISH: 1 << 25\n};\nvar flagNames = Object.keys(flags);\nflags.MODE_ALL = flags.PRESENCE | flags.PUBLISH | flags.SUBSCRIBE | flags.PRESENCE_SUBSCRIBE | flags.ANNOTATION_PUBLISH | flags.ANNOTATION_SUBSCRIBE | flags.OBJECT_SUBSCRIBE | flags.OBJECT_PUBLISH;\nvar channelModes = [\n \"PRESENCE\",\n \"PUBLISH\",\n \"SUBSCRIBE\",\n \"PRESENCE_SUBSCRIBE\",\n \"ANNOTATION_PUBLISH\",\n \"ANNOTATION_SUBSCRIBE\",\n \"OBJECT_SUBSCRIBE\",\n \"OBJECT_PUBLISH\"\n];\n\n// src/common/lib/types/basemessage.ts\nfunction normaliseContext(context) {\n if (!context || !context.channelOptions) {\n return {\n channelOptions: context,\n plugins: {},\n baseEncodedPreviousPayload: void 0\n };\n }\n return context;\n}\nfunction normalizeCipherOptions(Crypto2, logger, options) {\n if (options && options.cipher) {\n if (!Crypto2)\n throwMissingPluginError(\"Crypto\");\n const cipher = Crypto2.getCipher(options.cipher, logger);\n return {\n cipher: cipher.cipherParams,\n channelCipher: cipher.cipher\n };\n }\n return options != null ? options : {};\n}\nasync function encrypt(msg, cipherOptions) {\n const { data, encoding } = await encryptData(msg.data, msg.encoding, cipherOptions);\n msg.data = data;\n msg.encoding = encoding;\n return msg;\n}\nasync function encryptData(data, encoding, cipherOptions) {\n let cipher = cipherOptions.channelCipher;\n let dataToEncrypt = data;\n let finalEncoding = encoding ? encoding + \"/\" : \"\";\n if (!Platform.BufferUtils.isBuffer(dataToEncrypt)) {\n dataToEncrypt = Platform.BufferUtils.utf8Encode(String(dataToEncrypt));\n finalEncoding = finalEncoding + \"utf-8/\";\n }\n const ciphertext = await cipher.encrypt(dataToEncrypt);\n finalEncoding = finalEncoding + \"cipher+\" + cipher.algorithm;\n return {\n data: ciphertext,\n encoding: finalEncoding\n };\n}\nasync function encode(msg, options) {\n const { data, encoding } = encodeData(msg.data, msg.encoding);\n msg.data = data;\n msg.encoding = encoding;\n if (options != null && options.cipher) {\n return encrypt(msg, options);\n } else {\n return msg;\n }\n}\nfunction encodeData(data, encoding) {\n const nativeDataType = typeof data == \"string\" || Platform.BufferUtils.isBuffer(data) || data === null || data === void 0;\n if (nativeDataType) {\n return {\n data,\n encoding\n };\n }\n if (isObject(data) || Array.isArray(data)) {\n return {\n data: JSON.stringify(data),\n encoding: encoding ? encoding + \"/json\" : \"json\"\n };\n }\n throw new ErrorInfo(\"Data type is unsupported\", 40013, 400);\n}\nasync function decode(message, inputContext) {\n const { data, encoding, error } = await decodeData(message.data, message.encoding, inputContext);\n message.data = data;\n message.encoding = encoding;\n if (error) {\n throw error;\n }\n}\nasync function decodeData(data, encoding, inputContext) {\n const context = normaliseContext(inputContext);\n let lastPayload = data;\n let decodedData = data;\n let finalEncoding = encoding;\n let decodingError;\n if (encoding) {\n const xforms = encoding.split(\"/\");\n let lastProcessedEncodingIndex;\n let encodingsToProcess = xforms.length;\n let xform = \"\";\n try {\n while ((lastProcessedEncodingIndex = encodingsToProcess) > 0) {\n const match = xforms[--encodingsToProcess].match(/([-\\w]+)(\\+([\\w-]+))?/);\n if (!match)\n break;\n xform = match[1];\n switch (xform) {\n case \"base64\":\n decodedData = Platform.BufferUtils.base64Decode(String(decodedData));\n if (lastProcessedEncodingIndex == xforms.length) {\n lastPayload = decodedData;\n }\n continue;\n case \"utf-8\":\n decodedData = Platform.BufferUtils.utf8Decode(decodedData);\n continue;\n case \"json\":\n decodedData = JSON.parse(decodedData);\n continue;\n case \"cipher\":\n if (context.channelOptions != null && context.channelOptions.cipher && context.channelOptions.channelCipher) {\n const xformAlgorithm = match[3], cipher = context.channelOptions.channelCipher;\n if (xformAlgorithm != cipher.algorithm) {\n throw new Error(\"Unable to decrypt message with given cipher; incompatible cipher params\");\n }\n decodedData = await cipher.decrypt(decodedData);\n continue;\n } else {\n throw new Error(\"Unable to decrypt message; not an encrypted channel\");\n }\n case \"vcdiff\":\n if (!context.plugins || !context.plugins.vcdiff) {\n throw new ErrorInfo(\"Missing Vcdiff decoder (https://github.com/ably-forks/vcdiff-decoder)\", 40019, 400);\n }\n if (typeof Uint8Array === \"undefined\") {\n throw new ErrorInfo(\n \"Delta decoding not supported on this browser (need ArrayBuffer & Uint8Array)\",\n 40020,\n 400\n );\n }\n try {\n let deltaBase = context.baseEncodedPreviousPayload;\n if (typeof deltaBase === \"string\") {\n deltaBase = Platform.BufferUtils.utf8Encode(deltaBase);\n }\n const deltaBaseBuffer = Platform.BufferUtils.toBuffer(deltaBase);\n decodedData = Platform.BufferUtils.toBuffer(decodedData);\n decodedData = Platform.BufferUtils.arrayBufferViewToBuffer(\n context.plugins.vcdiff.decode(decodedData, deltaBaseBuffer)\n );\n lastPayload = decodedData;\n } catch (e) {\n throw new ErrorInfo(\"Vcdiff delta decode failed with \" + e, 40018, 400);\n }\n continue;\n default:\n throw new Error(\"Unknown encoding\");\n }\n }\n } catch (e) {\n const err = e;\n decodingError = new ErrorInfo(\n `Error processing the ${xform} encoding, decoder returned \\u2018${err.message}\\u2019`,\n err.code || 40013,\n 400\n );\n } finally {\n finalEncoding = lastProcessedEncodingIndex <= 0 ? null : xforms.slice(0, lastProcessedEncodingIndex).join(\"/\");\n }\n }\n if (decodingError) {\n return {\n error: decodingError,\n data: decodedData,\n encoding: finalEncoding\n };\n }\n context.baseEncodedPreviousPayload = lastPayload;\n return {\n data: decodedData,\n encoding: finalEncoding\n };\n}\nfunction wireToJSON(...args) {\n const format = args.length > 0 ? \"json\" /* json */ : \"msgpack\" /* msgpack */;\n const { data, encoding } = encodeDataForWire(this.data, this.encoding, format);\n return Object.assign({}, this, { encoding, data });\n}\nfunction encodeDataForWire(data, encoding, format) {\n if (!data || !Platform.BufferUtils.isBuffer(data)) {\n return {\n data,\n encoding\n };\n }\n if (format === \"msgpack\" /* msgpack */) {\n return {\n data: Platform.BufferUtils.toBuffer(data),\n encoding\n };\n }\n return {\n data: Platform.BufferUtils.base64Encode(data),\n encoding: encoding ? encoding + \"/base64\" : \"base64\"\n };\n}\nvar MessageEncoding = {\n encryptData,\n encodeData,\n encodeDataForWire,\n decodeData\n};\nfunction populateFieldsFromParent(parent) {\n const { id, connectionId, timestamp } = parent;\n let msgs;\n switch (parent.action) {\n case actions.MESSAGE: {\n msgs = parent.messages;\n break;\n }\n case actions.PRESENCE:\n case actions.SYNC:\n msgs = parent.presence;\n break;\n case actions.ANNOTATION:\n msgs = parent.annotations;\n break;\n case actions.OBJECT:\n case actions.OBJECT_SYNC:\n msgs = parent.state;\n break;\n default:\n throw new ErrorInfo(\"Unexpected action \" + parent.action, 4e4, 400);\n }\n for (let i = 0; i < msgs.length; i++) {\n const msg = msgs[i];\n if (!msg.connectionId) {\n msg.connectionId = connectionId;\n }\n if (!msg.timestamp) {\n msg.timestamp = timestamp;\n }\n if (id && !msg.id) {\n msg.id = id + \":\" + i;\n }\n }\n}\nfunction strMsg(m, cls) {\n let result = \"[\" + cls;\n for (const attr in m) {\n if (attr === \"data\") {\n if (typeof m.data == \"string\") {\n result += \"; data=\" + m.data;\n } else if (Platform.BufferUtils.isBuffer(m.data)) {\n result += \"; data (buffer)=\" + Platform.BufferUtils.base64Encode(m.data);\n } else if (typeof m.data !== \"undefined\") {\n result += \"; data (json)=\" + JSON.stringify(m.data);\n }\n } else if (attr && (attr === \"extras\" || attr === \"operation\")) {\n result += \"; \" + attr + \"=\" + JSON.stringify(m[attr]);\n } else if (attr === \"version\") {\n result += \"; version=\" + JSON.stringify(m[attr]);\n } else if (attr === \"annotations\") {\n result += \"; annotations=\" + JSON.stringify(m[attr]);\n } else if (m[attr] !== void 0) {\n result += \"; \" + attr + \"=\" + m[attr];\n }\n }\n result += \"]\";\n return result;\n}\nvar BaseMessage = class {\n};\n\n// src/common/lib/client/baseclient.ts\nvar BaseClient = class {\n constructor(options) {\n /**\n * These exports are for use by UMD plugins; reason being so that constructors and static methods can be accessed by these plugins without needing to import the classes directly and result in the class existing in both the plugin and the core library.\n */\n this.Platform = Platform;\n this.ErrorInfo = ErrorInfo;\n this.Logger = logger_default;\n this.Defaults = defaults_default;\n this.Utils = utils_exports;\n this.EventEmitter = eventemitter_default;\n this.MessageEncoding = MessageEncoding;\n var _a2, _b, _c, _d, _e, _f, _g, _h, _i, _j;\n this._additionalHTTPRequestImplementations = (_a2 = options.plugins) != null ? _a2 : null;\n this.logger = new logger_default();\n this.logger.setLog(options.logLevel, options.logHandler);\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MICRO,\n \"BaseClient()\",\n \"initialized with clientOptions \" + Platform.Config.inspect(options)\n );\n this._MsgPack = (_c = (_b = options.plugins) == null ? void 0 : _b.MsgPack) != null ? _c : null;\n const normalOptions = this.options = defaults_default.normaliseOptions(options, this._MsgPack, this.logger);\n if (normalOptions.key) {\n const keyMatch = normalOptions.key.match(/^([^:\\s]+):([^:.\\s]+)$/);\n if (!keyMatch) {\n const msg = \"invalid key parameter\";\n logger_default.logAction(this.logger, logger_default.LOG_ERROR, \"BaseClient()\", msg);\n throw new ErrorInfo(msg, 40400, 404);\n }\n normalOptions.keyName = keyMatch[1];\n normalOptions.keySecret = keyMatch[2];\n }\n if (\"clientId\" in normalOptions) {\n if (!(typeof normalOptions.clientId === \"string\" || normalOptions.clientId === null))\n throw new ErrorInfo(\"clientId must be either a string or null\", 40012, 400);\n else if (normalOptions.clientId === \"*\")\n throw new ErrorInfo(\n 'Can\\u2019t use \"*\" as a clientId as that string is reserved. (To change the default token request behaviour to use a wildcard clientId, use {defaultTokenParams: {clientId: \"*\"}})',\n 40012,\n 400\n );\n }\n logger_default.logAction(this.logger, logger_default.LOG_MINOR, \"BaseClient()\", \"started; version = \" + defaults_default.version);\n this._currentFallback = null;\n this.serverTimeOffset = null;\n this.http = new Http(this);\n this.auth = new auth_default(this, normalOptions);\n this._rest = ((_d = options.plugins) == null ? void 0 : _d.Rest) ? new options.plugins.Rest(this) : null;\n this._Crypto = (_f = (_e = options.plugins) == null ? void 0 : _e.Crypto) != null ? _f : null;\n this.__FilteredSubscriptions = (_h = (_g = options.plugins) == null ? void 0 : _g.MessageInteractions) != null ? _h : null;\n this._Annotations = (_j = (_i = options.plugins) == null ? void 0 : _i.Annotations) != null ? _j : null;\n }\n get rest() {\n if (!this._rest) {\n throwMissingPluginError(\"Rest\");\n }\n return this._rest;\n }\n get _FilteredSubscriptions() {\n if (!this.__FilteredSubscriptions) {\n throwMissingPluginError(\"MessageInteractions\");\n }\n return this.__FilteredSubscriptions;\n }\n get channels() {\n return this.rest.channels;\n }\n get push() {\n return this.rest.push;\n }\n /** RSH8 */\n device() {\n var _a2;\n if (!((_a2 = this.options.plugins) == null ? void 0 : _a2.Push) || !this.push.LocalDevice) {\n throwMissingPluginError(\"Push\");\n }\n if (!this._device) {\n this._device = this.push.LocalDevice.load(this);\n }\n return this._device;\n }\n baseUri(host) {\n return defaults_default.getHttpScheme(this.options) + host + \":\" + defaults_default.getPort(this.options, false);\n }\n async stats(params) {\n return this.rest.stats(params);\n }\n async time(params) {\n return this.rest.time(params);\n }\n async request(method, path, version2, params, body, customHeaders) {\n return this.rest.request(method, path, version2, params, body, customHeaders);\n }\n batchPublish(specOrSpecs) {\n return this.rest.batchPublish(specOrSpecs);\n }\n batchPresence(channels) {\n return this.rest.batchPresence(channels);\n }\n setLog(logOptions) {\n this.logger.setLog(logOptions.level, logOptions.handler);\n }\n /**\n * Get the current time based on the local clock,\n * or if the option queryTime is true, return the server time.\n * The server time offset from the local time is stored so that\n * only one request to the server to get the time is ever needed\n */\n async getTimestamp(queryTime) {\n if (!this.isTimeOffsetSet() && queryTime) {\n return this.time();\n }\n return this.getTimestampUsingOffset();\n }\n getTimestampUsingOffset() {\n return Date.now() + (this.serverTimeOffset || 0);\n }\n isTimeOffsetSet() {\n return this.serverTimeOffset !== null;\n }\n};\nBaseClient.Platform = Platform;\nvar baseclient_default = BaseClient;\n\n// src/common/lib/types/devicedetails.ts\nvar DeviceDetails = class _DeviceDetails {\n toJSON() {\n var _a2, _b, _c;\n return {\n id: this.id,\n deviceSecret: this.deviceSecret,\n platform: this.platform,\n formFactor: this.formFactor,\n clientId: this.clientId,\n metadata: this.metadata,\n deviceIdentityToken: this.deviceIdentityToken,\n push: {\n recipient: (_a2 = this.push) == null ? void 0 : _a2.recipient,\n state: (_b = this.push) == null ? void 0 : _b.state,\n error: (_c = this.push) == null ? void 0 : _c.error\n }\n };\n }\n toString() {\n var _a2, _b, _c, _d;\n let result = \"[DeviceDetails\";\n if (this.id)\n result += \"; id=\" + this.id;\n if (this.platform)\n result += \"; platform=\" + this.platform;\n if (this.formFactor)\n result += \"; formFactor=\" + this.formFactor;\n if (this.clientId)\n result += \"; clientId=\" + this.clientId;\n if (this.metadata)\n result += \"; metadata=\" + this.metadata;\n if (this.deviceIdentityToken)\n result += \"; deviceIdentityToken=\" + JSON.stringify(this.deviceIdentityToken);\n if ((_a2 = this.push) == null ? void 0 : _a2.recipient)\n result += \"; push.recipient=\" + JSON.stringify(this.push.recipient);\n if ((_b = this.push) == null ? void 0 : _b.state)\n result += \"; push.state=\" + this.push.state;\n if ((_c = this.push) == null ? void 0 : _c.error)\n result += \"; push.error=\" + JSON.stringify(this.push.error);\n if ((_d = this.push) == null ? void 0 : _d.metadata)\n result += \"; push.metadata=\" + this.push.metadata;\n result += \"]\";\n return result;\n }\n static toRequestBody(body, MsgPack, format) {\n return encodeBody(body, MsgPack, format);\n }\n static fromResponseBody(body, MsgPack, format) {\n if (format) {\n body = decodeBody(body, MsgPack, format);\n }\n if (Array.isArray(body)) {\n return _DeviceDetails.fromValuesArray(body);\n } else {\n return _DeviceDetails.fromValues(body);\n }\n }\n static fromValues(values) {\n values.error = values.error && ErrorInfo.fromValues(values.error);\n return Object.assign(new _DeviceDetails(), values);\n }\n static fromLocalDevice(device) {\n return Object.assign(new _DeviceDetails(), device);\n }\n static fromValuesArray(values) {\n const count = values.length, result = new Array(count);\n for (let i = 0; i < count; i++)\n result[i] = _DeviceDetails.fromValues(values[i]);\n return result;\n }\n};\nvar devicedetails_default = DeviceDetails;\n\n// src/common/lib/client/resource.ts\nasync function withAuthDetails(client, headers, params, opCallback) {\n if (client.http.supportsAuthHeaders) {\n const authHeaders = await client.auth.getAuthHeaders();\n return opCallback(mixin(authHeaders, headers), params);\n } else {\n const authParams = await client.auth.getAuthParams();\n return opCallback(headers, mixin(authParams, params));\n }\n}\nfunction unenvelope(result, MsgPack, format) {\n if (result.err && !result.body) {\n return { err: result.err };\n }\n if (result.statusCode === HttpStatusCodes_default.NoContent) {\n return __spreadProps(__spreadValues({}, result), { body: [], unpacked: true });\n }\n let body = result.body;\n if (!result.unpacked) {\n try {\n body = decodeBody(body, MsgPack, format);\n } catch (e) {\n if (isErrorInfoOrPartialErrorInfo(e)) {\n return { err: e };\n } else {\n return { err: new PartialErrorInfo(inspectError(e), null) };\n }\n }\n }\n if (!body) {\n return { err: new PartialErrorInfo(\"unenvelope(): Response body is missing\", null) };\n }\n const { statusCode: wrappedStatusCode, response, headers: wrappedHeaders } = body;\n if (wrappedStatusCode === void 0) {\n return __spreadProps(__spreadValues({}, result), { body, unpacked: true });\n }\n if (wrappedStatusCode < 200 || wrappedStatusCode >= 300) {\n let wrappedErr = response && response.error || result.err;\n if (!wrappedErr) {\n wrappedErr = new Error(\"Error in unenveloping \" + body);\n wrappedErr.statusCode = wrappedStatusCode;\n }\n return { err: wrappedErr, body: response, headers: wrappedHeaders, unpacked: true, statusCode: wrappedStatusCode };\n }\n return { err: result.err, body: response, headers: wrappedHeaders, unpacked: true, statusCode: wrappedStatusCode };\n}\nfunction logResult2(result, method, path, params, logger) {\n if (result.err) {\n logger_default.logAction(\n logger,\n logger_default.LOG_MICRO,\n \"Resource.\" + method + \"()\",\n \"Received Error; \" + appendingParams(path, params) + \"; Error: \" + inspectError(result.err)\n );\n } else {\n logger_default.logAction(\n logger,\n logger_default.LOG_MICRO,\n \"Resource.\" + method + \"()\",\n \"Received; \" + appendingParams(path, params) + \"; Headers: \" + paramString(result.headers) + \"; StatusCode: \" + result.statusCode + \"; Body: \" + (Platform.BufferUtils.isBuffer(result.body) ? \" (Base64): \" + Platform.BufferUtils.base64Encode(result.body) : \": \" + Platform.Config.inspect(result.body))\n );\n }\n}\nvar Resource = class _Resource {\n static async get(client, path, headers, params, envelope, throwError) {\n return _Resource.do(HttpMethods_default.Get, client, path, null, headers, params, envelope, throwError != null ? throwError : false);\n }\n static async delete(client, path, headers, params, envelope, throwError) {\n return _Resource.do(HttpMethods_default.Delete, client, path, null, headers, params, envelope, throwError);\n }\n static async post(client, path, body, headers, params, envelope, throwError) {\n return _Resource.do(HttpMethods_default.Post, client, path, body, headers, params, envelope, throwError);\n }\n static async patch(client, path, body, headers, params, envelope, throwError) {\n return _Resource.do(HttpMethods_default.Patch, client, path, body, headers, params, envelope, throwError);\n }\n static async put(client, path, body, headers, params, envelope, throwError) {\n return _Resource.do(HttpMethods_default.Put, client, path, body, headers, params, envelope, throwError);\n }\n static async do(method, client, path, body, headers, params, envelope, throwError) {\n if (envelope) {\n (params = params || {})[\"envelope\"] = envelope;\n }\n const logger = client.logger;\n async function doRequest(headers2, params2) {\n var _a2;\n if (logger.shouldLog(logger_default.LOG_MICRO)) {\n let decodedBody = body;\n if (((_a2 = headers2[\"content-type\"]) == null ? void 0 : _a2.indexOf(\"msgpack\")) > 0) {\n try {\n if (!client._MsgPack) {\n throwMissingPluginError(\"MsgPack\");\n }\n decodedBody = client._MsgPack.decode(body);\n } catch (decodeErr) {\n logger_default.logAction(\n logger,\n logger_default.LOG_MICRO,\n \"Resource.\" + method + \"()\",\n \"Sending MsgPack Decoding Error: \" + inspectError(decodeErr)\n );\n }\n }\n logger_default.logAction(\n logger,\n logger_default.LOG_MICRO,\n \"Resource.\" + method + \"()\",\n \"Sending; \" + appendingParams(path, params2) + \"; Body: \" + decodedBody\n );\n }\n const httpResult = await client.http.do(method, path, headers2, body, params2);\n if (httpResult.error && auth_default.isTokenErr(httpResult.error)) {\n await client.auth.authorize(null, null);\n return withAuthDetails(client, headers2, params2, doRequest);\n }\n return {\n err: httpResult.error,\n body: httpResult.body,\n headers: httpResult.headers,\n unpacked: httpResult.unpacked,\n statusCode: httpResult.statusCode\n };\n }\n let result = await withAuthDetails(client, headers, params, doRequest);\n if (envelope) {\n result = unenvelope(result, client._MsgPack, envelope);\n }\n if (logger.shouldLog(logger_default.LOG_MICRO)) {\n logResult2(result, method, path, params, logger);\n }\n if (throwError) {\n if (result.err) {\n throw result.err;\n } else {\n const response = __spreadValues({}, result);\n delete response.err;\n return response;\n }\n }\n return result;\n }\n};\nvar resource_default = Resource;\n\n// src/common/lib/client/paginatedresource.ts\nfunction getRelParams(linkUrl) {\n const urlMatch = linkUrl.match(/^\\.\\/(\\w+)\\?(.*)$/);\n return urlMatch && urlMatch[2] && parseQueryString(urlMatch[2]);\n}\nfunction parseRelLinks(linkHeader) {\n if (typeof linkHeader == \"string\")\n linkHeader = linkHeader.split(\",\");\n const relParams = {};\n for (let i = 0; i < linkHeader.length; i++) {\n const linkMatch = linkHeader[i].match(/^\\s*<(.+)>;\\s*rel=\"(\\w+)\"$/);\n if (linkMatch) {\n const params = getRelParams(linkMatch[1]);\n if (params)\n relParams[linkMatch[2]] = params;\n }\n }\n return relParams;\n}\nfunction returnErrOnly(err, body, useHPR) {\n return !(useHPR && (body || typeof err.code === \"number\"));\n}\nvar PaginatedResource = class {\n constructor(client, path, headers, envelope, bodyHandler, useHttpPaginatedResponse) {\n this.client = client;\n this.path = path;\n this.headers = headers;\n this.envelope = envelope != null ? envelope : null;\n this.bodyHandler = bodyHandler;\n this.useHttpPaginatedResponse = useHttpPaginatedResponse || false;\n }\n get logger() {\n return this.client.logger;\n }\n async get(params) {\n const result = await resource_default.get(this.client, this.path, this.headers, params, this.envelope, false);\n return this.handlePage(result);\n }\n async delete(params) {\n const result = await resource_default.delete(this.client, this.path, this.headers, params, this.envelope, false);\n return this.handlePage(result);\n }\n async post(params, body) {\n const result = await resource_default.post(this.client, this.path, body, this.headers, params, this.envelope, false);\n return this.handlePage(result);\n }\n async put(params, body) {\n const result = await resource_default.put(this.client, this.path, body, this.headers, params, this.envelope, false);\n return this.handlePage(result);\n }\n async patch(params, body) {\n const result = await resource_default.patch(this.client, this.path, body, this.headers, params, this.envelope, false);\n return this.handlePage(result);\n }\n async handlePage(result) {\n if (result.err && returnErrOnly(result.err, result.body, this.useHttpPaginatedResponse)) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_ERROR,\n \"PaginatedResource.handlePage()\",\n \"Unexpected error getting resource: err = \" + inspectError(result.err)\n );\n throw result.err;\n }\n let items, linkHeader, relParams;\n try {\n items = result.statusCode == HttpStatusCodes_default.NoContent ? [] : await this.bodyHandler(result.body, result.headers || {}, result.unpacked);\n } catch (e) {\n throw result.err || e;\n }\n if (result.headers && (linkHeader = result.headers[\"Link\"] || result.headers[\"link\"])) {\n relParams = parseRelLinks(linkHeader);\n }\n if (this.useHttpPaginatedResponse) {\n return new HttpPaginatedResponse(\n this,\n items,\n result.headers || {},\n result.statusCode,\n relParams,\n result.err\n );\n } else {\n return new PaginatedResult(this, items, relParams);\n }\n }\n};\nvar PaginatedResult = class {\n constructor(resource, items, relParams) {\n this.resource = resource;\n this.items = items;\n this._relParams = relParams;\n }\n async first() {\n if (this.hasFirst()) {\n return this.get(this._relParams.first);\n }\n throw new ErrorInfo(\"No link to the first page of results\", 40400, 404);\n }\n async current() {\n if (this.hasCurrent()) {\n return this.get(this._relParams.current);\n }\n throw new ErrorInfo(\"No link to the current page of results\", 40400, 404);\n }\n async next() {\n if (this.hasNext()) {\n return this.get(this._relParams.next);\n }\n return null;\n }\n hasFirst() {\n return this._relParams != null && \"first\" in this._relParams;\n }\n hasCurrent() {\n return this._relParams != null && \"current\" in this._relParams;\n }\n hasNext() {\n return this._relParams != null && \"next\" in this._relParams;\n }\n isLast() {\n return !this.hasNext();\n }\n /* We assume that only the initial request can be a POST, and that accessing\n * the rest of a multipage set of results can always be done with GET */\n async get(params) {\n const res = this.resource;\n const result = await resource_default.get(res.client, res.path, res.headers, params, res.envelope, false);\n return res.handlePage(result);\n }\n};\nvar HttpPaginatedResponse = class extends PaginatedResult {\n constructor(resource, items, headers, statusCode, relParams, err) {\n super(resource, items, relParams);\n this.statusCode = statusCode;\n this.success = statusCode < 300 && statusCode >= 200;\n this.headers = headers;\n this.errorCode = err && err.code;\n this.errorMessage = err && err.message;\n }\n toJSON() {\n return {\n items: this.items,\n statusCode: this.statusCode,\n success: this.success,\n headers: this.headers,\n errorCode: this.errorCode,\n errorMessage: this.errorMessage\n };\n }\n};\nvar paginatedresource_default = PaginatedResource;\n\n// src/common/lib/types/pushchannelsubscription.ts\nvar _PushChannelSubscription = class _PushChannelSubscription {\n /**\n * Overload toJSON() to intercept JSON.stringify()\n * @return {*}\n */\n toJSON() {\n return {\n channel: this.channel,\n deviceId: this.deviceId,\n clientId: this.clientId\n };\n }\n toString() {\n let result = \"[PushChannelSubscription\";\n if (this.channel)\n result += \"; channel=\" + this.channel;\n if (this.deviceId)\n result += \"; deviceId=\" + this.deviceId;\n if (this.clientId)\n result += \"; clientId=\" + this.clientId;\n result += \"]\";\n return result;\n }\n static fromResponseBody(body, MsgPack, format) {\n if (format) {\n body = decodeBody(body, MsgPack, format);\n }\n if (Array.isArray(body)) {\n return _PushChannelSubscription.fromValuesArray(body);\n } else {\n return _PushChannelSubscription.fromValues(body);\n }\n }\n static fromValues(values) {\n return Object.assign(new _PushChannelSubscription(), values);\n }\n static fromValuesArray(values) {\n const count = values.length, result = new Array(count);\n for (let i = 0; i < count; i++)\n result[i] = _PushChannelSubscription.fromValues(values[i]);\n return result;\n }\n};\n_PushChannelSubscription.toRequestBody = encodeBody;\nvar PushChannelSubscription = _PushChannelSubscription;\nvar pushchannelsubscription_default = PushChannelSubscription;\n\n// src/common/lib/client/push.ts\nvar Push = class {\n constructor(client) {\n var _a2;\n this.client = client;\n this.admin = new Admin(client);\n if (Platform.Config.push && ((_a2 = client.options.plugins) == null ? void 0 : _a2.Push)) {\n this.stateMachine = new client.options.plugins.Push.ActivationStateMachine(client);\n this.LocalDevice = client.options.plugins.Push.localDeviceFactory(devicedetails_default);\n }\n }\n async activate(registerCallback, updateFailedCallback) {\n await new Promise((resolve, reject) => {\n var _a2;\n if (!((_a2 = this.client.options.plugins) == null ? void 0 : _a2.Push)) {\n reject(createMissingPluginError(\"Push\"));\n return;\n }\n if (!this.stateMachine) {\n reject(new ErrorInfo(\"This platform is not supported as a target of push notifications\", 4e4, 400));\n return;\n }\n if (this.stateMachine.activatedCallback) {\n reject(new ErrorInfo(\"Activation already in progress\", 4e4, 400));\n return;\n }\n this.stateMachine.activatedCallback = (err) => {\n if (err) {\n reject(err);\n return;\n }\n resolve();\n };\n this.stateMachine.updateFailedCallback = updateFailedCallback;\n this.stateMachine.handleEvent(\n new this.client.options.plugins.Push.CalledActivate(this.stateMachine, registerCallback)\n );\n });\n }\n async deactivate(deregisterCallback) {\n await new Promise((resolve, reject) => {\n var _a2;\n if (!((_a2 = this.client.options.plugins) == null ? void 0 : _a2.Push)) {\n reject(createMissingPluginError(\"Push\"));\n return;\n }\n if (!this.stateMachine) {\n reject(new ErrorInfo(\"This platform is not supported as a target of push notifications\", 4e4, 400));\n return;\n }\n if (this.stateMachine.deactivatedCallback) {\n reject(new ErrorInfo(\"Deactivation already in progress\", 4e4, 400));\n return;\n }\n this.stateMachine.deactivatedCallback = (err) => {\n if (err) {\n reject(err);\n return;\n }\n resolve();\n };\n this.stateMachine.handleEvent(\n new this.client.options.plugins.Push.CalledDeactivate(this.stateMachine, deregisterCallback)\n );\n });\n }\n};\nvar Admin = class {\n constructor(client) {\n this.client = client;\n this.deviceRegistrations = new DeviceRegistrations(client);\n this.channelSubscriptions = new ChannelSubscriptions(client);\n }\n async publish(recipient, payload) {\n const client = this.client;\n const format = client.options.useBinaryProtocol ? \"msgpack\" /* msgpack */ : \"json\" /* json */, headers = defaults_default.defaultPostHeaders(client.options, { format }), params = {};\n const body = mixin({ recipient }, payload);\n mixin(headers, client.options.headers);\n if (client.options.pushFullWait)\n mixin(params, { fullWait: \"true\" });\n const requestBody = encodeBody(body, client._MsgPack, format);\n await resource_default.post(client, \"/push/publish\", requestBody, headers, params, null, true);\n }\n};\nvar DeviceRegistrations = class {\n constructor(client) {\n this.client = client;\n }\n async save(device) {\n const client = this.client;\n const body = devicedetails_default.fromValues(device);\n const format = client.options.useBinaryProtocol ? \"msgpack\" /* msgpack */ : \"json\" /* json */, headers = defaults_default.defaultPostHeaders(client.options, { format }), params = {};\n mixin(headers, client.options.headers);\n if (client.options.pushFullWait)\n mixin(params, { fullWait: \"true\" });\n const requestBody = encodeBody(body, client._MsgPack, format);\n const response = await resource_default.put(\n client,\n \"/push/deviceRegistrations/\" + encodeURIComponent(device.id),\n requestBody,\n headers,\n params,\n null,\n true\n );\n return devicedetails_default.fromResponseBody(\n response.body,\n client._MsgPack,\n response.unpacked ? void 0 : format\n );\n }\n async get(deviceIdOrDetails) {\n const client = this.client, format = client.options.useBinaryProtocol ? \"msgpack\" /* msgpack */ : \"json\" /* json */, headers = defaults_default.defaultGetHeaders(client.options, { format }), deviceId = deviceIdOrDetails.id || deviceIdOrDetails;\n if (typeof deviceId !== \"string\" || !deviceId.length) {\n throw new ErrorInfo(\n \"First argument to DeviceRegistrations#get must be a deviceId string or DeviceDetails\",\n 4e4,\n 400\n );\n }\n mixin(headers, client.options.headers);\n const response = await resource_default.get(\n client,\n \"/push/deviceRegistrations/\" + encodeURIComponent(deviceId),\n headers,\n {},\n null,\n true\n );\n return devicedetails_default.fromResponseBody(\n response.body,\n client._MsgPack,\n response.unpacked ? void 0 : format\n );\n }\n async list(params) {\n const client = this.client, format = client.options.useBinaryProtocol ? \"msgpack\" /* msgpack */ : \"json\" /* json */, envelope = this.client.http.supportsLinkHeaders ? void 0 : format, headers = defaults_default.defaultGetHeaders(client.options, { format });\n mixin(headers, client.options.headers);\n return new paginatedresource_default(client, \"/push/deviceRegistrations\", headers, envelope, async function(body, headers2, unpacked) {\n return devicedetails_default.fromResponseBody(\n body,\n client._MsgPack,\n unpacked ? void 0 : format\n );\n }).get(params);\n }\n async remove(deviceIdOrDetails) {\n const client = this.client, format = client.options.useBinaryProtocol ? \"msgpack\" /* msgpack */ : \"json\" /* json */, headers = defaults_default.defaultGetHeaders(client.options, { format }), params = {}, deviceId = deviceIdOrDetails.id || deviceIdOrDetails;\n if (typeof deviceId !== \"string\" || !deviceId.length) {\n throw new ErrorInfo(\n \"First argument to DeviceRegistrations#remove must be a deviceId string or DeviceDetails\",\n 4e4,\n 400\n );\n }\n mixin(headers, client.options.headers);\n if (client.options.pushFullWait)\n mixin(params, { fullWait: \"true\" });\n await resource_default[\"delete\"](\n client,\n \"/push/deviceRegistrations/\" + encodeURIComponent(deviceId),\n headers,\n params,\n null,\n true\n );\n }\n async removeWhere(params) {\n const client = this.client, format = client.options.useBinaryProtocol ? \"msgpack\" /* msgpack */ : \"json\" /* json */, headers = defaults_default.defaultGetHeaders(client.options, { format });\n mixin(headers, client.options.headers);\n if (client.options.pushFullWait)\n mixin(params, { fullWait: \"true\" });\n await resource_default[\"delete\"](client, \"/push/deviceRegistrations\", headers, params, null, true);\n }\n};\nvar ChannelSubscriptions = class _ChannelSubscriptions {\n constructor(client) {\n /* ChannelSubscriptions have no unique id; removing one is equivalent to removeWhere by its properties */\n this.remove = _ChannelSubscriptions.prototype.removeWhere;\n this.client = client;\n }\n async save(subscription) {\n const client = this.client;\n const body = pushchannelsubscription_default.fromValues(subscription);\n const format = client.options.useBinaryProtocol ? \"msgpack\" /* msgpack */ : \"json\" /* json */, headers = defaults_default.defaultPostHeaders(client.options, { format }), params = {};\n mixin(headers, client.options.headers);\n if (client.options.pushFullWait)\n mixin(params, { fullWait: \"true\" });\n const requestBody = encodeBody(body, client._MsgPack, format);\n const response = await resource_default.post(\n client,\n \"/push/channelSubscriptions\",\n requestBody,\n headers,\n params,\n null,\n true\n );\n return pushchannelsubscription_default.fromResponseBody(\n response.body,\n client._MsgPack,\n response.unpacked ? void 0 : format\n );\n }\n async list(params) {\n const client = this.client, format = client.options.useBinaryProtocol ? \"msgpack\" /* msgpack */ : \"json\" /* json */, envelope = this.client.http.supportsLinkHeaders ? void 0 : format, headers = defaults_default.defaultGetHeaders(client.options, { format });\n mixin(headers, client.options.headers);\n return new paginatedresource_default(client, \"/push/channelSubscriptions\", headers, envelope, async function(body, headers2, unpacked) {\n return pushchannelsubscription_default.fromResponseBody(\n body,\n client._MsgPack,\n unpacked ? void 0 : format\n );\n }).get(params);\n }\n async removeWhere(params) {\n const client = this.client, format = client.options.useBinaryProtocol ? \"msgpack\" /* msgpack */ : \"json\" /* json */, headers = defaults_default.defaultGetHeaders(client.options, { format });\n mixin(headers, client.options.headers);\n if (client.options.pushFullWait)\n mixin(params, { fullWait: \"true\" });\n await resource_default[\"delete\"](client, \"/push/channelSubscriptions\", headers, params, null, true);\n }\n async listChannels(params) {\n const client = this.client, format = client.options.useBinaryProtocol ? \"msgpack\" /* msgpack */ : \"json\" /* json */, envelope = this.client.http.supportsLinkHeaders ? void 0 : format, headers = defaults_default.defaultGetHeaders(client.options, { format });\n mixin(headers, client.options.headers);\n if (client.options.pushFullWait)\n mixin(params, { fullWait: \"true\" });\n return new paginatedresource_default(client, \"/push/channels\", headers, envelope, async function(body, headers2, unpacked) {\n const parsedBody = !unpacked && format ? decodeBody(body, client._MsgPack, format) : body;\n for (let i = 0; i < parsedBody.length; i++) {\n parsedBody[i] = String(parsedBody[i]);\n }\n return parsedBody;\n }).get(params);\n }\n};\nvar push_default = Push;\n\n// src/common/lib/types/presencemessage.ts\nvar actions2 = [\"absent\", \"present\", \"enter\", \"leave\", \"update\"];\nasync function fromEncoded(logger, Crypto2, encoded, inputOptions) {\n const options = normalizeCipherOptions(Crypto2, logger, inputOptions != null ? inputOptions : null);\n const wpm = WirePresenceMessage.fromValues(encoded);\n return wpm.decode(options, logger);\n}\nasync function fromEncodedArray(logger, Crypto2, encodedArray, options) {\n return Promise.all(\n encodedArray.map(function(encoded) {\n return fromEncoded(logger, Crypto2, encoded, options);\n })\n );\n}\nasync function _fromEncoded(encoded, channel) {\n return WirePresenceMessage.fromValues(encoded).decode(channel.channelOptions, channel.logger);\n}\nasync function _fromEncodedArray(encodedArray, channel) {\n return Promise.all(\n encodedArray.map(function(encoded) {\n return _fromEncoded(encoded, channel);\n })\n );\n}\nvar PresenceMessage = class _PresenceMessage extends BaseMessage {\n /* Returns whether this presenceMessage is synthesized, i.e. was not actually\n * sent by the connection (usually means a leave event sent 15s after a\n * disconnection). This is useful because synthesized messages cannot be\n * compared for newness by id lexicographically - RTP2b1\n */\n isSynthesized() {\n if (!this.id || !this.connectionId) {\n return true;\n }\n return this.id.substring(this.connectionId.length, 0) !== this.connectionId;\n }\n /* RTP2b2 */\n parseId() {\n if (!this.id)\n throw new Error(\"parseId(): Presence message does not contain an id\");\n const parts = this.id.split(\":\");\n return {\n connectionId: parts[0],\n msgSerial: parseInt(parts[1], 10),\n index: parseInt(parts[2], 10)\n };\n }\n async encode(options) {\n const res = Object.assign(new WirePresenceMessage(), this, {\n action: actions2.indexOf(this.action || \"present\")\n });\n return encode(res, options);\n }\n static fromValues(values) {\n return Object.assign(new _PresenceMessage(), values);\n }\n static fromValuesArray(values) {\n return values.map((v) => _PresenceMessage.fromValues(v));\n }\n static fromData(data) {\n if (data instanceof _PresenceMessage) {\n return data;\n }\n return _PresenceMessage.fromValues({\n data\n });\n }\n toString() {\n return strMsg(this, \"PresenceMessage\");\n }\n};\nvar WirePresenceMessage = class _WirePresenceMessage extends BaseMessage {\n toJSON(...args) {\n return wireToJSON.call(this, ...args);\n }\n static fromValues(values) {\n return Object.assign(new _WirePresenceMessage(), values);\n }\n static fromValuesArray(values) {\n return values.map((v) => _WirePresenceMessage.fromValues(v));\n }\n async decode(channelOptions, logger) {\n const res = Object.assign(new PresenceMessage(), __spreadProps(__spreadValues({}, this), {\n action: actions2[this.action]\n }));\n try {\n await decode(res, channelOptions);\n } catch (e) {\n logger_default.logAction(logger, logger_default.LOG_ERROR, \"WirePresenceMessage.decode()\", inspectError(e));\n }\n return res;\n }\n toString() {\n return strMsg(this, \"WirePresenceMessage\");\n }\n};\nvar presencemessage_default = PresenceMessage;\n\n// src/common/lib/client/restpresence.ts\nvar RestPresence = class {\n constructor(channel) {\n this.channel = channel;\n }\n get logger() {\n return this.channel.logger;\n }\n async get(params) {\n logger_default.logAction(this.logger, logger_default.LOG_MICRO, \"RestPresence.get()\", \"channel = \" + this.channel.name);\n const client = this.channel.client, format = client.options.useBinaryProtocol ? \"msgpack\" /* msgpack */ : \"json\" /* json */, envelope = this.channel.client.http.supportsLinkHeaders ? void 0 : format, headers = defaults_default.defaultGetHeaders(client.options, { format });\n mixin(headers, client.options.headers);\n return new paginatedresource_default(\n client,\n this.channel.client.rest.presenceMixin.basePath(this),\n headers,\n envelope,\n async (body, headers2, unpacked) => {\n const decoded = unpacked ? body : decodeBody(body, client._MsgPack, format);\n return _fromEncodedArray(decoded, this.channel);\n }\n ).get(params);\n }\n async history(params) {\n logger_default.logAction(this.logger, logger_default.LOG_MICRO, \"RestPresence.history()\", \"channel = \" + this.channel.name);\n return this.channel.client.rest.presenceMixin.history(this, params);\n }\n};\nvar restpresence_default = RestPresence;\n\n// src/common/lib/types/message.ts\nvar actions3 = [\"message.create\", \"message.update\", \"message.delete\", \"meta\", \"message.summary\"];\nfunction stringifyAction(action) {\n return actions3[action || 0] || \"unknown\";\n}\nfunction getMessageSize(msg) {\n let size = 0;\n if (msg.name) {\n size += msg.name.length;\n }\n if (msg.clientId) {\n size += msg.clientId.length;\n }\n if (msg.extras) {\n size += JSON.stringify(msg.extras).length;\n }\n if (msg.data) {\n size += dataSizeBytes(msg.data);\n }\n return size;\n}\nasync function fromEncoded2(logger, Crypto2, encoded, inputOptions) {\n const options = normalizeCipherOptions(Crypto2, logger, inputOptions != null ? inputOptions : null);\n const wm = WireMessage.fromValues(encoded);\n return wm.decode(options, logger);\n}\nasync function fromEncodedArray2(logger, Crypto2, encodedArray, options) {\n return Promise.all(\n encodedArray.map(function(encoded) {\n return fromEncoded2(logger, Crypto2, encoded, options);\n })\n );\n}\nasync function _fromEncoded2(encoded, channel) {\n const wm = WireMessage.fromValues(encoded);\n return wm.decode(channel.channelOptions, channel.logger);\n}\nasync function _fromEncodedArray2(encodedArray, channel) {\n return Promise.all(\n encodedArray.map(function(encoded) {\n return _fromEncoded2(encoded, channel);\n })\n );\n}\nasync function encodeArray(messages, options) {\n return Promise.all(messages.map((message) => message.encode(options)));\n}\nvar serialize = encodeBody;\nfunction getMessagesSize(messages) {\n let msg, total = 0;\n for (let i = 0; i < messages.length; i++) {\n msg = messages[i];\n total += msg.size || (msg.size = getMessageSize(msg));\n }\n return total;\n}\nvar Message = class _Message extends BaseMessage {\n expandFields() {\n if (!this.version) {\n this.version = {};\n }\n if (!this.version.serial && this.serial) {\n this.version.serial = this.serial;\n }\n if (!this.version.timestamp && this.timestamp) {\n this.version.timestamp = this.timestamp;\n }\n if (!this.annotations) {\n this.annotations = {\n summary: {}\n };\n } else if (!this.annotations.summary) {\n this.annotations.summary = {};\n }\n }\n async encode(options) {\n const res = Object.assign(new WireMessage(), this, {\n action: actions3.indexOf(this.action || \"message.create\")\n });\n return encode(res, options);\n }\n static fromValues(values) {\n return Object.assign(new _Message(), values);\n }\n static fromValuesArray(values) {\n return values.map((v) => _Message.fromValues(v));\n }\n toString() {\n return strMsg(this, \"Message\");\n }\n};\nvar WireMessage = class _WireMessage extends BaseMessage {\n // Overload toJSON() to intercept JSON.stringify()\n toJSON(...args) {\n return wireToJSON.call(this, ...args);\n }\n static fromValues(values) {\n return Object.assign(new _WireMessage(), values);\n }\n static fromValuesArray(values) {\n return values.map((v) => _WireMessage.fromValues(v));\n }\n // for contexts where some decoding errors need to be handled specially by the caller\n async decodeWithErr(inputContext, logger) {\n const res = Object.assign(new Message(), __spreadProps(__spreadValues({}, this), {\n action: stringifyAction(this.action)\n }));\n let err;\n try {\n await decode(res, inputContext);\n } catch (e) {\n logger_default.logAction(logger, logger_default.LOG_ERROR, \"WireMessage.decode()\", inspectError(e));\n err = e;\n }\n res.expandFields();\n return { decoded: res, err };\n }\n async decode(inputContext, logger) {\n const { decoded } = await this.decodeWithErr(inputContext, logger);\n return decoded;\n }\n toString() {\n return strMsg(this, \"WireMessage\");\n }\n};\nvar message_default = Message;\n\n// src/common/lib/client/restchannel.ts\nvar MSG_ID_ENTROPY_BYTES = 9;\nfunction allEmptyIds(messages) {\n return messages.every(function(message) {\n return !message.id;\n });\n}\nvar RestChannel = class {\n constructor(client, name, channelOptions) {\n this._annotations = null;\n var _a2, _b;\n logger_default.logAction(client.logger, logger_default.LOG_MINOR, \"RestChannel()\", \"started; name = \" + name);\n this.name = name;\n this.client = client;\n this.presence = new restpresence_default(this);\n this.channelOptions = normaliseChannelOptions((_a2 = client._Crypto) != null ? _a2 : null, this.logger, channelOptions);\n if ((_b = client.options.plugins) == null ? void 0 : _b.Push) {\n this._push = new client.options.plugins.Push.PushChannel(this);\n }\n if (client._Annotations) {\n this._annotations = new client._Annotations.RestAnnotations(this);\n }\n }\n get annotations() {\n if (!this._annotations) {\n throwMissingPluginError(\"Annotations\");\n }\n return this._annotations;\n }\n get push() {\n if (!this._push) {\n throwMissingPluginError(\"Push\");\n }\n return this._push;\n }\n get logger() {\n return this.client.logger;\n }\n setOptions(options) {\n var _a2;\n this.channelOptions = normaliseChannelOptions((_a2 = this.client._Crypto) != null ? _a2 : null, this.logger, options);\n }\n async history(params) {\n logger_default.logAction(this.logger, logger_default.LOG_MICRO, \"RestChannel.history()\", \"channel = \" + this.name);\n return this.client.rest.channelMixin.history(this, params);\n }\n async publish(...args) {\n const first = args[0], second = args[1];\n let messages;\n let params;\n if (typeof first === \"string\" || first === null) {\n messages = [message_default.fromValues({ name: first, data: second })];\n params = args[2];\n } else if (isObject(first)) {\n messages = [message_default.fromValues(first)];\n params = args[1];\n } else if (Array.isArray(first)) {\n messages = message_default.fromValuesArray(first);\n params = args[1];\n } else {\n throw new ErrorInfo(\n \"The single-argument form of publish() expects a message object or an array of message objects\",\n 40013,\n 400\n );\n }\n if (!params) {\n params = {};\n }\n const client = this.client, options = client.options, format = options.useBinaryProtocol ? \"msgpack\" /* msgpack */ : \"json\" /* json */, idempotentRestPublishing = client.options.idempotentRestPublishing, headers = defaults_default.defaultPostHeaders(client.options, { format });\n mixin(headers, options.headers);\n if (idempotentRestPublishing && allEmptyIds(messages)) {\n const msgIdBase = await randomString(MSG_ID_ENTROPY_BYTES);\n messages.forEach(function(message, index) {\n message.id = msgIdBase + \":\" + index.toString();\n });\n }\n const wireMessages = await encodeArray(messages, this.channelOptions);\n const size = getMessagesSize(wireMessages), maxMessageSize = options.maxMessageSize;\n if (size > maxMessageSize) {\n throw new ErrorInfo(\n `Maximum size of messages that can be published at once exceeded (was ${size} bytes; limit is ${maxMessageSize} bytes)`,\n 40009,\n 400\n );\n }\n await this._publish(serialize(wireMessages, client._MsgPack, format), headers, params);\n }\n async _publish(requestBody, headers, params) {\n await resource_default.post(\n this.client,\n this.client.rest.channelMixin.basePath(this) + \"/messages\",\n requestBody,\n headers,\n params,\n null,\n true\n );\n }\n async status() {\n return this.client.rest.channelMixin.status(this);\n }\n};\nvar restchannel_default = RestChannel;\n\n// src/common/lib/types/stats.ts\nvar Stats = class _Stats {\n constructor(values) {\n this.entries = values && values.entries || void 0;\n this.schema = values && values.schema || void 0;\n this.appId = values && values.appId || void 0;\n this.inProgress = values && values.inProgress || void 0;\n this.unit = values && values.unit || void 0;\n this.intervalId = values && values.intervalId || void 0;\n }\n static fromValues(values) {\n return new _Stats(values);\n }\n};\nvar stats_default = Stats;\n\n// src/common/lib/client/restchannelmixin.ts\nvar RestChannelMixin = class {\n static basePath(channel) {\n return \"/channels/\" + encodeURIComponent(channel.name);\n }\n static history(channel, params) {\n const client = channel.client, format = client.options.useBinaryProtocol ? \"msgpack\" /* msgpack */ : \"json\" /* json */, envelope = channel.client.http.supportsLinkHeaders ? void 0 : format, headers = defaults_default.defaultGetHeaders(client.options, { format });\n mixin(headers, client.options.headers);\n return new paginatedresource_default(client, this.basePath(channel) + \"/messages\", headers, envelope, async function(body, headers2, unpacked) {\n const decoded = unpacked ? body : decodeBody(body, client._MsgPack, format);\n return _fromEncodedArray2(decoded, channel);\n }).get(params);\n }\n static async status(channel) {\n const format = channel.client.options.useBinaryProtocol ? \"msgpack\" /* msgpack */ : \"json\" /* json */;\n const headers = defaults_default.defaultPostHeaders(channel.client.options, { format });\n const response = await resource_default.get(\n channel.client,\n this.basePath(channel),\n headers,\n {},\n format,\n true\n );\n return response.body;\n }\n};\n\n// src/common/lib/client/restpresencemixin.ts\nvar RestPresenceMixin = class {\n static basePath(presence) {\n return RestChannelMixin.basePath(presence.channel) + \"/presence\";\n }\n static async history(presence, params) {\n const client = presence.channel.client, format = client.options.useBinaryProtocol ? \"msgpack\" /* msgpack */ : \"json\" /* json */, envelope = presence.channel.client.http.supportsLinkHeaders ? void 0 : format, headers = defaults_default.defaultGetHeaders(client.options, { format });\n mixin(headers, client.options.headers);\n return new paginatedresource_default(\n client,\n this.basePath(presence) + \"/history\",\n headers,\n envelope,\n async (body, headers2, unpacked) => {\n const decoded = unpacked ? body : decodeBody(body, client._MsgPack, format);\n return _fromEncodedArray(decoded, presence.channel);\n }\n ).get(params);\n }\n};\n\n// src/common/lib/client/rest.ts\nvar Rest = class {\n constructor(client) {\n this.channelMixin = RestChannelMixin;\n this.presenceMixin = RestPresenceMixin;\n // exposed for plugins but shouldn't be bundled with minimal realtime\n this.Resource = resource_default;\n this.PaginatedResource = paginatedresource_default;\n this.DeviceDetails = devicedetails_default;\n this.PushChannelSubscription = pushchannelsubscription_default;\n this.client = client;\n this.channels = new Channels(this.client);\n this.push = new push_default(this.client);\n }\n async stats(params) {\n const headers = defaults_default.defaultGetHeaders(this.client.options), format = this.client.options.useBinaryProtocol ? \"msgpack\" /* msgpack */ : \"json\" /* json */, envelope = this.client.http.supportsLinkHeaders ? void 0 : format;\n mixin(headers, this.client.options.headers);\n return new paginatedresource_default(this.client, \"/stats\", headers, envelope, function(body, headers2, unpacked) {\n const statsValues = unpacked ? body : JSON.parse(body);\n for (let i = 0; i < statsValues.length; i++)\n statsValues[i] = stats_default.fromValues(statsValues[i]);\n return statsValues;\n }).get(params);\n }\n async time(params) {\n const headers = defaults_default.defaultGetHeaders(this.client.options);\n if (this.client.options.headers)\n mixin(headers, this.client.options.headers);\n const timeUri = (host) => {\n return this.client.baseUri(host) + \"/time\";\n };\n let { error, body, unpacked } = await this.client.http.do(\n HttpMethods_default.Get,\n timeUri,\n headers,\n null,\n params\n );\n if (error) {\n throw error;\n }\n if (!unpacked)\n body = JSON.parse(body);\n const time = body[0];\n if (!time) {\n throw new ErrorInfo(\"Internal error (unexpected result type from GET /time)\", 5e4, 500);\n }\n this.client.serverTimeOffset = time - Date.now();\n return time;\n }\n async request(method, path, version2, params, body, customHeaders) {\n var _a2;\n const [encoder, decoder, format] = (() => {\n if (this.client.options.useBinaryProtocol) {\n if (!this.client._MsgPack) {\n throwMissingPluginError(\"MsgPack\");\n }\n return [this.client._MsgPack.encode, this.client._MsgPack.decode, \"msgpack\" /* msgpack */];\n } else {\n return [JSON.stringify, JSON.parse, \"json\" /* json */];\n }\n })();\n const envelope = this.client.http.supportsLinkHeaders ? void 0 : format;\n params = params || {};\n const _method = method.toLowerCase();\n const headers = _method == \"get\" ? defaults_default.defaultGetHeaders(this.client.options, { format, protocolVersion: version2 }) : defaults_default.defaultPostHeaders(this.client.options, { format, protocolVersion: version2 });\n if (typeof body !== \"string\") {\n body = (_a2 = encoder(body)) != null ? _a2 : null;\n }\n mixin(headers, this.client.options.headers);\n if (customHeaders) {\n mixin(headers, customHeaders);\n }\n const paginatedResource = new paginatedresource_default(\n this.client,\n path,\n headers,\n envelope,\n async function(resbody, headers2, unpacked) {\n return ensureArray(unpacked ? resbody : decoder(resbody));\n },\n /* useHttpPaginatedResponse: */\n true\n );\n if (!Platform.Http.methods.includes(_method)) {\n throw new ErrorInfo(\"Unsupported method \" + _method, 40500, 405);\n }\n if (Platform.Http.methodsWithBody.includes(_method)) {\n return paginatedResource[_method](params, body);\n } else {\n return paginatedResource[_method](params);\n }\n }\n async batchPublish(specOrSpecs) {\n let requestBodyDTO;\n let singleSpecMode;\n if (Array.isArray(specOrSpecs)) {\n requestBodyDTO = specOrSpecs;\n singleSpecMode = false;\n } else {\n requestBodyDTO = [specOrSpecs];\n singleSpecMode = true;\n }\n const format = this.client.options.useBinaryProtocol ? \"msgpack\" /* msgpack */ : \"json\" /* json */, headers = defaults_default.defaultPostHeaders(this.client.options, { format });\n if (this.client.options.headers)\n mixin(headers, this.client.options.headers);\n const requestBody = encodeBody(requestBodyDTO, this.client._MsgPack, format);\n const response = await resource_default.post(this.client, \"/messages\", requestBody, headers, {}, null, true);\n const batchResults = response.unpacked ? response.body : decodeBody(response.body, this.client._MsgPack, format);\n if (singleSpecMode) {\n return batchResults[0];\n } else {\n return batchResults;\n }\n }\n async batchPresence(channels) {\n const format = this.client.options.useBinaryProtocol ? \"msgpack\" /* msgpack */ : \"json\" /* json */, headers = defaults_default.defaultPostHeaders(this.client.options, { format });\n if (this.client.options.headers)\n mixin(headers, this.client.options.headers);\n const channelsParam = channels.join(\",\");\n const response = await resource_default.get(this.client, \"/presence\", headers, { channels: channelsParam }, null, true);\n return response.unpacked ? response.body : decodeBody(response.body, this.client._MsgPack, format);\n }\n async revokeTokens(specifiers, options) {\n if (useTokenAuth(this.client.options)) {\n throw new ErrorInfo(\"Cannot revoke tokens when using token auth\", 40162, 401);\n }\n const keyName = this.client.options.keyName;\n let resolvedOptions = options != null ? options : {};\n const requestBodyDTO = __spreadValues({\n targets: specifiers.map((specifier) => `${specifier.type}:${specifier.value}`)\n }, resolvedOptions);\n const format = this.client.options.useBinaryProtocol ? \"msgpack\" /* msgpack */ : \"json\" /* json */, headers = defaults_default.defaultPostHeaders(this.client.options, { format });\n if (this.client.options.headers)\n mixin(headers, this.client.options.headers);\n const requestBody = encodeBody(requestBodyDTO, this.client._MsgPack, format);\n const response = await resource_default.post(\n this.client,\n `/keys/${keyName}/revokeTokens`,\n requestBody,\n headers,\n {},\n null,\n true\n );\n return response.unpacked ? response.body : decodeBody(response.body, this.client._MsgPack, format);\n }\n};\nvar Channels = class {\n constructor(client) {\n this.client = client;\n this.all = /* @__PURE__ */ Object.create(null);\n }\n get(name, channelOptions) {\n name = String(name);\n let channel = this.all[name];\n if (!channel) {\n this.all[name] = channel = new restchannel_default(this.client, name, channelOptions);\n } else if (channelOptions) {\n channel.setOptions(channelOptions);\n }\n return channel;\n }\n /* Included to support certain niche use-cases; most users should ignore this.\n * Please do not use this unless you know what you're doing */\n release(name) {\n delete this.all[String(name)];\n }\n};\n\n// src/common/lib/client/baserest.ts\nvar BaseRest = class extends baseclient_default {\n /*\n * The public typings declare that this only accepts an object, but since we want to emit a good error message in the case where a non-TypeScript user does one of these things:\n *\n * 1. passes a string (which is quite likely if they’re e.g. migrating from the default variant to the modular variant)\n * 2. passes no argument at all\n *\n * tell the compiler that these cases are possible so that it forces us to handle them.\n */\n constructor(options) {\n super(defaults_default.objectifyOptions(options, false, \"BaseRest\", logger_default.defaultLogger, { Rest }));\n }\n};\n\n// src/common/lib/client/modularplugins.ts\nvar allCommonModularPlugins = { Rest };\n\n// src/common/lib/types/defaultmessage.ts\nvar DefaultMessage = class extends message_default {\n static async fromEncoded(encoded, inputOptions) {\n return fromEncoded2(logger_default.defaultLogger, Platform.Crypto, encoded, inputOptions);\n }\n static async fromEncodedArray(encodedArray, options) {\n return fromEncodedArray2(logger_default.defaultLogger, Platform.Crypto, encodedArray, options);\n }\n static fromValues(values) {\n return message_default.fromValues(values);\n }\n};\n\n// src/common/lib/types/defaultpresencemessage.ts\nvar DefaultPresenceMessage = class extends presencemessage_default {\n static async fromEncoded(encoded, inputOptions) {\n return fromEncoded(logger_default.defaultLogger, Platform.Crypto, encoded, inputOptions);\n }\n static async fromEncodedArray(encodedArray, options) {\n return fromEncodedArray(logger_default.defaultLogger, Platform.Crypto, encodedArray, options);\n }\n static fromValues(values) {\n return presencemessage_default.fromValues(values);\n }\n};\n\n// src/common/lib/types/annotation.ts\nvar actions4 = [\"annotation.create\", \"annotation.delete\"];\nasync function fromEncoded3(logger, encoded, options) {\n const wa = WireAnnotation.fromValues(encoded);\n return wa.decode(options || {}, logger);\n}\nasync function fromEncodedArray3(logger, encodedArray, options) {\n return Promise.all(\n encodedArray.map(function(encoded) {\n return fromEncoded3(logger, encoded, options);\n })\n );\n}\nasync function _fromEncoded3(encoded, channel) {\n return WireAnnotation.fromValues(encoded).decode(channel.channelOptions, channel.logger);\n}\nasync function _fromEncodedArray3(encodedArray, channel) {\n return Promise.all(\n encodedArray.map(function(encoded) {\n return _fromEncoded3(encoded, channel);\n })\n );\n}\nvar Annotation = class _Annotation extends BaseMessage {\n async encode() {\n const res = Object.assign(new WireAnnotation(), this, {\n action: actions4.indexOf(this.action || \"annotation.create\")\n });\n return encode(res, {});\n }\n static fromValues(values) {\n return Object.assign(new _Annotation(), values);\n }\n static fromValuesArray(values) {\n return values.map((v) => _Annotation.fromValues(v));\n }\n toString() {\n return strMsg(this, \"Annotation\");\n }\n};\nvar WireAnnotation = class _WireAnnotation extends BaseMessage {\n toJSON(...args) {\n return wireToJSON.call(this, ...args);\n }\n static fromValues(values) {\n return Object.assign(new _WireAnnotation(), values);\n }\n static fromValuesArray(values) {\n return values.map((v) => _WireAnnotation.fromValues(v));\n }\n async decode(channelOptions, logger) {\n const res = Object.assign(new Annotation(), __spreadProps(__spreadValues({}, this), {\n action: actions4[this.action]\n }));\n try {\n await decode(res, channelOptions);\n } catch (e) {\n logger_default.logAction(logger, logger_default.LOG_ERROR, \"WireAnnotation.decode()\", inspectError(e));\n }\n return res;\n }\n toString() {\n return strMsg(this, \"WireAnnotation\");\n }\n};\nvar annotation_default = Annotation;\n\n// src/common/lib/types/defaultannotation.ts\nvar DefaultAnnotation = class extends annotation_default {\n static async fromEncoded(encoded, inputOptions) {\n return fromEncoded3(logger_default.defaultLogger, encoded, inputOptions);\n }\n static async fromEncodedArray(encodedArray, options) {\n return fromEncodedArray3(logger_default.defaultLogger, encodedArray, options);\n }\n static fromValues(values) {\n return annotation_default.fromValues(values);\n }\n};\n\n// src/common/lib/client/restannotations.ts\nfunction serialFromMsgOrSerial(msgOrSerial) {\n let messageSerial;\n switch (typeof msgOrSerial) {\n case \"string\":\n messageSerial = msgOrSerial;\n break;\n case \"object\":\n messageSerial = msgOrSerial.serial;\n break;\n }\n if (!messageSerial || typeof messageSerial !== \"string\") {\n throw new ErrorInfo(\n \"First argument of annotations.publish() must be either a Message (or at least an object with a string `serial` property) or a message serial (string)\",\n 40003,\n 400\n );\n }\n return messageSerial;\n}\nfunction constructValidateAnnotation(msgOrSerial, annotationValues) {\n const messageSerial = serialFromMsgOrSerial(msgOrSerial);\n if (!annotationValues || typeof annotationValues !== \"object\") {\n throw new ErrorInfo(\n \"Second argument of annotations.publish() must be an object (the intended annotation to publish)\",\n 40003,\n 400\n );\n }\n const annotation = annotation_default.fromValues(annotationValues);\n annotation.messageSerial = messageSerial;\n if (!annotation.action) {\n annotation.action = \"annotation.create\";\n }\n return annotation;\n}\nfunction basePathForSerial(channel, serial) {\n return channel.client.rest.channelMixin.basePath(channel) + \"/messages/\" + encodeURIComponent(serial) + \"/annotations\";\n}\nvar RestAnnotations = class {\n constructor(channel) {\n this.channel = channel;\n }\n async publish(msgOrSerial, annotationValues) {\n const annotation = constructValidateAnnotation(msgOrSerial, annotationValues);\n const wireAnnotation = await annotation.encode();\n const client = this.channel.client, options = client.options, format = options.useBinaryProtocol ? \"msgpack\" /* msgpack */ : \"json\" /* json */, headers = defaults_default.defaultPostHeaders(client.options, { format }), params = {};\n mixin(headers, client.options.headers);\n const requestBody = encodeBody([wireAnnotation], client._MsgPack, format);\n await resource_default.post(\n client,\n basePathForSerial(this.channel, annotation.messageSerial),\n requestBody,\n headers,\n params,\n null,\n true\n );\n }\n async delete(msgOrSerial, annotationValues) {\n annotationValues.action = \"annotation.delete\";\n return this.publish(msgOrSerial, annotationValues);\n }\n async get(msgOrSerial, params) {\n const client = this.channel.client, messageSerial = serialFromMsgOrSerial(msgOrSerial), format = client.options.useBinaryProtocol ? \"msgpack\" /* msgpack */ : \"json\" /* json */, envelope = client.http.supportsLinkHeaders ? void 0 : format, headers = defaults_default.defaultGetHeaders(client.options, { format });\n mixin(headers, client.options.headers);\n return new paginatedresource_default(\n client,\n basePathForSerial(this.channel, messageSerial),\n headers,\n envelope,\n async (body, _, unpacked) => {\n const decoded = unpacked ? body : decodeBody(body, client._MsgPack, format);\n return _fromEncodedArray3(decoded, this.channel);\n }\n ).get(params);\n }\n};\nvar restannotations_default = RestAnnotations;\n\n// src/common/lib/types/protocolmessage.ts\nvar serialize2 = encodeBody;\nfunction toStringArray(array) {\n const result = [];\n if (array) {\n for (let i = 0; i < array.length; i++) {\n result.push(array[i].toString());\n }\n }\n return \"[ \" + result.join(\", \") + \" ]\";\n}\nfunction deserialize(serialized, MsgPack, presenceMessagePlugin, annotationsPlugin, objectsPlugin, format) {\n const deserialized = decodeBody(serialized, MsgPack, format);\n return fromDeserialized(deserialized, presenceMessagePlugin, annotationsPlugin, objectsPlugin);\n}\nfunction fromDeserialized(deserialized, presenceMessagePlugin, annotationsPlugin, objectsPlugin) {\n let error;\n if (deserialized.error) {\n error = ErrorInfo.fromValues(deserialized.error);\n }\n let messages;\n if (deserialized.messages) {\n messages = WireMessage.fromValuesArray(deserialized.messages);\n }\n let presence;\n if (presenceMessagePlugin && deserialized.presence) {\n presence = presenceMessagePlugin.WirePresenceMessage.fromValuesArray(\n deserialized.presence\n );\n }\n let annotations;\n if (annotationsPlugin && deserialized.annotations) {\n annotations = annotationsPlugin.WireAnnotation.fromValuesArray(\n deserialized.annotations\n );\n }\n let state;\n if (objectsPlugin && deserialized.state) {\n state = objectsPlugin.WireObjectMessage.fromValuesArray(\n deserialized.state,\n utils_exports,\n MessageEncoding\n );\n }\n return Object.assign(new ProtocolMessage(), __spreadProps(__spreadValues({}, deserialized), { presence, messages, annotations, state, error }));\n}\nfunction makeFromDeserializedWithDependencies(dependencies) {\n return (deserialized) => {\n var _a2;\n return fromDeserialized(\n deserialized,\n {\n PresenceMessage: presencemessage_default,\n WirePresenceMessage\n },\n { Annotation: annotation_default, WireAnnotation, RealtimeAnnotations: realtimeannotations_default, RestAnnotations: restannotations_default },\n (_a2 = dependencies == null ? void 0 : dependencies.ObjectsPlugin) != null ? _a2 : null\n );\n };\n}\nfunction fromValues(values) {\n return Object.assign(new ProtocolMessage(), values);\n}\nfunction stringify(msg, presenceMessagePlugin, annotationsPlugin, objectsPlugin) {\n let result = \"[ProtocolMessage\";\n if (msg.action !== void 0)\n result += \"; action=\" + ActionName[msg.action] || msg.action;\n const simpleAttributes = [\"id\", \"channel\", \"channelSerial\", \"connectionId\", \"count\", \"msgSerial\", \"timestamp\"];\n let attribute;\n for (let attribIndex = 0; attribIndex < simpleAttributes.length; attribIndex++) {\n attribute = simpleAttributes[attribIndex];\n if (msg[attribute] !== void 0)\n result += \"; \" + attribute + \"=\" + msg[attribute];\n }\n if (msg.messages)\n result += \"; messages=\" + toStringArray(WireMessage.fromValuesArray(msg.messages));\n if (msg.presence && presenceMessagePlugin)\n result += \"; presence=\" + toStringArray(presenceMessagePlugin.WirePresenceMessage.fromValuesArray(msg.presence));\n if (msg.annotations && annotationsPlugin) {\n result += \"; annotations=\" + toStringArray(annotationsPlugin.WireAnnotation.fromValuesArray(msg.annotations));\n }\n if (msg.state && objectsPlugin) {\n result += \"; state=\" + toStringArray(objectsPlugin.WireObjectMessage.fromValuesArray(msg.state, utils_exports, MessageEncoding));\n }\n if (msg.error)\n result += \"; error=\" + ErrorInfo.fromValues(msg.error).toString();\n if (msg.auth && msg.auth.accessToken)\n result += \"; token=\" + msg.auth.accessToken;\n if (msg.flags)\n result += \"; flags=\" + flagNames.filter(msg.hasFlag).join(\",\");\n if (msg.params) {\n let stringifiedParams = \"\";\n forInOwnNonNullProperties(msg.params, function(prop) {\n if (stringifiedParams.length > 0) {\n stringifiedParams += \"; \";\n }\n stringifiedParams += prop + \"=\" + msg.params[prop];\n });\n if (stringifiedParams.length > 0) {\n result += \"; params=[\" + stringifiedParams + \"]\";\n }\n }\n result += \"]\";\n return result;\n}\nvar ProtocolMessage = class {\n constructor() {\n this.hasFlag = (flag) => {\n return (this.flags & flags[flag]) > 0;\n };\n }\n setFlag(flag) {\n return this.flags = this.flags | flags[flag];\n }\n getMode() {\n return (this.flags || 0) & flags.MODE_ALL;\n }\n encodeModesToFlags(modes) {\n modes.forEach((mode) => this.setFlag(mode));\n }\n decodeModesFromFlags() {\n const modes = [];\n channelModes.forEach((mode) => {\n if (this.hasFlag(mode)) {\n modes.push(mode);\n }\n });\n return modes.length > 0 ? modes : void 0;\n }\n};\nvar protocolmessage_default = ProtocolMessage;\n\n// src/common/lib/client/channelstatechange.ts\nvar ChannelStateChange = class {\n constructor(previous, current, resumed, hasBacklog, reason) {\n this.previous = previous;\n this.current = current;\n if (current === \"attached\") {\n this.resumed = resumed;\n this.hasBacklog = hasBacklog;\n }\n if (reason)\n this.reason = reason;\n }\n};\nvar channelstatechange_default = ChannelStateChange;\n\n// src/common/lib/client/realtimechannel.ts\nvar noop = function() {\n};\nfunction validateChannelOptions(options) {\n if (options && \"params\" in options && !isObject(options.params)) {\n return new ErrorInfo(\"options.params must be an object\", 4e4, 400);\n }\n if (options && \"modes\" in options) {\n if (!Array.isArray(options.modes)) {\n return new ErrorInfo(\"options.modes must be an array\", 4e4, 400);\n }\n for (let i = 0; i < options.modes.length; i++) {\n const currentMode = options.modes[i];\n if (!currentMode || typeof currentMode !== \"string\" || !channelModes.includes(String.prototype.toUpperCase.call(currentMode))) {\n return new ErrorInfo(\"Invalid channel mode: \" + currentMode, 4e4, 400);\n }\n }\n }\n}\nvar RealtimeChannel = class _RealtimeChannel extends eventemitter_default {\n constructor(client, name, options) {\n var _a2, _b, _c;\n super(client.logger);\n this._annotations = null;\n this._mode = 0;\n this.retryCount = 0;\n this.history = async function(params) {\n logger_default.logAction(this.logger, logger_default.LOG_MICRO, \"RealtimeChannel.history()\", \"channel = \" + this.name);\n const restMixin = this.client.rest.channelMixin;\n if (params && params.untilAttach) {\n if (this.state !== \"attached\") {\n throw new ErrorInfo(\"option untilAttach requires the channel to be attached\", 4e4, 400);\n }\n if (!this.properties.attachSerial) {\n throw new ErrorInfo(\n \"untilAttach was specified and channel is attached, but attachSerial is not defined\",\n 4e4,\n 400\n );\n }\n delete params.untilAttach;\n params.from_serial = this.properties.attachSerial;\n }\n return restMixin.history(this, params);\n };\n this.whenState = (state) => {\n return eventemitter_default.prototype.whenState.call(this, state, this.state);\n };\n logger_default.logAction(this.logger, logger_default.LOG_MINOR, \"RealtimeChannel()\", \"started; name = \" + name);\n this.name = name;\n this.channelOptions = normaliseChannelOptions((_a2 = client._Crypto) != null ? _a2 : null, this.logger, options);\n this.client = client;\n this._presence = client._RealtimePresence ? new client._RealtimePresence.RealtimePresence(this) : null;\n if (client._Annotations) {\n this._annotations = new client._Annotations.RealtimeAnnotations(this);\n }\n this.connectionManager = client.connection.connectionManager;\n this.state = \"initialized\";\n this.subscriptions = new eventemitter_default(this.logger);\n this.syncChannelSerial = void 0;\n this.properties = {\n attachSerial: void 0,\n channelSerial: void 0\n };\n this.setOptions(options);\n this.errorReason = null;\n this._attachResume = false;\n this._decodingContext = {\n channelOptions: this.channelOptions,\n plugins: client.options.plugins || {},\n baseEncodedPreviousPayload: void 0\n };\n this._lastPayload = {\n messageId: null,\n protocolMessageChannelSerial: null,\n decodeFailureRecoveryInProgress: null\n };\n this._allChannelChanges = new eventemitter_default(this.logger);\n if ((_b = client.options.plugins) == null ? void 0 : _b.Push) {\n this._push = new client.options.plugins.Push.PushChannel(this);\n }\n if ((_c = client.options.plugins) == null ? void 0 : _c.Objects) {\n this._objects = new client.options.plugins.Objects.Objects(this);\n }\n }\n get presence() {\n if (!this._presence) {\n throwMissingPluginError(\"RealtimePresence\");\n }\n return this._presence;\n }\n get annotations() {\n if (!this._annotations) {\n throwMissingPluginError(\"Annotations\");\n }\n return this._annotations;\n }\n get push() {\n if (!this._push) {\n throwMissingPluginError(\"Push\");\n }\n return this._push;\n }\n /** @spec RTL27 */\n get objects() {\n if (!this._objects) {\n throwMissingPluginError(\"Objects\");\n }\n return this._objects;\n }\n invalidStateError() {\n return new ErrorInfo(\n \"Channel operation failed as channel state is \" + this.state,\n 90001,\n 400,\n this.errorReason || void 0\n );\n }\n static processListenerArgs(args) {\n args = Array.prototype.slice.call(args);\n if (typeof args[0] === \"function\") {\n args.unshift(null);\n }\n return args;\n }\n async setOptions(options) {\n var _a2;\n const previousChannelOptions = this.channelOptions;\n const err = validateChannelOptions(options);\n if (err) {\n throw err;\n }\n this.channelOptions = normaliseChannelOptions((_a2 = this.client._Crypto) != null ? _a2 : null, this.logger, options);\n if (this._decodingContext)\n this._decodingContext.channelOptions = this.channelOptions;\n if (this._shouldReattachToSetOptions(options, previousChannelOptions)) {\n this.attachImpl();\n return new Promise((resolve, reject) => {\n this._allChannelChanges.once(\n [\"attached\", \"update\", \"detached\", \"failed\"],\n function(stateChange) {\n switch (this.event) {\n case \"update\":\n case \"attached\":\n resolve();\n break;\n default:\n reject(stateChange.reason);\n }\n }\n );\n });\n }\n }\n _shouldReattachToSetOptions(options, prevOptions) {\n if (!(this.state === \"attached\" || this.state === \"attaching\")) {\n return false;\n }\n if (options == null ? void 0 : options.params) {\n const requestedParams = omitAgent(options.params);\n const existingParams = omitAgent(prevOptions.params);\n if (Object.keys(requestedParams).length !== Object.keys(existingParams).length) {\n return true;\n }\n if (!shallowEquals(existingParams, requestedParams)) {\n return true;\n }\n }\n if (options == null ? void 0 : options.modes) {\n if (!prevOptions.modes || !arrEquals(options.modes, prevOptions.modes)) {\n return true;\n }\n }\n return false;\n }\n async publish(...args) {\n let messages;\n let argCount = args.length;\n if (argCount == 1) {\n if (isObject(args[0])) {\n messages = [message_default.fromValues(args[0])];\n } else if (Array.isArray(args[0])) {\n messages = message_default.fromValuesArray(args[0]);\n } else {\n throw new ErrorInfo(\n \"The single-argument form of publish() expects a message object or an array of message objects\",\n 40013,\n 400\n );\n }\n } else {\n messages = [message_default.fromValues({ name: args[0], data: args[1] })];\n }\n const maxMessageSize = this.client.options.maxMessageSize;\n const wireMessages = await encodeArray(messages, this.channelOptions);\n const size = getMessagesSize(wireMessages);\n if (size > maxMessageSize) {\n throw new ErrorInfo(\n `Maximum size of messages that can be published at once exceeded (was ${size} bytes; limit is ${maxMessageSize} bytes)`,\n 40009,\n 400\n );\n }\n this.throwIfUnpublishableState();\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MICRO,\n \"RealtimeChannel.publish()\",\n \"sending message; channel state is \" + this.state + \", message count = \" + wireMessages.length\n );\n const pm = fromValues({ action: actions.MESSAGE, channel: this.name, messages: wireMessages });\n return this.sendMessage(pm);\n }\n throwIfUnpublishableState() {\n if (!this.connectionManager.activeState()) {\n throw this.connectionManager.getError();\n }\n if (this.state === \"failed\" || this.state === \"suspended\") {\n throw this.invalidStateError();\n }\n }\n onEvent(messages) {\n logger_default.logAction(this.logger, logger_default.LOG_MICRO, \"RealtimeChannel.onEvent()\", \"received message\");\n const subscriptions = this.subscriptions;\n for (let i = 0; i < messages.length; i++) {\n const message = messages[i];\n subscriptions.emit(message.name, message);\n }\n }\n async attach() {\n if (this.state === \"attached\") {\n return null;\n }\n return new Promise((resolve, reject) => {\n this._attach(false, null, (err, result) => err ? reject(err) : resolve(result));\n });\n }\n _attach(forceReattach, attachReason, callback) {\n if (!callback) {\n callback = (err) => {\n if (err) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_ERROR,\n \"RealtimeChannel._attach()\",\n \"Channel attach failed: \" + err.toString()\n );\n }\n };\n }\n const connectionManager = this.connectionManager;\n if (!connectionManager.activeState()) {\n callback(connectionManager.getError());\n return;\n }\n if (this.state !== \"attaching\" || forceReattach) {\n this.requestState(\"attaching\", attachReason);\n }\n this.once(function(stateChange) {\n switch (this.event) {\n case \"attached\":\n callback == null ? void 0 : callback(null, stateChange);\n break;\n case \"detached\":\n case \"suspended\":\n case \"failed\":\n callback == null ? void 0 : callback(\n stateChange.reason || connectionManager.getError() || new ErrorInfo(\"Unable to attach; reason unknown; state = \" + this.event, 9e4, 500)\n );\n break;\n case \"detaching\":\n callback == null ? void 0 : callback(new ErrorInfo(\"Attach request superseded by a subsequent detach request\", 9e4, 409));\n break;\n }\n });\n }\n attachImpl() {\n logger_default.logAction(this.logger, logger_default.LOG_MICRO, \"RealtimeChannel.attachImpl()\", \"sending ATTACH message\");\n const attachMsg = fromValues({\n action: actions.ATTACH,\n channel: this.name,\n params: this.channelOptions.params,\n // RTL4c1: Includes the channel serial to resume from a previous message\n // or attachment.\n channelSerial: this.properties.channelSerial\n });\n if (this.channelOptions.modes) {\n attachMsg.encodeModesToFlags(allToUpperCase(this.channelOptions.modes));\n }\n if (this._attachResume) {\n attachMsg.setFlag(\"ATTACH_RESUME\");\n }\n if (this._lastPayload.decodeFailureRecoveryInProgress) {\n attachMsg.channelSerial = this._lastPayload.protocolMessageChannelSerial;\n }\n this.sendMessage(attachMsg).catch(noop);\n }\n async detach() {\n const connectionManager = this.connectionManager;\n if (!connectionManager.activeState()) {\n throw connectionManager.getError();\n }\n switch (this.state) {\n case \"suspended\":\n this.notifyState(\"detached\");\n return;\n case \"detached\":\n return;\n case \"failed\":\n throw new ErrorInfo(\"Unable to detach; channel state = failed\", 90001, 400);\n default:\n this.requestState(\"detaching\");\n case \"detaching\":\n return new Promise((resolve, reject) => {\n this.once(function(stateChange) {\n switch (this.event) {\n case \"detached\":\n resolve();\n break;\n case \"attached\":\n case \"suspended\":\n case \"failed\":\n reject(\n stateChange.reason || connectionManager.getError() || new ErrorInfo(\"Unable to detach; reason unknown; state = \" + this.event, 9e4, 500)\n );\n break;\n case \"attaching\":\n reject(new ErrorInfo(\"Detach request superseded by a subsequent attach request\", 9e4, 409));\n break;\n }\n });\n });\n }\n }\n detachImpl() {\n logger_default.logAction(this.logger, logger_default.LOG_MICRO, \"RealtimeChannel.detach()\", \"sending DETACH message\");\n const msg = fromValues({ action: actions.DETACH, channel: this.name });\n this.sendMessage(msg).catch(noop);\n }\n async subscribe(...args) {\n const [event, listener] = _RealtimeChannel.processListenerArgs(args);\n if (this.state === \"failed\") {\n throw ErrorInfo.fromValues(this.invalidStateError());\n }\n if (event && typeof event === \"object\" && !Array.isArray(event)) {\n this.client._FilteredSubscriptions.subscribeFilter(this, event, listener);\n } else {\n this.subscriptions.on(event, listener);\n }\n if (this.channelOptions.attachOnSubscribe !== false) {\n return this.attach();\n } else {\n return null;\n }\n }\n unsubscribe(...args) {\n var _a2;\n const [event, listener] = _RealtimeChannel.processListenerArgs(args);\n if (typeof event === \"object\" && !listener || ((_a2 = this.filteredSubscriptions) == null ? void 0 : _a2.has(listener))) {\n this.client._FilteredSubscriptions.getAndDeleteFilteredSubscriptions(this, event, listener).forEach((l) => this.subscriptions.off(l));\n return;\n }\n this.subscriptions.off(event, listener);\n }\n sync() {\n switch (this.state) {\n case \"initialized\":\n case \"detaching\":\n case \"detached\":\n throw new PartialErrorInfo(\"Unable to sync to channel; not attached\", 4e4);\n default:\n }\n const connectionManager = this.connectionManager;\n if (!connectionManager.activeState()) {\n throw connectionManager.getError();\n }\n const syncMessage = fromValues({ action: actions.SYNC, channel: this.name });\n if (this.syncChannelSerial) {\n syncMessage.channelSerial = this.syncChannelSerial;\n }\n connectionManager.send(syncMessage);\n }\n async sendMessage(msg) {\n return new Promise((resolve, reject) => {\n this.connectionManager.send(msg, this.client.options.queueMessages, (err) => {\n if (err) {\n reject(err);\n } else {\n resolve();\n }\n });\n });\n }\n async sendPresence(presence) {\n const msg = fromValues({\n action: actions.PRESENCE,\n channel: this.name,\n presence\n });\n return this.sendMessage(msg);\n }\n sendState(objectMessages) {\n const msg = fromValues({\n action: actions.OBJECT,\n channel: this.name,\n state: objectMessages\n });\n return this.sendMessage(msg);\n }\n // Access to this method is synchronised by ConnectionManager#processChannelMessage, in order to synchronise access to the state stored in _decodingContext.\n async processMessage(message) {\n if (message.action === actions.ATTACHED || message.action === actions.MESSAGE || message.action === actions.PRESENCE || message.action === actions.OBJECT || message.action === actions.ANNOTATION) {\n this.setChannelSerial(message.channelSerial);\n }\n let syncChannelSerial, isSync = false;\n switch (message.action) {\n case actions.ATTACHED: {\n this.properties.attachSerial = message.channelSerial;\n this._mode = message.getMode();\n this.params = message.params || {};\n const modesFromFlags = message.decodeModesFromFlags();\n this.modes = modesFromFlags && allToLowerCase(modesFromFlags) || void 0;\n const resumed = message.hasFlag(\"RESUMED\");\n const hasPresence = message.hasFlag(\"HAS_PRESENCE\");\n const hasBacklog = message.hasFlag(\"HAS_BACKLOG\");\n const hasObjects = message.hasFlag(\"HAS_OBJECTS\");\n if (this.state === \"attached\") {\n if (!resumed) {\n if (this._presence) {\n this._presence.onAttached(hasPresence);\n }\n if (this._objects) {\n this._objects.onAttached(hasObjects);\n }\n }\n const change = new channelstatechange_default(this.state, this.state, resumed, hasBacklog, message.error);\n this._allChannelChanges.emit(\"update\", change);\n if (!resumed || this.channelOptions.updateOnAttached) {\n this.emit(\"update\", change);\n }\n } else if (this.state === \"detaching\") {\n this.checkPendingState();\n } else {\n this.notifyState(\"attached\", message.error, resumed, hasPresence, hasBacklog, hasObjects);\n }\n break;\n }\n case actions.DETACHED: {\n const detachErr = message.error ? ErrorInfo.fromValues(message.error) : new ErrorInfo(\"Channel detached\", 90001, 404);\n if (this.state === \"detaching\") {\n this.notifyState(\"detached\", detachErr);\n } else if (this.state === \"attaching\") {\n this.notifyState(\"suspended\", detachErr);\n } else if (this.state === \"attached\" || this.state === \"suspended\") {\n this.requestState(\"attaching\", detachErr);\n }\n break;\n }\n case actions.SYNC:\n isSync = true;\n syncChannelSerial = this.syncChannelSerial = message.channelSerial;\n if (!message.presence)\n break;\n case actions.PRESENCE: {\n if (!message.presence) {\n break;\n }\n populateFieldsFromParent(message);\n const options = this.channelOptions;\n if (this._presence) {\n const presenceMessages = await Promise.all(\n message.presence.map((wpm) => {\n return wpm.decode(options, this.logger);\n })\n );\n this._presence.setPresence(presenceMessages, isSync, syncChannelSerial);\n }\n break;\n }\n case actions.OBJECT:\n case actions.OBJECT_SYNC: {\n if (!this._objects || !message.state) {\n return;\n }\n populateFieldsFromParent(message);\n const format = this.client.connection.connectionManager.getActiveTransportFormat();\n const objectMessages = message.state.map((om) => om.decode(this.client, format));\n if (message.action === actions.OBJECT) {\n this._objects.handleObjectMessages(objectMessages);\n } else {\n this._objects.handleObjectSyncMessages(objectMessages, message.channelSerial);\n }\n break;\n }\n case actions.MESSAGE: {\n if (this.state !== \"attached\") {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MAJOR,\n \"RealtimeChannel.processMessage()\",\n 'Message \"' + message.id + '\" skipped as this channel \"' + this.name + '\" state is not \"attached\" (state is \"' + this.state + '\").'\n );\n return;\n }\n populateFieldsFromParent(message);\n const encoded = message.messages, firstMessage = encoded[0], lastMessage = encoded[encoded.length - 1];\n if (firstMessage.extras && firstMessage.extras.delta && firstMessage.extras.delta.from !== this._lastPayload.messageId) {\n const msg = 'Delta message decode failure - previous message not available for message \"' + message.id + '\" on this channel \"' + this.name + '\".';\n logger_default.logAction(this.logger, logger_default.LOG_ERROR, \"RealtimeChannel.processMessage()\", msg);\n this._startDecodeFailureRecovery(new ErrorInfo(msg, 40018, 400));\n break;\n }\n let messages = [];\n for (let i = 0; i < encoded.length; i++) {\n const { decoded, err } = await encoded[i].decodeWithErr(this._decodingContext, this.logger);\n messages[i] = decoded;\n if (err) {\n switch (err.code) {\n case 40018:\n this._startDecodeFailureRecovery(err);\n return;\n case 40019:\n case 40021:\n this.notifyState(\"failed\", err);\n return;\n default:\n }\n }\n }\n this._lastPayload.messageId = lastMessage.id;\n this._lastPayload.protocolMessageChannelSerial = message.channelSerial;\n this.onEvent(messages);\n break;\n }\n case actions.ANNOTATION: {\n populateFieldsFromParent(message);\n const options = this.channelOptions;\n if (this._annotations) {\n const annotations = await Promise.all(\n (message.annotations || []).map((wpm) => {\n return wpm.decode(options, this.logger);\n })\n );\n this._annotations._processIncoming(annotations);\n }\n break;\n }\n case actions.ERROR: {\n const err = message.error;\n if (err && err.code == 80016) {\n this.checkPendingState();\n } else {\n this.notifyState(\"failed\", ErrorInfo.fromValues(err));\n }\n break;\n }\n default:\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MAJOR,\n \"RealtimeChannel.processMessage()\",\n \"Protocol error: unrecognised message action (\" + message.action + \")\"\n );\n }\n }\n _startDecodeFailureRecovery(reason) {\n if (!this._lastPayload.decodeFailureRecoveryInProgress) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MAJOR,\n \"RealtimeChannel.processMessage()\",\n \"Starting decode failure recovery process.\"\n );\n this._lastPayload.decodeFailureRecoveryInProgress = true;\n this._attach(true, reason, () => {\n this._lastPayload.decodeFailureRecoveryInProgress = false;\n });\n }\n }\n onAttached() {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MINOR,\n \"RealtimeChannel.onAttached\",\n \"activating channel; name = \" + this.name\n );\n }\n notifyState(state, reason, resumed, hasPresence, hasBacklog, hasObjects) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MICRO,\n \"RealtimeChannel.notifyState\",\n \"name = \" + this.name + \", current state = \" + this.state + \", notifying state \" + state\n );\n this.clearStateTimer();\n if ([\"detached\", \"suspended\", \"failed\"].includes(state)) {\n this.properties.channelSerial = null;\n }\n if (state === this.state) {\n return;\n }\n if (this._presence) {\n this._presence.actOnChannelState(state, hasPresence, reason);\n }\n if (this._objects) {\n this._objects.actOnChannelState(state, hasObjects);\n }\n if (state === \"suspended\" && this.connectionManager.state.sendEvents) {\n this.startRetryTimer();\n } else {\n this.cancelRetryTimer();\n }\n if (reason) {\n this.errorReason = reason;\n }\n const change = new channelstatechange_default(this.state, state, resumed, hasBacklog, reason);\n const action = 'Channel state for channel \"' + this.name + '\"';\n const message = state + (reason ? \"; reason: \" + reason : \"\");\n if (state === \"failed\") {\n logger_default.logAction(this.logger, logger_default.LOG_ERROR, action, message);\n } else {\n logger_default.logAction(this.logger, logger_default.LOG_MAJOR, action, message);\n }\n if (state !== \"attaching\" && state !== \"suspended\") {\n this.retryCount = 0;\n }\n if (state === \"attached\") {\n this.onAttached();\n }\n if (state === \"attached\") {\n this._attachResume = true;\n } else if (state === \"detaching\" || state === \"failed\") {\n this._attachResume = false;\n }\n this.state = state;\n this._allChannelChanges.emit(state, change);\n this.emit(state, change);\n }\n requestState(state, reason) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MINOR,\n \"RealtimeChannel.requestState\",\n \"name = \" + this.name + \", state = \" + state\n );\n this.notifyState(state, reason);\n this.checkPendingState();\n }\n checkPendingState() {\n const cmState = this.connectionManager.state;\n if (!cmState.sendEvents) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MINOR,\n \"RealtimeChannel.checkPendingState\",\n \"sendEvents is false; state is \" + this.connectionManager.state.state\n );\n return;\n }\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MINOR,\n \"RealtimeChannel.checkPendingState\",\n \"name = \" + this.name + \", state = \" + this.state\n );\n switch (this.state) {\n case \"attaching\":\n this.startStateTimerIfNotRunning();\n this.attachImpl();\n break;\n case \"detaching\":\n this.startStateTimerIfNotRunning();\n this.detachImpl();\n break;\n case \"attached\":\n this.sync();\n break;\n default:\n break;\n }\n }\n timeoutPendingState() {\n switch (this.state) {\n case \"attaching\": {\n const err = new ErrorInfo(\"Channel attach timed out\", 90007, 408);\n this.notifyState(\"suspended\", err);\n break;\n }\n case \"detaching\": {\n const err = new ErrorInfo(\"Channel detach timed out\", 90007, 408);\n this.notifyState(\"attached\", err);\n break;\n }\n default:\n this.checkPendingState();\n break;\n }\n }\n startStateTimerIfNotRunning() {\n if (!this.stateTimer) {\n this.stateTimer = setTimeout(() => {\n logger_default.logAction(this.logger, logger_default.LOG_MINOR, \"RealtimeChannel.startStateTimerIfNotRunning\", \"timer expired\");\n this.stateTimer = null;\n this.timeoutPendingState();\n }, this.client.options.timeouts.realtimeRequestTimeout);\n }\n }\n clearStateTimer() {\n const stateTimer = this.stateTimer;\n if (stateTimer) {\n clearTimeout(stateTimer);\n this.stateTimer = null;\n }\n }\n startRetryTimer() {\n if (this.retryTimer)\n return;\n this.retryCount++;\n const retryDelay = getRetryTime(this.client.options.timeouts.channelRetryTimeout, this.retryCount);\n this.retryTimer = setTimeout(() => {\n if (this.state === \"suspended\" && this.connectionManager.state.sendEvents) {\n this.retryTimer = null;\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MINOR,\n \"RealtimeChannel retry timer expired\",\n \"attempting a new attach\"\n );\n this.requestState(\"attaching\");\n }\n }, retryDelay);\n }\n cancelRetryTimer() {\n if (this.retryTimer) {\n clearTimeout(this.retryTimer);\n this.retryTimer = null;\n }\n }\n /* @returns null (if can safely be released) | ErrorInfo (if cannot) */\n getReleaseErr() {\n const s = this.state;\n if (s === \"initialized\" || s === \"detached\" || s === \"failed\") {\n return null;\n }\n return new ErrorInfo(\n \"Can only release a channel in a state where there is no possibility of further updates from the server being received (initialized, detached, or failed); was \" + s,\n 90001,\n 400\n );\n }\n setChannelSerial(channelSerial) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MICRO,\n \"RealtimeChannel.setChannelSerial()\",\n \"Updating channel serial; serial = \" + channelSerial + \"; previous = \" + this.properties.channelSerial\n );\n if (channelSerial) {\n this.properties.channelSerial = channelSerial;\n }\n }\n async status() {\n return this.client.rest.channelMixin.status(this);\n }\n};\nfunction omitAgent(channelParams) {\n const _a2 = channelParams || {}, { agent: _ } = _a2, paramsWithoutAgent = __objRest(_a2, [\"agent\"]);\n return paramsWithoutAgent;\n}\nvar realtimechannel_default = RealtimeChannel;\n\n// src/common/lib/client/realtimeannotations.ts\nvar RealtimeAnnotations = class {\n constructor(channel) {\n this.channel = channel;\n this.logger = channel.logger;\n this.subscriptions = new eventemitter_default(this.logger);\n }\n async publish(msgOrSerial, annotationValues) {\n const channelName = this.channel.name;\n const annotation = constructValidateAnnotation(msgOrSerial, annotationValues);\n const wireAnnotation = await annotation.encode();\n this.channel.throwIfUnpublishableState();\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MICRO,\n \"RealtimeAnnotations.publish()\",\n \"channelName = \" + channelName + \", sending annotation with messageSerial = \" + annotation.messageSerial + \", type = \" + annotation.type\n );\n const pm = fromValues({\n action: actions.ANNOTATION,\n channel: channelName,\n annotations: [wireAnnotation]\n });\n return this.channel.sendMessage(pm);\n }\n async delete(msgOrSerial, annotationValues) {\n annotationValues.action = \"annotation.delete\";\n return this.publish(msgOrSerial, annotationValues);\n }\n async subscribe(..._args) {\n const args = realtimechannel_default.processListenerArgs(_args);\n const event = args[0];\n const listener = args[1];\n const channel = this.channel;\n if (channel.state === \"failed\") {\n throw ErrorInfo.fromValues(channel.invalidStateError());\n }\n this.subscriptions.on(event, listener);\n if (this.channel.channelOptions.attachOnSubscribe !== false) {\n await channel.attach();\n }\n if ((this.channel.state === \"attached\" && this.channel._mode & flags.ANNOTATION_SUBSCRIBE) === 0) {\n throw new ErrorInfo(\n \"You are trying to add an annotation listener, but you haven't requested the annotation_subscribe channel mode in ChannelOptions, so this won't do anything (we only deliver annotations to clients who have explicitly requested them)\",\n 93001,\n 400\n );\n }\n }\n unsubscribe(..._args) {\n const args = realtimechannel_default.processListenerArgs(_args);\n const event = args[0];\n const listener = args[1];\n this.subscriptions.off(event, listener);\n }\n _processIncoming(annotations) {\n for (const annotation of annotations) {\n this.subscriptions.emit(annotation.type || \"\", annotation);\n }\n }\n async get(msgOrSerial, params) {\n return restannotations_default.prototype.get.call(this, msgOrSerial, params);\n }\n};\nvar realtimeannotations_default = RealtimeAnnotations;\n\n// src/common/lib/client/defaultrest.ts\nvar _DefaultRest = class _DefaultRest extends BaseRest {\n // The public typings declare that this requires an argument to be passed, but since we want to emit a good error message in the case where a non-TypeScript user does not pass an argument, tell the compiler that this is possible so that it forces us to handle it.\n constructor(options) {\n var _a2, _b;\n const MsgPack = _DefaultRest._MsgPack;\n if (!MsgPack) {\n throw new Error(\"Expected DefaultRest._MsgPack to have been set\");\n }\n super(\n defaults_default.objectifyOptions(options, true, \"Rest\", logger_default.defaultLogger, __spreadProps(__spreadValues({}, allCommonModularPlugins), {\n Crypto: (_a2 = _DefaultRest.Crypto) != null ? _a2 : void 0,\n MsgPack: (_b = _DefaultRest._MsgPack) != null ? _b : void 0,\n Annotations: {\n Annotation: annotation_default,\n WireAnnotation,\n RealtimeAnnotations: realtimeannotations_default,\n RestAnnotations: restannotations_default\n }\n }))\n );\n }\n static get Crypto() {\n if (this._Crypto === null) {\n throw new Error(\"Encryption not enabled; use ably.encryption.js instead\");\n }\n return this._Crypto;\n }\n static set Crypto(newValue) {\n this._Crypto = newValue;\n }\n};\n_DefaultRest._Crypto = null;\n_DefaultRest.Message = DefaultMessage;\n_DefaultRest.PresenceMessage = DefaultPresenceMessage;\n_DefaultRest.Annotation = DefaultAnnotation;\n_DefaultRest._MsgPack = null;\n// Used by tests\n_DefaultRest._Http = Http;\nvar DefaultRest = _DefaultRest;\n\n// src/common/lib/transport/messagequeue.ts\nvar MessageQueue = class extends eventemitter_default {\n constructor(logger) {\n super(logger);\n this.messages = [];\n }\n count() {\n return this.messages.length;\n }\n push(message) {\n this.messages.push(message);\n }\n shift() {\n return this.messages.shift();\n }\n last() {\n return this.messages[this.messages.length - 1];\n }\n copyAll() {\n return this.messages.slice();\n }\n append(messages) {\n this.messages.push.apply(this.messages, messages);\n }\n prepend(messages) {\n this.messages.unshift.apply(this.messages, messages);\n }\n completeMessages(serial, count, err) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MICRO,\n \"MessageQueue.completeMessages()\",\n \"serial = \" + serial + \"; count = \" + count\n );\n err = err || null;\n const messages = this.messages;\n if (messages.length === 0) {\n throw new Error(\"MessageQueue.completeMessages(): completeMessages called on any empty MessageQueue\");\n }\n const first = messages[0];\n if (first) {\n const startSerial = first.message.msgSerial;\n const endSerial = serial + count;\n if (endSerial > startSerial) {\n const completeMessages = messages.splice(0, endSerial - startSerial);\n for (const message of completeMessages) {\n message.callback(err);\n }\n }\n if (messages.length == 0)\n this.emit(\"idle\");\n }\n }\n completeAllMessages(err) {\n this.completeMessages(0, Number.MAX_SAFE_INTEGER || Number.MAX_VALUE, err);\n }\n resetSendAttempted() {\n for (let msg of this.messages) {\n msg.sendAttempted = false;\n }\n }\n clear() {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MICRO,\n \"MessageQueue.clear()\",\n \"clearing \" + this.messages.length + \" messages\"\n );\n this.messages = [];\n this.emit(\"idle\");\n }\n};\nvar messagequeue_default = MessageQueue;\n\n// src/common/lib/transport/protocol.ts\nvar PendingMessage = class {\n constructor(message, callback) {\n this.message = message;\n this.callback = callback;\n this.merged = false;\n const action = message.action;\n this.sendAttempted = false;\n this.ackRequired = typeof action === \"number\" && [actions.MESSAGE, actions.PRESENCE, actions.ANNOTATION, actions.OBJECT].includes(action);\n }\n};\nvar Protocol = class extends eventemitter_default {\n constructor(transport) {\n super(transport.logger);\n this.transport = transport;\n this.messageQueue = new messagequeue_default(this.logger);\n transport.on(\"ack\", (serial, count) => {\n this.onAck(serial, count);\n });\n transport.on(\"nack\", (serial, count, err) => {\n this.onNack(serial, count, err);\n });\n }\n onAck(serial, count) {\n logger_default.logAction(this.logger, logger_default.LOG_MICRO, \"Protocol.onAck()\", \"serial = \" + serial + \"; count = \" + count);\n this.messageQueue.completeMessages(serial, count);\n }\n onNack(serial, count, err) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_ERROR,\n \"Protocol.onNack()\",\n \"serial = \" + serial + \"; count = \" + count + \"; err = \" + inspectError(err)\n );\n if (!err) {\n err = new ErrorInfo(\"Unable to send message; channel not responding\", 50001, 500);\n }\n this.messageQueue.completeMessages(serial, count, err);\n }\n onceIdle(listener) {\n const messageQueue = this.messageQueue;\n if (messageQueue.count() === 0) {\n listener();\n return;\n }\n messageQueue.once(\"idle\", listener);\n }\n send(pendingMessage) {\n if (pendingMessage.ackRequired) {\n this.messageQueue.push(pendingMessage);\n }\n if (this.logger.shouldLog(logger_default.LOG_MICRO)) {\n logger_default.logActionNoStrip(\n this.logger,\n logger_default.LOG_MICRO,\n \"Protocol.send()\",\n \"sending msg; \" + stringify(\n pendingMessage.message,\n this.transport.connectionManager.realtime._RealtimePresence,\n this.transport.connectionManager.realtime._Annotations,\n this.transport.connectionManager.realtime._objectsPlugin\n )\n );\n }\n pendingMessage.sendAttempted = true;\n this.transport.send(pendingMessage.message);\n }\n getTransport() {\n return this.transport;\n }\n getPendingMessages() {\n return this.messageQueue.copyAll();\n }\n clearPendingMessages() {\n return this.messageQueue.clear();\n }\n finish() {\n const transport = this.transport;\n this.onceIdle(function() {\n transport.disconnect();\n });\n }\n};\nvar protocol_default = Protocol;\n\n// src/common/lib/client/connectionstatechange.ts\nvar ConnectionStateChange = class {\n constructor(previous, current, retryIn, reason) {\n this.previous = previous;\n this.current = current;\n if (retryIn)\n this.retryIn = retryIn;\n if (reason)\n this.reason = reason;\n }\n};\nvar connectionstatechange_default = ConnectionStateChange;\n\n// src/common/lib/transport/connectionerrors.ts\nvar ConnectionErrorCodes = {\n DISCONNECTED: 80003,\n SUSPENDED: 80002,\n FAILED: 8e4,\n CLOSING: 80017,\n CLOSED: 80017,\n UNKNOWN_CONNECTION_ERR: 50002,\n UNKNOWN_CHANNEL_ERR: 50001\n};\nvar ConnectionErrors = {\n disconnected: () => ErrorInfo.fromValues({\n statusCode: 400,\n code: ConnectionErrorCodes.DISCONNECTED,\n message: \"Connection to server temporarily unavailable\"\n }),\n suspended: () => ErrorInfo.fromValues({\n statusCode: 400,\n code: ConnectionErrorCodes.SUSPENDED,\n message: \"Connection to server unavailable\"\n }),\n failed: () => ErrorInfo.fromValues({\n statusCode: 400,\n code: ConnectionErrorCodes.FAILED,\n message: \"Connection failed or disconnected by server\"\n }),\n closing: () => ErrorInfo.fromValues({\n statusCode: 400,\n code: ConnectionErrorCodes.CLOSING,\n message: \"Connection closing\"\n }),\n closed: () => ErrorInfo.fromValues({\n statusCode: 400,\n code: ConnectionErrorCodes.CLOSED,\n message: \"Connection closed\"\n }),\n unknownConnectionErr: () => ErrorInfo.fromValues({\n statusCode: 500,\n code: ConnectionErrorCodes.UNKNOWN_CONNECTION_ERR,\n message: \"Internal connection error\"\n }),\n unknownChannelErr: () => ErrorInfo.fromValues({\n statusCode: 500,\n code: ConnectionErrorCodes.UNKNOWN_CONNECTION_ERR,\n message: \"Internal channel error\"\n })\n};\nfunction isRetriable(err) {\n if (!err.statusCode || !err.code || err.statusCode >= 500) {\n return true;\n }\n return Object.values(ConnectionErrorCodes).includes(err.code);\n}\nvar connectionerrors_default = ConnectionErrors;\n\n// src/common/lib/transport/transport.ts\nvar closeMessage = fromValues({ action: actions.CLOSE });\nvar disconnectMessage = fromValues({ action: actions.DISCONNECT });\nvar Transport = class extends eventemitter_default {\n constructor(connectionManager, auth, params, forceJsonProtocol) {\n super(connectionManager.logger);\n if (forceJsonProtocol) {\n params.format = void 0;\n params.heartbeats = true;\n }\n this.connectionManager = connectionManager;\n this.auth = auth;\n this.params = params;\n this.timeouts = params.options.timeouts;\n this.format = params.format;\n this.isConnected = false;\n this.isFinished = false;\n this.isDisposed = false;\n this.maxIdleInterval = null;\n this.idleTimer = null;\n this.lastActivity = null;\n }\n connect() {\n }\n close() {\n if (this.isConnected) {\n this.requestClose();\n }\n this.finish(\"closed\", connectionerrors_default.closed());\n }\n disconnect(err) {\n if (this.isConnected) {\n this.requestDisconnect();\n }\n this.finish(\"disconnected\", err || connectionerrors_default.disconnected());\n }\n fail(err) {\n if (this.isConnected) {\n this.requestDisconnect();\n }\n this.finish(\"failed\", err || connectionerrors_default.failed());\n }\n finish(event, err) {\n var _a2;\n if (this.isFinished) {\n return;\n }\n this.isFinished = true;\n this.isConnected = false;\n this.maxIdleInterval = null;\n clearTimeout((_a2 = this.idleTimer) != null ? _a2 : void 0);\n this.idleTimer = null;\n this.emit(event, err);\n this.dispose();\n }\n onProtocolMessage(message) {\n if (this.logger.shouldLog(logger_default.LOG_MICRO)) {\n logger_default.logActionNoStrip(\n this.logger,\n logger_default.LOG_MICRO,\n \"Transport.onProtocolMessage()\",\n \"received on \" + this.shortName + \": \" + stringify(\n message,\n this.connectionManager.realtime._RealtimePresence,\n this.connectionManager.realtime._Annotations,\n this.connectionManager.realtime._objectsPlugin\n ) + \"; connectionId = \" + this.connectionManager.connectionId\n );\n }\n this.onActivity();\n switch (message.action) {\n case actions.HEARTBEAT:\n logger_default.logActionNoStrip(\n this.logger,\n logger_default.LOG_MICRO,\n \"Transport.onProtocolMessage()\",\n this.shortName + \" heartbeat; connectionId = \" + this.connectionManager.connectionId\n );\n this.emit(\"heartbeat\", message.id);\n break;\n case actions.CONNECTED:\n this.onConnect(message);\n this.emit(\"connected\", message.error, message.connectionId, message.connectionDetails, message);\n break;\n case actions.CLOSED:\n this.onClose(message);\n break;\n case actions.DISCONNECTED:\n this.onDisconnect(message);\n break;\n case actions.ACK:\n this.emit(\"ack\", message.msgSerial, message.count);\n break;\n case actions.NACK:\n this.emit(\"nack\", message.msgSerial, message.count, message.error);\n break;\n case actions.SYNC:\n this.connectionManager.onChannelMessage(message, this);\n break;\n case actions.ACTIVATE:\n break;\n case actions.AUTH:\n whenPromiseSettles(this.auth.authorize(), (err) => {\n if (err) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_ERROR,\n \"Transport.onProtocolMessage()\",\n \"Ably requested re-authentication, but unable to obtain a new token: \" + inspectError(err)\n );\n }\n });\n break;\n case actions.ERROR:\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MINOR,\n \"Transport.onProtocolMessage()\",\n \"received error action; connectionId = \" + this.connectionManager.connectionId + \"; err = \" + Platform.Config.inspect(message.error) + (message.channel ? \", channel: \" + message.channel : \"\")\n );\n if (message.channel === void 0) {\n this.onFatalError(message);\n break;\n }\n this.connectionManager.onChannelMessage(message, this);\n break;\n default:\n this.connectionManager.onChannelMessage(message, this);\n }\n }\n onConnect(message) {\n this.isConnected = true;\n if (!message.connectionDetails) {\n throw new Error(\"Transport.onConnect(): Connect message recieved without connectionDetails\");\n }\n const maxPromisedIdle = message.connectionDetails.maxIdleInterval;\n if (maxPromisedIdle) {\n this.maxIdleInterval = maxPromisedIdle + this.timeouts.realtimeRequestTimeout;\n this.onActivity();\n }\n }\n onDisconnect(message) {\n const err = message && message.error;\n logger_default.logAction(this.logger, logger_default.LOG_MINOR, \"Transport.onDisconnect()\", \"err = \" + inspectError(err));\n this.finish(\"disconnected\", err);\n }\n onFatalError(message) {\n const err = message && message.error;\n logger_default.logAction(this.logger, logger_default.LOG_MINOR, \"Transport.onFatalError()\", \"err = \" + inspectError(err));\n this.finish(\"failed\", err);\n }\n onClose(message) {\n const err = message && message.error;\n logger_default.logAction(this.logger, logger_default.LOG_MINOR, \"Transport.onClose()\", \"err = \" + inspectError(err));\n this.finish(\"closed\", err);\n }\n requestClose() {\n logger_default.logAction(this.logger, logger_default.LOG_MINOR, \"Transport.requestClose()\", \"\");\n this.send(closeMessage);\n }\n requestDisconnect() {\n logger_default.logAction(this.logger, logger_default.LOG_MINOR, \"Transport.requestDisconnect()\", \"\");\n this.send(disconnectMessage);\n }\n ping(id) {\n const msg = { action: actions.HEARTBEAT };\n if (id)\n msg.id = id;\n this.send(fromValues(msg));\n }\n dispose() {\n logger_default.logAction(this.logger, logger_default.LOG_MINOR, \"Transport.dispose()\", \"\");\n this.isDisposed = true;\n this.off();\n }\n onActivity() {\n if (!this.maxIdleInterval) {\n return;\n }\n this.lastActivity = this.connectionManager.lastActivity = Date.now();\n this.setIdleTimer(this.maxIdleInterval + 100);\n }\n setIdleTimer(timeout) {\n if (!this.idleTimer) {\n this.idleTimer = setTimeout(() => {\n this.onIdleTimerExpire();\n }, timeout);\n }\n }\n onIdleTimerExpire() {\n if (!this.lastActivity || !this.maxIdleInterval) {\n throw new Error(\"Transport.onIdleTimerExpire(): lastActivity/maxIdleInterval not set\");\n }\n this.idleTimer = null;\n const sinceLast = Date.now() - this.lastActivity;\n const timeRemaining = this.maxIdleInterval - sinceLast;\n if (timeRemaining <= 0) {\n const msg = \"No activity seen from realtime in \" + sinceLast + \"ms; assuming connection has dropped\";\n logger_default.logAction(this.logger, logger_default.LOG_ERROR, \"Transport.onIdleTimerExpire()\", msg);\n this.disconnect(new ErrorInfo(msg, 80003, 408));\n } else {\n this.setIdleTimer(timeRemaining + 100);\n }\n }\n static tryConnect(transportCtor, connectionManager, auth, transportParams, callback) {\n const transport = new transportCtor(connectionManager, auth, transportParams);\n let transportAttemptTimer;\n const errorCb = function(err) {\n clearTimeout(transportAttemptTimer);\n callback({ event: this.event, error: err });\n };\n const realtimeRequestTimeout = connectionManager.options.timeouts.realtimeRequestTimeout;\n transportAttemptTimer = setTimeout(() => {\n transport.off([\"preconnect\", \"disconnected\", \"failed\"]);\n transport.dispose();\n errorCb.call(\n { event: \"disconnected\" },\n new ErrorInfo(\"Timeout waiting for transport to indicate itself viable\", 5e4, 500)\n );\n }, realtimeRequestTimeout);\n transport.on([\"failed\", \"disconnected\"], errorCb);\n transport.on(\"preconnect\", function() {\n logger_default.logAction(\n connectionManager.logger,\n logger_default.LOG_MINOR,\n \"Transport.tryConnect()\",\n \"viable transport \" + transport\n );\n clearTimeout(transportAttemptTimer);\n transport.off([\"failed\", \"disconnected\"], errorCb);\n callback(null, transport);\n });\n transport.connect();\n return transport;\n }\n static isAvailable() {\n throw new ErrorInfo(\"isAvailable not implemented for transport\", 5e4, 500);\n }\n};\nvar transport_default = Transport;\n\n// src/common/constants/TransportName.ts\nvar TransportNames;\n((TransportNames2) => {\n TransportNames2.WebSocket = \"web_socket\";\n TransportNames2.Comet = \"comet\";\n TransportNames2.XhrPolling = \"xhr_polling\";\n})(TransportNames || (TransportNames = {}));\n\n// src/common/lib/transport/connectionmanager.ts\nvar globalObject2 = typeof global !== \"undefined\" ? global : typeof window !== \"undefined\" ? window : self;\nvar haveWebStorage = () => {\n var _a2;\n return typeof Platform.WebStorage !== \"undefined\" && ((_a2 = Platform.WebStorage) == null ? void 0 : _a2.localSupported);\n};\nvar haveSessionStorage = () => {\n var _a2;\n return typeof Platform.WebStorage !== \"undefined\" && ((_a2 = Platform.WebStorage) == null ? void 0 : _a2.sessionSupported);\n};\nvar noop2 = function() {\n};\nvar transportPreferenceName = \"ably-transport-preference\";\nfunction bundleWith(dest, src, maxSize) {\n let action;\n if (dest.channel !== src.channel) {\n return false;\n }\n if ((action = dest.action) !== actions.PRESENCE && action !== actions.MESSAGE) {\n return false;\n }\n if (action !== src.action) {\n return false;\n }\n const kind = action === actions.PRESENCE ? \"presence\" : \"messages\", proposed = dest[kind].concat(src[kind]), size = getMessagesSize(proposed);\n if (size > maxSize) {\n return false;\n }\n if (!allSame(proposed, \"clientId\")) {\n return false;\n }\n if (!proposed.every(function(msg) {\n return !msg.id;\n })) {\n return false;\n }\n dest[kind] = proposed;\n return true;\n}\nfunction decodeRecoveryKey(recoveryKey) {\n try {\n return JSON.parse(recoveryKey);\n } catch (e) {\n return null;\n }\n}\nvar TransportParams = class {\n constructor(options, host, mode, connectionKey) {\n this.options = options;\n this.host = host;\n this.mode = mode;\n this.connectionKey = connectionKey;\n this.format = options.useBinaryProtocol ? \"msgpack\" /* msgpack */ : \"json\" /* json */;\n }\n getConnectParams(authParams) {\n const params = authParams ? copy(authParams) : {};\n const options = this.options;\n switch (this.mode) {\n case \"resume\":\n params.resume = this.connectionKey;\n break;\n case \"recover\": {\n const recoveryContext = decodeRecoveryKey(options.recover);\n if (recoveryContext) {\n params.recover = recoveryContext.connectionKey;\n }\n break;\n }\n default:\n }\n if (options.clientId !== void 0) {\n params.clientId = options.clientId;\n }\n if (options.echoMessages === false) {\n params.echo = \"false\";\n }\n if (this.format !== void 0) {\n params.format = this.format;\n }\n if (this.stream !== void 0) {\n params.stream = this.stream;\n }\n if (this.heartbeats !== void 0) {\n params.heartbeats = this.heartbeats;\n }\n params.v = defaults_default.protocolVersion;\n params.agent = getAgentString(this.options);\n if (options.transportParams !== void 0) {\n mixin(params, options.transportParams);\n }\n return params;\n }\n toString() {\n let result = \"[mode=\" + this.mode;\n if (this.host) {\n result += \",host=\" + this.host;\n }\n if (this.connectionKey) {\n result += \",connectionKey=\" + this.connectionKey;\n }\n if (this.format) {\n result += \",format=\" + this.format;\n }\n result += \"]\";\n return result;\n }\n};\nvar ConnectionManager = class _ConnectionManager extends eventemitter_default {\n constructor(realtime, options) {\n super(realtime.logger);\n this.supportedTransports = {};\n this.disconnectedRetryCount = 0;\n this.pendingChannelMessagesState = { isProcessing: false, queue: [] };\n this.realtime = realtime;\n this.initTransports();\n this.options = options;\n const timeouts = options.timeouts;\n const connectingTimeout = timeouts.webSocketConnectTimeout + timeouts.realtimeRequestTimeout;\n this.states = {\n initialized: {\n state: \"initialized\",\n terminal: false,\n queueEvents: true,\n sendEvents: false,\n failState: \"disconnected\"\n },\n connecting: {\n state: \"connecting\",\n terminal: false,\n queueEvents: true,\n sendEvents: false,\n retryDelay: connectingTimeout,\n failState: \"disconnected\"\n },\n connected: {\n state: \"connected\",\n terminal: false,\n queueEvents: false,\n sendEvents: true,\n failState: \"disconnected\"\n },\n disconnected: {\n state: \"disconnected\",\n terminal: false,\n queueEvents: true,\n sendEvents: false,\n retryDelay: timeouts.disconnectedRetryTimeout,\n failState: \"disconnected\"\n },\n suspended: {\n state: \"suspended\",\n terminal: false,\n queueEvents: false,\n sendEvents: false,\n retryDelay: timeouts.suspendedRetryTimeout,\n failState: \"suspended\"\n },\n closing: {\n state: \"closing\",\n terminal: false,\n queueEvents: false,\n sendEvents: false,\n retryDelay: timeouts.realtimeRequestTimeout,\n failState: \"closed\"\n },\n closed: { state: \"closed\", terminal: true, queueEvents: false, sendEvents: false, failState: \"closed\" },\n failed: { state: \"failed\", terminal: true, queueEvents: false, sendEvents: false, failState: \"failed\" }\n };\n this.state = this.states.initialized;\n this.errorReason = null;\n this.queuedMessages = new messagequeue_default(this.logger);\n this.msgSerial = 0;\n this.connectionDetails = void 0;\n this.connectionId = void 0;\n this.connectionKey = void 0;\n this.connectionStateTtl = timeouts.connectionStateTtl;\n this.maxIdleInterval = null;\n this.transports = intersect(options.transports || defaults_default.defaultTransports, this.supportedTransports);\n this.transportPreference = null;\n if (this.transports.includes(TransportNames.WebSocket)) {\n this.webSocketTransportAvailable = true;\n }\n if (this.transports.includes(TransportNames.XhrPolling)) {\n this.baseTransport = TransportNames.XhrPolling;\n } else if (this.transports.includes(TransportNames.Comet)) {\n this.baseTransport = TransportNames.Comet;\n }\n this.domains = defaults_default.getHosts(options);\n this.activeProtocol = null;\n this.host = null;\n this.lastAutoReconnectAttempt = null;\n this.lastActivity = null;\n this.forceFallbackHost = false;\n this.connectCounter = 0;\n this.wsCheckResult = null;\n this.webSocketSlowTimer = null;\n this.webSocketGiveUpTimer = null;\n this.abandonedWebSocket = false;\n logger_default.logAction(this.logger, logger_default.LOG_MINOR, \"Realtime.ConnectionManager()\", \"started\");\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MICRO,\n \"Realtime.ConnectionManager()\",\n \"requested transports = [\" + (options.transports || defaults_default.defaultTransports) + \"]\"\n );\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MICRO,\n \"Realtime.ConnectionManager()\",\n \"available transports = [\" + this.transports + \"]\"\n );\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MICRO,\n \"Realtime.ConnectionManager()\",\n \"http domains = [\" + this.domains + \"]\"\n );\n if (!this.transports.length) {\n const msg = \"no requested transports available\";\n logger_default.logAction(this.logger, logger_default.LOG_ERROR, \"realtime.ConnectionManager()\", msg);\n throw new Error(msg);\n }\n const addEventListener = Platform.Config.addEventListener;\n if (addEventListener) {\n if (haveSessionStorage() && typeof options.recover === \"function\") {\n addEventListener(\"beforeunload\", this.persistConnection.bind(this));\n }\n if (options.closeOnUnload === true) {\n addEventListener(\"beforeunload\", () => {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MAJOR,\n \"Realtime.ConnectionManager()\",\n \"beforeunload event has triggered the connection to close as closeOnUnload is true\"\n );\n this.requestState({ state: \"closing\" });\n });\n }\n addEventListener(\"online\", () => {\n var _a2;\n if (this.state == this.states.disconnected || this.state == this.states.suspended) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MINOR,\n \"ConnectionManager caught browser \\u2018online\\u2019 event\",\n \"reattempting connection\"\n );\n this.requestState({ state: \"connecting\" });\n } else if (this.state == this.states.connecting) {\n (_a2 = this.pendingTransport) == null ? void 0 : _a2.off();\n this.disconnectAllTransports();\n this.startConnect();\n }\n });\n addEventListener(\"offline\", () => {\n if (this.state == this.states.connected) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MINOR,\n \"ConnectionManager caught browser \\u2018offline\\u2019 event\",\n \"disconnecting active transport\"\n );\n this.disconnectAllTransports();\n }\n });\n }\n }\n /*********************\n * transport management\n *********************/\n // Used by tests\n static supportedTransports(additionalImplementations) {\n const storage = { supportedTransports: {} };\n this.initTransports(additionalImplementations, storage);\n return storage.supportedTransports;\n }\n static initTransports(additionalImplementations, storage) {\n const implementations = __spreadValues(__spreadValues({}, Platform.Transports.bundledImplementations), additionalImplementations);\n [TransportNames.WebSocket, ...Platform.Transports.order].forEach((transportName) => {\n const transport = implementations[transportName];\n if (transport && transport.isAvailable()) {\n storage.supportedTransports[transportName] = transport;\n }\n });\n }\n initTransports() {\n _ConnectionManager.initTransports(this.realtime._additionalTransportImplementations, this);\n }\n createTransportParams(host, mode) {\n return new TransportParams(this.options, host, mode, this.connectionKey);\n }\n getTransportParams(callback) {\n const decideMode = (modeCb) => {\n if (this.connectionKey) {\n modeCb(\"resume\");\n return;\n }\n if (typeof this.options.recover === \"string\") {\n modeCb(\"recover\");\n return;\n }\n const recoverFn = this.options.recover, lastSessionData = this.getSessionRecoverData(), sessionRecoveryName = this.sessionRecoveryName();\n if (lastSessionData && typeof recoverFn === \"function\") {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MINOR,\n \"ConnectionManager.getTransportParams()\",\n \"Calling clientOptions-provided recover function with last session data (recovery scope: \" + sessionRecoveryName + \")\"\n );\n recoverFn(lastSessionData, (shouldRecover) => {\n if (shouldRecover) {\n this.options.recover = lastSessionData.recoveryKey;\n modeCb(\"recover\");\n } else {\n modeCb(\"clean\");\n }\n });\n return;\n }\n modeCb(\"clean\");\n };\n decideMode((mode) => {\n const transportParams = this.createTransportParams(null, mode);\n if (mode === \"recover\") {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MINOR,\n \"ConnectionManager.getTransportParams()\",\n \"Transport recovery mode = recover; recoveryKey = \" + this.options.recover\n );\n const recoveryContext = decodeRecoveryKey(this.options.recover);\n if (recoveryContext) {\n this.msgSerial = recoveryContext.msgSerial;\n }\n } else {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MINOR,\n \"ConnectionManager.getTransportParams()\",\n \"Transport params = \" + transportParams.toString()\n );\n }\n callback(transportParams);\n });\n }\n /**\n * Attempt to connect using a given transport\n * @param transportParams\n * @param candidate, the transport to try\n * @param callback\n */\n tryATransport(transportParams, candidate, callback) {\n logger_default.logAction(this.logger, logger_default.LOG_MICRO, \"ConnectionManager.tryATransport()\", \"trying \" + candidate);\n this.proposedTransport = transport_default.tryConnect(\n this.supportedTransports[candidate],\n this,\n this.realtime.auth,\n transportParams,\n (wrappedErr, transport) => {\n const state = this.state;\n if (state == this.states.closing || state == this.states.closed || state == this.states.failed) {\n if (transport) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MINOR,\n \"ConnectionManager.tryATransport()\",\n \"connection \" + state.state + \" while we were attempting the transport; closing \" + transport\n );\n transport.close();\n }\n callback(true);\n return;\n }\n if (wrappedErr) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MINOR,\n \"ConnectionManager.tryATransport()\",\n \"transport \" + candidate + \" \" + wrappedErr.event + \", err: \" + wrappedErr.error.toString()\n );\n if (auth_default.isTokenErr(wrappedErr.error) && !(this.errorReason && auth_default.isTokenErr(this.errorReason))) {\n this.errorReason = wrappedErr.error;\n whenPromiseSettles(this.realtime.auth._forceNewToken(null, null), (err) => {\n if (err) {\n this.actOnErrorFromAuthorize(err);\n return;\n }\n this.tryATransport(transportParams, candidate, callback);\n });\n } else if (wrappedErr.event === \"failed\") {\n this.notifyState({ state: \"failed\", error: wrappedErr.error });\n callback(true);\n } else if (wrappedErr.event === \"disconnected\") {\n if (!isRetriable(wrappedErr.error)) {\n this.notifyState({ state: this.states.connecting.failState, error: wrappedErr.error });\n callback(true);\n } else {\n callback(false);\n }\n }\n return;\n }\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MICRO,\n \"ConnectionManager.tryATransport()\",\n \"viable transport \" + candidate + \"; setting pending\"\n );\n this.setTransportPending(transport, transportParams);\n callback(null, transport);\n }\n );\n }\n /**\n * Called when a transport is indicated to be viable, and the ConnectionManager\n * expects to activate this transport as soon as it is connected.\n * @param transport\n * @param transportParams\n */\n setTransportPending(transport, transportParams) {\n const mode = transportParams.mode;\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MINOR,\n \"ConnectionManager.setTransportPending()\",\n \"transport = \" + transport + \"; mode = \" + mode\n );\n this.pendingTransport = transport;\n this.cancelWebSocketSlowTimer();\n this.cancelWebSocketGiveUpTimer();\n transport.once(\"connected\", (error, connectionId, connectionDetails) => {\n this.activateTransport(error, transport, connectionId, connectionDetails);\n if (mode === \"recover\" && this.options.recover) {\n delete this.options.recover;\n this.unpersistConnection();\n }\n });\n const self2 = this;\n transport.on([\"disconnected\", \"closed\", \"failed\"], function(error) {\n self2.deactivateTransport(transport, this.event, error);\n });\n this.emit(\"transport.pending\", transport);\n }\n /**\n * Called when a transport is connected, and the connectionmanager decides that\n * it will now be the active transport. Returns whether or not it activated\n * the transport (if the connection is closing/closed it will choose not to).\n * @param transport the transport instance\n * @param connectionId the id of the new active connection\n * @param connectionDetails the details of the new active connection\n */\n activateTransport(error, transport, connectionId, connectionDetails) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MINOR,\n \"ConnectionManager.activateTransport()\",\n \"transport = \" + transport\n );\n if (error) {\n logger_default.logAction(this.logger, logger_default.LOG_ERROR, \"ConnectionManager.activateTransport()\", \"error = \" + error);\n }\n if (connectionId) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MICRO,\n \"ConnectionManager.activateTransport()\",\n \"connectionId = \" + connectionId\n );\n }\n if (connectionDetails) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MICRO,\n \"ConnectionManager.activateTransport()\",\n \"connectionDetails = \" + JSON.stringify(connectionDetails)\n );\n }\n this.persistTransportPreference(transport);\n const existingState = this.state, connectedState = this.states.connected.state;\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MINOR,\n \"ConnectionManager.activateTransport()\",\n \"current state = \" + existingState.state\n );\n if (existingState.state == this.states.closing.state || existingState.state == this.states.closed.state || existingState.state == this.states.failed.state) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MINOR,\n \"ConnectionManager.activateTransport()\",\n \"Disconnecting transport and abandoning\"\n );\n transport.disconnect();\n return false;\n }\n delete this.pendingTransport;\n if (!transport.isConnected) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MINOR,\n \"ConnectionManager.activateTransport()\",\n \"Declining to activate transport \" + transport + \" since it appears to no longer be connected\"\n );\n return false;\n }\n const existingActiveProtocol = this.activeProtocol;\n this.activeProtocol = new protocol_default(transport);\n this.host = transport.params.host;\n const connectionKey = connectionDetails.connectionKey;\n if (connectionKey && this.connectionKey != connectionKey) {\n this.setConnection(connectionId, connectionDetails, !!error);\n }\n this.onConnectionDetailsUpdate(connectionDetails, transport);\n Platform.Config.nextTick(() => {\n transport.on(\n \"connected\",\n (connectedErr, _connectionId, connectionDetails2) => {\n this.onConnectionDetailsUpdate(connectionDetails2, transport);\n this.emit(\"update\", new connectionstatechange_default(connectedState, connectedState, null, connectedErr));\n }\n );\n });\n if (existingState.state === this.states.connected.state) {\n if (error) {\n this.errorReason = this.realtime.connection.errorReason = error;\n this.emit(\"update\", new connectionstatechange_default(connectedState, connectedState, null, error));\n }\n } else {\n this.notifyState({ state: \"connected\", error });\n this.errorReason = this.realtime.connection.errorReason = error || null;\n }\n this.emit(\"transport.active\", transport);\n if (existingActiveProtocol) {\n if (existingActiveProtocol.messageQueue.count() > 0) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_ERROR,\n \"ConnectionManager.activateTransport()\",\n \"Previous active protocol (for transport \" + existingActiveProtocol.transport.shortName + \", new one is \" + transport.shortName + \") finishing with \" + existingActiveProtocol.messageQueue.count() + \" messages still pending\"\n );\n }\n if (existingActiveProtocol.transport === transport) {\n const msg = \"Assumption violated: activating a transport that was also the transport for the previous active protocol; transport = \" + transport.shortName + \"; stack = \" + new Error().stack;\n logger_default.logAction(this.logger, logger_default.LOG_ERROR, \"ConnectionManager.activateTransport()\", msg);\n } else {\n existingActiveProtocol.finish();\n }\n }\n return true;\n }\n /**\n * Called when a transport is no longer the active transport. This can occur\n * in any transport connection state.\n * @param transport\n */\n deactivateTransport(transport, state, error) {\n const currentProtocol = this.activeProtocol, wasActive = currentProtocol && currentProtocol.getTransport() === transport, wasPending = transport === this.pendingTransport, noTransportsScheduledForActivation = this.noTransportsScheduledForActivation();\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MINOR,\n \"ConnectionManager.deactivateTransport()\",\n \"transport = \" + transport\n );\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MINOR,\n \"ConnectionManager.deactivateTransport()\",\n \"state = \" + state + (wasActive ? \"; was active\" : wasPending ? \"; was pending\" : \"\") + (noTransportsScheduledForActivation ? \"\" : \"; another transport is scheduled for activation\")\n );\n if (error && error.message)\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MICRO,\n \"ConnectionManager.deactivateTransport()\",\n \"reason = \" + error.message\n );\n if (wasActive) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MICRO,\n \"ConnectionManager.deactivateTransport()\",\n \"Getting, clearing, and requeuing \" + this.activeProtocol.messageQueue.count() + \" pending messages\"\n );\n this.queuePendingMessages(currentProtocol.getPendingMessages());\n currentProtocol.clearPendingMessages();\n this.activeProtocol = this.host = null;\n }\n this.emit(\"transport.inactive\", transport);\n if (wasActive && noTransportsScheduledForActivation || wasActive && state === \"failed\" || state === \"closed\" || currentProtocol === null && wasPending) {\n if (state === \"disconnected\" && error && error.statusCode > 500 && this.domains.length > 1) {\n this.unpersistTransportPreference();\n this.forceFallbackHost = true;\n this.notifyState({ state, error, retryImmediately: true });\n return;\n }\n const newConnectionState = state === \"failed\" && auth_default.isTokenErr(error) ? \"disconnected\" : state;\n this.notifyState({ state: newConnectionState, error });\n return;\n }\n }\n /* Helper that returns true if there are no transports which are pending,\n * have been connected, and are just waiting for onceNoPending to fire before\n * being activated */\n noTransportsScheduledForActivation() {\n return !this.pendingTransport || !this.pendingTransport.isConnected;\n }\n setConnection(connectionId, connectionDetails, hasConnectionError) {\n const prevConnId = this.connectionId, connIdChanged = prevConnId && prevConnId !== connectionId, recoverFailure = !prevConnId && hasConnectionError;\n if (connIdChanged || recoverFailure) {\n logger_default.logAction(this.logger, logger_default.LOG_MINOR, \"ConnectionManager.setConnection()\", \"Resetting msgSerial\");\n this.msgSerial = 0;\n this.queuedMessages.resetSendAttempted();\n }\n if (this.connectionId !== connectionId) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MINOR,\n \"ConnectionManager.setConnection()\",\n \"New connectionId; reattaching any attached channels\"\n );\n }\n this.realtime.connection.id = this.connectionId = connectionId;\n this.realtime.connection.key = this.connectionKey = connectionDetails.connectionKey;\n }\n clearConnection() {\n this.realtime.connection.id = this.connectionId = void 0;\n this.realtime.connection.key = this.connectionKey = void 0;\n this.msgSerial = 0;\n this.unpersistConnection();\n }\n createRecoveryKey() {\n if (!this.connectionKey) {\n return null;\n }\n return JSON.stringify({\n connectionKey: this.connectionKey,\n msgSerial: this.msgSerial,\n channelSerials: this.realtime.channels.channelSerials()\n });\n }\n checkConnectionStateFreshness() {\n if (!this.lastActivity || !this.connectionId) {\n return;\n }\n const sinceLast = Date.now() - this.lastActivity;\n if (sinceLast > this.connectionStateTtl + this.maxIdleInterval) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MINOR,\n \"ConnectionManager.checkConnectionStateFreshness()\",\n \"Last known activity from realtime was \" + sinceLast + \"ms ago; discarding connection state\"\n );\n this.clearConnection();\n this.states.connecting.failState = \"suspended\";\n }\n }\n /**\n * Called when the connectionmanager wants to persist transport\n * state for later recovery. Only applicable in the browser context.\n */\n persistConnection() {\n if (haveSessionStorage()) {\n const recoveryKey = this.createRecoveryKey();\n if (recoveryKey) {\n this.setSessionRecoverData({\n recoveryKey,\n disconnectedAt: Date.now(),\n location: globalObject2.location,\n clientId: this.realtime.auth.clientId\n });\n }\n }\n }\n /**\n * Called when the connectionmanager wants to persist transport\n * state for later recovery. Only applicable in the browser context.\n */\n unpersistConnection() {\n this.clearSessionRecoverData();\n }\n getActiveTransportFormat() {\n var _a2;\n return (_a2 = this.activeProtocol) == null ? void 0 : _a2.getTransport().format;\n }\n /*********************\n * state management\n *********************/\n getError() {\n if (this.errorReason) {\n const newError = PartialErrorInfo.fromValues(this.errorReason);\n newError.cause = this.errorReason;\n return newError;\n }\n return this.getStateError();\n }\n getStateError() {\n var _a2, _b;\n return (_b = (_a2 = connectionerrors_default)[this.state.state]) == null ? void 0 : _b.call(_a2);\n }\n activeState() {\n return this.state.queueEvents || this.state.sendEvents;\n }\n enactStateChange(stateChange) {\n const action = \"Connection state\";\n const message = stateChange.current + (stateChange.reason ? \"; reason: \" + stateChange.reason : \"\");\n if (stateChange.current === \"failed\") {\n logger_default.logAction(this.logger, logger_default.LOG_ERROR, action, message);\n } else {\n logger_default.logAction(this.logger, logger_default.LOG_MAJOR, action, message);\n }\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MINOR,\n \"ConnectionManager.enactStateChange\",\n \"setting new state: \" + stateChange.current + \"; reason = \" + (stateChange.reason && stateChange.reason.message)\n );\n const newState = this.state = this.states[stateChange.current];\n if (stateChange.reason) {\n this.errorReason = stateChange.reason;\n this.realtime.connection.errorReason = stateChange.reason;\n }\n if (newState.terminal || newState.state === \"suspended\") {\n this.clearConnection();\n }\n this.emit(\"connectionstate\", stateChange);\n }\n /****************************************\n * ConnectionManager connection lifecycle\n ****************************************/\n startTransitionTimer(transitionState) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MINOR,\n \"ConnectionManager.startTransitionTimer()\",\n \"transitionState: \" + transitionState.state\n );\n if (this.transitionTimer) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MINOR,\n \"ConnectionManager.startTransitionTimer()\",\n \"clearing already-running timer\"\n );\n clearTimeout(this.transitionTimer);\n }\n this.transitionTimer = setTimeout(() => {\n if (this.transitionTimer) {\n this.transitionTimer = null;\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MINOR,\n \"ConnectionManager \" + transitionState.state + \" timer expired\",\n \"requesting new state: \" + transitionState.failState\n );\n this.notifyState({ state: transitionState.failState });\n }\n }, transitionState.retryDelay);\n }\n cancelTransitionTimer() {\n logger_default.logAction(this.logger, logger_default.LOG_MINOR, \"ConnectionManager.cancelTransitionTimer()\", \"\");\n if (this.transitionTimer) {\n clearTimeout(this.transitionTimer);\n this.transitionTimer = null;\n }\n }\n startSuspendTimer() {\n if (this.suspendTimer)\n return;\n this.suspendTimer = setTimeout(() => {\n if (this.suspendTimer) {\n this.suspendTimer = null;\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MINOR,\n \"ConnectionManager suspend timer expired\",\n \"requesting new state: suspended\"\n );\n this.states.connecting.failState = \"suspended\";\n this.notifyState({ state: \"suspended\" });\n }\n }, this.connectionStateTtl);\n }\n checkSuspendTimer(state) {\n if (state !== \"disconnected\" && state !== \"suspended\" && state !== \"connecting\")\n this.cancelSuspendTimer();\n }\n cancelSuspendTimer() {\n this.states.connecting.failState = \"disconnected\";\n if (this.suspendTimer) {\n clearTimeout(this.suspendTimer);\n this.suspendTimer = null;\n }\n }\n startRetryTimer(interval) {\n this.retryTimer = setTimeout(() => {\n logger_default.logAction(this.logger, logger_default.LOG_MINOR, \"ConnectionManager retry timer expired\", \"retrying\");\n this.retryTimer = null;\n this.requestState({ state: \"connecting\" });\n }, interval);\n }\n cancelRetryTimer() {\n if (this.retryTimer) {\n clearTimeout(this.retryTimer);\n this.retryTimer = null;\n }\n }\n startWebSocketSlowTimer() {\n this.webSocketSlowTimer = setTimeout(() => {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MINOR,\n \"ConnectionManager WebSocket slow timer\",\n \"checking connectivity\"\n );\n this.checkWsConnectivity().then(() => {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MINOR,\n \"ConnectionManager WebSocket slow timer\",\n \"ws connectivity check succeeded\"\n );\n this.wsCheckResult = true;\n }).catch(() => {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MAJOR,\n \"ConnectionManager WebSocket slow timer\",\n \"ws connectivity check failed\"\n );\n this.wsCheckResult = false;\n });\n if (this.realtime.http.checkConnectivity) {\n whenPromiseSettles(this.realtime.http.checkConnectivity(), (err, connectivity) => {\n if (err || !connectivity) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MAJOR,\n \"ConnectionManager WebSocket slow timer\",\n \"http connectivity check failed\"\n );\n this.cancelWebSocketGiveUpTimer();\n this.notifyState({\n state: \"disconnected\",\n error: new ErrorInfo(\"Unable to connect (network unreachable)\", 80003, 404)\n });\n } else {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MINOR,\n \"ConnectionManager WebSocket slow timer\",\n \"http connectivity check succeeded\"\n );\n }\n });\n }\n }, this.options.timeouts.webSocketSlowTimeout);\n }\n cancelWebSocketSlowTimer() {\n if (this.webSocketSlowTimer) {\n clearTimeout(this.webSocketSlowTimer);\n this.webSocketSlowTimer = null;\n }\n }\n startWebSocketGiveUpTimer(transportParams) {\n this.webSocketGiveUpTimer = setTimeout(() => {\n var _a2, _b;\n if (!this.wsCheckResult) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MINOR,\n \"ConnectionManager WebSocket give up timer\",\n \"websocket connection took more than 10s; \" + (this.baseTransport ? \"trying base transport\" : \"\")\n );\n if (this.baseTransport) {\n this.abandonedWebSocket = true;\n (_a2 = this.proposedTransport) == null ? void 0 : _a2.dispose();\n (_b = this.pendingTransport) == null ? void 0 : _b.dispose();\n this.connectBase(transportParams, ++this.connectCounter);\n } else {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MAJOR,\n \"ConnectionManager WebSocket give up timer\",\n \"websocket connectivity appears to be unavailable but no other transports to try\"\n );\n }\n }\n }, this.options.timeouts.webSocketConnectTimeout);\n }\n cancelWebSocketGiveUpTimer() {\n if (this.webSocketGiveUpTimer) {\n clearTimeout(this.webSocketGiveUpTimer);\n this.webSocketGiveUpTimer = null;\n }\n }\n notifyState(indicated) {\n var _a2, _b;\n const state = indicated.state;\n const retryImmediately = state === \"disconnected\" && (this.state === this.states.connected || indicated.retryImmediately || this.state === this.states.connecting && indicated.error && auth_default.isTokenErr(indicated.error) && !(this.errorReason && auth_default.isTokenErr(this.errorReason)));\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MINOR,\n \"ConnectionManager.notifyState()\",\n \"new state: \" + state + (retryImmediately ? \"; will retry connection immediately\" : \"\")\n );\n if (state == this.state.state)\n return;\n this.cancelTransitionTimer();\n this.cancelRetryTimer();\n this.cancelWebSocketSlowTimer();\n this.cancelWebSocketGiveUpTimer();\n this.checkSuspendTimer(indicated.state);\n if (state === \"suspended\" || state === \"connected\") {\n this.disconnectedRetryCount = 0;\n }\n if (this.state.terminal)\n return;\n const newState = this.states[indicated.state];\n let retryDelay = newState.retryDelay;\n if (newState.state === \"disconnected\") {\n this.disconnectedRetryCount++;\n retryDelay = getRetryTime(newState.retryDelay, this.disconnectedRetryCount);\n }\n const change = new connectionstatechange_default(\n this.state.state,\n newState.state,\n retryDelay,\n indicated.error || ((_b = (_a2 = connectionerrors_default)[newState.state]) == null ? void 0 : _b.call(_a2))\n );\n if (retryImmediately) {\n const autoReconnect = () => {\n if (this.state === this.states.disconnected) {\n this.lastAutoReconnectAttempt = Date.now();\n this.requestState({ state: \"connecting\" });\n }\n };\n const sinceLast = this.lastAutoReconnectAttempt && Date.now() - this.lastAutoReconnectAttempt + 1;\n if (sinceLast && sinceLast < 1e3) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MICRO,\n \"ConnectionManager.notifyState()\",\n \"Last reconnect attempt was only \" + sinceLast + \"ms ago, waiting another \" + (1e3 - sinceLast) + \"ms before trying again\"\n );\n setTimeout(autoReconnect, 1e3 - sinceLast);\n } else {\n Platform.Config.nextTick(autoReconnect);\n }\n } else if (state === \"disconnected\" || state === \"suspended\") {\n this.startRetryTimer(retryDelay);\n }\n if (state === \"disconnected\" && !retryImmediately || state === \"suspended\" || newState.terminal) {\n Platform.Config.nextTick(() => {\n this.disconnectAllTransports();\n });\n }\n if (state == \"connected\" && !this.activeProtocol) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_ERROR,\n \"ConnectionManager.notifyState()\",\n \"Broken invariant: attempted to go into connected state, but there is no active protocol\"\n );\n }\n this.enactStateChange(change);\n if (this.state.sendEvents) {\n this.sendQueuedMessages();\n } else if (!this.state.queueEvents) {\n this.realtime.channels.propogateConnectionInterruption(state, change.reason);\n this.failQueuedMessages(change.reason);\n }\n }\n requestState(request) {\n var _a2, _b;\n const state = request.state;\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MINOR,\n \"ConnectionManager.requestState()\",\n \"requested state: \" + state + \"; current state: \" + this.state.state\n );\n if (state == this.state.state)\n return;\n this.cancelWebSocketSlowTimer();\n this.cancelWebSocketGiveUpTimer();\n this.cancelTransitionTimer();\n this.cancelRetryTimer();\n this.checkSuspendTimer(state);\n if (state == \"connecting\" && this.state.state == \"connected\")\n return;\n if (state == \"closing\" && this.state.state == \"closed\")\n return;\n const newState = this.states[state], change = new connectionstatechange_default(\n this.state.state,\n newState.state,\n null,\n request.error || ((_b = (_a2 = connectionerrors_default)[newState.state]) == null ? void 0 : _b.call(_a2))\n );\n this.enactStateChange(change);\n if (state == \"connecting\") {\n Platform.Config.nextTick(() => {\n this.startConnect();\n });\n }\n if (state == \"closing\") {\n this.closeImpl();\n }\n }\n startConnect() {\n if (this.state !== this.states.connecting) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MINOR,\n \"ConnectionManager.startConnect()\",\n \"Must be in connecting state to connect, but was \" + this.state.state\n );\n return;\n }\n const auth = this.realtime.auth;\n const connectCount = ++this.connectCounter;\n const connect = () => {\n this.checkConnectionStateFreshness();\n this.getTransportParams((transportParams) => {\n if (transportParams.mode === \"recover\" && transportParams.options.recover) {\n const recoveryContext = decodeRecoveryKey(transportParams.options.recover);\n if (recoveryContext) {\n this.realtime.channels.recoverChannels(recoveryContext.channelSerials);\n }\n }\n if (connectCount !== this.connectCounter) {\n return;\n }\n this.connectImpl(transportParams, connectCount);\n });\n };\n logger_default.logAction(this.logger, logger_default.LOG_MINOR, \"ConnectionManager.startConnect()\", \"starting connection\");\n this.startSuspendTimer();\n this.startTransitionTimer(this.states.connecting);\n if (auth.method === \"basic\") {\n connect();\n } else {\n const authCb = (err) => {\n if (connectCount !== this.connectCounter) {\n return;\n }\n if (err) {\n this.actOnErrorFromAuthorize(err);\n } else {\n connect();\n }\n };\n if (this.errorReason && auth_default.isTokenErr(this.errorReason)) {\n whenPromiseSettles(auth._forceNewToken(null, null), authCb);\n } else {\n whenPromiseSettles(auth._ensureValidAuthCredentials(false), authCb);\n }\n }\n }\n /*\n * there are, at most, two transports available with which a connection may\n * be attempted: web_socket and/or a base transport (xhr_polling in browsers,\n * comet in nodejs). web_socket is always preferred, and the base transport is\n * only used in case web_socket connectivity appears to be unavailable.\n *\n * connectImpl begins the transport selection process by checking which transports\n * are available, and if there is a cached preference. It then defers to the\n * transport-specific connect methods: connectWs and connectBase.\n *\n * It is also responsible for invalidating the cache in the case that a base\n * transport preference is stored but web socket connectivity is now available.\n *\n * handling of the case where we need to failover from web_socket to the base\n * transport is implemented in the connectWs method.\n */\n connectImpl(transportParams, connectCount) {\n const state = this.state.state;\n if (state !== this.states.connecting.state) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MINOR,\n \"ConnectionManager.connectImpl()\",\n \"Must be in connecting state to connect, but was \" + state\n );\n return;\n }\n const transportPreference = this.getTransportPreference();\n if (transportPreference && transportPreference === this.baseTransport && this.webSocketTransportAvailable) {\n this.checkWsConnectivity().then(() => {\n this.unpersistTransportPreference();\n if (this.state === this.states.connecting) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MINOR,\n \"ConnectionManager.connectImpl():\",\n \"web socket connectivity available, cancelling connection attempt with \" + this.baseTransport\n );\n this.disconnectAllTransports();\n this.connectWs(transportParams, ++this.connectCounter);\n }\n }).catch(noop2);\n }\n if (transportPreference && transportPreference === this.baseTransport || this.baseTransport && !this.webSocketTransportAvailable) {\n this.connectBase(transportParams, connectCount);\n } else {\n this.connectWs(transportParams, connectCount);\n }\n }\n /*\n * connectWs starts two timers to monitor the success of a web_socket connection attempt:\n * - webSocketSlowTimer: if this timer fires before the connection succeeds,\n * cm will simultaneously check websocket and http/xhr connectivity. if the http\n * connectivity check fails, we give up the connection sequence entirely and\n * transition to disconnected. if the websocket connectivity check fails then\n * we assume no ws connectivity and failover to base transport. in the case that\n * the checks succeed, we continue with websocket and wait for it to try fallback hosts\n * and, if unsuccessful, ultimately transition to disconnected.\n * - webSocketGiveUpTimer: if this timer fires, and the preceding websocket\n * connectivity check is still pending then we assume that there is an issue\n * with the transport and fallback to base transport.\n */\n connectWs(transportParams, connectCount) {\n logger_default.logAction(this.logger, logger_default.LOG_MICRO, \"ConnectionManager.connectWs()\");\n this.wsCheckResult = null;\n this.abandonedWebSocket = false;\n this.startWebSocketSlowTimer();\n this.startWebSocketGiveUpTimer(transportParams);\n this.tryTransportWithFallbacks(\"web_socket\", transportParams, true, connectCount, () => {\n return this.wsCheckResult !== false && !this.abandonedWebSocket;\n });\n }\n connectBase(transportParams, connectCount) {\n logger_default.logAction(this.logger, logger_default.LOG_MICRO, \"ConnectionManager.connectBase()\");\n if (this.baseTransport) {\n this.tryTransportWithFallbacks(this.baseTransport, transportParams, false, connectCount, () => true);\n } else {\n this.notifyState({\n state: \"disconnected\",\n error: new ErrorInfo(\"No transports left to try\", 8e4, 404)\n });\n }\n }\n tryTransportWithFallbacks(transportName, transportParams, ws, connectCount, shouldContinue) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MICRO,\n \"ConnectionManager.tryTransportWithFallbacks()\",\n transportName\n );\n const giveUp = (err) => {\n this.notifyState({ state: this.states.connecting.failState, error: err });\n };\n const candidateHosts = this.domains.slice();\n const hostAttemptCb = (fatal, transport) => {\n if (connectCount !== this.connectCounter) {\n return;\n }\n if (!shouldContinue()) {\n if (transport) {\n transport.dispose();\n }\n return;\n }\n if (!transport && !fatal) {\n tryFallbackHosts();\n }\n };\n const host = candidateHosts.shift();\n if (!host) {\n giveUp(new ErrorInfo(\"Unable to connect (no available host)\", 80003, 404));\n return;\n }\n transportParams.host = host;\n const tryFallbackHosts = () => {\n if (!candidateHosts.length) {\n giveUp(new ErrorInfo(\"Unable to connect (and no more fallback hosts to try)\", 80003, 404));\n return;\n }\n if (!this.realtime.http.checkConnectivity) {\n giveUp(new PartialErrorInfo(\"Internal error: Http.checkConnectivity not set\", null, 500));\n return;\n }\n whenPromiseSettles(\n this.realtime.http.checkConnectivity(),\n (err, connectivity) => {\n if (connectCount !== this.connectCounter) {\n return;\n }\n if (!shouldContinue()) {\n return;\n }\n if (err) {\n giveUp(err);\n return;\n }\n if (!connectivity) {\n giveUp(new ErrorInfo(\"Unable to connect (network unreachable)\", 80003, 404));\n return;\n }\n transportParams.host = arrPopRandomElement(candidateHosts);\n this.tryATransport(transportParams, transportName, hostAttemptCb);\n }\n );\n };\n if (this.forceFallbackHost && candidateHosts.length) {\n this.forceFallbackHost = false;\n tryFallbackHosts();\n return;\n }\n this.tryATransport(transportParams, transportName, hostAttemptCb);\n }\n closeImpl() {\n logger_default.logAction(this.logger, logger_default.LOG_MINOR, \"ConnectionManager.closeImpl()\", \"closing connection\");\n this.cancelSuspendTimer();\n this.startTransitionTimer(this.states.closing);\n if (this.pendingTransport) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MICRO,\n \"ConnectionManager.closeImpl()\",\n \"Closing pending transport: \" + this.pendingTransport\n );\n this.pendingTransport.close();\n }\n if (this.activeProtocol) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MICRO,\n \"ConnectionManager.closeImpl()\",\n \"Closing active transport: \" + this.activeProtocol.getTransport()\n );\n this.activeProtocol.getTransport().close();\n }\n this.notifyState({ state: \"closed\" });\n }\n onAuthUpdated(tokenDetails, callback) {\n var _a2;\n switch (this.state.state) {\n case \"connected\": {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MICRO,\n \"ConnectionManager.onAuthUpdated()\",\n \"Sending AUTH message on active transport\"\n );\n const activeTransport = (_a2 = this.activeProtocol) == null ? void 0 : _a2.getTransport();\n if (activeTransport && activeTransport.onAuthUpdated) {\n activeTransport.onAuthUpdated(tokenDetails);\n }\n const authMsg = fromValues({\n action: actions.AUTH,\n auth: {\n accessToken: tokenDetails.token\n }\n });\n this.send(authMsg);\n const successListener = () => {\n this.off(failureListener);\n callback(null, tokenDetails);\n };\n const failureListener = (stateChange) => {\n if (stateChange.current === \"failed\") {\n this.off(successListener);\n this.off(failureListener);\n callback(stateChange.reason || this.getStateError());\n }\n };\n this.once(\"connectiondetails\", successListener);\n this.on(\"connectionstate\", failureListener);\n break;\n }\n case \"connecting\":\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MICRO,\n \"ConnectionManager.onAuthUpdated()\",\n \"Aborting current connection attempts in order to start again with the new auth details\"\n );\n this.disconnectAllTransports();\n default: {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MICRO,\n \"ConnectionManager.onAuthUpdated()\",\n \"Connection state is \" + this.state.state + \"; waiting until either connected or failed\"\n );\n const listener = (stateChange) => {\n switch (stateChange.current) {\n case \"connected\":\n this.off(listener);\n callback(null, tokenDetails);\n break;\n case \"failed\":\n case \"closed\":\n case \"suspended\":\n this.off(listener);\n callback(stateChange.reason || this.getStateError());\n break;\n default:\n break;\n }\n };\n this.on(\"connectionstate\", listener);\n if (this.state.state === \"connecting\") {\n this.startConnect();\n } else {\n this.requestState({ state: \"connecting\" });\n }\n }\n }\n }\n disconnectAllTransports() {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MINOR,\n \"ConnectionManager.disconnectAllTransports()\",\n \"Disconnecting all transports\"\n );\n this.connectCounter++;\n if (this.pendingTransport) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MICRO,\n \"ConnectionManager.disconnectAllTransports()\",\n \"Disconnecting pending transport: \" + this.pendingTransport\n );\n this.pendingTransport.disconnect();\n }\n delete this.pendingTransport;\n if (this.proposedTransport) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MICRO,\n \"ConnectionManager.disconnectAllTransports()\",\n \"Disconnecting proposed transport: \" + this.pendingTransport\n );\n this.proposedTransport.disconnect();\n }\n delete this.pendingTransport;\n if (this.activeProtocol) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MICRO,\n \"ConnectionManager.disconnectAllTransports()\",\n \"Disconnecting active transport: \" + this.activeProtocol.getTransport()\n );\n this.activeProtocol.getTransport().disconnect();\n }\n }\n /******************\n * event queueing\n ******************/\n send(msg, queueEvent, callback) {\n callback = callback || noop2;\n const state = this.state;\n if (state.sendEvents) {\n logger_default.logAction(this.logger, logger_default.LOG_MICRO, \"ConnectionManager.send()\", \"sending event\");\n this.sendImpl(new PendingMessage(msg, callback));\n return;\n }\n const shouldQueue = queueEvent && state.queueEvents;\n if (!shouldQueue) {\n const err = \"rejecting event, queueEvent was \" + queueEvent + \", state was \" + state.state;\n logger_default.logAction(this.logger, logger_default.LOG_MICRO, \"ConnectionManager.send()\", err);\n callback(this.errorReason || new ErrorInfo(err, 9e4, 400));\n return;\n }\n if (this.logger.shouldLog(logger_default.LOG_MICRO)) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MICRO,\n \"ConnectionManager.send()\",\n \"queueing msg; \" + stringify(\n msg,\n this.realtime._RealtimePresence,\n this.realtime._Annotations,\n this.realtime._objectsPlugin\n )\n );\n }\n this.queue(msg, callback);\n }\n sendImpl(pendingMessage) {\n const msg = pendingMessage.message;\n if (pendingMessage.ackRequired && !pendingMessage.sendAttempted) {\n msg.msgSerial = this.msgSerial++;\n }\n try {\n this.activeProtocol.send(pendingMessage);\n } catch (e) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_ERROR,\n \"ConnectionManager.sendImpl()\",\n \"Unexpected exception in transport.send(): \" + e.stack\n );\n }\n }\n queue(msg, callback) {\n logger_default.logAction(this.logger, logger_default.LOG_MICRO, \"ConnectionManager.queue()\", \"queueing event\");\n const lastQueued = this.queuedMessages.last();\n const maxSize = this.options.maxMessageSize;\n if (lastQueued && !lastQueued.sendAttempted && bundleWith(lastQueued.message, msg, maxSize)) {\n if (!lastQueued.merged) {\n lastQueued.callback = multicaster_default.create(this.logger, [lastQueued.callback]);\n lastQueued.merged = true;\n }\n lastQueued.callback.push(callback);\n } else {\n this.queuedMessages.push(new PendingMessage(msg, callback));\n }\n }\n sendQueuedMessages() {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MICRO,\n \"ConnectionManager.sendQueuedMessages()\",\n \"sending \" + this.queuedMessages.count() + \" queued messages\"\n );\n let pendingMessage;\n while (pendingMessage = this.queuedMessages.shift())\n this.sendImpl(pendingMessage);\n }\n queuePendingMessages(pendingMessages) {\n if (pendingMessages && pendingMessages.length) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MICRO,\n \"ConnectionManager.queuePendingMessages()\",\n \"queueing \" + pendingMessages.length + \" pending messages\"\n );\n this.queuedMessages.prepend(pendingMessages);\n }\n }\n failQueuedMessages(err) {\n const numQueued = this.queuedMessages.count();\n if (numQueued > 0) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_ERROR,\n \"ConnectionManager.failQueuedMessages()\",\n \"failing \" + numQueued + \" queued messages, err = \" + inspectError(err)\n );\n this.queuedMessages.completeAllMessages(err);\n }\n }\n onChannelMessage(message, transport) {\n this.pendingChannelMessagesState.queue.push({ message, transport });\n if (!this.pendingChannelMessagesState.isProcessing) {\n this.processNextPendingChannelMessage();\n }\n }\n processNextPendingChannelMessage() {\n if (this.pendingChannelMessagesState.queue.length > 0) {\n this.pendingChannelMessagesState.isProcessing = true;\n const pendingChannelMessage = this.pendingChannelMessagesState.queue.shift();\n this.processChannelMessage(pendingChannelMessage.message).catch((err) => {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_ERROR,\n \"ConnectionManager.processNextPendingChannelMessage() received error \",\n err\n );\n }).finally(() => {\n this.pendingChannelMessagesState.isProcessing = false;\n this.processNextPendingChannelMessage();\n });\n }\n }\n async processChannelMessage(message) {\n await this.realtime.channels.processChannelMessage(message);\n }\n async ping() {\n var _a2;\n if (this.state.state !== \"connected\") {\n throw new ErrorInfo(\"Unable to ping service; not connected\", 4e4, 400);\n }\n const transport = (_a2 = this.activeProtocol) == null ? void 0 : _a2.getTransport();\n if (!transport) {\n throw this.getStateError();\n }\n logger_default.logAction(this.logger, logger_default.LOG_MINOR, \"ConnectionManager.ping()\", \"transport = \" + transport);\n const pingStart = Date.now();\n const id = cheapRandStr();\n return withTimeoutAsync(\n new Promise((resolve) => {\n const onHeartbeat = (responseId) => {\n if (responseId === id) {\n transport.off(\"heartbeat\", onHeartbeat);\n resolve(Date.now() - pingStart);\n }\n };\n transport.on(\"heartbeat\", onHeartbeat);\n transport.ping(id);\n }),\n this.options.timeouts.realtimeRequestTimeout,\n \"Timeout waiting for heartbeat response\"\n );\n }\n abort(error) {\n this.activeProtocol.getTransport().fail(error);\n }\n getTransportPreference() {\n var _a2, _b;\n return this.transportPreference || haveWebStorage() && ((_b = (_a2 = Platform.WebStorage) == null ? void 0 : _a2.get) == null ? void 0 : _b.call(_a2, transportPreferenceName));\n }\n persistTransportPreference(transport) {\n var _a2, _b;\n this.transportPreference = transport.shortName;\n if (haveWebStorage()) {\n (_b = (_a2 = Platform.WebStorage) == null ? void 0 : _a2.set) == null ? void 0 : _b.call(_a2, transportPreferenceName, transport.shortName);\n }\n }\n unpersistTransportPreference() {\n var _a2, _b;\n this.transportPreference = null;\n if (haveWebStorage()) {\n (_b = (_a2 = Platform.WebStorage) == null ? void 0 : _a2.remove) == null ? void 0 : _b.call(_a2, transportPreferenceName);\n }\n }\n /* This method is only used during connection attempts, so implements RSA4c1, RSA4c2,\n * and RSA4d. It is generally not invoked for serverside-triggered reauths or manual\n * reauths, so RSA4c3 does not apply, except (per per RSA4d1) in the case that the auth\n * server returns 403. */\n actOnErrorFromAuthorize(err) {\n if (err.code === 40171) {\n this.notifyState({ state: \"failed\", error: err });\n } else if (err.code === 40102) {\n this.notifyState({ state: \"failed\", error: err });\n } else if (err.statusCode === HttpStatusCodes_default.Forbidden) {\n const msg = \"Client configured authentication provider returned 403; failing the connection\";\n logger_default.logAction(this.logger, logger_default.LOG_ERROR, \"ConnectionManager.actOnErrorFromAuthorize()\", msg);\n this.notifyState({ state: \"failed\", error: new ErrorInfo(msg, 80019, 403, err) });\n } else {\n const msg = \"Client configured authentication provider request failed\";\n logger_default.logAction(this.logger, logger_default.LOG_MINOR, \"ConnectionManager.actOnErrorFromAuthorize\", msg);\n this.notifyState({ state: this.state.failState, error: new ErrorInfo(msg, 80019, 401, err) });\n }\n }\n onConnectionDetailsUpdate(connectionDetails, transport) {\n if (!connectionDetails) {\n return;\n }\n this.connectionDetails = connectionDetails;\n if (connectionDetails.maxMessageSize) {\n this.options.maxMessageSize = connectionDetails.maxMessageSize;\n }\n const clientId = connectionDetails.clientId;\n if (clientId) {\n const err = this.realtime.auth._uncheckedSetClientId(clientId);\n if (err) {\n logger_default.logAction(this.logger, logger_default.LOG_ERROR, \"ConnectionManager.onConnectionDetailsUpdate()\", err.message);\n transport.fail(err);\n return;\n }\n }\n const connectionStateTtl = connectionDetails.connectionStateTtl;\n if (connectionStateTtl) {\n this.connectionStateTtl = connectionStateTtl;\n }\n this.maxIdleInterval = connectionDetails.maxIdleInterval;\n this.emit(\"connectiondetails\", connectionDetails);\n }\n checkWsConnectivity() {\n const wsConnectivityCheckUrl = this.options.wsConnectivityCheckUrl || defaults_default.wsConnectivityCheckUrl;\n const ws = new Platform.Config.WebSocket(wsConnectivityCheckUrl);\n return new Promise((resolve, reject) => {\n let finished = false;\n ws.onopen = () => {\n if (!finished) {\n finished = true;\n resolve();\n ws.close();\n }\n };\n ws.onclose = ws.onerror = () => {\n if (!finished) {\n finished = true;\n reject();\n }\n };\n });\n }\n sessionRecoveryName() {\n return this.options.recoveryKeyStorageName || \"ably-connection-recovery\";\n }\n getSessionRecoverData() {\n var _a2, _b;\n return haveSessionStorage() && ((_b = (_a2 = Platform.WebStorage) == null ? void 0 : _a2.getSession) == null ? void 0 : _b.call(_a2, this.sessionRecoveryName()));\n }\n setSessionRecoverData(value) {\n var _a2, _b;\n return haveSessionStorage() && ((_b = (_a2 = Platform.WebStorage) == null ? void 0 : _a2.setSession) == null ? void 0 : _b.call(_a2, this.sessionRecoveryName(), value));\n }\n clearSessionRecoverData() {\n var _a2, _b;\n return haveSessionStorage() && ((_b = (_a2 = Platform.WebStorage) == null ? void 0 : _a2.removeSession) == null ? void 0 : _b.call(_a2, this.sessionRecoveryName()));\n }\n};\nvar connectionmanager_default = ConnectionManager;\n\n// src/common/lib/client/connection.ts\nvar Connection = class extends eventemitter_default {\n constructor(ably, options) {\n super(ably.logger);\n this.whenState = (state) => {\n return eventemitter_default.prototype.whenState.call(this, state, this.state);\n };\n this.ably = ably;\n this.connectionManager = new connectionmanager_default(ably, options);\n this.state = this.connectionManager.state.state;\n this.key = void 0;\n this.id = void 0;\n this.errorReason = null;\n this.connectionManager.on(\"connectionstate\", (stateChange) => {\n const state = this.state = stateChange.current;\n Platform.Config.nextTick(() => {\n this.emit(state, stateChange);\n });\n });\n this.connectionManager.on(\"update\", (stateChange) => {\n Platform.Config.nextTick(() => {\n this.emit(\"update\", stateChange);\n });\n });\n }\n connect() {\n logger_default.logAction(this.logger, logger_default.LOG_MINOR, \"Connection.connect()\", \"\");\n this.connectionManager.requestState({ state: \"connecting\" });\n }\n async ping() {\n logger_default.logAction(this.logger, logger_default.LOG_MINOR, \"Connection.ping()\", \"\");\n return this.connectionManager.ping();\n }\n close() {\n logger_default.logAction(this.logger, logger_default.LOG_MINOR, \"Connection.close()\", \"connectionKey = \" + this.key);\n this.connectionManager.requestState({ state: \"closing\" });\n }\n get recoveryKey() {\n this.logger.deprecationWarning(\n \"The `Connection.recoveryKey` attribute has been replaced by the `Connection.createRecoveryKey()` method. Replace your usage of `recoveryKey` with the return value of `createRecoveryKey()`. `recoveryKey` will be removed in a future version.\"\n );\n return this.createRecoveryKey();\n }\n createRecoveryKey() {\n return this.connectionManager.createRecoveryKey();\n }\n};\nvar connection_default = Connection;\n\n// src/common/lib/client/baserealtime.ts\nvar _BaseRealtime = class _BaseRealtime extends baseclient_default {\n /*\n * The public typings declare that this only accepts an object, but since we want to emit a good error message in the case where a non-TypeScript user does one of these things:\n *\n * 1. passes a string (which is quite likely if they’re e.g. migrating from the default variant to the modular variant)\n * 2. passes no argument at all\n *\n * tell the compiler that these cases are possible so that it forces us to handle them.\n */\n constructor(options) {\n var _a2, _b, _c, _d;\n super(defaults_default.objectifyOptions(options, false, \"BaseRealtime\", logger_default.defaultLogger));\n logger_default.logAction(this.logger, logger_default.LOG_MINOR, \"Realtime()\", \"\");\n if (typeof EdgeRuntime === \"string\") {\n throw new ErrorInfo(\n `Ably.Realtime instance cannot be used in Vercel Edge runtime. If you are running Vercel Edge functions, please replace your \"new Ably.Realtime()\" with \"new Ably.Rest()\" and use Ably Rest API instead of the Realtime API. If you are server-rendering your application in the Vercel Edge runtime, please use the condition \"if (typeof EdgeRuntime === 'string')\" to prevent instantiating Ably.Realtime instance during SSR in the Vercel Edge runtime.`,\n 4e4,\n 400\n );\n }\n this._additionalTransportImplementations = _BaseRealtime.transportImplementationsFromPlugins(this.options.plugins);\n this._RealtimePresence = (_b = (_a2 = this.options.plugins) == null ? void 0 : _a2.RealtimePresence) != null ? _b : null;\n this._objectsPlugin = (_d = (_c = this.options.plugins) == null ? void 0 : _c.Objects) != null ? _d : null;\n this.connection = new connection_default(this, this.options);\n this._channels = new Channels2(this);\n if (this.options.autoConnect !== false)\n this.connect();\n }\n static transportImplementationsFromPlugins(plugins) {\n const transports = {};\n if (plugins == null ? void 0 : plugins.WebSocketTransport) {\n transports[TransportNames.WebSocket] = plugins.WebSocketTransport;\n }\n if (plugins == null ? void 0 : plugins.XHRPolling) {\n transports[TransportNames.XhrPolling] = plugins.XHRPolling;\n }\n return transports;\n }\n get channels() {\n return this._channels;\n }\n connect() {\n logger_default.logAction(this.logger, logger_default.LOG_MINOR, \"Realtime.connect()\", \"\");\n this.connection.connect();\n }\n close() {\n logger_default.logAction(this.logger, logger_default.LOG_MINOR, \"Realtime.close()\", \"\");\n this.connection.close();\n }\n};\n// internal API to make EventEmitter usable in other SDKs\n_BaseRealtime.EventEmitter = eventemitter_default;\nvar BaseRealtime = _BaseRealtime;\nvar Channels2 = class extends eventemitter_default {\n constructor(realtime) {\n super(realtime.logger);\n this.realtime = realtime;\n this.all = /* @__PURE__ */ Object.create(null);\n realtime.connection.connectionManager.on(\"transport.active\", () => {\n this.onTransportActive();\n });\n }\n channelSerials() {\n let serials = {};\n for (const name of keysArray(this.all, true)) {\n const channel = this.all[name];\n if (channel.properties.channelSerial) {\n serials[name] = channel.properties.channelSerial;\n }\n }\n return serials;\n }\n // recoverChannels gets the given channels and sets their channel serials.\n recoverChannels(channelSerials) {\n for (const name of keysArray(channelSerials, true)) {\n const channel = this.get(name);\n channel.properties.channelSerial = channelSerials[name];\n }\n }\n // Access to this method is synchronised by ConnectionManager#processChannelMessage.\n async processChannelMessage(msg) {\n const channelName = msg.channel;\n if (channelName === void 0) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_ERROR,\n \"Channels.processChannelMessage()\",\n \"received event unspecified channel, action = \" + msg.action\n );\n return;\n }\n const channel = this.all[channelName];\n if (!channel) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_ERROR,\n \"Channels.processChannelMessage()\",\n \"received event for non-existent channel: \" + channelName\n );\n return;\n }\n await channel.processMessage(msg);\n }\n /* called when a transport becomes connected; reattempt attach/detach\n * for channels that are attaching or detaching. */\n onTransportActive() {\n for (const channelName in this.all) {\n const channel = this.all[channelName];\n if (channel.state === \"attaching\" || channel.state === \"detaching\") {\n channel.checkPendingState();\n } else if (channel.state === \"suspended\") {\n channel._attach(false, null);\n } else if (channel.state === \"attached\") {\n channel.requestState(\"attaching\");\n }\n }\n }\n /* Connection interruptions (ie when the connection will no longer queue\n * events) imply connection state changes for any channel which is either\n * attached, pending, or will attempt to become attached in the future */\n propogateConnectionInterruption(connectionState, reason) {\n const connectionStateToChannelState = {\n closing: \"detached\",\n closed: \"detached\",\n failed: \"failed\",\n suspended: \"suspended\"\n };\n const fromChannelStates = [\"attaching\", \"attached\", \"detaching\", \"suspended\"];\n const toChannelState = connectionStateToChannelState[connectionState];\n for (const channelId in this.all) {\n const channel = this.all[channelId];\n if (fromChannelStates.includes(channel.state)) {\n channel.notifyState(toChannelState, reason);\n }\n }\n }\n get(name, channelOptions) {\n name = String(name);\n let channel = this.all[name];\n if (!channel) {\n channel = this.all[name] = new realtimechannel_default(this.realtime, name, channelOptions);\n } else if (channelOptions) {\n if (channel._shouldReattachToSetOptions(channelOptions, channel.channelOptions)) {\n throw new ErrorInfo(\n \"Channels.get() cannot be used to set channel options that would cause the channel to reattach. Please, use RealtimeChannel.setOptions() instead.\",\n 4e4,\n 400\n );\n }\n channel.setOptions(channelOptions);\n }\n return channel;\n }\n getDerived(name, deriveOptions, channelOptions) {\n if (deriveOptions.filter) {\n const filter = toBase64(deriveOptions.filter);\n const match = matchDerivedChannel(name);\n name = `[filter=${filter}${match.qualifierParam}]${match.channelName}`;\n }\n return this.get(name, channelOptions);\n }\n /* Included to support certain niche use-cases; most users should ignore this.\n * Please do not use this unless you know what you're doing */\n release(name) {\n name = String(name);\n const channel = this.all[name];\n if (!channel) {\n return;\n }\n const releaseErr = channel.getReleaseErr();\n if (releaseErr) {\n throw releaseErr;\n }\n delete this.all[name];\n }\n};\nvar baserealtime_default = BaseRealtime;\n\n// src/common/lib/client/presencemap.ts\nfunction newerThan(item, existing) {\n if (item.isSynthesized() || existing.isSynthesized()) {\n return item.timestamp >= existing.timestamp;\n }\n const itemOrderings = item.parseId(), existingOrderings = existing.parseId();\n if (itemOrderings.msgSerial === existingOrderings.msgSerial) {\n return itemOrderings.index > existingOrderings.index;\n } else {\n return itemOrderings.msgSerial > existingOrderings.msgSerial;\n }\n}\nvar PresenceMap = class extends eventemitter_default {\n constructor(presence, memberKey, newer = newerThan) {\n super(presence.logger);\n this.presence = presence;\n this.map = /* @__PURE__ */ Object.create(null);\n this.syncInProgress = false;\n this.residualMembers = null;\n this.memberKey = memberKey;\n this.newerThan = newer;\n }\n get(key) {\n return this.map[key];\n }\n getClient(clientId) {\n const map = this.map, result = [];\n for (const key in map) {\n const item = map[key];\n if (item.clientId == clientId && item.action != \"absent\")\n result.push(item);\n }\n return result;\n }\n list(params) {\n const map = this.map, clientId = params && params.clientId, connectionId = params && params.connectionId, result = [];\n for (const key in map) {\n const item = map[key];\n if (item.action === \"absent\")\n continue;\n if (clientId && clientId != item.clientId)\n continue;\n if (connectionId && connectionId != item.connectionId)\n continue;\n result.push(item);\n }\n return result;\n }\n put(item) {\n if (item.action === \"enter\" || item.action === \"update\") {\n item = presencemessage_default.fromValues(item);\n item.action = \"present\";\n }\n const map = this.map, key = this.memberKey(item);\n if (this.residualMembers)\n delete this.residualMembers[key];\n const existingItem = map[key];\n if (existingItem && !this.newerThan(item, existingItem)) {\n return false;\n }\n map[key] = item;\n return true;\n }\n values() {\n const map = this.map, result = [];\n for (const key in map) {\n const item = map[key];\n if (item.action != \"absent\")\n result.push(item);\n }\n return result;\n }\n remove(item) {\n const map = this.map, key = this.memberKey(item);\n const existingItem = map[key];\n if (existingItem && !this.newerThan(item, existingItem)) {\n return false;\n }\n if (this.syncInProgress) {\n item = presencemessage_default.fromValues(item);\n item.action = \"absent\";\n map[key] = item;\n } else {\n delete map[key];\n }\n return !!existingItem;\n }\n startSync() {\n const map = this.map, syncInProgress = this.syncInProgress;\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MINOR,\n \"PresenceMap.startSync()\",\n \"channel = \" + this.presence.channel.name + \"; syncInProgress = \" + syncInProgress\n );\n if (!this.syncInProgress) {\n this.residualMembers = copy(map);\n this.setInProgress(true);\n }\n }\n endSync() {\n const map = this.map, syncInProgress = this.syncInProgress;\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MINOR,\n \"PresenceMap.endSync()\",\n \"channel = \" + this.presence.channel.name + \"; syncInProgress = \" + syncInProgress\n );\n if (syncInProgress) {\n for (const memberKey in map) {\n const entry = map[memberKey];\n if (entry.action === \"absent\") {\n delete map[memberKey];\n }\n }\n this.presence._synthesizeLeaves(valuesArray(this.residualMembers));\n for (const memberKey in this.residualMembers) {\n delete map[memberKey];\n }\n this.residualMembers = null;\n this.setInProgress(false);\n }\n this.emit(\"sync\");\n }\n waitSync(callback) {\n const syncInProgress = this.syncInProgress;\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MINOR,\n \"PresenceMap.waitSync()\",\n \"channel = \" + this.presence.channel.name + \"; syncInProgress = \" + syncInProgress\n );\n if (!syncInProgress) {\n callback();\n return;\n }\n this.once(\"sync\", callback);\n }\n clear() {\n this.map = {};\n this.setInProgress(false);\n this.residualMembers = null;\n }\n setInProgress(inProgress) {\n logger_default.logAction(this.logger, logger_default.LOG_MICRO, \"PresenceMap.setInProgress()\", \"inProgress = \" + inProgress);\n this.syncInProgress = inProgress;\n this.presence.syncComplete = !inProgress;\n }\n};\n\n// src/common/lib/client/realtimepresence.ts\nfunction getClientId(realtimePresence) {\n return realtimePresence.channel.client.auth.clientId;\n}\nfunction isAnonymousOrWildcard(realtimePresence) {\n const realtime = realtimePresence.channel.client;\n const clientId = realtime.auth.clientId;\n return (!clientId || clientId === \"*\") && realtime.connection.state === \"connected\";\n}\nfunction waitAttached(channel, callback, action) {\n switch (channel.state) {\n case \"attached\":\n case \"suspended\":\n action();\n break;\n case \"initialized\":\n case \"detached\":\n case \"detaching\":\n case \"attaching\":\n whenPromiseSettles(channel.attach(), function(err) {\n if (err)\n callback(err);\n else\n action();\n });\n break;\n default:\n callback(ErrorInfo.fromValues(channel.invalidStateError()));\n }\n}\nvar RealtimePresence = class extends eventemitter_default {\n constructor(channel) {\n super(channel.logger);\n this.channel = channel;\n this.syncComplete = false;\n this.members = new PresenceMap(this, (item) => item.clientId + \":\" + item.connectionId);\n this._myMembers = new PresenceMap(this, (item) => item.clientId);\n this.subscriptions = new eventemitter_default(this.logger);\n this.pendingPresence = [];\n }\n async enter(data) {\n if (isAnonymousOrWildcard(this)) {\n throw new ErrorInfo(\"clientId must be specified to enter a presence channel\", 40012, 400);\n }\n return this._enterOrUpdateClient(void 0, void 0, data, \"enter\");\n }\n async update(data) {\n if (isAnonymousOrWildcard(this)) {\n throw new ErrorInfo(\"clientId must be specified to update presence data\", 40012, 400);\n }\n return this._enterOrUpdateClient(void 0, void 0, data, \"update\");\n }\n async enterClient(clientId, data) {\n return this._enterOrUpdateClient(void 0, clientId, data, \"enter\");\n }\n async updateClient(clientId, data) {\n return this._enterOrUpdateClient(void 0, clientId, data, \"update\");\n }\n async _enterOrUpdateClient(id, clientId, data, action) {\n const channel = this.channel;\n if (!channel.connectionManager.activeState()) {\n throw channel.connectionManager.getError();\n }\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MICRO,\n \"RealtimePresence.\" + action + \"Client()\",\n \"channel = \" + channel.name + \", id = \" + id + \", client = \" + (clientId || \"(implicit) \" + getClientId(this))\n );\n const presence = presencemessage_default.fromData(data);\n presence.action = action;\n if (id) {\n presence.id = id;\n }\n if (clientId) {\n presence.clientId = clientId;\n }\n const wirePresMsg = await presence.encode(channel.channelOptions);\n switch (channel.state) {\n case \"attached\":\n return channel.sendPresence([wirePresMsg]);\n case \"initialized\":\n case \"detached\":\n channel.attach();\n case \"attaching\":\n return new Promise((resolve, reject) => {\n this.pendingPresence.push({\n presence: wirePresMsg,\n callback: (err) => err ? reject(err) : resolve()\n });\n });\n default: {\n const err = new PartialErrorInfo(\n \"Unable to \" + action + \" presence channel while in \" + channel.state + \" state\",\n 90001\n );\n err.code = 90001;\n throw err;\n }\n }\n }\n async leave(data) {\n if (isAnonymousOrWildcard(this)) {\n throw new ErrorInfo(\"clientId must have been specified to enter or leave a presence channel\", 40012, 400);\n }\n return this.leaveClient(void 0, data);\n }\n async leaveClient(clientId, data) {\n const channel = this.channel;\n if (!channel.connectionManager.activeState()) {\n throw channel.connectionManager.getError();\n }\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MICRO,\n \"RealtimePresence.leaveClient()\",\n \"leaving; channel = \" + this.channel.name + \", client = \" + clientId\n );\n const presence = presencemessage_default.fromData(data);\n presence.action = \"leave\";\n if (clientId) {\n presence.clientId = clientId;\n }\n const wirePresMsg = await presence.encode(channel.channelOptions);\n switch (channel.state) {\n case \"attached\":\n return channel.sendPresence([wirePresMsg]);\n case \"attaching\":\n return new Promise((resolve, reject) => {\n this.pendingPresence.push({\n presence: wirePresMsg,\n callback: (err) => err ? reject(err) : resolve()\n });\n });\n case \"initialized\":\n case \"failed\": {\n throw new PartialErrorInfo(\"Unable to leave presence channel (incompatible state)\", 90001);\n }\n default:\n throw channel.invalidStateError();\n }\n }\n async get(params) {\n const waitForSync = !params || (\"waitForSync\" in params ? params.waitForSync : true);\n return new Promise((resolve, reject) => {\n function returnMembers(members) {\n resolve(params ? members.list(params) : members.values());\n }\n if (this.channel.state === \"suspended\") {\n if (waitForSync) {\n reject(\n ErrorInfo.fromValues({\n statusCode: 400,\n code: 91005,\n message: \"Presence state is out of sync due to channel being in the SUSPENDED state\"\n })\n );\n } else {\n returnMembers(this.members);\n }\n return;\n }\n waitAttached(\n this.channel,\n (err) => reject(err),\n () => {\n const members = this.members;\n if (waitForSync) {\n members.waitSync(function() {\n returnMembers(members);\n });\n } else {\n returnMembers(members);\n }\n }\n );\n });\n }\n async history(params) {\n logger_default.logAction(this.logger, logger_default.LOG_MICRO, \"RealtimePresence.history()\", \"channel = \" + this.name);\n const restMixin = this.channel.client.rest.presenceMixin;\n if (params && params.untilAttach) {\n if (this.channel.state === \"attached\") {\n delete params.untilAttach;\n params.from_serial = this.channel.properties.attachSerial;\n } else {\n throw new ErrorInfo(\n \"option untilAttach requires the channel to be attached, was: \" + this.channel.state,\n 4e4,\n 400\n );\n }\n }\n return restMixin.history(this, params);\n }\n setPresence(presenceSet, isSync, syncChannelSerial) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MICRO,\n \"RealtimePresence.setPresence()\",\n \"received presence for \" + presenceSet.length + \" participants; syncChannelSerial = \" + syncChannelSerial\n );\n let syncCursor, match;\n const members = this.members, myMembers = this._myMembers, broadcastMessages = [], connId = this.channel.connectionManager.connectionId;\n if (isSync) {\n this.members.startSync();\n if (syncChannelSerial && (match = syncChannelSerial.match(/^[\\w-]+:(.*)$/))) {\n syncCursor = match[1];\n }\n }\n for (let presence of presenceSet) {\n switch (presence.action) {\n case \"leave\":\n if (members.remove(presence)) {\n broadcastMessages.push(presence);\n }\n if (presence.connectionId === connId && !presence.isSynthesized()) {\n myMembers.remove(presence);\n }\n break;\n case \"enter\":\n case \"present\":\n case \"update\":\n if (members.put(presence)) {\n broadcastMessages.push(presence);\n }\n if (presence.connectionId === connId) {\n myMembers.put(presence);\n }\n break;\n }\n }\n if (isSync && !syncCursor) {\n members.endSync();\n this.channel.syncChannelSerial = null;\n }\n for (let i = 0; i < broadcastMessages.length; i++) {\n const presence = broadcastMessages[i];\n this.subscriptions.emit(presence.action, presence);\n }\n }\n onAttached(hasPresence) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MINOR,\n \"RealtimePresence.onAttached()\",\n \"channel = \" + this.channel.name + \", hasPresence = \" + hasPresence\n );\n if (hasPresence) {\n this.members.startSync();\n } else {\n this._synthesizeLeaves(this.members.values());\n this.members.clear();\n }\n this._ensureMyMembersPresent();\n const pendingPresence = this.pendingPresence, pendingPresCount = pendingPresence.length;\n if (pendingPresCount) {\n this.pendingPresence = [];\n const presenceArray = [];\n const multicaster = multicaster_default.create(this.logger);\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MICRO,\n \"RealtimePresence.onAttached\",\n \"sending \" + pendingPresCount + \" queued presence messages\"\n );\n for (let i = 0; i < pendingPresCount; i++) {\n const event = pendingPresence[i];\n presenceArray.push(event.presence);\n multicaster.push(event.callback);\n }\n this.channel.sendPresence(presenceArray).then(() => multicaster()).catch((err) => multicaster(err));\n }\n }\n actOnChannelState(state, hasPresence, err) {\n switch (state) {\n case \"attached\":\n this.onAttached(hasPresence);\n break;\n case \"detached\":\n case \"failed\":\n this._clearMyMembers();\n this.members.clear();\n case \"suspended\":\n this.failPendingPresence(err);\n break;\n }\n }\n failPendingPresence(err) {\n if (this.pendingPresence.length) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MINOR,\n \"RealtimeChannel.failPendingPresence\",\n \"channel; name = \" + this.channel.name + \", err = \" + inspectError(err)\n );\n for (let i = 0; i < this.pendingPresence.length; i++)\n try {\n this.pendingPresence[i].callback(err);\n } catch (e) {\n }\n this.pendingPresence = [];\n }\n }\n _clearMyMembers() {\n this._myMembers.clear();\n }\n _ensureMyMembersPresent() {\n const myMembers = this._myMembers;\n const connId = this.channel.connectionManager.connectionId;\n for (const memberKey in myMembers.map) {\n const entry = myMembers.map[memberKey];\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MICRO,\n \"RealtimePresence._ensureMyMembersPresent()\",\n 'Auto-reentering clientId \"' + entry.clientId + '\" into the presence set'\n );\n const id = entry.connectionId === connId ? entry.id : void 0;\n this._enterOrUpdateClient(id, entry.clientId, entry.data, \"enter\").catch((err) => {\n const wrappedErr = new ErrorInfo(\"Presence auto re-enter failed\", 91004, 400, err);\n logger_default.logAction(\n this.logger,\n logger_default.LOG_ERROR,\n \"RealtimePresence._ensureMyMembersPresent()\",\n \"Presence auto re-enter failed; reason = \" + inspectError(err)\n );\n const change = new channelstatechange_default(this.channel.state, this.channel.state, true, false, wrappedErr);\n this.channel.emit(\"update\", change);\n });\n }\n }\n _synthesizeLeaves(items) {\n const subscriptions = this.subscriptions;\n items.forEach(function(item) {\n const presence = presencemessage_default.fromValues({\n action: \"leave\",\n connectionId: item.connectionId,\n clientId: item.clientId,\n data: item.data,\n encoding: item.encoding,\n timestamp: Date.now()\n });\n subscriptions.emit(\"leave\", presence);\n });\n }\n async subscribe(..._args) {\n const args = realtimechannel_default.processListenerArgs(_args);\n const event = args[0];\n const listener = args[1];\n const channel = this.channel;\n if (channel.state === \"failed\") {\n throw ErrorInfo.fromValues(channel.invalidStateError());\n }\n this.subscriptions.on(event, listener);\n if (channel.channelOptions.attachOnSubscribe !== false) {\n await channel.attach();\n }\n }\n unsubscribe(..._args) {\n const args = realtimechannel_default.processListenerArgs(_args);\n const event = args[0];\n const listener = args[1];\n this.subscriptions.off(event, listener);\n }\n};\nvar realtimepresence_default = RealtimePresence;\n\n// src/common/lib/transport/websockettransport.ts\nvar shortName = TransportNames.WebSocket;\nfunction isNodeWebSocket(ws) {\n return !!ws.on;\n}\nvar WebSocketTransport = class extends transport_default {\n constructor(connectionManager, auth, params) {\n super(connectionManager, auth, params);\n this.shortName = shortName;\n params.heartbeats = Platform.Config.useProtocolHeartbeats;\n this.wsHost = params.host;\n }\n static isAvailable() {\n return !!Platform.Config.WebSocket;\n }\n createWebSocket(uri, connectParams) {\n this.uri = uri + toQueryString(connectParams);\n return new Platform.Config.WebSocket(this.uri);\n }\n toString() {\n return \"WebSocketTransport; uri=\" + this.uri;\n }\n connect() {\n logger_default.logAction(this.logger, logger_default.LOG_MINOR, \"WebSocketTransport.connect()\", \"starting\");\n transport_default.prototype.connect.call(this);\n const self2 = this, params = this.params, options = params.options;\n const wsScheme = options.tls ? \"wss://\" : \"ws://\";\n const wsUri = wsScheme + this.wsHost + \":\" + defaults_default.getPort(options) + \"/\";\n logger_default.logAction(this.logger, logger_default.LOG_MINOR, \"WebSocketTransport.connect()\", \"uri: \" + wsUri);\n whenPromiseSettles(\n this.auth.getAuthParams(),\n function(err, authParams) {\n if (self2.isDisposed) {\n return;\n }\n let paramStr = \"\";\n for (const param in authParams)\n paramStr += \" \" + param + \": \" + authParams[param] + \";\";\n logger_default.logAction(\n self2.logger,\n logger_default.LOG_MINOR,\n \"WebSocketTransport.connect()\",\n \"authParams:\" + paramStr + \" err: \" + err\n );\n if (err) {\n self2.disconnect(err);\n return;\n }\n const connectParams = params.getConnectParams(authParams);\n try {\n const wsConnection = self2.wsConnection = self2.createWebSocket(wsUri, connectParams);\n wsConnection.binaryType = Platform.Config.binaryType;\n wsConnection.onopen = function() {\n self2.onWsOpen();\n };\n wsConnection.onclose = function(ev) {\n self2.onWsClose(ev);\n };\n wsConnection.onmessage = function(ev) {\n self2.onWsData(ev.data);\n };\n wsConnection.onerror = function(ev) {\n self2.onWsError(ev);\n };\n if (isNodeWebSocket(wsConnection)) {\n wsConnection.on(\"ping\", function() {\n self2.onActivity();\n });\n }\n } catch (e) {\n logger_default.logAction(\n self2.logger,\n logger_default.LOG_ERROR,\n \"WebSocketTransport.connect()\",\n \"Unexpected exception creating websocket: err = \" + (e.stack || e.message)\n );\n self2.disconnect(e);\n }\n }\n );\n }\n send(message) {\n const wsConnection = this.wsConnection;\n if (!wsConnection) {\n logger_default.logAction(this.logger, logger_default.LOG_ERROR, \"WebSocketTransport.send()\", \"No socket connection\");\n return;\n }\n try {\n wsConnection.send(\n serialize2(message, this.connectionManager.realtime._MsgPack, this.params.format)\n );\n } catch (e) {\n const msg = \"Exception from ws connection when trying to send: \" + inspectError(e);\n logger_default.logAction(this.logger, logger_default.LOG_ERROR, \"WebSocketTransport.send()\", msg);\n this.finish(\"disconnected\", new ErrorInfo(msg, 5e4, 500));\n }\n }\n onWsData(data) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MICRO,\n \"WebSocketTransport.onWsData()\",\n \"data received; length = \" + data.length + \"; type = \" + typeof data\n );\n try {\n this.onProtocolMessage(\n deserialize(\n data,\n this.connectionManager.realtime._MsgPack,\n this.connectionManager.realtime._RealtimePresence,\n this.connectionManager.realtime._Annotations,\n this.connectionManager.realtime._objectsPlugin,\n this.format\n )\n );\n } catch (e) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_ERROR,\n \"WebSocketTransport.onWsData()\",\n \"Unexpected exception handing channel message: \" + e.stack\n );\n }\n }\n onWsOpen() {\n logger_default.logAction(this.logger, logger_default.LOG_MINOR, \"WebSocketTransport.onWsOpen()\", \"opened WebSocket\");\n this.emit(\"preconnect\");\n }\n onWsClose(ev) {\n let wasClean, code;\n if (typeof ev == \"object\") {\n code = ev.code;\n wasClean = ev.wasClean || code === 1e3;\n } else {\n code = ev;\n wasClean = code == 1e3;\n }\n delete this.wsConnection;\n if (wasClean) {\n logger_default.logAction(this.logger, logger_default.LOG_MINOR, \"WebSocketTransport.onWsClose()\", \"Cleanly closed WebSocket\");\n const err = new ErrorInfo(\"Websocket closed\", 80003, 400);\n this.finish(\"disconnected\", err);\n } else {\n const msg = \"Unclean disconnection of WebSocket ; code = \" + code, err = new ErrorInfo(msg, 80003, 400);\n logger_default.logAction(this.logger, logger_default.LOG_MINOR, \"WebSocketTransport.onWsClose()\", msg);\n this.finish(\"disconnected\", err);\n }\n this.emit(\"disposed\");\n }\n onWsError(err) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MINOR,\n \"WebSocketTransport.onError()\",\n \"Error from WebSocket: \" + err.message\n );\n Platform.Config.nextTick(() => {\n this.disconnect(Error(err.message));\n });\n }\n dispose() {\n logger_default.logAction(this.logger, logger_default.LOG_MINOR, \"WebSocketTransport.dispose()\", \"\");\n this.isDisposed = true;\n const wsConnection = this.wsConnection;\n if (wsConnection) {\n wsConnection.onmessage = function() {\n };\n delete this.wsConnection;\n Platform.Config.nextTick(() => {\n logger_default.logAction(this.logger, logger_default.LOG_MICRO, \"WebSocketTransport.dispose()\", \"closing websocket\");\n if (!wsConnection) {\n throw new Error(\"WebSocketTransport.dispose(): wsConnection is not defined\");\n }\n wsConnection.close();\n });\n }\n }\n};\nvar websockettransport_default = WebSocketTransport;\n\n// src/common/lib/client/filteredsubscriptions.ts\nvar FilteredSubscriptions = class {\n static subscribeFilter(channel, filter, listener) {\n const filteredListener = (m) => {\n var _a2, _b, _c, _d, _e, _f;\n const mapping = {\n name: m.name,\n refTimeserial: (_b = (_a2 = m.extras) == null ? void 0 : _a2.ref) == null ? void 0 : _b.timeserial,\n refType: (_d = (_c = m.extras) == null ? void 0 : _c.ref) == null ? void 0 : _d.type,\n isRef: !!((_f = (_e = m.extras) == null ? void 0 : _e.ref) == null ? void 0 : _f.timeserial),\n clientId: m.clientId\n };\n if (Object.entries(filter).find(\n ([key, value]) => value !== void 0 ? mapping[key] !== value : false\n )) {\n return;\n }\n listener(m);\n };\n this.addFilteredSubscription(channel, filter, listener, filteredListener);\n channel.subscriptions.on(filteredListener);\n }\n // Adds a new filtered subscription\n static addFilteredSubscription(channel, filter, realListener, filteredListener) {\n var _a2;\n if (!channel.filteredSubscriptions) {\n channel.filteredSubscriptions = /* @__PURE__ */ new Map();\n }\n if (channel.filteredSubscriptions.has(realListener)) {\n const realListenerMap = channel.filteredSubscriptions.get(realListener);\n realListenerMap.set(filter, ((_a2 = realListenerMap == null ? void 0 : realListenerMap.get(filter)) == null ? void 0 : _a2.concat(filteredListener)) || [filteredListener]);\n } else {\n channel.filteredSubscriptions.set(\n realListener,\n /* @__PURE__ */ new Map([[filter, [filteredListener]]])\n );\n }\n }\n static getAndDeleteFilteredSubscriptions(channel, filter, realListener) {\n if (!channel.filteredSubscriptions) {\n return [];\n }\n if (!realListener && filter) {\n return Array.from(channel.filteredSubscriptions.entries()).map(([key, filterMaps]) => {\n var _a2;\n let listenerMaps = filterMaps.get(filter);\n filterMaps.delete(filter);\n if (filterMaps.size === 0) {\n (_a2 = channel.filteredSubscriptions) == null ? void 0 : _a2.delete(key);\n }\n return listenerMaps;\n }).reduce(\n (prev, cur) => cur ? prev.concat(...cur) : prev,\n []\n );\n }\n if (!realListener || !channel.filteredSubscriptions.has(realListener)) {\n return [];\n }\n const realListenerMap = channel.filteredSubscriptions.get(realListener);\n if (!filter) {\n const listeners2 = Array.from(realListenerMap.values()).reduce((prev, cur) => prev.concat(...cur), []);\n channel.filteredSubscriptions.delete(realListener);\n return listeners2;\n }\n let listeners = realListenerMap.get(filter);\n realListenerMap.delete(filter);\n return listeners || [];\n }\n};\n\n// src/common/lib/client/defaultrealtime.ts\nvar _DefaultRealtime = class _DefaultRealtime extends baserealtime_default {\n // The public typings declare that this requires an argument to be passed, but since we want to emit a good error message in the case where a non-TypeScript user does not pass an argument, tell the compiler that this is possible so that it forces us to handle it.\n constructor(options) {\n var _a2;\n const MsgPack = _DefaultRealtime._MsgPack;\n if (!MsgPack) {\n throw new Error(\"Expected DefaultRealtime._MsgPack to have been set\");\n }\n super(\n defaults_default.objectifyOptions(options, true, \"Realtime\", logger_default.defaultLogger, __spreadProps(__spreadValues({}, allCommonModularPlugins), {\n Crypto: (_a2 = _DefaultRealtime.Crypto) != null ? _a2 : void 0,\n MsgPack,\n RealtimePresence: {\n RealtimePresence: realtimepresence_default,\n PresenceMessage: presencemessage_default,\n WirePresenceMessage\n },\n Annotations: {\n Annotation: annotation_default,\n WireAnnotation,\n RealtimeAnnotations: realtimeannotations_default,\n RestAnnotations: restannotations_default\n },\n WebSocketTransport: websockettransport_default,\n MessageInteractions: FilteredSubscriptions\n }))\n );\n }\n static get Crypto() {\n if (this._Crypto === null) {\n throw new Error(\"Encryption not enabled; use ably.encryption.js instead\");\n }\n return this._Crypto;\n }\n static set Crypto(newValue) {\n this._Crypto = newValue;\n }\n};\n_DefaultRealtime.Utils = utils_exports;\n_DefaultRealtime.ConnectionManager = connectionmanager_default;\n_DefaultRealtime.ProtocolMessage = protocolmessage_default;\n_DefaultRealtime._Crypto = null;\n_DefaultRealtime.Message = DefaultMessage;\n_DefaultRealtime.PresenceMessage = DefaultPresenceMessage;\n_DefaultRealtime.Annotation = DefaultAnnotation;\n_DefaultRealtime._MsgPack = null;\n// Used by tests\n_DefaultRealtime._Http = Http;\n_DefaultRealtime._PresenceMap = PresenceMap;\n_DefaultRealtime._MessageEncoding = MessageEncoding;\nvar DefaultRealtime = _DefaultRealtime;\n\n// src/platform/web/lib/util/hmac-sha256.ts\nvar uint8Array = Uint8Array;\nvar uint32Array = Uint32Array;\nvar pow = Math.pow;\nvar DEFAULT_STATE = new uint32Array(8);\nvar ROUND_CONSTANTS = [];\nvar M = new uint32Array(64);\nfunction getFractionalBits(n2) {\n return (n2 - (n2 | 0)) * pow(2, 32) | 0;\n}\nvar n = 2;\nvar nPrime = 0;\nwhile (nPrime < 64) {\n isPrime = true;\n for (factor = 2; factor <= n / 2; factor++) {\n if (n % factor === 0) {\n isPrime = false;\n }\n }\n if (isPrime) {\n if (nPrime < 8) {\n DEFAULT_STATE[nPrime] = getFractionalBits(pow(n, 1 / 2));\n }\n ROUND_CONSTANTS[nPrime] = getFractionalBits(pow(n, 1 / 3));\n nPrime++;\n }\n n++;\n}\nvar isPrime;\nvar factor;\nvar LittleEndian = !!new uint8Array(new uint32Array([1]).buffer)[0];\nfunction convertEndian(word) {\n if (LittleEndian) {\n return (\n // byte 1 -> byte 4\n word >>> 24 | // byte 2 -> byte 3\n (word >>> 16 & 255) << 8 | // byte 3 -> byte 2\n (word & 65280) << 8 | // byte 4 -> byte 1\n word << 24\n );\n } else {\n return word;\n }\n}\nfunction rightRotate(word, bits) {\n return word >>> bits | word << 32 - bits;\n}\nfunction sha256(data) {\n var STATE = DEFAULT_STATE.slice();\n var legth = data.length;\n var bitLength = legth * 8;\n var newBitLength = 512 - (bitLength + 64) % 512 - 1 + bitLength + 65;\n var bytes = new uint8Array(newBitLength / 8);\n var words = new uint32Array(bytes.buffer);\n bytes.set(data, 0);\n bytes[legth] = 128;\n words[words.length - 1] = convertEndian(bitLength);\n var round;\n for (var block = 0; block < newBitLength / 32; block += 16) {\n var workingState = STATE.slice();\n for (round = 0; round < 64; round++) {\n var MRound;\n if (round < 16) {\n MRound = convertEndian(words[block + round]);\n } else {\n var gamma0x = M[round - 15];\n var gamma1x = M[round - 2];\n MRound = M[round - 7] + M[round - 16] + (rightRotate(gamma0x, 7) ^ rightRotate(gamma0x, 18) ^ gamma0x >>> 3) + (rightRotate(gamma1x, 17) ^ rightRotate(gamma1x, 19) ^ gamma1x >>> 10);\n }\n M[round] = MRound |= 0;\n var t1 = (rightRotate(workingState[4], 6) ^ rightRotate(workingState[4], 11) ^ rightRotate(workingState[4], 25)) + (workingState[4] & workingState[5] ^ ~workingState[4] & workingState[6]) + workingState[7] + MRound + ROUND_CONSTANTS[round];\n var t2 = (rightRotate(workingState[0], 2) ^ rightRotate(workingState[0], 13) ^ rightRotate(workingState[0], 22)) + (workingState[0] & workingState[1] ^ workingState[2] & (workingState[0] ^ workingState[1]));\n for (var i = 7; i > 0; i--) {\n workingState[i] = workingState[i - 1];\n }\n workingState[0] = t1 + t2 | 0;\n workingState[4] = workingState[4] + t1 | 0;\n }\n for (round = 0; round < 8; round++) {\n STATE[round] = STATE[round] + workingState[round] | 0;\n }\n }\n return new uint8Array(\n new uint32Array(\n STATE.map(function(val) {\n return convertEndian(val);\n })\n ).buffer\n );\n}\nfunction hmac2(key, data) {\n if (key.length > 64)\n key = sha256(key);\n if (key.length < 64) {\n const tmp = new Uint8Array(64);\n tmp.set(key, 0);\n key = tmp;\n }\n var innerKey = new Uint8Array(64);\n var outerKey = new Uint8Array(64);\n for (var i = 0; i < 64; i++) {\n innerKey[i] = 54 ^ key[i];\n outerKey[i] = 92 ^ key[i];\n }\n var msg = new Uint8Array(data.length + 64);\n msg.set(innerKey, 0);\n msg.set(data, 64);\n var result = new Uint8Array(64 + 32);\n result.set(outerKey, 0);\n result.set(sha256(msg), 64);\n return sha256(result);\n}\n\n// src/platform/web/lib/util/bufferutils.ts\nvar BufferUtils = class {\n constructor() {\n this.base64CharSet = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\n this.hexCharSet = \"0123456789abcdef\";\n }\n // https://gist.githubusercontent.com/jonleighton/958841/raw/f200e30dfe95212c0165ccf1ae000ca51e9de803/gistfile1.js\n uint8ViewToBase64(bytes) {\n let base64 = \"\";\n const encodings = this.base64CharSet;\n const byteLength = bytes.byteLength;\n const byteRemainder = byteLength % 3;\n const mainLength = byteLength - byteRemainder;\n let a, b, c, d;\n let chunk;\n for (let i = 0; i < mainLength; i = i + 3) {\n chunk = bytes[i] << 16 | bytes[i + 1] << 8 | bytes[i + 2];\n a = (chunk & 16515072) >> 18;\n b = (chunk & 258048) >> 12;\n c = (chunk & 4032) >> 6;\n d = chunk & 63;\n base64 += encodings[a] + encodings[b] + encodings[c] + encodings[d];\n }\n if (byteRemainder == 1) {\n chunk = bytes[mainLength];\n a = (chunk & 252) >> 2;\n b = (chunk & 3) << 4;\n base64 += encodings[a] + encodings[b] + \"==\";\n } else if (byteRemainder == 2) {\n chunk = bytes[mainLength] << 8 | bytes[mainLength + 1];\n a = (chunk & 64512) >> 10;\n b = (chunk & 1008) >> 4;\n c = (chunk & 15) << 2;\n base64 += encodings[a] + encodings[b] + encodings[c] + \"=\";\n }\n return base64;\n }\n base64ToArrayBuffer(base64) {\n const binary_string = atob == null ? void 0 : atob(base64);\n const len = binary_string.length;\n const bytes = new Uint8Array(len);\n for (let i = 0; i < len; i++) {\n const ascii = binary_string.charCodeAt(i);\n bytes[i] = ascii;\n }\n return this.toArrayBuffer(bytes);\n }\n isBuffer(buffer) {\n return buffer instanceof ArrayBuffer || ArrayBuffer.isView(buffer);\n }\n toBuffer(buffer) {\n if (!ArrayBuffer) {\n throw new Error(\"Can't convert to Buffer: browser does not support the necessary types\");\n }\n if (buffer instanceof ArrayBuffer) {\n return new Uint8Array(buffer);\n }\n if (ArrayBuffer.isView(buffer)) {\n return new Uint8Array(this.toArrayBuffer(buffer));\n }\n throw new Error(\"BufferUtils.toBuffer expected an ArrayBuffer or a view onto one\");\n }\n toArrayBuffer(buffer) {\n if (!ArrayBuffer) {\n throw new Error(\"Can't convert to ArrayBuffer: browser does not support the necessary types\");\n }\n if (buffer instanceof ArrayBuffer) {\n return buffer;\n }\n if (ArrayBuffer.isView(buffer)) {\n return buffer.buffer.slice(buffer.byteOffset, buffer.byteOffset + buffer.byteLength);\n }\n throw new Error(\"BufferUtils.toArrayBuffer expected an ArrayBuffer or a view onto one\");\n }\n base64Encode(buffer) {\n return this.uint8ViewToBase64(this.toBuffer(buffer));\n }\n base64UrlEncode(buffer) {\n return this.base64Encode(buffer).replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=+$/, \"\");\n }\n base64Decode(str) {\n if (ArrayBuffer && Platform.Config.atob) {\n return this.base64ToArrayBuffer(str);\n } else {\n throw new Error(\"Expected ArrayBuffer to exist and Platform.Config.atob to be configured\");\n }\n }\n hexEncode(buffer) {\n const uint8Array2 = this.toBuffer(buffer);\n return uint8Array2.reduce((accum, byte) => accum + byte.toString(16).padStart(2, \"0\"), \"\");\n }\n hexDecode(hexEncodedBytes) {\n if (hexEncodedBytes.length % 2 !== 0) {\n throw new Error(\"Can't create a byte array from a hex string of odd length\");\n }\n const uint8Array2 = new Uint8Array(hexEncodedBytes.length / 2);\n for (let i = 0; i < uint8Array2.length; i++) {\n uint8Array2[i] = parseInt(hexEncodedBytes.slice(2 * i, 2 * (i + 1)), 16);\n }\n return this.toArrayBuffer(uint8Array2);\n }\n utf8Encode(string) {\n if (Platform.Config.TextEncoder) {\n const encodedByteArray = new Platform.Config.TextEncoder().encode(string);\n return this.toArrayBuffer(encodedByteArray);\n } else {\n throw new Error(\"Expected TextEncoder to be configured\");\n }\n }\n /* For utf8 decoding we apply slightly stricter input validation than to\n * hexEncode/base64Encode/etc: in those we accept anything that Buffer.from\n * can take (in particular allowing strings, which are just interpreted as\n * binary); here we ensure that the input is actually a buffer since trying\n * to utf8-decode a string to another string is almost certainly a mistake */\n utf8Decode(buffer) {\n if (!this.isBuffer(buffer)) {\n throw new Error(\"Expected input of utf8decode to be an arraybuffer or typed array\");\n }\n if (TextDecoder) {\n return new TextDecoder().decode(buffer);\n } else {\n throw new Error(\"Expected TextDecoder to be configured\");\n }\n }\n areBuffersEqual(buffer1, buffer2) {\n if (!buffer1 || !buffer2)\n return false;\n const arrayBuffer1 = this.toArrayBuffer(buffer1);\n const arrayBuffer2 = this.toArrayBuffer(buffer2);\n if (arrayBuffer1.byteLength != arrayBuffer2.byteLength)\n return false;\n const bytes1 = new Uint8Array(arrayBuffer1);\n const bytes2 = new Uint8Array(arrayBuffer2);\n for (var i = 0; i < bytes1.length; i++) {\n if (bytes1[i] != bytes2[i])\n return false;\n }\n return true;\n }\n byteLength(buffer) {\n if (buffer instanceof ArrayBuffer || ArrayBuffer.isView(buffer)) {\n return buffer.byteLength;\n }\n return -1;\n }\n arrayBufferViewToBuffer(arrayBufferView) {\n return this.toArrayBuffer(arrayBufferView);\n }\n concat(buffers) {\n const sumLength = buffers.reduce((acc, v) => acc + v.byteLength, 0);\n const result = new Uint8Array(sumLength);\n let offset = 0;\n for (const buffer of buffers) {\n const uint8Array2 = this.toBuffer(buffer);\n result.set(uint8Array2, offset);\n offset += uint8Array2.byteLength;\n }\n return result.buffer;\n }\n sha256(message) {\n const hash = sha256(this.toBuffer(message));\n return this.toArrayBuffer(hash);\n }\n hmacSha256(message, key) {\n const hash = hmac2(this.toBuffer(key), this.toBuffer(message));\n return this.toArrayBuffer(hash);\n }\n};\nvar bufferutils_default = new BufferUtils();\n\n// src/platform/web/lib/util/crypto.ts\nvar createCryptoClass = function(config, bufferUtils) {\n var DEFAULT_ALGORITHM = \"aes\";\n var DEFAULT_KEYLENGTH = 256;\n var DEFAULT_MODE = \"cbc\";\n var DEFAULT_BLOCKLENGTH = 16;\n function validateCipherParams(params) {\n if (params.algorithm === \"aes\" && params.mode === \"cbc\") {\n if (params.keyLength === 128 || params.keyLength === 256) {\n return;\n }\n throw new Error(\n \"Unsupported key length \" + params.keyLength + \" for aes-cbc encryption. Encryption key must be 128 or 256 bits (16 or 32 ASCII characters)\"\n );\n }\n }\n function normaliseBase64(string) {\n return string.replace(\"_\", \"/\").replace(\"-\", \"+\");\n }\n function isCipherParams(params) {\n return params instanceof CipherParams;\n }\n class CipherParams {\n constructor(algorithm, keyLength, mode, key) {\n this.algorithm = algorithm;\n this.keyLength = keyLength;\n this.mode = mode;\n this.key = key;\n }\n }\n class Crypto2 {\n /**\n * Obtain a complete CipherParams instance from the provided params, filling\n * in any not provided with default values, calculating a keyLength from\n * the supplied key, and validating the result.\n * @param params an object containing at a minimum a `key` key with value the\n * key, as either a binary or a base64-encoded string.\n * May optionally also contain: algorithm (defaults to AES),\n * mode (defaults to 'cbc')\n */\n static getDefaultParams(params) {\n var key;\n if (!params.key) {\n throw new Error(\"Crypto.getDefaultParams: a key is required\");\n }\n if (typeof params.key === \"string\") {\n key = bufferUtils.toArrayBuffer(bufferUtils.base64Decode(normaliseBase64(params.key)));\n } else if (params.key instanceof ArrayBuffer) {\n key = params.key;\n } else {\n key = bufferUtils.toArrayBuffer(params.key);\n }\n var algorithm = params.algorithm || DEFAULT_ALGORITHM;\n var keyLength = key.byteLength * 8;\n var mode = params.mode || DEFAULT_MODE;\n var cipherParams = new CipherParams(algorithm, keyLength, mode, key);\n if (params.keyLength && params.keyLength !== cipherParams.keyLength) {\n throw new Error(\n \"Crypto.getDefaultParams: a keyLength of \" + params.keyLength + \" was specified, but the key actually has length \" + cipherParams.keyLength\n );\n }\n validateCipherParams(cipherParams);\n return cipherParams;\n }\n /**\n * Generate a random encryption key from the supplied keylength (or the\n * default keyLength if none supplied) as an ArrayBuffer\n * @param keyLength (optional) the required keyLength in bits\n */\n static async generateRandomKey(keyLength) {\n try {\n return config.getRandomArrayBuffer((keyLength || DEFAULT_KEYLENGTH) / 8);\n } catch (err) {\n throw new ErrorInfo(\"Failed to generate random key: \" + err.message, 400, 5e4, err);\n }\n }\n /**\n * Internal; get a ChannelCipher instance based on the given cipherParams\n * @param params either a CipherParams instance or some subset of its\n * fields that includes a key\n */\n static getCipher(params, logger) {\n var _a2;\n var cipherParams = isCipherParams(params) ? params : this.getDefaultParams(params);\n return {\n cipherParams,\n cipher: new CBCCipher(cipherParams, (_a2 = params.iv) != null ? _a2 : null, logger)\n };\n }\n }\n Crypto2.CipherParams = CipherParams;\n Crypto2;\n class CBCCipher {\n constructor(params, iv, logger) {\n this.logger = logger;\n if (!crypto.subtle) {\n if (isSecureContext) {\n throw new Error(\n \"Crypto operations are not possible since the browser\\u2019s SubtleCrypto class is unavailable (reason unknown).\"\n );\n } else {\n throw new Error(\n \"Crypto operations are is not possible since the current environment is a non-secure context and hence the browser\\u2019s SubtleCrypto class is not available.\"\n );\n }\n }\n this.algorithm = params.algorithm + \"-\" + String(params.keyLength) + \"-\" + params.mode;\n this.webCryptoAlgorithm = params.algorithm + \"-\" + params.mode;\n this.key = bufferUtils.toArrayBuffer(params.key);\n this.iv = iv ? bufferUtils.toArrayBuffer(iv) : null;\n }\n concat(buffer1, buffer2) {\n const output = new ArrayBuffer(buffer1.byteLength + buffer2.byteLength);\n const outputView = new DataView(output);\n const buffer1View = new DataView(bufferUtils.toArrayBuffer(buffer1));\n for (let i = 0; i < buffer1View.byteLength; i++) {\n outputView.setInt8(i, buffer1View.getInt8(i));\n }\n const buffer2View = new DataView(bufferUtils.toArrayBuffer(buffer2));\n for (let i = 0; i < buffer2View.byteLength; i++) {\n outputView.setInt8(buffer1View.byteLength + i, buffer2View.getInt8(i));\n }\n return output;\n }\n async encrypt(plaintext) {\n logger_default.logAction(this.logger, logger_default.LOG_MICRO, \"CBCCipher.encrypt()\", \"\");\n const iv = await this.getIv();\n const cryptoKey = await crypto.subtle.importKey(\"raw\", this.key, this.webCryptoAlgorithm, false, [\"encrypt\"]);\n const ciphertext = await crypto.subtle.encrypt({ name: this.webCryptoAlgorithm, iv }, cryptoKey, plaintext);\n return this.concat(iv, ciphertext);\n }\n async decrypt(ciphertext) {\n logger_default.logAction(this.logger, logger_default.LOG_MICRO, \"CBCCipher.decrypt()\", \"\");\n const ciphertextArrayBuffer = bufferUtils.toArrayBuffer(ciphertext);\n const iv = ciphertextArrayBuffer.slice(0, DEFAULT_BLOCKLENGTH);\n const ciphertextBody = ciphertextArrayBuffer.slice(DEFAULT_BLOCKLENGTH);\n const cryptoKey = await crypto.subtle.importKey(\"raw\", this.key, this.webCryptoAlgorithm, false, [\"decrypt\"]);\n return crypto.subtle.decrypt({ name: this.webCryptoAlgorithm, iv }, cryptoKey, ciphertextBody);\n }\n async getIv() {\n if (this.iv) {\n var iv = this.iv;\n this.iv = null;\n return iv;\n }\n const randomBlock = await config.getRandomArrayBuffer(DEFAULT_BLOCKLENGTH);\n return bufferUtils.toArrayBuffer(randomBlock);\n }\n }\n return Crypto2;\n};\n\n// src/common/constants/XHRStates.ts\nvar XHRStates = /* @__PURE__ */ ((XHRStates2) => {\n XHRStates2[XHRStates2[\"REQ_SEND\"] = 0] = \"REQ_SEND\";\n XHRStates2[XHRStates2[\"REQ_RECV\"] = 1] = \"REQ_RECV\";\n XHRStates2[XHRStates2[\"REQ_RECV_POLL\"] = 2] = \"REQ_RECV_POLL\";\n XHRStates2[XHRStates2[\"REQ_RECV_STREAM\"] = 3] = \"REQ_RECV_STREAM\";\n return XHRStates2;\n})(XHRStates || {});\nvar XHRStates_default = XHRStates;\n\n// src/platform/web/lib/http/http.ts\nfunction createMissingImplementationError() {\n return new ErrorInfo(\n \"No HTTP request plugin provided. Provide at least one of the FetchRequest or XHRRequest plugins.\",\n 400,\n 4e4\n );\n}\nvar _a;\nvar Http2 = (_a = class {\n constructor(client) {\n this.checksInProgress = null;\n this.checkConnectivity = void 0;\n this.supportsAuthHeaders = false;\n this.supportsLinkHeaders = false;\n var _a2;\n this.client = client != null ? client : null;\n const connectivityCheckUrl = (client == null ? void 0 : client.options.connectivityCheckUrl) || defaults_default.connectivityCheckUrl;\n const connectivityCheckParams = (_a2 = client == null ? void 0 : client.options.connectivityCheckParams) != null ? _a2 : null;\n const connectivityUrlIsDefault = !(client == null ? void 0 : client.options.connectivityCheckUrl);\n const requestImplementations = __spreadValues(__spreadValues({}, Http2.bundledRequestImplementations), client == null ? void 0 : client._additionalHTTPRequestImplementations);\n const xhrRequestImplementation = requestImplementations.XHRRequest;\n const fetchRequestImplementation = requestImplementations.FetchRequest;\n const hasImplementation = !!(xhrRequestImplementation || fetchRequestImplementation);\n if (!hasImplementation) {\n throw createMissingImplementationError();\n }\n if (Platform.Config.xhrSupported && xhrRequestImplementation) {\n this.supportsAuthHeaders = true;\n this.Request = async function(method, uri, headers, params, body) {\n return new Promise((resolve) => {\n var _a3;\n const req = xhrRequestImplementation.createRequest(\n uri,\n headers,\n params,\n body,\n XHRStates_default.REQ_SEND,\n (_a3 = client && client.options.timeouts) != null ? _a3 : null,\n this.logger,\n method\n );\n req.once(\n \"complete\",\n (error, body2, headers2, unpacked, statusCode) => resolve({ error, body: body2, headers: headers2, unpacked, statusCode })\n );\n req.exec();\n });\n };\n if (client == null ? void 0 : client.options.disableConnectivityCheck) {\n this.checkConnectivity = async function() {\n return true;\n };\n } else {\n this.checkConnectivity = async function() {\n var _a3;\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MICRO,\n \"(XHRRequest)Http.checkConnectivity()\",\n \"Sending; \" + connectivityCheckUrl\n );\n const requestResult = await this.doUri(\n HttpMethods_default.Get,\n connectivityCheckUrl,\n null,\n null,\n connectivityCheckParams\n );\n let result = false;\n if (!connectivityUrlIsDefault) {\n result = !requestResult.error && isSuccessCode(requestResult.statusCode);\n } else {\n result = !requestResult.error && ((_a3 = requestResult.body) == null ? void 0 : _a3.replace(/\\n/, \"\")) == \"yes\";\n }\n logger_default.logAction(this.logger, logger_default.LOG_MICRO, \"(XHRRequest)Http.checkConnectivity()\", \"Result: \" + result);\n return result;\n };\n }\n } else if (Platform.Config.fetchSupported && fetchRequestImplementation) {\n this.supportsAuthHeaders = true;\n this.Request = async (method, uri, headers, params, body) => {\n return fetchRequestImplementation(method, client != null ? client : null, uri, headers, params, body);\n };\n if (client == null ? void 0 : client.options.disableConnectivityCheck) {\n this.checkConnectivity = async function() {\n return true;\n };\n } else {\n this.checkConnectivity = async function() {\n var _a3;\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MICRO,\n \"(Fetch)Http.checkConnectivity()\",\n \"Sending; \" + connectivityCheckUrl\n );\n const requestResult = await this.doUri(HttpMethods_default.Get, connectivityCheckUrl, null, null, null);\n const result = !requestResult.error && ((_a3 = requestResult.body) == null ? void 0 : _a3.replace(/\\n/, \"\")) == \"yes\";\n logger_default.logAction(this.logger, logger_default.LOG_MICRO, \"(Fetch)Http.checkConnectivity()\", \"Result: \" + result);\n return result;\n };\n }\n } else {\n this.Request = async () => {\n const error = hasImplementation ? new PartialErrorInfo(\"no supported HTTP transports available\", null, 400) : createMissingImplementationError();\n return { error };\n };\n }\n }\n get logger() {\n var _a2, _b;\n return (_b = (_a2 = this.client) == null ? void 0 : _a2.logger) != null ? _b : logger_default.defaultLogger;\n }\n async doUri(method, uri, headers, body, params) {\n if (!this.Request) {\n return { error: new PartialErrorInfo(\"Request invoked before assigned to\", null, 500) };\n }\n return this.Request(method, uri, headers, params, body);\n }\n shouldFallback(errorInfo) {\n const statusCode = errorInfo.statusCode;\n return statusCode === 408 && !errorInfo.code || statusCode === 400 && !errorInfo.code || statusCode >= 500 && statusCode <= 504;\n }\n}, _a.methods = [HttpMethods_default.Get, HttpMethods_default.Delete, HttpMethods_default.Post, HttpMethods_default.Put, HttpMethods_default.Patch], _a.methodsWithoutBody = [HttpMethods_default.Get, HttpMethods_default.Delete], _a.methodsWithBody = [HttpMethods_default.Post, HttpMethods_default.Put, HttpMethods_default.Patch], _a);\nvar http_default = Http2;\n\n// src/platform/web/lib/util/webstorage.ts\nvar test = \"ablyjs-storage-test\";\nvar globalObject3 = typeof global !== \"undefined\" ? global : typeof window !== \"undefined\" ? window : self;\nvar Webstorage = class {\n constructor() {\n try {\n globalObject3.sessionStorage.setItem(test, test);\n globalObject3.sessionStorage.removeItem(test);\n this.sessionSupported = true;\n } catch (e) {\n this.sessionSupported = false;\n }\n try {\n globalObject3.localStorage.setItem(test, test);\n globalObject3.localStorage.removeItem(test);\n this.localSupported = true;\n } catch (e) {\n this.localSupported = false;\n }\n }\n get(name) {\n return this._get(name, false);\n }\n getSession(name) {\n return this._get(name, true);\n }\n remove(name) {\n return this._remove(name, false);\n }\n removeSession(name) {\n return this._remove(name, true);\n }\n set(name, value, ttl) {\n return this._set(name, value, ttl, false);\n }\n setSession(name, value, ttl) {\n return this._set(name, value, ttl, true);\n }\n _set(name, value, ttl, session) {\n const wrappedValue = { value };\n if (ttl) {\n wrappedValue.expires = Date.now() + ttl;\n }\n return this.storageInterface(session).setItem(name, JSON.stringify(wrappedValue));\n }\n _get(name, session) {\n if (session && !this.sessionSupported)\n throw new Error(\"Session Storage not supported\");\n if (!session && !this.localSupported)\n throw new Error(\"Local Storage not supported\");\n const rawItem = this.storageInterface(session).getItem(name);\n if (!rawItem)\n return null;\n const wrappedValue = JSON.parse(rawItem);\n if (wrappedValue.expires && wrappedValue.expires < Date.now()) {\n this.storageInterface(session).removeItem(name);\n return null;\n }\n return wrappedValue.value;\n }\n _remove(name, session) {\n return this.storageInterface(session).removeItem(name);\n }\n storageInterface(session) {\n return session ? globalObject3.sessionStorage : globalObject3.localStorage;\n }\n};\nvar webstorage_default = new Webstorage();\n\n// src/platform/web/config.ts\nvar globalObject4 = getGlobalObject();\nvar isVercelEdgeRuntime = typeof EdgeRuntime === \"string\";\nif (typeof Window === \"undefined\" && typeof WorkerGlobalScope === \"undefined\" && !isVercelEdgeRuntime) {\n console.log(\n \"Warning: this distribution of Ably is intended for browsers. On nodejs, please use the 'ably' package on npm\"\n );\n}\nfunction allowComet() {\n const loc = globalObject4.location;\n return !globalObject4.WebSocket || !loc || !loc.origin || loc.origin.indexOf(\"http\") > -1;\n}\nfunction isWebWorkerContext() {\n if (typeof WorkerGlobalScope !== \"undefined\" && self instanceof WorkerGlobalScope) {\n return true;\n } else {\n return false;\n }\n}\nvar userAgent = globalObject4.navigator && globalObject4.navigator.userAgent.toString();\nvar currentUrl = globalObject4.location && globalObject4.location.href;\nvar Config = {\n agent: \"browser\",\n logTimestamps: true,\n userAgent,\n currentUrl,\n binaryType: \"arraybuffer\",\n WebSocket: globalObject4.WebSocket,\n fetchSupported: !!globalObject4.fetch,\n xhrSupported: globalObject4.XMLHttpRequest && \"withCredentials\" in new XMLHttpRequest(),\n allowComet: allowComet(),\n useProtocolHeartbeats: true,\n supportsBinary: !!globalObject4.TextDecoder,\n /* Per Paddy (https://ably-real-time.slack.com/archives/CURL4U2FP/p1705674537763479) web intentionally prefers JSON to MessagePack:\n *\n * > browsers' support for binary types in general was historically poor, and JSON transport performance is significantly better in a browser than msgpack. In modern browsers then binary is supported consistently, but I'd still expect that JSON encode/decode performance is dramatically better than msgpack in a browser.\n */\n preferBinary: false,\n ArrayBuffer: globalObject4.ArrayBuffer,\n atob: globalObject4.atob,\n nextTick: typeof globalObject4.queueMicrotask === \"function\" ? (f) => globalObject4.queueMicrotask(f) : (f) => Promise.resolve().then(f),\n addEventListener: globalObject4.addEventListener,\n inspect: JSON.stringify,\n stringByteSize: function(str) {\n return globalObject4.TextDecoder && new globalObject4.TextEncoder().encode(str).length || str.length;\n },\n TextEncoder: globalObject4.TextEncoder,\n TextDecoder: globalObject4.TextDecoder,\n getRandomArrayBuffer: async function(byteLength) {\n const byteArray = new Uint8Array(byteLength);\n globalObject4.crypto.getRandomValues(byteArray);\n return byteArray.buffer;\n },\n isWebworker: isWebWorkerContext(),\n push: {\n platform: \"browser\" /* Browser */,\n formFactor: \"desktop\" /* Desktop */,\n storage: webstorage_default\n }\n};\nvar config_default = Config;\n\n// src/common/lib/transport/comettransport.ts\nfunction shouldBeErrorAction(err) {\n const UNRESOLVABLE_ERROR_CODES = [80015, 80017, 80030];\n if (err.code) {\n if (auth_default.isTokenErr(err))\n return false;\n if (UNRESOLVABLE_ERROR_CODES.includes(err.code))\n return true;\n return err.code >= 4e4 && err.code < 5e4;\n } else {\n return false;\n }\n}\nfunction protocolMessageFromRawError(err) {\n if (shouldBeErrorAction(err)) {\n return [fromValues({ action: actions.ERROR, error: err })];\n } else {\n return [fromValues({ action: actions.DISCONNECTED, error: err })];\n }\n}\nvar CometTransport = class extends transport_default {\n constructor(connectionManager, auth, params) {\n super(\n connectionManager,\n auth,\n params,\n /* binary not supported for comet so force JSON protocol */\n true\n );\n /* Historical comment, back from when we supported JSONP:\n *\n * > For comet, we could do the auth update by aborting the current recv and\n * > starting a new one with the new token, that'd be sufficient for realtime.\n * > Problem is JSONP - you can't cancel truly abort a recv once started. So\n * > we need to send an AUTH for jsonp. In which case it's simpler to keep all\n * > comet transports the same and do it for all of them. So we send the AUTH\n * > instead, and don't need to abort the recv\n *\n * Now that we’ve dropped JSONP support, we may be able to revisit the above;\n * see https://github.com/ably/ably-js/issues/1214.\n */\n this.onAuthUpdated = (tokenDetails) => {\n this.authParams = { access_token: tokenDetails.token };\n };\n this.stream = \"stream\" in params ? params.stream : true;\n this.sendRequest = null;\n this.recvRequest = null;\n this.pendingCallback = null;\n this.pendingItems = null;\n }\n connect() {\n logger_default.logAction(this.logger, logger_default.LOG_MINOR, \"CometTransport.connect()\", \"starting\");\n transport_default.prototype.connect.call(this);\n const params = this.params;\n const options = params.options;\n const host = params.host || options.primaryDomain;\n const port = defaults_default.getPort(options);\n const cometScheme = options.tls ? \"https://\" : \"http://\";\n this.baseUri = cometScheme + host + \":\" + port + \"/comet/\";\n const connectUri = this.baseUri + \"connect\";\n logger_default.logAction(this.logger, logger_default.LOG_MINOR, \"CometTransport.connect()\", \"uri: \" + connectUri);\n whenPromiseSettles(this.auth.getAuthParams(), (err, authParams) => {\n if (err) {\n this.disconnect(err);\n return;\n }\n if (this.isDisposed) {\n return;\n }\n this.authParams = authParams;\n const connectParams = this.params.getConnectParams(authParams);\n if (\"stream\" in connectParams)\n this.stream = connectParams.stream;\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MINOR,\n \"CometTransport.connect()\",\n \"connectParams:\" + toQueryString(connectParams)\n );\n let preconnected = false;\n const connectRequest = this.recvRequest = this.createRequest(\n connectUri,\n null,\n connectParams,\n null,\n this.stream ? XHRStates_default.REQ_RECV_STREAM : XHRStates_default.REQ_RECV\n );\n connectRequest.on(\"data\", (data) => {\n if (!this.recvRequest) {\n return;\n }\n if (!preconnected) {\n preconnected = true;\n this.emit(\"preconnect\");\n }\n this.onData(data);\n });\n connectRequest.on(\"complete\", (err2) => {\n if (!this.recvRequest) {\n err2 = err2 || new ErrorInfo(\"Request cancelled\", 80003, 400);\n }\n this.recvRequest = null;\n if (!preconnected && !err2) {\n preconnected = true;\n this.emit(\"preconnect\");\n }\n this.onActivity();\n if (err2) {\n if (err2.code) {\n this.onData(protocolMessageFromRawError(err2));\n } else {\n this.disconnect(err2);\n }\n return;\n }\n Platform.Config.nextTick(() => {\n this.recv();\n });\n });\n connectRequest.exec();\n });\n }\n requestClose() {\n logger_default.logAction(this.logger, logger_default.LOG_MINOR, \"CometTransport.requestClose()\");\n this._requestCloseOrDisconnect(true);\n }\n requestDisconnect() {\n logger_default.logAction(this.logger, logger_default.LOG_MINOR, \"CometTransport.requestDisconnect()\");\n this._requestCloseOrDisconnect(false);\n }\n _requestCloseOrDisconnect(closing) {\n const closeOrDisconnectUri = closing ? this.closeUri : this.disconnectUri;\n if (closeOrDisconnectUri) {\n const request = this.createRequest(closeOrDisconnectUri, null, this.authParams, null, XHRStates_default.REQ_SEND);\n request.on(\"complete\", (err) => {\n if (err) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_ERROR,\n \"CometTransport.request\" + (closing ? \"Close()\" : \"Disconnect()\"),\n \"request returned err = \" + inspectError(err)\n );\n this.finish(\"disconnected\", err);\n }\n });\n request.exec();\n }\n }\n dispose() {\n logger_default.logAction(this.logger, logger_default.LOG_MINOR, \"CometTransport.dispose()\", \"\");\n if (!this.isDisposed) {\n this.isDisposed = true;\n if (this.recvRequest) {\n logger_default.logAction(this.logger, logger_default.LOG_MINOR, \"CometTransport.dispose()\", \"aborting recv request\");\n this.recvRequest.abort();\n this.recvRequest = null;\n }\n this.finish(\"disconnected\", connectionerrors_default.disconnected());\n Platform.Config.nextTick(() => {\n this.emit(\"disposed\");\n });\n }\n }\n onConnect(message) {\n var _a2;\n if (this.isDisposed) {\n return;\n }\n const connectionStr = (_a2 = message.connectionDetails) == null ? void 0 : _a2.connectionKey;\n transport_default.prototype.onConnect.call(this, message);\n const baseConnectionUri = this.baseUri + connectionStr;\n logger_default.logAction(this.logger, logger_default.LOG_MICRO, \"CometTransport.onConnect()\", \"baseUri = \" + baseConnectionUri);\n this.sendUri = baseConnectionUri + \"/send\";\n this.recvUri = baseConnectionUri + \"/recv\";\n this.closeUri = baseConnectionUri + \"/close\";\n this.disconnectUri = baseConnectionUri + \"/disconnect\";\n }\n send(message) {\n if (this.sendRequest) {\n this.pendingItems = this.pendingItems || [];\n this.pendingItems.push(message);\n return;\n }\n const pendingItems = this.pendingItems || [];\n pendingItems.push(message);\n this.pendingItems = null;\n this.sendItems(pendingItems);\n }\n sendAnyPending() {\n const pendingItems = this.pendingItems;\n if (!pendingItems) {\n return;\n }\n this.pendingItems = null;\n this.sendItems(pendingItems);\n }\n sendItems(items) {\n const sendRequest = this.sendRequest = this.createRequest(\n this.sendUri,\n null,\n this.authParams,\n this.encodeRequest(items),\n XHRStates_default.REQ_SEND\n );\n sendRequest.on(\"complete\", (err, data) => {\n if (err)\n logger_default.logAction(\n this.logger,\n logger_default.LOG_ERROR,\n \"CometTransport.sendItems()\",\n \"on complete: err = \" + inspectError(err)\n );\n this.sendRequest = null;\n if (err) {\n if (err.code) {\n this.onData(protocolMessageFromRawError(err));\n } else {\n this.disconnect(err);\n }\n return;\n }\n if (data) {\n this.onData(data);\n }\n if (this.pendingItems) {\n Platform.Config.nextTick(() => {\n if (!this.sendRequest) {\n this.sendAnyPending();\n }\n });\n }\n });\n sendRequest.exec();\n }\n recv() {\n if (this.recvRequest)\n return;\n if (!this.isConnected)\n return;\n const recvRequest = this.recvRequest = this.createRequest(\n this.recvUri,\n null,\n this.authParams,\n null,\n this.stream ? XHRStates_default.REQ_RECV_STREAM : XHRStates_default.REQ_RECV_POLL\n );\n recvRequest.on(\"data\", (data) => {\n this.onData(data);\n });\n recvRequest.on(\"complete\", (err) => {\n this.recvRequest = null;\n this.onActivity();\n if (err) {\n if (err.code) {\n this.onData(protocolMessageFromRawError(err));\n } else {\n this.disconnect(err);\n }\n return;\n }\n Platform.Config.nextTick(() => {\n this.recv();\n });\n });\n recvRequest.exec();\n }\n onData(responseData) {\n try {\n const items = this.decodeResponse(responseData);\n if (items && items.length)\n for (let i = 0; i < items.length; i++)\n this.onProtocolMessage(\n fromDeserialized(\n items[i],\n this.connectionManager.realtime._RealtimePresence,\n this.connectionManager.realtime._Annotations,\n this.connectionManager.realtime._objectsPlugin\n )\n );\n } catch (e) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_ERROR,\n \"CometTransport.onData()\",\n \"Unexpected exception handing channel event: \" + e.stack\n );\n }\n }\n encodeRequest(requestItems) {\n return JSON.stringify(requestItems);\n }\n decodeResponse(responseData) {\n if (typeof responseData == \"string\")\n return JSON.parse(responseData);\n return responseData;\n }\n};\nvar comettransport_default = CometTransport;\n\n// src/platform/web/lib/http/request/xhrrequest.ts\nfunction isAblyError(responseBody, headers) {\n return allToLowerCase(keysArray(headers)).includes(\"x-ably-errorcode\");\n}\nfunction getAblyError(responseBody, headers) {\n if (isAblyError(responseBody, headers)) {\n return responseBody.error && ErrorInfo.fromValues(responseBody.error);\n }\n}\nvar noop3 = function() {\n};\nvar idCounter = 0;\nvar pendingRequests = {};\nfunction getHeader(xhr, header) {\n return xhr.getResponseHeader && xhr.getResponseHeader(header);\n}\nfunction isEncodingChunked(xhr) {\n return xhr.getResponseHeader && (xhr.getResponseHeader(\"transfer-encoding\") || !xhr.getResponseHeader(\"content-length\"));\n}\nfunction getHeadersAsObject(xhr) {\n const headerPairs = xhr.getAllResponseHeaders().trim().split(\"\\r\\n\");\n const headers = {};\n for (let i = 0; i < headerPairs.length; i++) {\n const parts = headerPairs[i].split(\":\").map((x) => x.trim());\n headers[parts[0].toLowerCase()] = parts[1];\n }\n return headers;\n}\nvar XHRRequest = class _XHRRequest extends eventemitter_default {\n constructor(uri, headers, params, body, requestMode, timeouts, logger, method) {\n super(logger);\n params = params || {};\n params.rnd = cheapRandStr();\n this.uri = uri + toQueryString(params);\n this.headers = headers || {};\n this.body = body;\n this.method = method ? method.toUpperCase() : isNil(body) ? \"GET\" : \"POST\";\n this.requestMode = requestMode;\n this.timeouts = timeouts;\n this.timedOut = false;\n this.requestComplete = false;\n this.id = String(++idCounter);\n pendingRequests[this.id] = this;\n }\n static createRequest(uri, headers, params, body, requestMode, timeouts, logger, method) {\n const _timeouts = timeouts || defaults_default.TIMEOUTS;\n return new _XHRRequest(\n uri,\n headers,\n copy(params),\n body,\n requestMode,\n _timeouts,\n logger,\n method\n );\n }\n complete(err, body, headers, unpacked, statusCode) {\n if (!this.requestComplete) {\n this.requestComplete = true;\n if (!err && body) {\n this.emit(\"data\", body);\n }\n this.emit(\"complete\", err, body, headers, unpacked, statusCode);\n this.dispose();\n }\n }\n abort() {\n this.dispose();\n }\n exec() {\n let headers = this.headers;\n const timeout = this.requestMode == XHRStates_default.REQ_SEND ? this.timeouts.httpRequestTimeout : this.timeouts.recvTimeout, timer = this.timer = setTimeout(() => {\n this.timedOut = true;\n xhr.abort();\n }, timeout), method = this.method, xhr = this.xhr = new XMLHttpRequest(), accept = headers[\"accept\"];\n let body = this.body;\n let responseType = \"text\";\n if (!accept) {\n headers[\"accept\"] = \"application/json\";\n } else if (accept.indexOf(\"application/x-msgpack\") === 0) {\n responseType = \"arraybuffer\";\n }\n if (body) {\n const contentType = headers[\"content-type\"] || (headers[\"content-type\"] = \"application/json\");\n if (contentType.indexOf(\"application/json\") > -1 && typeof body != \"string\")\n body = JSON.stringify(body);\n }\n xhr.open(method, this.uri, true);\n xhr.responseType = responseType;\n if (\"authorization\" in headers) {\n xhr.withCredentials = true;\n }\n for (const h in headers)\n xhr.setRequestHeader(h, headers[h]);\n const errorHandler = (errorEvent, message, code, statusCode2) => {\n var _a2;\n let errorMessage = message + \" (event type: \" + errorEvent.type + \")\";\n if ((_a2 = this == null ? void 0 : this.xhr) == null ? void 0 : _a2.statusText)\n errorMessage += \", current statusText is \" + this.xhr.statusText;\n logger_default.logAction(this.logger, logger_default.LOG_ERROR, \"Request.on\" + errorEvent.type + \"()\", errorMessage);\n this.complete(new PartialErrorInfo(errorMessage, code, statusCode2));\n };\n xhr.onerror = (errorEvent) => {\n errorHandler(errorEvent, \"XHR error occurred\", null, 400);\n };\n xhr.onabort = (errorEvent) => {\n if (this.timedOut) {\n errorHandler(errorEvent, \"Request aborted due to request timeout expiring\", null, 408);\n } else {\n errorHandler(errorEvent, \"Request cancelled\", null, 400);\n }\n };\n xhr.ontimeout = (errorEvent) => {\n errorHandler(errorEvent, \"Request timed out\", null, 408);\n };\n let streaming;\n let statusCode;\n let successResponse;\n let streamPos = 0;\n let unpacked = false;\n const onResponse = () => {\n clearTimeout(timer);\n successResponse = statusCode < 400;\n if (statusCode == 204) {\n this.complete(null, null, null, null, statusCode);\n return;\n }\n streaming = this.requestMode == XHRStates_default.REQ_RECV_STREAM && successResponse && isEncodingChunked(xhr);\n };\n const onEnd = () => {\n let parsedResponse;\n try {\n const contentType = getHeader(xhr, \"content-type\");\n const json = contentType ? contentType.indexOf(\"application/json\") >= 0 : xhr.responseType == \"text\";\n if (json) {\n const jsonResponseBody = xhr.responseType === \"arraybuffer\" ? Platform.BufferUtils.utf8Decode(xhr.response) : String(xhr.responseText);\n if (jsonResponseBody.length) {\n parsedResponse = JSON.parse(jsonResponseBody);\n } else {\n parsedResponse = jsonResponseBody;\n }\n unpacked = true;\n } else {\n parsedResponse = xhr.response;\n }\n if (parsedResponse.response !== void 0) {\n statusCode = parsedResponse.statusCode;\n successResponse = statusCode < 400;\n headers = parsedResponse.headers;\n parsedResponse = parsedResponse.response;\n } else {\n headers = getHeadersAsObject(xhr);\n }\n } catch (e) {\n this.complete(new PartialErrorInfo(\"Malformed response body from server: \" + e.message, null, 400));\n return;\n }\n if (successResponse || Array.isArray(parsedResponse)) {\n this.complete(null, parsedResponse, headers, unpacked, statusCode);\n return;\n }\n let err = getAblyError(parsedResponse, headers);\n if (!err) {\n err = new PartialErrorInfo(\n \"Error response received from server: \" + statusCode + \" body was: \" + Platform.Config.inspect(parsedResponse),\n null,\n statusCode\n );\n }\n this.complete(err, parsedResponse, headers, unpacked, statusCode);\n };\n function onProgress() {\n const responseText = xhr.responseText;\n const bodyEnd = responseText.length - 1;\n let idx, chunk;\n while (streamPos < bodyEnd && (idx = responseText.indexOf(\"\\n\", streamPos)) > -1) {\n chunk = responseText.slice(streamPos, idx);\n streamPos = idx + 1;\n onChunk(chunk);\n }\n }\n const onChunk = (chunk) => {\n try {\n chunk = JSON.parse(chunk);\n } catch (e) {\n this.complete(new PartialErrorInfo(\"Malformed response body from server: \" + e.message, null, 400));\n return;\n }\n this.emit(\"data\", chunk);\n };\n const onStreamEnd = () => {\n onProgress();\n this.streamComplete = true;\n Platform.Config.nextTick(() => {\n this.complete();\n });\n };\n xhr.onreadystatechange = () => {\n const readyState = xhr.readyState;\n if (readyState < 3)\n return;\n if (xhr.status !== 0) {\n if (statusCode === void 0) {\n statusCode = xhr.status;\n onResponse();\n }\n if (readyState == 3 && streaming) {\n onProgress();\n } else if (readyState == 4) {\n if (streaming)\n onStreamEnd();\n else\n onEnd();\n }\n }\n };\n xhr.send(body);\n }\n dispose() {\n const xhr = this.xhr;\n if (xhr) {\n xhr.onreadystatechange = xhr.onerror = xhr.onabort = xhr.ontimeout = noop3;\n this.xhr = null;\n const timer = this.timer;\n if (timer) {\n clearTimeout(timer);\n this.timer = null;\n }\n if (!this.requestComplete)\n xhr.abort();\n }\n delete pendingRequests[this.id];\n }\n};\nvar xhrrequest_default = XHRRequest;\n\n// src/platform/web/lib/transport/xhrpollingtransport.ts\nvar shortName2 = TransportNames.XhrPolling;\nvar XHRPollingTransport = class extends comettransport_default {\n constructor(connectionManager, auth, params) {\n super(connectionManager, auth, params);\n this.shortName = shortName2;\n params.stream = false;\n this.shortName = shortName2;\n }\n static isAvailable() {\n return !!(Platform.Config.xhrSupported && Platform.Config.allowComet);\n }\n toString() {\n return \"XHRPollingTransport; uri=\" + this.baseUri + \"; isConnected=\" + this.isConnected;\n }\n createRequest(uri, headers, params, body, requestMode) {\n return xhrrequest_default.createRequest(uri, headers, params, body, requestMode, this.timeouts, this.logger);\n }\n};\nvar xhrpollingtransport_default = XHRPollingTransport;\n\n// src/platform/web/lib/transport/index.ts\nvar order = [\"xhr_polling\"];\nvar defaultTransports = {\n order,\n bundledImplementations: {\n web_socket: websockettransport_default,\n xhr_polling: xhrpollingtransport_default\n }\n};\nvar transport_default2 = defaultTransports;\n\n// src/platform/web/lib/util/defaults.ts\nvar Defaults2 = {\n connectivityCheckUrl: \"https://internet-up.ably-realtime.com/is-the-internet-up.txt\",\n wsConnectivityCheckUrl: \"wss://ws-up.ably-realtime.com\",\n /* Order matters here: the base transport is the leftmost one in the\n * intersection of baseTransportOrder and the transports clientOption that's\n * supported. */\n defaultTransports: [TransportNames.XhrPolling, TransportNames.WebSocket]\n};\nvar defaults_default2 = Defaults2;\n\n// src/platform/web/lib/util/msgpack.ts\nfunction inspect(buffer) {\n if (buffer === void 0)\n return \"undefined\";\n let view;\n let type;\n if (buffer instanceof ArrayBuffer) {\n type = \"ArrayBuffer\";\n view = new DataView(buffer);\n } else if (buffer instanceof DataView) {\n type = \"DataView\";\n view = buffer;\n }\n if (!view)\n return JSON.stringify(buffer);\n const bytes = [];\n for (let i = 0; i < buffer.byteLength; i++) {\n if (i > 20) {\n bytes.push(\"...\");\n break;\n }\n let byte_ = view.getUint8(i).toString(16);\n if (byte_.length === 1)\n byte_ = \"0\" + byte_;\n bytes.push(byte_);\n }\n return \"<\" + type + \" \" + bytes.join(\" \") + \">\";\n}\nfunction utf8Write(view, offset, string) {\n for (let i = 0, l = string.length; i < l; i++) {\n const codePoint = string.charCodeAt(i);\n if (codePoint < 128) {\n view.setUint8(offset++, codePoint >>> 0 & 127 | 0);\n continue;\n }\n if (codePoint < 2048) {\n view.setUint8(offset++, codePoint >>> 6 & 31 | 192);\n view.setUint8(offset++, codePoint >>> 0 & 63 | 128);\n continue;\n }\n if (codePoint < 65536) {\n view.setUint8(offset++, codePoint >>> 12 & 15 | 224);\n view.setUint8(offset++, codePoint >>> 6 & 63 | 128);\n view.setUint8(offset++, codePoint >>> 0 & 63 | 128);\n continue;\n }\n if (codePoint < 1114112) {\n view.setUint8(offset++, codePoint >>> 18 & 7 | 240);\n view.setUint8(offset++, codePoint >>> 12 & 63 | 128);\n view.setUint8(offset++, codePoint >>> 6 & 63 | 128);\n view.setUint8(offset++, codePoint >>> 0 & 63 | 128);\n continue;\n }\n throw new Error(\"bad codepoint \" + codePoint);\n }\n}\nfunction utf8Read(view, offset, length) {\n let string = \"\";\n for (let i = offset, end = offset + length; i < end; i++) {\n const byte_ = view.getUint8(i);\n if ((byte_ & 128) === 0) {\n string += String.fromCharCode(byte_);\n continue;\n }\n if ((byte_ & 224) === 192) {\n string += String.fromCharCode((byte_ & 15) << 6 | view.getUint8(++i) & 63);\n continue;\n }\n if ((byte_ & 240) === 224) {\n string += String.fromCharCode(\n (byte_ & 15) << 12 | (view.getUint8(++i) & 63) << 6 | (view.getUint8(++i) & 63) << 0\n );\n continue;\n }\n if ((byte_ & 248) === 240) {\n string += String.fromCharCode(\n (byte_ & 7) << 18 | (view.getUint8(++i) & 63) << 12 | (view.getUint8(++i) & 63) << 6 | (view.getUint8(++i) & 63) << 0\n );\n continue;\n }\n throw new Error(\"Invalid byte \" + byte_.toString(16));\n }\n return string;\n}\nfunction utf8ByteCount(string) {\n let count = 0;\n for (let i = 0, l = string.length; i < l; i++) {\n const codePoint = string.charCodeAt(i);\n if (codePoint < 128) {\n count += 1;\n continue;\n }\n if (codePoint < 2048) {\n count += 2;\n continue;\n }\n if (codePoint < 65536) {\n count += 3;\n continue;\n }\n if (codePoint < 1114112) {\n count += 4;\n continue;\n }\n throw new Error(\"bad codepoint \" + codePoint);\n }\n return count;\n}\nfunction encode2(value, sparse) {\n const size = sizeof(value, sparse);\n if (size === 0)\n return void 0;\n const buffer = new ArrayBuffer(size);\n const view = new DataView(buffer);\n _encode(value, view, 0, sparse);\n return buffer;\n}\nvar SH_L_32 = (1 << 16) * (1 << 16);\nvar SH_R_32 = 1 / SH_L_32;\nfunction getInt64(view, offset) {\n offset = offset || 0;\n return view.getInt32(offset) * SH_L_32 + view.getUint32(offset + 4);\n}\nfunction getUint64(view, offset) {\n offset = offset || 0;\n return view.getUint32(offset) * SH_L_32 + view.getUint32(offset + 4);\n}\nfunction setInt64(view, offset, val) {\n if (val < 9223372036854776e3) {\n view.setInt32(offset, Math.floor(val * SH_R_32));\n view.setInt32(offset + 4, val & -1);\n } else {\n view.setUint32(offset, 2147483647);\n view.setUint32(offset + 4, 2147483647);\n }\n}\nfunction setUint64(view, offset, val) {\n if (val < 18446744073709552e3) {\n view.setUint32(offset, Math.floor(val * SH_R_32));\n view.setInt32(offset + 4, val & -1);\n } else {\n view.setUint32(offset, 4294967295);\n view.setUint32(offset + 4, 4294967295);\n }\n}\nvar Decoder = class {\n constructor(view, offset) {\n this.map = (length) => {\n const value = {};\n for (let i = 0; i < length; i++) {\n const key = this.parse();\n value[key] = this.parse();\n }\n return value;\n };\n this.bin = (length) => {\n const value = new ArrayBuffer(length);\n new Uint8Array(value).set(new Uint8Array(this.view.buffer, this.offset, length), 0);\n this.offset += length;\n return value;\n };\n this.buf = this.bin;\n this.str = (length) => {\n const value = utf8Read(this.view, this.offset, length);\n this.offset += length;\n return value;\n };\n this.array = (length) => {\n const value = new Array(length);\n for (let i = 0; i < length; i++) {\n value[i] = this.parse();\n }\n return value;\n };\n this.ext = (length) => {\n this.offset += length;\n return {\n type: this.view.getInt8(this.offset),\n data: this.buf(length)\n };\n };\n this.parse = () => {\n const type = this.view.getUint8(this.offset);\n let value, length;\n if ((type & 128) === 0) {\n this.offset++;\n return type;\n }\n if ((type & 240) === 128) {\n length = type & 15;\n this.offset++;\n return this.map(length);\n }\n if ((type & 240) === 144) {\n length = type & 15;\n this.offset++;\n return this.array(length);\n }\n if ((type & 224) === 160) {\n length = type & 31;\n this.offset++;\n return this.str(length);\n }\n if ((type & 224) === 224) {\n value = this.view.getInt8(this.offset);\n this.offset++;\n return value;\n }\n switch (type) {\n case 192:\n this.offset++;\n return null;\n case 193:\n this.offset++;\n return void 0;\n case 194:\n this.offset++;\n return false;\n case 195:\n this.offset++;\n return true;\n case 196:\n length = this.view.getUint8(this.offset + 1);\n this.offset += 2;\n return this.bin(length);\n case 197:\n length = this.view.getUint16(this.offset + 1);\n this.offset += 3;\n return this.bin(length);\n case 198:\n length = this.view.getUint32(this.offset + 1);\n this.offset += 5;\n return this.bin(length);\n case 199:\n length = this.view.getUint8(this.offset + 1);\n this.offset += 2;\n return this.ext(length);\n case 200:\n length = this.view.getUint16(this.offset + 1);\n this.offset += 3;\n return this.ext(length);\n case 201:\n length = this.view.getUint32(this.offset + 1);\n this.offset += 5;\n return this.ext(length);\n case 202:\n value = this.view.getFloat32(this.offset + 1);\n this.offset += 5;\n return value;\n case 203:\n value = this.view.getFloat64(this.offset + 1);\n this.offset += 9;\n return value;\n case 204:\n value = this.view.getUint8(this.offset + 1);\n this.offset += 2;\n return value;\n case 205:\n value = this.view.getUint16(this.offset + 1);\n this.offset += 3;\n return value;\n case 206:\n value = this.view.getUint32(this.offset + 1);\n this.offset += 5;\n return value;\n case 207:\n value = getUint64(this.view, this.offset + 1);\n this.offset += 9;\n return value;\n case 208:\n value = this.view.getInt8(this.offset + 1);\n this.offset += 2;\n return value;\n case 209:\n value = this.view.getInt16(this.offset + 1);\n this.offset += 3;\n return value;\n case 210:\n value = this.view.getInt32(this.offset + 1);\n this.offset += 5;\n return value;\n case 211:\n value = getInt64(this.view, this.offset + 1);\n this.offset += 9;\n return value;\n case 212:\n length = 1;\n this.offset++;\n return this.ext(length);\n case 213:\n length = 2;\n this.offset++;\n return this.ext(length);\n case 214:\n length = 4;\n this.offset++;\n return this.ext(length);\n case 215:\n length = 8;\n this.offset++;\n return this.ext(length);\n case 216:\n length = 16;\n this.offset++;\n return this.ext(length);\n case 217:\n length = this.view.getUint8(this.offset + 1);\n this.offset += 2;\n return this.str(length);\n case 218:\n length = this.view.getUint16(this.offset + 1);\n this.offset += 3;\n return this.str(length);\n case 219:\n length = this.view.getUint32(this.offset + 1);\n this.offset += 5;\n return this.str(length);\n case 220:\n length = this.view.getUint16(this.offset + 1);\n this.offset += 3;\n return this.array(length);\n case 221:\n length = this.view.getUint32(this.offset + 1);\n this.offset += 5;\n return this.array(length);\n case 222:\n length = this.view.getUint16(this.offset + 1);\n this.offset += 3;\n return this.map(length);\n case 223:\n length = this.view.getUint32(this.offset + 1);\n this.offset += 5;\n return this.map(length);\n }\n throw new Error(\"Unknown type 0x\" + type.toString(16));\n };\n this.offset = offset || 0;\n this.view = view;\n }\n};\nfunction decode2(buffer) {\n const view = new DataView(buffer);\n const decoder = new Decoder(view);\n const value = decoder.parse();\n if (decoder.offset !== buffer.byteLength)\n throw new Error(buffer.byteLength - decoder.offset + \" trailing bytes\");\n return value;\n}\nfunction encodeableKeys(value, sparse) {\n return Object.keys(value).filter(function(e) {\n const val = value[e], type = typeof val;\n return (!sparse || val !== void 0 && val !== null) && (\"function\" !== type || !!val.toJSON);\n });\n}\nfunction _encode(value, view, offset, sparse) {\n const type = typeof value;\n if (typeof value === \"string\") {\n const length = utf8ByteCount(value);\n if (length < 32) {\n view.setUint8(offset, length | 160);\n utf8Write(view, offset + 1, value);\n return 1 + length;\n }\n if (length < 256) {\n view.setUint8(offset, 217);\n view.setUint8(offset + 1, length);\n utf8Write(view, offset + 2, value);\n return 2 + length;\n }\n if (length < 65536) {\n view.setUint8(offset, 218);\n view.setUint16(offset + 1, length);\n utf8Write(view, offset + 3, value);\n return 3 + length;\n }\n if (length < 4294967296) {\n view.setUint8(offset, 219);\n view.setUint32(offset + 1, length);\n utf8Write(view, offset + 5, value);\n return 5 + length;\n }\n }\n if (ArrayBuffer.isView && ArrayBuffer.isView(value)) {\n value = value.buffer;\n }\n if (value instanceof ArrayBuffer) {\n const length = value.byteLength;\n if (length < 256) {\n view.setUint8(offset, 196);\n view.setUint8(offset + 1, length);\n new Uint8Array(view.buffer).set(new Uint8Array(value), offset + 2);\n return 2 + length;\n }\n if (length < 65536) {\n view.setUint8(offset, 197);\n view.setUint16(offset + 1, length);\n new Uint8Array(view.buffer).set(new Uint8Array(value), offset + 3);\n return 3 + length;\n }\n if (length < 4294967296) {\n view.setUint8(offset, 198);\n view.setUint32(offset + 1, length);\n new Uint8Array(view.buffer).set(new Uint8Array(value), offset + 5);\n return 5 + length;\n }\n }\n if (typeof value === \"number\") {\n if (Math.floor(value) !== value) {\n view.setUint8(offset, 203);\n view.setFloat64(offset + 1, value);\n return 9;\n }\n if (value >= 0) {\n if (value < 128) {\n view.setUint8(offset, value);\n return 1;\n }\n if (value < 256) {\n view.setUint8(offset, 204);\n view.setUint8(offset + 1, value);\n return 2;\n }\n if (value < 65536) {\n view.setUint8(offset, 205);\n view.setUint16(offset + 1, value);\n return 3;\n }\n if (value < 4294967296) {\n view.setUint8(offset, 206);\n view.setUint32(offset + 1, value);\n return 5;\n }\n if (value < 18446744073709552e3) {\n view.setUint8(offset, 207);\n setUint64(view, offset + 1, value);\n return 9;\n }\n throw new Error(\"Number too big 0x\" + value.toString(16));\n }\n if (value >= -32) {\n view.setInt8(offset, value);\n return 1;\n }\n if (value >= -128) {\n view.setUint8(offset, 208);\n view.setInt8(offset + 1, value);\n return 2;\n }\n if (value >= -32768) {\n view.setUint8(offset, 209);\n view.setInt16(offset + 1, value);\n return 3;\n }\n if (value >= -2147483648) {\n view.setUint8(offset, 210);\n view.setInt32(offset + 1, value);\n return 5;\n }\n if (value >= -9223372036854776e3) {\n view.setUint8(offset, 211);\n setInt64(view, offset + 1, value);\n return 9;\n }\n throw new Error(\"Number too small -0x\" + (-value).toString(16).substr(1));\n }\n if (type === \"undefined\") {\n if (sparse)\n return 0;\n view.setUint8(offset, 212);\n view.setUint8(offset + 1, 0);\n view.setUint8(offset + 2, 0);\n return 3;\n }\n if (value === null) {\n if (sparse)\n return 0;\n view.setUint8(offset, 192);\n return 1;\n }\n if (type === \"boolean\") {\n view.setUint8(offset, value ? 195 : 194);\n return 1;\n }\n if (\"function\" === typeof value.toJSON)\n return _encode(value.toJSON(), view, offset, sparse);\n if (type === \"object\") {\n let length, size = 0;\n let keys;\n const isArray = Array.isArray(value);\n if (isArray) {\n length = value.length;\n } else {\n keys = encodeableKeys(value, sparse);\n length = keys.length;\n }\n if (length < 16) {\n view.setUint8(offset, length | (isArray ? 144 : 128));\n size = 1;\n } else if (length < 65536) {\n view.setUint8(offset, isArray ? 220 : 222);\n view.setUint16(offset + 1, length);\n size = 3;\n } else if (length < 4294967296) {\n view.setUint8(offset, isArray ? 221 : 223);\n view.setUint32(offset + 1, length);\n size = 5;\n }\n if (isArray) {\n for (let i = 0; i < length; i++) {\n size += _encode(value[i], view, offset + size, sparse);\n }\n } else if (keys) {\n for (let i = 0; i < length; i++) {\n const key = keys[i];\n size += _encode(key, view, offset + size);\n size += _encode(value[key], view, offset + size, sparse);\n }\n }\n return size;\n }\n if (type === \"function\")\n return 0;\n throw new Error(\"Unknown type \" + type);\n}\nfunction sizeof(value, sparse) {\n const type = typeof value;\n if (type === \"string\") {\n const length = utf8ByteCount(value);\n if (length < 32) {\n return 1 + length;\n }\n if (length < 256) {\n return 2 + length;\n }\n if (length < 65536) {\n return 3 + length;\n }\n if (length < 4294967296) {\n return 5 + length;\n }\n }\n if (ArrayBuffer.isView && ArrayBuffer.isView(value)) {\n value = value.buffer;\n }\n if (value instanceof ArrayBuffer) {\n const length = value.byteLength;\n if (length < 256) {\n return 2 + length;\n }\n if (length < 65536) {\n return 3 + length;\n }\n if (length < 4294967296) {\n return 5 + length;\n }\n }\n if (typeof value === \"number\") {\n if (Math.floor(value) !== value)\n return 9;\n if (value >= 0) {\n if (value < 128)\n return 1;\n if (value < 256)\n return 2;\n if (value < 65536)\n return 3;\n if (value < 4294967296)\n return 5;\n if (value < 18446744073709552e3)\n return 9;\n throw new Error(\"Number too big 0x\" + value.toString(16));\n }\n if (value >= -32)\n return 1;\n if (value >= -128)\n return 2;\n if (value >= -32768)\n return 3;\n if (value >= -2147483648)\n return 5;\n if (value >= -9223372036854776e3)\n return 9;\n throw new Error(\"Number too small -0x\" + value.toString(16).substr(1));\n }\n if (type === \"boolean\")\n return 1;\n if (value === null)\n return sparse ? 0 : 1;\n if (value === void 0)\n return sparse ? 0 : 3;\n if (\"function\" === typeof value.toJSON)\n return sizeof(value.toJSON(), sparse);\n if (type === \"object\") {\n let length, size = 0;\n if (Array.isArray(value)) {\n length = value.length;\n for (let i = 0; i < length; i++) {\n size += sizeof(value[i], sparse);\n }\n } else {\n const keys = encodeableKeys(value, sparse);\n length = keys.length;\n for (let i = 0; i < length; i++) {\n const key = keys[i];\n size += sizeof(key) + sizeof(value[key], sparse);\n }\n }\n if (length < 16) {\n return 1 + size;\n }\n if (length < 65536) {\n return 3 + size;\n }\n if (length < 4294967296) {\n return 5 + size;\n }\n throw new Error(\"Array or object too long 0x\" + length.toString(16));\n }\n if (type === \"function\")\n return 0;\n throw new Error(\"Unknown type \" + type);\n}\nvar msgpack_default = {\n encode: encode2,\n decode: decode2,\n inspect,\n utf8Write,\n utf8Read,\n utf8ByteCount\n};\n\n// src/platform/web/lib/http/request/fetchrequest.ts\nfunction isAblyError2(responseBody, headers) {\n return !!headers.get(\"x-ably-errorcode\");\n}\nfunction getAblyError2(responseBody, headers) {\n if (isAblyError2(responseBody, headers)) {\n return responseBody.error && ErrorInfo.fromValues(responseBody.error);\n }\n}\nfunction convertHeaders(headers) {\n const result = {};\n headers.forEach((value, key) => {\n result[key] = value;\n });\n return result;\n}\nasync function fetchRequest(method, client, uri, headers, params, body) {\n const fetchHeaders = new Headers(headers || {});\n const _method = method ? method.toUpperCase() : isNil(body) ? \"GET\" : \"POST\";\n const controller = new AbortController();\n let timeout;\n const timeoutPromise = new Promise((resolve) => {\n timeout = setTimeout(\n () => {\n controller.abort();\n resolve({ error: new PartialErrorInfo(\"Request timed out\", null, 408) });\n },\n client ? client.options.timeouts.httpRequestTimeout : defaults_default.TIMEOUTS.httpRequestTimeout\n );\n });\n const requestInit = {\n method: _method,\n headers: fetchHeaders,\n body,\n signal: controller.signal\n };\n if (!Platform.Config.isWebworker) {\n requestInit.credentials = fetchHeaders.has(\"authorization\") ? \"include\" : \"same-origin\";\n }\n const resultPromise = (async () => {\n try {\n const urlParams = new URLSearchParams(params || {});\n urlParams.set(\"rnd\", cheapRandStr());\n const preparedURI = uri + \"?\" + urlParams;\n const res = await getGlobalObject().fetch(preparedURI, requestInit);\n clearTimeout(timeout);\n if (res.status == 204) {\n return { error: null, statusCode: res.status };\n }\n const contentType = res.headers.get(\"Content-Type\");\n let body2;\n if (contentType && contentType.indexOf(\"application/x-msgpack\") > -1) {\n body2 = await res.arrayBuffer();\n } else if (contentType && contentType.indexOf(\"application/json\") > -1) {\n body2 = await res.json();\n } else {\n body2 = await res.text();\n }\n const unpacked = !!contentType && contentType.indexOf(\"application/x-msgpack\") === -1;\n const headers2 = convertHeaders(res.headers);\n if (!res.ok) {\n const error = getAblyError2(body2, res.headers) || new PartialErrorInfo(\n \"Error response received from server: \" + res.status + \" body was: \" + Platform.Config.inspect(body2),\n null,\n res.status\n );\n return { error, body: body2, headers: headers2, unpacked, statusCode: res.status };\n } else {\n return { error: null, body: body2, headers: headers2, unpacked, statusCode: res.status };\n }\n } catch (error) {\n clearTimeout(timeout);\n return { error };\n }\n })();\n return Promise.race([timeoutPromise, resultPromise]);\n}\n\n// src/platform/web/lib/http/request/index.ts\nvar defaultBundledRequestImplementations = {\n XHRRequest: xhrrequest_default,\n FetchRequest: fetchRequest\n};\n\n// src/platform/web/index.ts\nvar Crypto = createCryptoClass(config_default, bufferutils_default);\nPlatform.Crypto = Crypto;\nPlatform.BufferUtils = bufferutils_default;\nPlatform.Http = http_default;\nPlatform.Config = config_default;\nPlatform.Transports = transport_default2;\nPlatform.WebStorage = webstorage_default;\nfor (const clientClass of [DefaultRest, DefaultRealtime]) {\n clientClass.Crypto = Crypto;\n clientClass._MsgPack = msgpack_default;\n}\nhttp_default.bundledRequestImplementations = defaultBundledRequestImplementations;\nlogger_default.initLogHandlers();\nPlatform.Defaults = getDefaults(defaults_default2);\nif (Platform.Config.agent) {\n Platform.Defaults.agent += \" \" + Platform.Config.agent;\n}\nvar web_default = {\n ErrorInfo,\n Rest: DefaultRest,\n Realtime: DefaultRealtime,\n msgpack: msgpack_default,\n makeProtocolMessageFromDeserialized: makeFromDeserializedWithDependencies\n};\nif (typeof module.exports == \"object\" && typeof exports == \"object\") {\n var __cp = (to, from, except, desc) => {\n if ((from && typeof from === \"object\") || typeof from === \"function\") {\n for (let key of Object.getOwnPropertyNames(from)) {\n if (!Object.prototype.hasOwnProperty.call(to, key) && key !== except)\n Object.defineProperty(to, key, {\n get: () => from[key],\n enumerable: !(desc = Object.getOwnPropertyDescriptor(from, key)) || desc.enumerable,\n });\n }\n }\n return to;\n };\n module.exports = __cp(module.exports, exports);\n}\nreturn module.exports;\n}))\n//# sourceMappingURL=ably.js.map\n",null,null,null],"names":["bind","fn","thisArg","wrap","apply","arguments","toString","Object","prototype","getPrototypeOf","iterator","toStringTag","Symbol","kindOf","cache","thing","str","call","slice","toLowerCase","create","kindOfTest","type","typeOfTest","isArray","Array","isUndefined","isBuffer","val","constructor","isFunction","isArrayBuffer","isArrayBufferView","result","ArrayBuffer","isView","buffer","isString","isNumber","isObject","isBoolean","isPlainObject","isEmptyObject","keys","length","e","isDate","isFile","isBlob","isFileList","isStream","pipe","isFormData","kind","FormData","append","isURLSearchParams","isReadableStream","isRequest","isResponse","isHeaders","map","trim","replace","forEach","obj","allOwnKeys","undefined","i","l","getOwnPropertyNames","len","key","findKey","_key","_global","globalThis","self","window","global","isContextDefined","context","merge","caseless","skipUndefined","assignValue","targetKey","extend","a","b","stripBOM","content","charCodeAt","inherits","superConstructor","props","descriptors","defineProperty","value","assign","toFlatObject","sourceObj","destObj","filter","propFilter","prop","merged","endsWith","searchString","position","String","lastIndex","indexOf","toArray","arr","isTypedArray","TypedArray","Uint8Array","forEachEntry","generator","_iterator","next","done","pair","matchAll","regExp","matches","exec","push","isHTMLForm","toCamelCase","replacer","m","p1","p2","toUpperCase","hasOwnProperty","_ref","isRegExp","reduceDescriptors","reducer","getOwnPropertyDescriptors","reducedDescriptors","descriptor","name","ret","defineProperties","freezeMethods","enumerable","writable","set","Error","toObjectSet","arrayOrString","delimiter","define","split","noop","toFiniteNumber","defaultValue","Number","isFinite","isSpecCompliantForm","toJSONObject","stack","visit","source","target","reducedValue","isAsyncFn","isThenable","then","catch","_setImmediate","setImmediateSupported","postMessageSupported","setImmediate","token","callbacks","addEventListener","_ref2","data","shift","cb","postMessage","concat","Math","random","setTimeout","asap","queueMicrotask","process","nextTick","isIterable","hasOwnProp","AxiosError","message","code","config","request","response","captureStackTrace","status","utils","toJSON","description","number","fileName","lineNumber","columnNumber","from","error","customProps","axiosError","msg","errCode","cause","configurable","isVisitable","removeBrackets","renderKey","path","dots","each","join","isFlatArray","some","predicates","test","toFormData","formData","options","TypeError","metaTokens","indexes","defined","option","visitor","defaultVisitor","_Blob","Blob","useBlob","convertValue","toISOString","Buffer","JSON","stringify","el","index","exposedHelpers","build","pop","encode","charMap","encodeURIComponent","match","AxiosURLSearchParams","params","_pairs","encoder","_encode","buildURL","url","serialize","serializeFn","serializedParams","hashmarkIndex","InterceptorManager","handlers","use","fulfilled","rejected","synchronous","runWhen","eject","id","clear","forEachHandler","h","silentJSONParsing","forcedJSONParsing","clarifyTimeoutError","URLSearchParams","isBrowser","classes","protocols","hasBrowserEnv","document","_navigator","navigator","hasStandardBrowserEnv","product","hasStandardBrowserWebWorkerEnv","WorkerGlobalScope","importScripts","origin","location","href","_objectSpread","platform","toURLEncodedForm","helpers","isNode","parsePropPath","arrayToObject","formDataToJSON","buildPath","isNumericKey","isLast","entries","stringifySafely","rawValue","parser","parse","defaults","transitional","transitionalDefaults","adapter","transformRequest","headers","contentType","getContentType","hasJSONContentType","isObjectPayload","setContentType","formSerializer","_FormData","env","transformResponse","JSONRequested","responseType","strictJSONParsing","parseReviver","ERR_BAD_RESPONSE","timeout","xsrfCookieName","xsrfHeaderName","maxContentLength","maxBodyLength","validateStatus","common","method","ignoreDuplicateOf","rawHeaders","parsed","line","substring","$internals","normalizeHeader","header","normalizeValue","parseTokens","tokens","tokensRE","isValidHeaderName","matchHeaderValue","isHeaderNameFilter","formatHeader","w","char","buildAccessors","accessorName","methodName","arg1","arg2","arg3","AxiosHeaders","valueOrRewrite","rewrite","setHeader","_value","_header","_rewrite","lHeader","setHeaders","parseHeaders","dest","entry","get","has","matcher","delete","deleted","deleteHeader","normalize","format","normalized","_len","targets","asStrings","getSetCookie","first","computed","_len2","_key2","accessor","internals","accessors","defineAccessor","mapped","headerValue","transformData","fns","transform","isCancel","__CANCEL__","CanceledError","ERR_CANCELED","settle","resolve","reject","ERR_BAD_REQUEST","floor","parseProtocol","speedometer","samplesCount","min","bytes","timestamps","head","tail","firstSampleTS","chunkLength","now","Date","startedAt","bytesCount","passed","round","throttle","freq","timestamp","threshold","lastArgs","timer","invoke","args","clearTimeout","throttled","flush","progressEventReducer","listener","isDownloadStream","bytesNotified","_speedometer","loaded","total","lengthComputable","progressBytes","rate","inRange","progress","estimated","event","progressEventDecorator","asyncDecorator","isMSIE","URL","protocol","host","port","userAgent","write","expires","domain","secure","cookie","toGMTString","read","RegExp","decodeURIComponent","remove","isAbsoluteURL","combineURLs","baseURL","relativeURL","buildFullPath","requestedURL","allowAbsoluteUrls","isRelativeUrl","headersToObject","mergeConfig","config1","config2","getMergedValue","mergeDeepProperties","valueFromConfig2","defaultToConfig2","mergeDirectKeys","mergeMap","paramsSerializer","timeoutMessage","withCredentials","withXSRFToken","onUploadProgress","onDownloadProgress","decompress","beforeRedirect","transport","httpAgent","httpsAgent","cancelToken","socketPath","responseEncoding","computeConfigValue","configValue","newConfig","auth","btoa","username","password","unescape","getHeaders","formHeaders","allowedHeaders","includes","isURLSameOrigin","xsrfValue","cookies","isXHRAdapterSupported","XMLHttpRequest","Promise","dispatchXhrRequest","_config","resolveConfig","requestData","requestHeaders","onCanceled","uploadThrottled","downloadThrottled","flushUpload","flushDownload","unsubscribe","signal","removeEventListener","open","onloadend","responseHeaders","getAllResponseHeaders","responseData","responseText","statusText","_resolve","_reject","err","onreadystatechange","handleLoad","readyState","responseURL","onabort","handleAbort","ECONNABORTED","onerror","handleError","ERR_NETWORK","ontimeout","handleTimeout","timeoutErrorMessage","ETIMEDOUT","setRequestHeader","upload","cancel","abort","subscribe","aborted","send","composeSignals","signals","Boolean","controller","AbortController","reason","streamChunk","chunk","chunkSize","byteLength","pos","end","readBytes","_wrapAsyncGenerator","iterable","_iteratorAbruptCompletion","_didIteratorError","_iteratorError","_asyncIterator","readStream","_step","_awaitAsyncGenerator","_asyncGeneratorDelegate","return","_x","_x2","stream","asyncIterator","reader","getReader","_x3","trackStream","onProgress","onFinish","_onFinish","ReadableStream","pull","_asyncToGenerator","close","loadedBytes","enqueue","highWaterMark","DEFAULT_CHUNK_SIZE","globalFetchAPI","Request","Response","TextEncoder","factory","fetch","envFetch","isFetchSupported","isRequestSupported","isResponseSupported","isReadableStreamSupported","encodeText","arrayBuffer","supportsRequestStream","duplexAccessed","hasContentType","body","duplex","supportsResponseStream","resolvers","res","ERR_NOT_SUPPORT","getBodyLength","_ref3","size","_request","resolveBodyLength","_ref4","getContentLength","_x4","_ref5","fetchOptions","_fetch","composedSignal","toAbortSignal","requestContentLength","contentTypeHeader","isCredentialsSupported","resolvedOptions","credentials","isStreamResponse","responseContentLength","_x5","seedCache","Map","getFetch","seeds","seed","knownAdapters","http","httpAdapter","xhr","xhrAdapter","fetchAdapter","renderReason","isResolvedHandle","getAdapter","adapters","nameOrAdapter","rejectedReasons","reasons","state","s","throwIfCancellationRequested","throwIfRequested","dispatchRequest","onAdapterResolution","onAdapterRejection","VERSION","validators","validator","deprecatedWarnings","version","formatMessage","opt","desc","opts","ERR_DEPRECATED","console","warn","spelling","correctSpelling","assertOptions","schema","allowUnknown","ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","Axios","instanceConfig","interceptors","configOrUrl","_this","dummy","boolean","function","baseUrl","withXsrfToken","contextHeaders","requestInterceptorChain","synchronousRequestInterceptors","unshiftRequestInterceptors","interceptor","unshift","responseInterceptorChain","pushResponseInterceptors","promise","chain","onFulfilled","onRejected","getUri","fullPath","forEachMethodNoData","forEachMethodWithData","generateHTTPMethod","isForm","httpMethod","CancelToken","executor","resolvePromise","promiseExecutor","_listeners","onfulfilled","splice","c","spread","callback","isAxiosError","payload","HttpStatusCode","Continue","SwitchingProtocols","Processing","EarlyHints","Ok","Created","Accepted","NonAuthoritativeInformation","NoContent","ResetContent","PartialContent","MultiStatus","AlreadyReported","ImUsed","MultipleChoices","MovedPermanently","Found","SeeOther","NotModified","UseProxy","Unused","TemporaryRedirect","PermanentRedirect","BadRequest","Unauthorized","PaymentRequired","Forbidden","NotFound","MethodNotAllowed","NotAcceptable","ProxyAuthenticationRequired","RequestTimeout","Conflict","Gone","LengthRequired","PreconditionFailed","PayloadTooLarge","UriTooLong","UnsupportedMediaType","RangeNotSatisfiable","ExpectationFailed","ImATeapot","MisdirectedRequest","UnprocessableEntity","Locked","FailedDependency","TooEarly","UpgradeRequired","PreconditionRequired","TooManyRequests","RequestHeaderFieldsTooLarge","UnavailableForLegalReasons","InternalServerError","NotImplemented","BadGateway","ServiceUnavailable","GatewayTimeout","HttpVersionNotSupported","VariantAlsoNegotiates","InsufficientStorage","LoopDetected","NotExtended","NetworkAuthenticationRequired","createInstance","defaultConfig","instance","axios","Cancel","all","promises","formToJSON","default","ApiService","tokenExpiryTime","currentToken","axiosInstance","setupInterceptors","getValidToken","Authorization","_a","_arguments","_this2","forceRefresh","currentTime","getToken","expiresIn","endpoint","_this3","post","_this4","put","_this5","_this6","onError","XHRRequest","xhrrequest_default","FetchRequest","fetchRequest","Crypto","createCryptoClass","config_default","bufferutils_default","Platform","BufferUtils","Http","Config","Transports","transport_default2","WebStorage","webstorage_default","clientClass","DefaultRest","_MsgPack","msgpack_default","http_default","bundledRequestImplementations","defaultBundledRequestImplementations","logger_default","initLogHandlers","Defaults","getDefaults","defaults_default2","agent","web_default","ErrorInfo","ClientAblyService","startConnection","sessionId","ablyToken","onMessageReceived","tenantId","isConnected","stopConnection","client","Ably","authUrl","autoConnect","connection","once","stateChange","joinChannel","roomName","channel","channels","messageContent","_b","senderType","_c","needsAgent","_d","attachments","_e","attach","messageUnsubscribe","detach","isConnectionActive","getConnectionState","sendMessage","publish","text","metadata","sentAt","TokenService","ok","json","getTokenFunction","requestCache","CACHE_TTL","pendingRequests","initializeAPI","_getValidToken","storedToken","localStorage","getItem","storedExpiry","bufferTime","isTokenExpiring","tokenResponse","setItem","fetchWithAuth","_fetchWithAuth","retry","Headers","timeoutId","mode","newToken","getCachedResponse","cacheKey","cached","ttl","setCachedResponse","getDuplicateRequest","requestKey","setPendingRequest","finally","apiRequest","_apiRequest","duplicateRequest","requestOptions","language","requestPromise","errorMessage","errorResponse","clone","errorData","parseError","errorText"],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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"}
|
|
1
|
+
{"version":3,"file":"services.js","sources":["../node_modules/axios/lib/helpers/bind.js","../node_modules/axios/lib/utils.js","../node_modules/axios/lib/core/AxiosError.js","../node_modules/axios/lib/helpers/null.js","../node_modules/axios/lib/helpers/toFormData.js","../node_modules/axios/lib/helpers/AxiosURLSearchParams.js","../node_modules/axios/lib/helpers/buildURL.js","../node_modules/axios/lib/core/InterceptorManager.js","../node_modules/axios/lib/defaults/transitional.js","../node_modules/axios/lib/platform/browser/classes/URLSearchParams.js","../node_modules/axios/lib/platform/browser/classes/FormData.js","../node_modules/axios/lib/platform/browser/classes/Blob.js","../node_modules/axios/lib/platform/browser/index.js","../node_modules/axios/lib/platform/common/utils.js","../node_modules/axios/lib/platform/index.js","../node_modules/axios/lib/helpers/toURLEncodedForm.js","../node_modules/axios/lib/helpers/formDataToJSON.js","../node_modules/axios/lib/defaults/index.js","../node_modules/axios/lib/helpers/parseHeaders.js","../node_modules/axios/lib/core/AxiosHeaders.js","../node_modules/axios/lib/core/transformData.js","../node_modules/axios/lib/cancel/isCancel.js","../node_modules/axios/lib/cancel/CanceledError.js","../node_modules/axios/lib/core/settle.js","../node_modules/axios/lib/helpers/parseProtocol.js","../node_modules/axios/lib/helpers/speedometer.js","../node_modules/axios/lib/helpers/throttle.js","../node_modules/axios/lib/helpers/progressEventReducer.js","../node_modules/axios/lib/helpers/isURLSameOrigin.js","../node_modules/axios/lib/helpers/cookies.js","../node_modules/axios/lib/helpers/isAbsoluteURL.js","../node_modules/axios/lib/helpers/combineURLs.js","../node_modules/axios/lib/core/buildFullPath.js","../node_modules/axios/lib/core/mergeConfig.js","../node_modules/axios/lib/helpers/resolveConfig.js","../node_modules/axios/lib/adapters/xhr.js","../node_modules/axios/lib/helpers/composeSignals.js","../node_modules/axios/lib/helpers/trackStream.js","../node_modules/axios/lib/adapters/fetch.js","../node_modules/axios/lib/adapters/adapters.js","../node_modules/axios/lib/core/dispatchRequest.js","../node_modules/axios/lib/env/data.js","../node_modules/axios/lib/helpers/validator.js","../node_modules/axios/lib/core/Axios.js","../node_modules/axios/lib/cancel/CancelToken.js","../node_modules/axios/lib/helpers/spread.js","../node_modules/axios/lib/helpers/isAxiosError.js","../node_modules/axios/lib/helpers/HttpStatusCode.js","../node_modules/axios/lib/axios.js","../src/core/ApiService.ts","../node_modules/ably/build/ably.js","../src/core/AblyService.ts","../src/core/token-service.ts","../src/core/api.ts"],"sourcesContent":["'use strict';\n\nexport default function bind(fn, thisArg) {\n return function wrap() {\n return fn.apply(thisArg, arguments);\n };\n}\n","'use strict';\n\nimport bind from './helpers/bind.js';\n\n// utils is a library of generic helper functions non-specific to axios\n\nconst {toString} = Object.prototype;\nconst {getPrototypeOf} = Object;\nconst {iterator, toStringTag} = Symbol;\n\nconst kindOf = (cache => thing => {\n const str = toString.call(thing);\n return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());\n})(Object.create(null));\n\nconst kindOfTest = (type) => {\n type = type.toLowerCase();\n return (thing) => kindOf(thing) === type\n}\n\nconst typeOfTest = type => thing => typeof thing === type;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n *\n * @returns {boolean} True if value is an Array, otherwise false\n */\nconst {isArray} = Array;\n\n/**\n * Determine if a value is undefined\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nconst isUndefined = typeOfTest('undefined');\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)\n && isFunction(val.constructor.isBuffer) && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nconst isArrayBuffer = kindOfTest('ArrayBuffer');\n\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n let result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (isArrayBuffer(val.buffer));\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a String, otherwise false\n */\nconst isString = typeOfTest('string');\n\n/**\n * Determine if a value is a Function\n *\n * @param {*} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nconst isFunction = typeOfTest('function');\n\n/**\n * Determine if a value is a Number\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Number, otherwise false\n */\nconst isNumber = typeOfTest('number');\n\n/**\n * Determine if a value is an Object\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an Object, otherwise false\n */\nconst isObject = (thing) => thing !== null && typeof thing === 'object';\n\n/**\n * Determine if a value is a Boolean\n *\n * @param {*} thing The value to test\n * @returns {boolean} True if value is a Boolean, otherwise false\n */\nconst isBoolean = thing => thing === true || thing === false;\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a plain Object, otherwise false\n */\nconst isPlainObject = (val) => {\n if (kindOf(val) !== 'object') {\n return false;\n }\n\n const prototype = getPrototypeOf(val);\n return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(toStringTag in val) && !(iterator in val);\n}\n\n/**\n * Determine if a value is an empty object (safely handles Buffers)\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an empty object, otherwise false\n */\nconst isEmptyObject = (val) => {\n // Early return for non-objects or Buffers to prevent RangeError\n if (!isObject(val) || isBuffer(val)) {\n return false;\n }\n\n try {\n return Object.keys(val).length === 0 && Object.getPrototypeOf(val) === Object.prototype;\n } catch (e) {\n // Fallback for any other objects that might cause RangeError with Object.keys()\n return false;\n }\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Date, otherwise false\n */\nconst isDate = kindOfTest('Date');\n\n/**\n * Determine if a value is a File\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFile = kindOfTest('File');\n\n/**\n * Determine if a value is a Blob\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nconst isBlob = kindOfTest('Blob');\n\n/**\n * Determine if a value is a FileList\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFileList = kindOfTest('FileList');\n\n/**\n * Determine if a value is a Stream\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nconst isStream = (val) => isObject(val) && isFunction(val.pipe);\n\n/**\n * Determine if a value is a FormData\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nconst isFormData = (thing) => {\n let kind;\n return thing && (\n (typeof FormData === 'function' && thing instanceof FormData) || (\n isFunction(thing.append) && (\n (kind = kindOf(thing)) === 'formdata' ||\n // detect form-data instance\n (kind === 'object' && isFunction(thing.toString) && thing.toString() === '[object FormData]')\n )\n )\n )\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nconst isURLSearchParams = kindOfTest('URLSearchParams');\n\nconst [isReadableStream, isRequest, isResponse, isHeaders] = ['ReadableStream', 'Request', 'Response', 'Headers'].map(kindOfTest);\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n *\n * @returns {String} The String freed of excess whitespace\n */\nconst trim = (str) => str.trim ?\n str.trim() : str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n *\n * @param {Boolean} [allOwnKeys = false]\n * @returns {any}\n */\nfunction forEach(obj, fn, {allOwnKeys = false} = {}) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n let i;\n let l;\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Buffer check\n if (isBuffer(obj)) {\n return;\n }\n\n // Iterate over object keys\n const keys = allOwnKeys ? Object.getOwnPropertyNames(obj) : Object.keys(obj);\n const len = keys.length;\n let key;\n\n for (i = 0; i < len; i++) {\n key = keys[i];\n fn.call(null, obj[key], key, obj);\n }\n }\n}\n\nfunction findKey(obj, key) {\n if (isBuffer(obj)){\n return null;\n }\n\n key = key.toLowerCase();\n const keys = Object.keys(obj);\n let i = keys.length;\n let _key;\n while (i-- > 0) {\n _key = keys[i];\n if (key === _key.toLowerCase()) {\n return _key;\n }\n }\n return null;\n}\n\nconst _global = (() => {\n /*eslint no-undef:0*/\n if (typeof globalThis !== \"undefined\") return globalThis;\n return typeof self !== \"undefined\" ? self : (typeof window !== 'undefined' ? window : global)\n})();\n\nconst isContextDefined = (context) => !isUndefined(context) && context !== _global;\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n *\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n const {caseless, skipUndefined} = isContextDefined(this) && this || {};\n const result = {};\n const assignValue = (val, key) => {\n const targetKey = caseless && findKey(result, key) || key;\n if (isPlainObject(result[targetKey]) && isPlainObject(val)) {\n result[targetKey] = merge(result[targetKey], val);\n } else if (isPlainObject(val)) {\n result[targetKey] = merge({}, val);\n } else if (isArray(val)) {\n result[targetKey] = val.slice();\n } else if (!skipUndefined || !isUndefined(val)) {\n result[targetKey] = val;\n }\n }\n\n for (let i = 0, l = arguments.length; i < l; i++) {\n arguments[i] && forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n *\n * @param {Boolean} [allOwnKeys]\n * @returns {Object} The resulting value of object a\n */\nconst extend = (a, b, thisArg, {allOwnKeys}= {}) => {\n forEach(b, (val, key) => {\n if (thisArg && isFunction(val)) {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n }, {allOwnKeys});\n return a;\n}\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n *\n * @returns {string} content value without BOM\n */\nconst stripBOM = (content) => {\n if (content.charCodeAt(0) === 0xFEFF) {\n content = content.slice(1);\n }\n return content;\n}\n\n/**\n * Inherit the prototype methods from one constructor into another\n * @param {function} constructor\n * @param {function} superConstructor\n * @param {object} [props]\n * @param {object} [descriptors]\n *\n * @returns {void}\n */\nconst inherits = (constructor, superConstructor, props, descriptors) => {\n constructor.prototype = Object.create(superConstructor.prototype, descriptors);\n constructor.prototype.constructor = constructor;\n Object.defineProperty(constructor, 'super', {\n value: superConstructor.prototype\n });\n props && Object.assign(constructor.prototype, props);\n}\n\n/**\n * Resolve object with deep prototype chain to a flat object\n * @param {Object} sourceObj source object\n * @param {Object} [destObj]\n * @param {Function|Boolean} [filter]\n * @param {Function} [propFilter]\n *\n * @returns {Object}\n */\nconst toFlatObject = (sourceObj, destObj, filter, propFilter) => {\n let props;\n let i;\n let prop;\n const merged = {};\n\n destObj = destObj || {};\n // eslint-disable-next-line no-eq-null,eqeqeq\n if (sourceObj == null) return destObj;\n\n do {\n props = Object.getOwnPropertyNames(sourceObj);\n i = props.length;\n while (i-- > 0) {\n prop = props[i];\n if ((!propFilter || propFilter(prop, sourceObj, destObj)) && !merged[prop]) {\n destObj[prop] = sourceObj[prop];\n merged[prop] = true;\n }\n }\n sourceObj = filter !== false && getPrototypeOf(sourceObj);\n } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype);\n\n return destObj;\n}\n\n/**\n * Determines whether a string ends with the characters of a specified string\n *\n * @param {String} str\n * @param {String} searchString\n * @param {Number} [position= 0]\n *\n * @returns {boolean}\n */\nconst endsWith = (str, searchString, position) => {\n str = String(str);\n if (position === undefined || position > str.length) {\n position = str.length;\n }\n position -= searchString.length;\n const lastIndex = str.indexOf(searchString, position);\n return lastIndex !== -1 && lastIndex === position;\n}\n\n\n/**\n * Returns new array from array like object or null if failed\n *\n * @param {*} [thing]\n *\n * @returns {?Array}\n */\nconst toArray = (thing) => {\n if (!thing) return null;\n if (isArray(thing)) return thing;\n let i = thing.length;\n if (!isNumber(i)) return null;\n const arr = new Array(i);\n while (i-- > 0) {\n arr[i] = thing[i];\n }\n return arr;\n}\n\n/**\n * Checking if the Uint8Array exists and if it does, it returns a function that checks if the\n * thing passed in is an instance of Uint8Array\n *\n * @param {TypedArray}\n *\n * @returns {Array}\n */\n// eslint-disable-next-line func-names\nconst isTypedArray = (TypedArray => {\n // eslint-disable-next-line func-names\n return thing => {\n return TypedArray && thing instanceof TypedArray;\n };\n})(typeof Uint8Array !== 'undefined' && getPrototypeOf(Uint8Array));\n\n/**\n * For each entry in the object, call the function with the key and value.\n *\n * @param {Object<any, any>} obj - The object to iterate over.\n * @param {Function} fn - The function to call for each entry.\n *\n * @returns {void}\n */\nconst forEachEntry = (obj, fn) => {\n const generator = obj && obj[iterator];\n\n const _iterator = generator.call(obj);\n\n let result;\n\n while ((result = _iterator.next()) && !result.done) {\n const pair = result.value;\n fn.call(obj, pair[0], pair[1]);\n }\n}\n\n/**\n * It takes a regular expression and a string, and returns an array of all the matches\n *\n * @param {string} regExp - The regular expression to match against.\n * @param {string} str - The string to search.\n *\n * @returns {Array<boolean>}\n */\nconst matchAll = (regExp, str) => {\n let matches;\n const arr = [];\n\n while ((matches = regExp.exec(str)) !== null) {\n arr.push(matches);\n }\n\n return arr;\n}\n\n/* Checking if the kindOfTest function returns true when passed an HTMLFormElement. */\nconst isHTMLForm = kindOfTest('HTMLFormElement');\n\nconst toCamelCase = str => {\n return str.toLowerCase().replace(/[-_\\s]([a-z\\d])(\\w*)/g,\n function replacer(m, p1, p2) {\n return p1.toUpperCase() + p2;\n }\n );\n};\n\n/* Creating a function that will check if an object has a property. */\nconst hasOwnProperty = (({hasOwnProperty}) => (obj, prop) => hasOwnProperty.call(obj, prop))(Object.prototype);\n\n/**\n * Determine if a value is a RegExp object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a RegExp object, otherwise false\n */\nconst isRegExp = kindOfTest('RegExp');\n\nconst reduceDescriptors = (obj, reducer) => {\n const descriptors = Object.getOwnPropertyDescriptors(obj);\n const reducedDescriptors = {};\n\n forEach(descriptors, (descriptor, name) => {\n let ret;\n if ((ret = reducer(descriptor, name, obj)) !== false) {\n reducedDescriptors[name] = ret || descriptor;\n }\n });\n\n Object.defineProperties(obj, reducedDescriptors);\n}\n\n/**\n * Makes all methods read-only\n * @param {Object} obj\n */\n\nconst freezeMethods = (obj) => {\n reduceDescriptors(obj, (descriptor, name) => {\n // skip restricted props in strict mode\n if (isFunction(obj) && ['arguments', 'caller', 'callee'].indexOf(name) !== -1) {\n return false;\n }\n\n const value = obj[name];\n\n if (!isFunction(value)) return;\n\n descriptor.enumerable = false;\n\n if ('writable' in descriptor) {\n descriptor.writable = false;\n return;\n }\n\n if (!descriptor.set) {\n descriptor.set = () => {\n throw Error('Can not rewrite read-only method \\'' + name + '\\'');\n };\n }\n });\n}\n\nconst toObjectSet = (arrayOrString, delimiter) => {\n const obj = {};\n\n const define = (arr) => {\n arr.forEach(value => {\n obj[value] = true;\n });\n }\n\n isArray(arrayOrString) ? define(arrayOrString) : define(String(arrayOrString).split(delimiter));\n\n return obj;\n}\n\nconst noop = () => {}\n\nconst toFiniteNumber = (value, defaultValue) => {\n return value != null && Number.isFinite(value = +value) ? value : defaultValue;\n}\n\n\n\n/**\n * If the thing is a FormData object, return true, otherwise return false.\n *\n * @param {unknown} thing - The thing to check.\n *\n * @returns {boolean}\n */\nfunction isSpecCompliantForm(thing) {\n return !!(thing && isFunction(thing.append) && thing[toStringTag] === 'FormData' && thing[iterator]);\n}\n\nconst toJSONObject = (obj) => {\n const stack = new Array(10);\n\n const visit = (source, i) => {\n\n if (isObject(source)) {\n if (stack.indexOf(source) >= 0) {\n return;\n }\n\n //Buffer check\n if (isBuffer(source)) {\n return source;\n }\n\n if(!('toJSON' in source)) {\n stack[i] = source;\n const target = isArray(source) ? [] : {};\n\n forEach(source, (value, key) => {\n const reducedValue = visit(value, i + 1);\n !isUndefined(reducedValue) && (target[key] = reducedValue);\n });\n\n stack[i] = undefined;\n\n return target;\n }\n }\n\n return source;\n }\n\n return visit(obj, 0);\n}\n\nconst isAsyncFn = kindOfTest('AsyncFunction');\n\nconst isThenable = (thing) =>\n thing && (isObject(thing) || isFunction(thing)) && isFunction(thing.then) && isFunction(thing.catch);\n\n// original code\n// https://github.com/DigitalBrainJS/AxiosPromise/blob/16deab13710ec09779922131f3fa5954320f83ab/lib/utils.js#L11-L34\n\nconst _setImmediate = ((setImmediateSupported, postMessageSupported) => {\n if (setImmediateSupported) {\n return setImmediate;\n }\n\n return postMessageSupported ? ((token, callbacks) => {\n _global.addEventListener(\"message\", ({source, data}) => {\n if (source === _global && data === token) {\n callbacks.length && callbacks.shift()();\n }\n }, false);\n\n return (cb) => {\n callbacks.push(cb);\n _global.postMessage(token, \"*\");\n }\n })(`axios@${Math.random()}`, []) : (cb) => setTimeout(cb);\n})(\n typeof setImmediate === 'function',\n isFunction(_global.postMessage)\n);\n\nconst asap = typeof queueMicrotask !== 'undefined' ?\n queueMicrotask.bind(_global) : ( typeof process !== 'undefined' && process.nextTick || _setImmediate);\n\n// *********************\n\n\nconst isIterable = (thing) => thing != null && isFunction(thing[iterator]);\n\n\nexport default {\n isArray,\n isArrayBuffer,\n isBuffer,\n isFormData,\n isArrayBufferView,\n isString,\n isNumber,\n isBoolean,\n isObject,\n isPlainObject,\n isEmptyObject,\n isReadableStream,\n isRequest,\n isResponse,\n isHeaders,\n isUndefined,\n isDate,\n isFile,\n isBlob,\n isRegExp,\n isFunction,\n isStream,\n isURLSearchParams,\n isTypedArray,\n isFileList,\n forEach,\n merge,\n extend,\n trim,\n stripBOM,\n inherits,\n toFlatObject,\n kindOf,\n kindOfTest,\n endsWith,\n toArray,\n forEachEntry,\n matchAll,\n isHTMLForm,\n hasOwnProperty,\n hasOwnProp: hasOwnProperty, // an alias to avoid ESLint no-prototype-builtins detection\n reduceDescriptors,\n freezeMethods,\n toObjectSet,\n toCamelCase,\n noop,\n toFiniteNumber,\n findKey,\n global: _global,\n isContextDefined,\n isSpecCompliantForm,\n toJSONObject,\n isAsyncFn,\n isThenable,\n setImmediate: _setImmediate,\n asap,\n isIterable\n};\n","'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [config] The config.\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n *\n * @returns {Error} The created error.\n */\nfunction AxiosError(message, code, config, request, response) {\n Error.call(this);\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n } else {\n this.stack = (new Error()).stack;\n }\n\n this.message = message;\n this.name = 'AxiosError';\n code && (this.code = code);\n config && (this.config = config);\n request && (this.request = request);\n if (response) {\n this.response = response;\n this.status = response.status ? response.status : null;\n }\n}\n\nutils.inherits(AxiosError, Error, {\n toJSON: function toJSON() {\n return {\n // Standard\n message: this.message,\n name: this.name,\n // Microsoft\n description: this.description,\n number: this.number,\n // Mozilla\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n // Axios\n config: utils.toJSONObject(this.config),\n code: this.code,\n status: this.status\n };\n }\n});\n\nconst prototype = AxiosError.prototype;\nconst descriptors = {};\n\n[\n 'ERR_BAD_OPTION_VALUE',\n 'ERR_BAD_OPTION',\n 'ECONNABORTED',\n 'ETIMEDOUT',\n 'ERR_NETWORK',\n 'ERR_FR_TOO_MANY_REDIRECTS',\n 'ERR_DEPRECATED',\n 'ERR_BAD_RESPONSE',\n 'ERR_BAD_REQUEST',\n 'ERR_CANCELED',\n 'ERR_NOT_SUPPORT',\n 'ERR_INVALID_URL'\n// eslint-disable-next-line func-names\n].forEach(code => {\n descriptors[code] = {value: code};\n});\n\nObject.defineProperties(AxiosError, descriptors);\nObject.defineProperty(prototype, 'isAxiosError', {value: true});\n\n// eslint-disable-next-line func-names\nAxiosError.from = (error, code, config, request, response, customProps) => {\n const axiosError = Object.create(prototype);\n\n utils.toFlatObject(error, axiosError, function filter(obj) {\n return obj !== Error.prototype;\n }, prop => {\n return prop !== 'isAxiosError';\n });\n\n const msg = error && error.message ? error.message : 'Error';\n\n // Prefer explicit code; otherwise copy the low-level error's code (e.g. ECONNREFUSED)\n const errCode = code == null && error ? error.code : code;\n AxiosError.call(axiosError, msg, errCode, config, request, response);\n\n // Chain the original error on the standard field; non-enumerable to avoid JSON noise\n if (error && axiosError.cause == null) {\n Object.defineProperty(axiosError, 'cause', { value: error, configurable: true });\n }\n\n axiosError.name = (error && error.name) || 'Error';\n\n customProps && Object.assign(axiosError, customProps);\n\n return axiosError;\n};\n\nexport default AxiosError;\n","// eslint-disable-next-line strict\nexport default null;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\n// temporary hotfix to avoid circular references until AxiosURLSearchParams is refactored\nimport PlatformFormData from '../platform/node/classes/FormData.js';\n\n/**\n * Determines if the given thing is a array or js object.\n *\n * @param {string} thing - The object or array to be visited.\n *\n * @returns {boolean}\n */\nfunction isVisitable(thing) {\n return utils.isPlainObject(thing) || utils.isArray(thing);\n}\n\n/**\n * It removes the brackets from the end of a string\n *\n * @param {string} key - The key of the parameter.\n *\n * @returns {string} the key without the brackets.\n */\nfunction removeBrackets(key) {\n return utils.endsWith(key, '[]') ? key.slice(0, -2) : key;\n}\n\n/**\n * It takes a path, a key, and a boolean, and returns a string\n *\n * @param {string} path - The path to the current key.\n * @param {string} key - The key of the current object being iterated over.\n * @param {string} dots - If true, the key will be rendered with dots instead of brackets.\n *\n * @returns {string} The path to the current key.\n */\nfunction renderKey(path, key, dots) {\n if (!path) return key;\n return path.concat(key).map(function each(token, i) {\n // eslint-disable-next-line no-param-reassign\n token = removeBrackets(token);\n return !dots && i ? '[' + token + ']' : token;\n }).join(dots ? '.' : '');\n}\n\n/**\n * If the array is an array and none of its elements are visitable, then it's a flat array.\n *\n * @param {Array<any>} arr - The array to check\n *\n * @returns {boolean}\n */\nfunction isFlatArray(arr) {\n return utils.isArray(arr) && !arr.some(isVisitable);\n}\n\nconst predicates = utils.toFlatObject(utils, {}, null, function filter(prop) {\n return /^is[A-Z]/.test(prop);\n});\n\n/**\n * Convert a data object to FormData\n *\n * @param {Object} obj\n * @param {?Object} [formData]\n * @param {?Object} [options]\n * @param {Function} [options.visitor]\n * @param {Boolean} [options.metaTokens = true]\n * @param {Boolean} [options.dots = false]\n * @param {?Boolean} [options.indexes = false]\n *\n * @returns {Object}\n **/\n\n/**\n * It converts an object into a FormData object\n *\n * @param {Object<any, any>} obj - The object to convert to form data.\n * @param {string} formData - The FormData object to append to.\n * @param {Object<string, any>} options\n *\n * @returns\n */\nfunction toFormData(obj, formData, options) {\n if (!utils.isObject(obj)) {\n throw new TypeError('target must be an object');\n }\n\n // eslint-disable-next-line no-param-reassign\n formData = formData || new (PlatformFormData || FormData)();\n\n // eslint-disable-next-line no-param-reassign\n options = utils.toFlatObject(options, {\n metaTokens: true,\n dots: false,\n indexes: false\n }, false, function defined(option, source) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n return !utils.isUndefined(source[option]);\n });\n\n const metaTokens = options.metaTokens;\n // eslint-disable-next-line no-use-before-define\n const visitor = options.visitor || defaultVisitor;\n const dots = options.dots;\n const indexes = options.indexes;\n const _Blob = options.Blob || typeof Blob !== 'undefined' && Blob;\n const useBlob = _Blob && utils.isSpecCompliantForm(formData);\n\n if (!utils.isFunction(visitor)) {\n throw new TypeError('visitor must be a function');\n }\n\n function convertValue(value) {\n if (value === null) return '';\n\n if (utils.isDate(value)) {\n return value.toISOString();\n }\n\n if (utils.isBoolean(value)) {\n return value.toString();\n }\n\n if (!useBlob && utils.isBlob(value)) {\n throw new AxiosError('Blob is not supported. Use a Buffer instead.');\n }\n\n if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) {\n return useBlob && typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value);\n }\n\n return value;\n }\n\n /**\n * Default visitor.\n *\n * @param {*} value\n * @param {String|Number} key\n * @param {Array<String|Number>} path\n * @this {FormData}\n *\n * @returns {boolean} return true to visit the each prop of the value recursively\n */\n function defaultVisitor(value, key, path) {\n let arr = value;\n\n if (value && !path && typeof value === 'object') {\n if (utils.endsWith(key, '{}')) {\n // eslint-disable-next-line no-param-reassign\n key = metaTokens ? key : key.slice(0, -2);\n // eslint-disable-next-line no-param-reassign\n value = JSON.stringify(value);\n } else if (\n (utils.isArray(value) && isFlatArray(value)) ||\n ((utils.isFileList(value) || utils.endsWith(key, '[]')) && (arr = utils.toArray(value))\n )) {\n // eslint-disable-next-line no-param-reassign\n key = removeBrackets(key);\n\n arr.forEach(function each(el, index) {\n !(utils.isUndefined(el) || el === null) && formData.append(\n // eslint-disable-next-line no-nested-ternary\n indexes === true ? renderKey([key], index, dots) : (indexes === null ? key : key + '[]'),\n convertValue(el)\n );\n });\n return false;\n }\n }\n\n if (isVisitable(value)) {\n return true;\n }\n\n formData.append(renderKey(path, key, dots), convertValue(value));\n\n return false;\n }\n\n const stack = [];\n\n const exposedHelpers = Object.assign(predicates, {\n defaultVisitor,\n convertValue,\n isVisitable\n });\n\n function build(value, path) {\n if (utils.isUndefined(value)) return;\n\n if (stack.indexOf(value) !== -1) {\n throw Error('Circular reference detected in ' + path.join('.'));\n }\n\n stack.push(value);\n\n utils.forEach(value, function each(el, key) {\n const result = !(utils.isUndefined(el) || el === null) && visitor.call(\n formData, el, utils.isString(key) ? key.trim() : key, path, exposedHelpers\n );\n\n if (result === true) {\n build(el, path ? path.concat(key) : [key]);\n }\n });\n\n stack.pop();\n }\n\n if (!utils.isObject(obj)) {\n throw new TypeError('data must be an object');\n }\n\n build(obj);\n\n return formData;\n}\n\nexport default toFormData;\n","'use strict';\n\nimport toFormData from './toFormData.js';\n\n/**\n * It encodes a string by replacing all characters that are not in the unreserved set with\n * their percent-encoded equivalents\n *\n * @param {string} str - The string to encode.\n *\n * @returns {string} The encoded string.\n */\nfunction encode(str) {\n const charMap = {\n '!': '%21',\n \"'\": '%27',\n '(': '%28',\n ')': '%29',\n '~': '%7E',\n '%20': '+',\n '%00': '\\x00'\n };\n return encodeURIComponent(str).replace(/[!'()~]|%20|%00/g, function replacer(match) {\n return charMap[match];\n });\n}\n\n/**\n * It takes a params object and converts it to a FormData object\n *\n * @param {Object<string, any>} params - The parameters to be converted to a FormData object.\n * @param {Object<string, any>} options - The options object passed to the Axios constructor.\n *\n * @returns {void}\n */\nfunction AxiosURLSearchParams(params, options) {\n this._pairs = [];\n\n params && toFormData(params, this, options);\n}\n\nconst prototype = AxiosURLSearchParams.prototype;\n\nprototype.append = function append(name, value) {\n this._pairs.push([name, value]);\n};\n\nprototype.toString = function toString(encoder) {\n const _encode = encoder ? function(value) {\n return encoder.call(this, value, encode);\n } : encode;\n\n return this._pairs.map(function each(pair) {\n return _encode(pair[0]) + '=' + _encode(pair[1]);\n }, '').join('&');\n};\n\nexport default AxiosURLSearchParams;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosURLSearchParams from '../helpers/AxiosURLSearchParams.js';\n\n/**\n * It replaces all instances of the characters `:`, `$`, `,`, `+`, `[`, and `]` with their\n * URI encoded counterparts\n *\n * @param {string} val The value to be encoded.\n *\n * @returns {string} The encoded value.\n */\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @param {?(object|Function)} options\n *\n * @returns {string} The formatted url\n */\nexport default function buildURL(url, params, options) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n \n const _encode = options && options.encode || encode;\n\n if (utils.isFunction(options)) {\n options = {\n serialize: options\n };\n } \n\n const serializeFn = options && options.serialize;\n\n let serializedParams;\n\n if (serializeFn) {\n serializedParams = serializeFn(params, options);\n } else {\n serializedParams = utils.isURLSearchParams(params) ?\n params.toString() :\n new AxiosURLSearchParams(params, options).toString(_encode);\n }\n\n if (serializedParams) {\n const hashmarkIndex = url.indexOf(\"#\");\n\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\nclass InterceptorManager {\n constructor() {\n this.handlers = [];\n }\n\n /**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\n use(fulfilled, rejected, options) {\n this.handlers.push({\n fulfilled,\n rejected,\n synchronous: options ? options.synchronous : false,\n runWhen: options ? options.runWhen : null\n });\n return this.handlers.length - 1;\n }\n\n /**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n *\n * @returns {Boolean} `true` if the interceptor was removed, `false` otherwise\n */\n eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n }\n\n /**\n * Clear all interceptors from the stack\n *\n * @returns {void}\n */\n clear() {\n if (this.handlers) {\n this.handlers = [];\n }\n }\n\n /**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n *\n * @returns {void}\n */\n forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n }\n}\n\nexport default InterceptorManager;\n","'use strict';\n\nexport default {\n silentJSONParsing: true,\n forcedJSONParsing: true,\n clarifyTimeoutError: false\n};\n","'use strict';\n\nimport AxiosURLSearchParams from '../../../helpers/AxiosURLSearchParams.js';\nexport default typeof URLSearchParams !== 'undefined' ? URLSearchParams : AxiosURLSearchParams;\n","'use strict';\n\nexport default typeof FormData !== 'undefined' ? FormData : null;\n","'use strict'\n\nexport default typeof Blob !== 'undefined' ? Blob : null\n","import URLSearchParams from './classes/URLSearchParams.js'\nimport FormData from './classes/FormData.js'\nimport Blob from './classes/Blob.js'\n\nexport default {\n isBrowser: true,\n classes: {\n URLSearchParams,\n FormData,\n Blob\n },\n protocols: ['http', 'https', 'file', 'blob', 'url', 'data']\n};\n","const hasBrowserEnv = typeof window !== 'undefined' && typeof document !== 'undefined';\n\nconst _navigator = typeof navigator === 'object' && navigator || undefined;\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n *\n * @returns {boolean}\n */\nconst hasStandardBrowserEnv = hasBrowserEnv &&\n (!_navigator || ['ReactNative', 'NativeScript', 'NS'].indexOf(_navigator.product) < 0);\n\n/**\n * Determine if we're running in a standard browser webWorker environment\n *\n * Although the `isStandardBrowserEnv` method indicates that\n * `allows axios to run in a web worker`, the WebWorker will still be\n * filtered out due to its judgment standard\n * `typeof window !== 'undefined' && typeof document !== 'undefined'`.\n * This leads to a problem when axios post `FormData` in webWorker\n */\nconst hasStandardBrowserWebWorkerEnv = (() => {\n return (\n typeof WorkerGlobalScope !== 'undefined' &&\n // eslint-disable-next-line no-undef\n self instanceof WorkerGlobalScope &&\n typeof self.importScripts === 'function'\n );\n})();\n\nconst origin = hasBrowserEnv && window.location.href || 'http://localhost';\n\nexport {\n hasBrowserEnv,\n hasStandardBrowserWebWorkerEnv,\n hasStandardBrowserEnv,\n _navigator as navigator,\n origin\n}\n","import platform from './node/index.js';\nimport * as utils from './common/utils.js';\n\nexport default {\n ...utils,\n ...platform\n}\n","'use strict';\n\nimport utils from '../utils.js';\nimport toFormData from './toFormData.js';\nimport platform from '../platform/index.js';\n\nexport default function toURLEncodedForm(data, options) {\n return toFormData(data, new platform.classes.URLSearchParams(), {\n visitor: function(value, key, path, helpers) {\n if (platform.isNode && utils.isBuffer(value)) {\n this.append(key, value.toString('base64'));\n return false;\n }\n\n return helpers.defaultVisitor.apply(this, arguments);\n },\n ...options\n });\n}\n","'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * It takes a string like `foo[x][y][z]` and returns an array like `['foo', 'x', 'y', 'z']\n *\n * @param {string} name - The name of the property to get.\n *\n * @returns An array of strings.\n */\nfunction parsePropPath(name) {\n // foo[x][y][z]\n // foo.x.y.z\n // foo-x-y-z\n // foo x y z\n return utils.matchAll(/\\w+|\\[(\\w*)]/g, name).map(match => {\n return match[0] === '[]' ? '' : match[1] || match[0];\n });\n}\n\n/**\n * Convert an array to an object.\n *\n * @param {Array<any>} arr - The array to convert to an object.\n *\n * @returns An object with the same keys and values as the array.\n */\nfunction arrayToObject(arr) {\n const obj = {};\n const keys = Object.keys(arr);\n let i;\n const len = keys.length;\n let key;\n for (i = 0; i < len; i++) {\n key = keys[i];\n obj[key] = arr[key];\n }\n return obj;\n}\n\n/**\n * It takes a FormData object and returns a JavaScript object\n *\n * @param {string} formData The FormData object to convert to JSON.\n *\n * @returns {Object<string, any> | null} The converted object.\n */\nfunction formDataToJSON(formData) {\n function buildPath(path, value, target, index) {\n let name = path[index++];\n\n if (name === '__proto__') return true;\n\n const isNumericKey = Number.isFinite(+name);\n const isLast = index >= path.length;\n name = !name && utils.isArray(target) ? target.length : name;\n\n if (isLast) {\n if (utils.hasOwnProp(target, name)) {\n target[name] = [target[name], value];\n } else {\n target[name] = value;\n }\n\n return !isNumericKey;\n }\n\n if (!target[name] || !utils.isObject(target[name])) {\n target[name] = [];\n }\n\n const result = buildPath(path, value, target[name], index);\n\n if (result && utils.isArray(target[name])) {\n target[name] = arrayToObject(target[name]);\n }\n\n return !isNumericKey;\n }\n\n if (utils.isFormData(formData) && utils.isFunction(formData.entries)) {\n const obj = {};\n\n utils.forEachEntry(formData, (name, value) => {\n buildPath(parsePropPath(name), value, obj, 0);\n });\n\n return obj;\n }\n\n return null;\n}\n\nexport default formDataToJSON;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\nimport transitionalDefaults from './transitional.js';\nimport toFormData from '../helpers/toFormData.js';\nimport toURLEncodedForm from '../helpers/toURLEncodedForm.js';\nimport platform from '../platform/index.js';\nimport formDataToJSON from '../helpers/formDataToJSON.js';\n\n/**\n * It takes a string, tries to parse it, and if it fails, it returns the stringified version\n * of the input\n *\n * @param {any} rawValue - The value to be stringified.\n * @param {Function} parser - A function that parses a string into a JavaScript object.\n * @param {Function} encoder - A function that takes a value and returns a string.\n *\n * @returns {string} A stringified version of the rawValue.\n */\nfunction stringifySafely(rawValue, parser, encoder) {\n if (utils.isString(rawValue)) {\n try {\n (parser || JSON.parse)(rawValue);\n return utils.trim(rawValue);\n } catch (e) {\n if (e.name !== 'SyntaxError') {\n throw e;\n }\n }\n }\n\n return (encoder || JSON.stringify)(rawValue);\n}\n\nconst defaults = {\n\n transitional: transitionalDefaults,\n\n adapter: ['xhr', 'http', 'fetch'],\n\n transformRequest: [function transformRequest(data, headers) {\n const contentType = headers.getContentType() || '';\n const hasJSONContentType = contentType.indexOf('application/json') > -1;\n const isObjectPayload = utils.isObject(data);\n\n if (isObjectPayload && utils.isHTMLForm(data)) {\n data = new FormData(data);\n }\n\n const isFormData = utils.isFormData(data);\n\n if (isFormData) {\n return hasJSONContentType ? JSON.stringify(formDataToJSON(data)) : data;\n }\n\n if (utils.isArrayBuffer(data) ||\n utils.isBuffer(data) ||\n utils.isStream(data) ||\n utils.isFile(data) ||\n utils.isBlob(data) ||\n utils.isReadableStream(data)\n ) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n headers.setContentType('application/x-www-form-urlencoded;charset=utf-8', false);\n return data.toString();\n }\n\n let isFileList;\n\n if (isObjectPayload) {\n if (contentType.indexOf('application/x-www-form-urlencoded') > -1) {\n return toURLEncodedForm(data, this.formSerializer).toString();\n }\n\n if ((isFileList = utils.isFileList(data)) || contentType.indexOf('multipart/form-data') > -1) {\n const _FormData = this.env && this.env.FormData;\n\n return toFormData(\n isFileList ? {'files[]': data} : data,\n _FormData && new _FormData(),\n this.formSerializer\n );\n }\n }\n\n if (isObjectPayload || hasJSONContentType ) {\n headers.setContentType('application/json', false);\n return stringifySafely(data);\n }\n\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n const transitional = this.transitional || defaults.transitional;\n const forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n const JSONRequested = this.responseType === 'json';\n\n if (utils.isResponse(data) || utils.isReadableStream(data)) {\n return data;\n }\n\n if (data && utils.isString(data) && ((forcedJSONParsing && !this.responseType) || JSONRequested)) {\n const silentJSONParsing = transitional && transitional.silentJSONParsing;\n const strictJSONParsing = !silentJSONParsing && JSONRequested;\n\n try {\n return JSON.parse(data, this.parseReviver);\n } catch (e) {\n if (strictJSONParsing) {\n if (e.name === 'SyntaxError') {\n throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, this.response);\n }\n throw e;\n }\n }\n }\n\n return data;\n }],\n\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n maxBodyLength: -1,\n\n env: {\n FormData: platform.classes.FormData,\n Blob: platform.classes.Blob\n },\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n },\n\n headers: {\n common: {\n 'Accept': 'application/json, text/plain, */*',\n 'Content-Type': undefined\n }\n }\n};\n\nutils.forEach(['delete', 'get', 'head', 'post', 'put', 'patch'], (method) => {\n defaults.headers[method] = {};\n});\n\nexport default defaults;\n","'use strict';\n\nimport utils from './../utils.js';\n\n// RawAxiosHeaders whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nconst ignoreDuplicateOf = utils.toObjectSet([\n 'age', 'authorization', 'content-length', 'content-type', 'etag',\n 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n 'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n 'referer', 'retry-after', 'user-agent'\n]);\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} rawHeaders Headers needing to be parsed\n *\n * @returns {Object} Headers parsed into an object\n */\nexport default rawHeaders => {\n const parsed = {};\n let key;\n let val;\n let i;\n\n rawHeaders && rawHeaders.split('\\n').forEach(function parser(line) {\n i = line.indexOf(':');\n key = line.substring(0, i).trim().toLowerCase();\n val = line.substring(i + 1).trim();\n\n if (!key || (parsed[key] && ignoreDuplicateOf[key])) {\n return;\n }\n\n if (key === 'set-cookie') {\n if (parsed[key]) {\n parsed[key].push(val);\n } else {\n parsed[key] = [val];\n }\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n });\n\n return parsed;\n};\n","'use strict';\n\nimport utils from '../utils.js';\nimport parseHeaders from '../helpers/parseHeaders.js';\n\nconst $internals = Symbol('internals');\n\nfunction normalizeHeader(header) {\n return header && String(header).trim().toLowerCase();\n}\n\nfunction normalizeValue(value) {\n if (value === false || value == null) {\n return value;\n }\n\n return utils.isArray(value) ? value.map(normalizeValue) : String(value);\n}\n\nfunction parseTokens(str) {\n const tokens = Object.create(null);\n const tokensRE = /([^\\s,;=]+)\\s*(?:=\\s*([^,;]+))?/g;\n let match;\n\n while ((match = tokensRE.exec(str))) {\n tokens[match[1]] = match[2];\n }\n\n return tokens;\n}\n\nconst isValidHeaderName = (str) => /^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(str.trim());\n\nfunction matchHeaderValue(context, value, header, filter, isHeaderNameFilter) {\n if (utils.isFunction(filter)) {\n return filter.call(this, value, header);\n }\n\n if (isHeaderNameFilter) {\n value = header;\n }\n\n if (!utils.isString(value)) return;\n\n if (utils.isString(filter)) {\n return value.indexOf(filter) !== -1;\n }\n\n if (utils.isRegExp(filter)) {\n return filter.test(value);\n }\n}\n\nfunction formatHeader(header) {\n return header.trim()\n .toLowerCase().replace(/([a-z\\d])(\\w*)/g, (w, char, str) => {\n return char.toUpperCase() + str;\n });\n}\n\nfunction buildAccessors(obj, header) {\n const accessorName = utils.toCamelCase(' ' + header);\n\n ['get', 'set', 'has'].forEach(methodName => {\n Object.defineProperty(obj, methodName + accessorName, {\n value: function(arg1, arg2, arg3) {\n return this[methodName].call(this, header, arg1, arg2, arg3);\n },\n configurable: true\n });\n });\n}\n\nclass AxiosHeaders {\n constructor(headers) {\n headers && this.set(headers);\n }\n\n set(header, valueOrRewrite, rewrite) {\n const self = this;\n\n function setHeader(_value, _header, _rewrite) {\n const lHeader = normalizeHeader(_header);\n\n if (!lHeader) {\n throw new Error('header name must be a non-empty string');\n }\n\n const key = utils.findKey(self, lHeader);\n\n if(!key || self[key] === undefined || _rewrite === true || (_rewrite === undefined && self[key] !== false)) {\n self[key || _header] = normalizeValue(_value);\n }\n }\n\n const setHeaders = (headers, _rewrite) =>\n utils.forEach(headers, (_value, _header) => setHeader(_value, _header, _rewrite));\n\n if (utils.isPlainObject(header) || header instanceof this.constructor) {\n setHeaders(header, valueOrRewrite)\n } else if(utils.isString(header) && (header = header.trim()) && !isValidHeaderName(header)) {\n setHeaders(parseHeaders(header), valueOrRewrite);\n } else if (utils.isObject(header) && utils.isIterable(header)) {\n let obj = {}, dest, key;\n for (const entry of header) {\n if (!utils.isArray(entry)) {\n throw TypeError('Object iterator must return a key-value pair');\n }\n\n obj[key = entry[0]] = (dest = obj[key]) ?\n (utils.isArray(dest) ? [...dest, entry[1]] : [dest, entry[1]]) : entry[1];\n }\n\n setHeaders(obj, valueOrRewrite)\n } else {\n header != null && setHeader(valueOrRewrite, header, rewrite);\n }\n\n return this;\n }\n\n get(header, parser) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils.findKey(this, header);\n\n if (key) {\n const value = this[key];\n\n if (!parser) {\n return value;\n }\n\n if (parser === true) {\n return parseTokens(value);\n }\n\n if (utils.isFunction(parser)) {\n return parser.call(this, value, key);\n }\n\n if (utils.isRegExp(parser)) {\n return parser.exec(value);\n }\n\n throw new TypeError('parser must be boolean|regexp|function');\n }\n }\n }\n\n has(header, matcher) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils.findKey(this, header);\n\n return !!(key && this[key] !== undefined && (!matcher || matchHeaderValue(this, this[key], key, matcher)));\n }\n\n return false;\n }\n\n delete(header, matcher) {\n const self = this;\n let deleted = false;\n\n function deleteHeader(_header) {\n _header = normalizeHeader(_header);\n\n if (_header) {\n const key = utils.findKey(self, _header);\n\n if (key && (!matcher || matchHeaderValue(self, self[key], key, matcher))) {\n delete self[key];\n\n deleted = true;\n }\n }\n }\n\n if (utils.isArray(header)) {\n header.forEach(deleteHeader);\n } else {\n deleteHeader(header);\n }\n\n return deleted;\n }\n\n clear(matcher) {\n const keys = Object.keys(this);\n let i = keys.length;\n let deleted = false;\n\n while (i--) {\n const key = keys[i];\n if(!matcher || matchHeaderValue(this, this[key], key, matcher, true)) {\n delete this[key];\n deleted = true;\n }\n }\n\n return deleted;\n }\n\n normalize(format) {\n const self = this;\n const headers = {};\n\n utils.forEach(this, (value, header) => {\n const key = utils.findKey(headers, header);\n\n if (key) {\n self[key] = normalizeValue(value);\n delete self[header];\n return;\n }\n\n const normalized = format ? formatHeader(header) : String(header).trim();\n\n if (normalized !== header) {\n delete self[header];\n }\n\n self[normalized] = normalizeValue(value);\n\n headers[normalized] = true;\n });\n\n return this;\n }\n\n concat(...targets) {\n return this.constructor.concat(this, ...targets);\n }\n\n toJSON(asStrings) {\n const obj = Object.create(null);\n\n utils.forEach(this, (value, header) => {\n value != null && value !== false && (obj[header] = asStrings && utils.isArray(value) ? value.join(', ') : value);\n });\n\n return obj;\n }\n\n [Symbol.iterator]() {\n return Object.entries(this.toJSON())[Symbol.iterator]();\n }\n\n toString() {\n return Object.entries(this.toJSON()).map(([header, value]) => header + ': ' + value).join('\\n');\n }\n\n getSetCookie() {\n return this.get(\"set-cookie\") || [];\n }\n\n get [Symbol.toStringTag]() {\n return 'AxiosHeaders';\n }\n\n static from(thing) {\n return thing instanceof this ? thing : new this(thing);\n }\n\n static concat(first, ...targets) {\n const computed = new this(first);\n\n targets.forEach((target) => computed.set(target));\n\n return computed;\n }\n\n static accessor(header) {\n const internals = this[$internals] = (this[$internals] = {\n accessors: {}\n });\n\n const accessors = internals.accessors;\n const prototype = this.prototype;\n\n function defineAccessor(_header) {\n const lHeader = normalizeHeader(_header);\n\n if (!accessors[lHeader]) {\n buildAccessors(prototype, _header);\n accessors[lHeader] = true;\n }\n }\n\n utils.isArray(header) ? header.forEach(defineAccessor) : defineAccessor(header);\n\n return this;\n }\n}\n\nAxiosHeaders.accessor(['Content-Type', 'Content-Length', 'Accept', 'Accept-Encoding', 'User-Agent', 'Authorization']);\n\n// reserved names hotfix\nutils.reduceDescriptors(AxiosHeaders.prototype, ({value}, key) => {\n let mapped = key[0].toUpperCase() + key.slice(1); // map `set` => `Set`\n return {\n get: () => value,\n set(headerValue) {\n this[mapped] = headerValue;\n }\n }\n});\n\nutils.freezeMethods(AxiosHeaders);\n\nexport default AxiosHeaders;\n","'use strict';\n\nimport utils from './../utils.js';\nimport defaults from '../defaults/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Array|Function} fns A single function or Array of functions\n * @param {?Object} response The response object\n *\n * @returns {*} The resulting transformed data\n */\nexport default function transformData(fns, response) {\n const config = this || defaults;\n const context = response || config;\n const headers = AxiosHeaders.from(context.headers);\n let data = context.data;\n\n utils.forEach(fns, function transform(fn) {\n data = fn.call(config, data, headers.normalize(), response ? response.status : undefined);\n });\n\n headers.normalize();\n\n return data;\n}\n","'use strict';\n\nexport default function isCancel(value) {\n return !!(value && value.__CANCEL__);\n}\n","'use strict';\n\nimport AxiosError from '../core/AxiosError.js';\nimport utils from '../utils.js';\n\n/**\n * A `CanceledError` is an object that is thrown when an operation is canceled.\n *\n * @param {string=} message The message.\n * @param {Object=} config The config.\n * @param {Object=} request The request.\n *\n * @returns {CanceledError} The created error.\n */\nfunction CanceledError(message, config, request) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n AxiosError.call(this, message == null ? 'canceled' : message, AxiosError.ERR_CANCELED, config, request);\n this.name = 'CanceledError';\n}\n\nutils.inherits(CanceledError, AxiosError, {\n __CANCEL__: true\n});\n\nexport default CanceledError;\n","'use strict';\n\nimport AxiosError from './AxiosError.js';\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n *\n * @returns {object} The response.\n */\nexport default function settle(resolve, reject, response) {\n const validateStatus = response.config.validateStatus;\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(new AxiosError(\n 'Request failed with status code ' + response.status,\n [AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4],\n response.config,\n response.request,\n response\n ));\n }\n}\n","'use strict';\n\nexport default function parseProtocol(url) {\n const match = /^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(url);\n return match && match[1] || '';\n}\n","'use strict';\n\n/**\n * Calculate data maxRate\n * @param {Number} [samplesCount= 10]\n * @param {Number} [min= 1000]\n * @returns {Function}\n */\nfunction speedometer(samplesCount, min) {\n samplesCount = samplesCount || 10;\n const bytes = new Array(samplesCount);\n const timestamps = new Array(samplesCount);\n let head = 0;\n let tail = 0;\n let firstSampleTS;\n\n min = min !== undefined ? min : 1000;\n\n return function push(chunkLength) {\n const now = Date.now();\n\n const startedAt = timestamps[tail];\n\n if (!firstSampleTS) {\n firstSampleTS = now;\n }\n\n bytes[head] = chunkLength;\n timestamps[head] = now;\n\n let i = tail;\n let bytesCount = 0;\n\n while (i !== head) {\n bytesCount += bytes[i++];\n i = i % samplesCount;\n }\n\n head = (head + 1) % samplesCount;\n\n if (head === tail) {\n tail = (tail + 1) % samplesCount;\n }\n\n if (now - firstSampleTS < min) {\n return;\n }\n\n const passed = startedAt && now - startedAt;\n\n return passed ? Math.round(bytesCount * 1000 / passed) : undefined;\n };\n}\n\nexport default speedometer;\n","/**\n * Throttle decorator\n * @param {Function} fn\n * @param {Number} freq\n * @return {Function}\n */\nfunction throttle(fn, freq) {\n let timestamp = 0;\n let threshold = 1000 / freq;\n let lastArgs;\n let timer;\n\n const invoke = (args, now = Date.now()) => {\n timestamp = now;\n lastArgs = null;\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n fn(...args);\n }\n\n const throttled = (...args) => {\n const now = Date.now();\n const passed = now - timestamp;\n if ( passed >= threshold) {\n invoke(args, now);\n } else {\n lastArgs = args;\n if (!timer) {\n timer = setTimeout(() => {\n timer = null;\n invoke(lastArgs)\n }, threshold - passed);\n }\n }\n }\n\n const flush = () => lastArgs && invoke(lastArgs);\n\n return [throttled, flush];\n}\n\nexport default throttle;\n","import speedometer from \"./speedometer.js\";\nimport throttle from \"./throttle.js\";\nimport utils from \"../utils.js\";\n\nexport const progressEventReducer = (listener, isDownloadStream, freq = 3) => {\n let bytesNotified = 0;\n const _speedometer = speedometer(50, 250);\n\n return throttle(e => {\n const loaded = e.loaded;\n const total = e.lengthComputable ? e.total : undefined;\n const progressBytes = loaded - bytesNotified;\n const rate = _speedometer(progressBytes);\n const inRange = loaded <= total;\n\n bytesNotified = loaded;\n\n const data = {\n loaded,\n total,\n progress: total ? (loaded / total) : undefined,\n bytes: progressBytes,\n rate: rate ? rate : undefined,\n estimated: rate && total && inRange ? (total - loaded) / rate : undefined,\n event: e,\n lengthComputable: total != null,\n [isDownloadStream ? 'download' : 'upload']: true\n };\n\n listener(data);\n }, freq);\n}\n\nexport const progressEventDecorator = (total, throttled) => {\n const lengthComputable = total != null;\n\n return [(loaded) => throttled[0]({\n lengthComputable,\n total,\n loaded\n }), throttled[1]];\n}\n\nexport const asyncDecorator = (fn) => (...args) => utils.asap(() => fn(...args));\n","import platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ? ((origin, isMSIE) => (url) => {\n url = new URL(url, platform.origin);\n\n return (\n origin.protocol === url.protocol &&\n origin.host === url.host &&\n (isMSIE || origin.port === url.port)\n );\n})(\n new URL(platform.origin),\n platform.navigator && /(msie|trident)/i.test(platform.navigator.userAgent)\n) : () => true;\n","import utils from './../utils.js';\nimport platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ?\n\n // Standard browser envs support document.cookie\n {\n write(name, value, expires, path, domain, secure) {\n const cookie = [name + '=' + encodeURIComponent(value)];\n\n utils.isNumber(expires) && cookie.push('expires=' + new Date(expires).toGMTString());\n\n utils.isString(path) && cookie.push('path=' + path);\n\n utils.isString(domain) && cookie.push('domain=' + domain);\n\n secure === true && cookie.push('secure');\n\n document.cookie = cookie.join('; ');\n },\n\n read(name) {\n const match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return (match ? decodeURIComponent(match[3]) : null);\n },\n\n remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n }\n\n :\n\n // Non-standard browser env (web workers, react-native) lack needed support.\n {\n write() {},\n read() {\n return null;\n },\n remove() {}\n };\n\n","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n *\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nexport default function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"<scheme>://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\n}\n","'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n *\n * @returns {string} The combined URL\n */\nexport default function combineURLs(baseURL, relativeURL) {\n return relativeURL\n ? baseURL.replace(/\\/?\\/$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n : baseURL;\n}\n","'use strict';\n\nimport isAbsoluteURL from '../helpers/isAbsoluteURL.js';\nimport combineURLs from '../helpers/combineURLs.js';\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n *\n * @returns {string} The combined full path\n */\nexport default function buildFullPath(baseURL, requestedURL, allowAbsoluteUrls) {\n let isRelativeUrl = !isAbsoluteURL(requestedURL);\n if (baseURL && (isRelativeUrl || allowAbsoluteUrls == false)) {\n return combineURLs(baseURL, requestedURL);\n }\n return requestedURL;\n}\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosHeaders from \"./AxiosHeaders.js\";\n\nconst headersToObject = (thing) => thing instanceof AxiosHeaders ? { ...thing } : thing;\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n *\n * @returns {Object} New object resulting from merging config2 to config1\n */\nexport default function mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n const config = {};\n\n function getMergedValue(target, source, prop, caseless) {\n if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n return utils.merge.call({caseless}, target, source);\n } else if (utils.isPlainObject(source)) {\n return utils.merge({}, source);\n } else if (utils.isArray(source)) {\n return source.slice();\n }\n return source;\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDeepProperties(a, b, prop , caseless) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(a, b, prop , caseless);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a, prop , caseless);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function valueFromConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function defaultToConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDirectKeys(a, b, prop) {\n if (prop in config2) {\n return getMergedValue(a, b);\n } else if (prop in config1) {\n return getMergedValue(undefined, a);\n }\n }\n\n const mergeMap = {\n url: valueFromConfig2,\n method: valueFromConfig2,\n data: valueFromConfig2,\n baseURL: defaultToConfig2,\n transformRequest: defaultToConfig2,\n transformResponse: defaultToConfig2,\n paramsSerializer: defaultToConfig2,\n timeout: defaultToConfig2,\n timeoutMessage: defaultToConfig2,\n withCredentials: defaultToConfig2,\n withXSRFToken: defaultToConfig2,\n adapter: defaultToConfig2,\n responseType: defaultToConfig2,\n xsrfCookieName: defaultToConfig2,\n xsrfHeaderName: defaultToConfig2,\n onUploadProgress: defaultToConfig2,\n onDownloadProgress: defaultToConfig2,\n decompress: defaultToConfig2,\n maxContentLength: defaultToConfig2,\n maxBodyLength: defaultToConfig2,\n beforeRedirect: defaultToConfig2,\n transport: defaultToConfig2,\n httpAgent: defaultToConfig2,\n httpsAgent: defaultToConfig2,\n cancelToken: defaultToConfig2,\n socketPath: defaultToConfig2,\n responseEncoding: defaultToConfig2,\n validateStatus: mergeDirectKeys,\n headers: (a, b , prop) => mergeDeepProperties(headersToObject(a), headersToObject(b),prop, true)\n };\n\n utils.forEach(Object.keys({...config1, ...config2}), function computeConfigValue(prop) {\n const merge = mergeMap[prop] || mergeDeepProperties;\n const configValue = merge(config1[prop], config2[prop], prop);\n (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);\n });\n\n return config;\n}\n","import platform from \"../platform/index.js\";\nimport utils from \"../utils.js\";\nimport isURLSameOrigin from \"./isURLSameOrigin.js\";\nimport cookies from \"./cookies.js\";\nimport buildFullPath from \"../core/buildFullPath.js\";\nimport mergeConfig from \"../core/mergeConfig.js\";\nimport AxiosHeaders from \"../core/AxiosHeaders.js\";\nimport buildURL from \"./buildURL.js\";\n\nexport default (config) => {\n const newConfig = mergeConfig({}, config);\n\n let { data, withXSRFToken, xsrfHeaderName, xsrfCookieName, headers, auth } = newConfig;\n\n newConfig.headers = headers = AxiosHeaders.from(headers);\n\n newConfig.url = buildURL(buildFullPath(newConfig.baseURL, newConfig.url, newConfig.allowAbsoluteUrls), config.params, config.paramsSerializer);\n\n // HTTP basic authentication\n if (auth) {\n headers.set('Authorization', 'Basic ' +\n btoa((auth.username || '') + ':' + (auth.password ? unescape(encodeURIComponent(auth.password)) : ''))\n );\n }\n\n if (utils.isFormData(data)) {\n if (platform.hasStandardBrowserEnv || platform.hasStandardBrowserWebWorkerEnv) {\n headers.setContentType(undefined); // browser handles it\n } else if (utils.isFunction(data.getHeaders)) {\n // Node.js FormData (like form-data package)\n const formHeaders = data.getHeaders();\n // Only set safe headers to avoid overwriting security headers\n const allowedHeaders = ['content-type', 'content-length'];\n Object.entries(formHeaders).forEach(([key, val]) => {\n if (allowedHeaders.includes(key.toLowerCase())) {\n headers.set(key, val);\n }\n });\n }\n } \n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n\n if (platform.hasStandardBrowserEnv) {\n withXSRFToken && utils.isFunction(withXSRFToken) && (withXSRFToken = withXSRFToken(newConfig));\n\n if (withXSRFToken || (withXSRFToken !== false && isURLSameOrigin(newConfig.url))) {\n // Add xsrf header\n const xsrfValue = xsrfHeaderName && xsrfCookieName && cookies.read(xsrfCookieName);\n\n if (xsrfValue) {\n headers.set(xsrfHeaderName, xsrfValue);\n }\n }\n }\n\n return newConfig;\n}\n\n","import utils from './../utils.js';\nimport settle from './../core/settle.js';\nimport transitionalDefaults from '../defaults/transitional.js';\nimport AxiosError from '../core/AxiosError.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport parseProtocol from '../helpers/parseProtocol.js';\nimport platform from '../platform/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport {progressEventReducer} from '../helpers/progressEventReducer.js';\nimport resolveConfig from \"../helpers/resolveConfig.js\";\n\nconst isXHRAdapterSupported = typeof XMLHttpRequest !== 'undefined';\n\nexport default isXHRAdapterSupported && function (config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n const _config = resolveConfig(config);\n let requestData = _config.data;\n const requestHeaders = AxiosHeaders.from(_config.headers).normalize();\n let {responseType, onUploadProgress, onDownloadProgress} = _config;\n let onCanceled;\n let uploadThrottled, downloadThrottled;\n let flushUpload, flushDownload;\n\n function done() {\n flushUpload && flushUpload(); // flush events\n flushDownload && flushDownload(); // flush events\n\n _config.cancelToken && _config.cancelToken.unsubscribe(onCanceled);\n\n _config.signal && _config.signal.removeEventListener('abort', onCanceled);\n }\n\n let request = new XMLHttpRequest();\n\n request.open(_config.method.toUpperCase(), _config.url, true);\n\n // Set the request timeout in MS\n request.timeout = _config.timeout;\n\n function onloadend() {\n if (!request) {\n return;\n }\n // Prepare the response\n const responseHeaders = AxiosHeaders.from(\n 'getAllResponseHeaders' in request && request.getAllResponseHeaders()\n );\n const responseData = !responseType || responseType === 'text' || responseType === 'json' ?\n request.responseText : request.response;\n const response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config,\n request\n };\n\n settle(function _resolve(value) {\n resolve(value);\n done();\n }, function _reject(err) {\n reject(err);\n done();\n }, response);\n\n // Clean up request\n request = null;\n }\n\n if ('onloadend' in request) {\n // Use onloadend if available\n request.onloadend = onloadend;\n } else {\n // Listen for ready state to emulate onloadend\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n // readystate handler is calling before onerror or ontimeout handlers,\n // so we should call onloadend on the next 'tick'\n setTimeout(onloadend);\n };\n }\n\n // Handle browser request cancellation (as opposed to a manual cancellation)\n request.onabort = function handleAbort() {\n if (!request) {\n return;\n }\n\n reject(new AxiosError('Request aborted', AxiosError.ECONNABORTED, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError(event) {\n // Browsers deliver a ProgressEvent in XHR onerror\n // (message may be empty; when present, surface it)\n // See https://developer.mozilla.org/docs/Web/API/XMLHttpRequest/error_event\n const msg = event && event.message ? event.message : 'Network Error';\n const err = new AxiosError(msg, AxiosError.ERR_NETWORK, config, request);\n // attach the underlying event for consumers who want details\n err.event = event || null;\n reject(err);\n request = null;\n };\n \n // Handle timeout\n request.ontimeout = function handleTimeout() {\n let timeoutErrorMessage = _config.timeout ? 'timeout of ' + _config.timeout + 'ms exceeded' : 'timeout exceeded';\n const transitional = _config.transitional || transitionalDefaults;\n if (_config.timeoutErrorMessage) {\n timeoutErrorMessage = _config.timeoutErrorMessage;\n }\n reject(new AxiosError(\n timeoutErrorMessage,\n transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,\n config,\n request));\n\n // Clean up request\n request = null;\n };\n\n // Remove Content-Type if data is undefined\n requestData === undefined && requestHeaders.setContentType(null);\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders.toJSON(), function setRequestHeader(val, key) {\n request.setRequestHeader(key, val);\n });\n }\n\n // Add withCredentials to request if needed\n if (!utils.isUndefined(_config.withCredentials)) {\n request.withCredentials = !!_config.withCredentials;\n }\n\n // Add responseType to request if needed\n if (responseType && responseType !== 'json') {\n request.responseType = _config.responseType;\n }\n\n // Handle progress if needed\n if (onDownloadProgress) {\n ([downloadThrottled, flushDownload] = progressEventReducer(onDownloadProgress, true));\n request.addEventListener('progress', downloadThrottled);\n }\n\n // Not all browsers support upload events\n if (onUploadProgress && request.upload) {\n ([uploadThrottled, flushUpload] = progressEventReducer(onUploadProgress));\n\n request.upload.addEventListener('progress', uploadThrottled);\n\n request.upload.addEventListener('loadend', flushUpload);\n }\n\n if (_config.cancelToken || _config.signal) {\n // Handle cancellation\n // eslint-disable-next-line func-names\n onCanceled = cancel => {\n if (!request) {\n return;\n }\n reject(!cancel || cancel.type ? new CanceledError(null, config, request) : cancel);\n request.abort();\n request = null;\n };\n\n _config.cancelToken && _config.cancelToken.subscribe(onCanceled);\n if (_config.signal) {\n _config.signal.aborted ? onCanceled() : _config.signal.addEventListener('abort', onCanceled);\n }\n }\n\n const protocol = parseProtocol(_config.url);\n\n if (protocol && platform.protocols.indexOf(protocol) === -1) {\n reject(new AxiosError('Unsupported protocol ' + protocol + ':', AxiosError.ERR_BAD_REQUEST, config));\n return;\n }\n\n\n // Send the request\n request.send(requestData || null);\n });\n}\n","import CanceledError from \"../cancel/CanceledError.js\";\nimport AxiosError from \"../core/AxiosError.js\";\nimport utils from '../utils.js';\n\nconst composeSignals = (signals, timeout) => {\n const {length} = (signals = signals ? signals.filter(Boolean) : []);\n\n if (timeout || length) {\n let controller = new AbortController();\n\n let aborted;\n\n const onabort = function (reason) {\n if (!aborted) {\n aborted = true;\n unsubscribe();\n const err = reason instanceof Error ? reason : this.reason;\n controller.abort(err instanceof AxiosError ? err : new CanceledError(err instanceof Error ? err.message : err));\n }\n }\n\n let timer = timeout && setTimeout(() => {\n timer = null;\n onabort(new AxiosError(`timeout ${timeout} of ms exceeded`, AxiosError.ETIMEDOUT))\n }, timeout)\n\n const unsubscribe = () => {\n if (signals) {\n timer && clearTimeout(timer);\n timer = null;\n signals.forEach(signal => {\n signal.unsubscribe ? signal.unsubscribe(onabort) : signal.removeEventListener('abort', onabort);\n });\n signals = null;\n }\n }\n\n signals.forEach((signal) => signal.addEventListener('abort', onabort));\n\n const {signal} = controller;\n\n signal.unsubscribe = () => utils.asap(unsubscribe);\n\n return signal;\n }\n}\n\nexport default composeSignals;\n","\nexport const streamChunk = function* (chunk, chunkSize) {\n let len = chunk.byteLength;\n\n if (!chunkSize || len < chunkSize) {\n yield chunk;\n return;\n }\n\n let pos = 0;\n let end;\n\n while (pos < len) {\n end = pos + chunkSize;\n yield chunk.slice(pos, end);\n pos = end;\n }\n}\n\nexport const readBytes = async function* (iterable, chunkSize) {\n for await (const chunk of readStream(iterable)) {\n yield* streamChunk(chunk, chunkSize);\n }\n}\n\nconst readStream = async function* (stream) {\n if (stream[Symbol.asyncIterator]) {\n yield* stream;\n return;\n }\n\n const reader = stream.getReader();\n try {\n for (;;) {\n const {done, value} = await reader.read();\n if (done) {\n break;\n }\n yield value;\n }\n } finally {\n await reader.cancel();\n }\n}\n\nexport const trackStream = (stream, chunkSize, onProgress, onFinish) => {\n const iterator = readBytes(stream, chunkSize);\n\n let bytes = 0;\n let done;\n let _onFinish = (e) => {\n if (!done) {\n done = true;\n onFinish && onFinish(e);\n }\n }\n\n return new ReadableStream({\n async pull(controller) {\n try {\n const {done, value} = await iterator.next();\n\n if (done) {\n _onFinish();\n controller.close();\n return;\n }\n\n let len = value.byteLength;\n if (onProgress) {\n let loadedBytes = bytes += len;\n onProgress(loadedBytes);\n }\n controller.enqueue(new Uint8Array(value));\n } catch (err) {\n _onFinish(err);\n throw err;\n }\n },\n cancel(reason) {\n _onFinish(reason);\n return iterator.return();\n }\n }, {\n highWaterMark: 2\n })\n}\n","import platform from \"../platform/index.js\";\nimport utils from \"../utils.js\";\nimport AxiosError from \"../core/AxiosError.js\";\nimport composeSignals from \"../helpers/composeSignals.js\";\nimport {trackStream} from \"../helpers/trackStream.js\";\nimport AxiosHeaders from \"../core/AxiosHeaders.js\";\nimport {progressEventReducer, progressEventDecorator, asyncDecorator} from \"../helpers/progressEventReducer.js\";\nimport resolveConfig from \"../helpers/resolveConfig.js\";\nimport settle from \"../core/settle.js\";\n\nconst DEFAULT_CHUNK_SIZE = 64 * 1024;\n\nconst {isFunction} = utils;\n\nconst globalFetchAPI = (({Request, Response}) => ({\n Request, Response\n}))(utils.global);\n\nconst {\n ReadableStream, TextEncoder\n} = utils.global;\n\n\nconst test = (fn, ...args) => {\n try {\n return !!fn(...args);\n } catch (e) {\n return false\n }\n}\n\nconst factory = (env) => {\n env = utils.merge.call({\n skipUndefined: true\n }, globalFetchAPI, env);\n\n const {fetch: envFetch, Request, Response} = env;\n const isFetchSupported = envFetch ? isFunction(envFetch) : typeof fetch === 'function';\n const isRequestSupported = isFunction(Request);\n const isResponseSupported = isFunction(Response);\n\n if (!isFetchSupported) {\n return false;\n }\n\n const isReadableStreamSupported = isFetchSupported && isFunction(ReadableStream);\n\n const encodeText = isFetchSupported && (typeof TextEncoder === 'function' ?\n ((encoder) => (str) => encoder.encode(str))(new TextEncoder()) :\n async (str) => new Uint8Array(await new Request(str).arrayBuffer())\n );\n\n const supportsRequestStream = isRequestSupported && isReadableStreamSupported && test(() => {\n let duplexAccessed = false;\n\n const hasContentType = new Request(platform.origin, {\n body: new ReadableStream(),\n method: 'POST',\n get duplex() {\n duplexAccessed = true;\n return 'half';\n },\n }).headers.has('Content-Type');\n\n return duplexAccessed && !hasContentType;\n });\n\n const supportsResponseStream = isResponseSupported && isReadableStreamSupported &&\n test(() => utils.isReadableStream(new Response('').body));\n\n const resolvers = {\n stream: supportsResponseStream && ((res) => res.body)\n };\n\n isFetchSupported && ((() => {\n ['text', 'arrayBuffer', 'blob', 'formData', 'stream'].forEach(type => {\n !resolvers[type] && (resolvers[type] = (res, config) => {\n let method = res && res[type];\n\n if (method) {\n return method.call(res);\n }\n\n throw new AxiosError(`Response type '${type}' is not supported`, AxiosError.ERR_NOT_SUPPORT, config);\n })\n });\n })());\n\n const getBodyLength = async (body) => {\n if (body == null) {\n return 0;\n }\n\n if (utils.isBlob(body)) {\n return body.size;\n }\n\n if (utils.isSpecCompliantForm(body)) {\n const _request = new Request(platform.origin, {\n method: 'POST',\n body,\n });\n return (await _request.arrayBuffer()).byteLength;\n }\n\n if (utils.isArrayBufferView(body) || utils.isArrayBuffer(body)) {\n return body.byteLength;\n }\n\n if (utils.isURLSearchParams(body)) {\n body = body + '';\n }\n\n if (utils.isString(body)) {\n return (await encodeText(body)).byteLength;\n }\n }\n\n const resolveBodyLength = async (headers, body) => {\n const length = utils.toFiniteNumber(headers.getContentLength());\n\n return length == null ? getBodyLength(body) : length;\n }\n\n return async (config) => {\n let {\n url,\n method,\n data,\n signal,\n cancelToken,\n timeout,\n onDownloadProgress,\n onUploadProgress,\n responseType,\n headers,\n withCredentials = 'same-origin',\n fetchOptions\n } = resolveConfig(config);\n\n let _fetch = envFetch || fetch;\n\n responseType = responseType ? (responseType + '').toLowerCase() : 'text';\n\n let composedSignal = composeSignals([signal, cancelToken && cancelToken.toAbortSignal()], timeout);\n\n let request = null;\n\n const unsubscribe = composedSignal && composedSignal.unsubscribe && (() => {\n composedSignal.unsubscribe();\n });\n\n let requestContentLength;\n\n try {\n if (\n onUploadProgress && supportsRequestStream && method !== 'get' && method !== 'head' &&\n (requestContentLength = await resolveBodyLength(headers, data)) !== 0\n ) {\n let _request = new Request(url, {\n method: 'POST',\n body: data,\n duplex: \"half\"\n });\n\n let contentTypeHeader;\n\n if (utils.isFormData(data) && (contentTypeHeader = _request.headers.get('content-type'))) {\n headers.setContentType(contentTypeHeader)\n }\n\n if (_request.body) {\n const [onProgress, flush] = progressEventDecorator(\n requestContentLength,\n progressEventReducer(asyncDecorator(onUploadProgress))\n );\n\n data = trackStream(_request.body, DEFAULT_CHUNK_SIZE, onProgress, flush);\n }\n }\n\n if (!utils.isString(withCredentials)) {\n withCredentials = withCredentials ? 'include' : 'omit';\n }\n\n // Cloudflare Workers throws when credentials are defined\n // see https://github.com/cloudflare/workerd/issues/902\n const isCredentialsSupported = isRequestSupported && \"credentials\" in Request.prototype;\n\n const resolvedOptions = {\n ...fetchOptions,\n signal: composedSignal,\n method: method.toUpperCase(),\n headers: headers.normalize().toJSON(),\n body: data,\n duplex: \"half\",\n credentials: isCredentialsSupported ? withCredentials : undefined\n };\n\n request = isRequestSupported && new Request(url, resolvedOptions);\n\n let response = await (isRequestSupported ? _fetch(request, fetchOptions) : _fetch(url, resolvedOptions));\n\n const isStreamResponse = supportsResponseStream && (responseType === 'stream' || responseType === 'response');\n\n if (supportsResponseStream && (onDownloadProgress || (isStreamResponse && unsubscribe))) {\n const options = {};\n\n ['status', 'statusText', 'headers'].forEach(prop => {\n options[prop] = response[prop];\n });\n\n const responseContentLength = utils.toFiniteNumber(response.headers.get('content-length'));\n\n const [onProgress, flush] = onDownloadProgress && progressEventDecorator(\n responseContentLength,\n progressEventReducer(asyncDecorator(onDownloadProgress), true)\n ) || [];\n\n response = new Response(\n trackStream(response.body, DEFAULT_CHUNK_SIZE, onProgress, () => {\n flush && flush();\n unsubscribe && unsubscribe();\n }),\n options\n );\n }\n\n responseType = responseType || 'text';\n\n let responseData = await resolvers[utils.findKey(resolvers, responseType) || 'text'](response, config);\n\n !isStreamResponse && unsubscribe && unsubscribe();\n\n return await new Promise((resolve, reject) => {\n settle(resolve, reject, {\n data: responseData,\n headers: AxiosHeaders.from(response.headers),\n status: response.status,\n statusText: response.statusText,\n config,\n request\n })\n })\n } catch (err) {\n unsubscribe && unsubscribe();\n\n if (err && err.name === 'TypeError' && /Load failed|fetch/i.test(err.message)) {\n throw Object.assign(\n new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request),\n {\n cause: err.cause || err\n }\n )\n }\n\n throw AxiosError.from(err, err && err.code, config, request);\n }\n }\n}\n\nconst seedCache = new Map();\n\nexport const getFetch = (config) => {\n let env = config ? config.env : {};\n const {fetch, Request, Response} = env;\n const seeds = [\n Request, Response, fetch\n ];\n\n let len = seeds.length, i = len,\n seed, target, map = seedCache;\n\n while (i--) {\n seed = seeds[i];\n target = map.get(seed);\n\n target === undefined && map.set(seed, target = (i ? new Map() : factory(env)))\n\n map = target;\n }\n\n return target;\n};\n\nconst adapter = getFetch();\n\nexport default adapter;\n","import utils from '../utils.js';\nimport httpAdapter from './http.js';\nimport xhrAdapter from './xhr.js';\nimport * as fetchAdapter from './fetch.js';\nimport AxiosError from \"../core/AxiosError.js\";\n\nconst knownAdapters = {\n http: httpAdapter,\n xhr: xhrAdapter,\n fetch: {\n get: fetchAdapter.getFetch,\n }\n}\n\nutils.forEach(knownAdapters, (fn, value) => {\n if (fn) {\n try {\n Object.defineProperty(fn, 'name', {value});\n } catch (e) {\n // eslint-disable-next-line no-empty\n }\n Object.defineProperty(fn, 'adapterName', {value});\n }\n});\n\nconst renderReason = (reason) => `- ${reason}`;\n\nconst isResolvedHandle = (adapter) => utils.isFunction(adapter) || adapter === null || adapter === false;\n\nexport default {\n getAdapter: (adapters, config) => {\n adapters = utils.isArray(adapters) ? adapters : [adapters];\n\n const {length} = adapters;\n let nameOrAdapter;\n let adapter;\n\n const rejectedReasons = {};\n\n for (let i = 0; i < length; i++) {\n nameOrAdapter = adapters[i];\n let id;\n\n adapter = nameOrAdapter;\n\n if (!isResolvedHandle(nameOrAdapter)) {\n adapter = knownAdapters[(id = String(nameOrAdapter)).toLowerCase()];\n\n if (adapter === undefined) {\n throw new AxiosError(`Unknown adapter '${id}'`);\n }\n }\n\n if (adapter && (utils.isFunction(adapter) || (adapter = adapter.get(config)))) {\n break;\n }\n\n rejectedReasons[id || '#' + i] = adapter;\n }\n\n if (!adapter) {\n\n const reasons = Object.entries(rejectedReasons)\n .map(([id, state]) => `adapter ${id} ` +\n (state === false ? 'is not supported by the environment' : 'is not available in the build')\n );\n\n let s = length ?\n (reasons.length > 1 ? 'since :\\n' + reasons.map(renderReason).join('\\n') : ' ' + renderReason(reasons[0])) :\n 'as no adapter specified';\n\n throw new AxiosError(\n `There is no suitable adapter to dispatch the request ` + s,\n 'ERR_NOT_SUPPORT'\n );\n }\n\n return adapter;\n },\n adapters: knownAdapters\n}\n","'use strict';\n\nimport transformData from './transformData.js';\nimport isCancel from '../cancel/isCancel.js';\nimport defaults from '../defaults/index.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport adapters from \"../adapters/adapters.js\";\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n *\n * @param {Object} config The config that is to be used for the request\n *\n * @returns {void}\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n\n if (config.signal && config.signal.aborted) {\n throw new CanceledError(null, config);\n }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n *\n * @returns {Promise} The Promise to be fulfilled\n */\nexport default function dispatchRequest(config) {\n throwIfCancellationRequested(config);\n\n config.headers = AxiosHeaders.from(config.headers);\n\n // Transform request data\n config.data = transformData.call(\n config,\n config.transformRequest\n );\n\n if (['post', 'put', 'patch'].indexOf(config.method) !== -1) {\n config.headers.setContentType('application/x-www-form-urlencoded', false);\n }\n\n const adapter = adapters.getAdapter(config.adapter || defaults.adapter, config);\n\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n response.data = transformData.call(\n config,\n config.transformResponse,\n response\n );\n\n response.headers = AxiosHeaders.from(response.headers);\n\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n if (reason && reason.response) {\n reason.response.data = transformData.call(\n config,\n config.transformResponse,\n reason.response\n );\n reason.response.headers = AxiosHeaders.from(reason.response.headers);\n }\n }\n\n return Promise.reject(reason);\n });\n}\n","export const VERSION = \"1.12.2\";","'use strict';\n\nimport {VERSION} from '../env/data.js';\nimport AxiosError from '../core/AxiosError.js';\n\nconst validators = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach((type, i) => {\n validators[type] = function validator(thing) {\n return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n };\n});\n\nconst deprecatedWarnings = {};\n\n/**\n * Transitional option validator\n *\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\n * @param {string?} version - deprecated version / removed since version\n * @param {string?} message - some message with additional info\n *\n * @returns {function}\n */\nvalidators.transitional = function transitional(validator, version, message) {\n function formatMessage(opt, desc) {\n return '[Axios v' + VERSION + '] Transitional option \\'' + opt + '\\'' + desc + (message ? '. ' + message : '');\n }\n\n // eslint-disable-next-line func-names\n return (value, opt, opts) => {\n if (validator === false) {\n throw new AxiosError(\n formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')),\n AxiosError.ERR_DEPRECATED\n );\n }\n\n if (version && !deprecatedWarnings[opt]) {\n deprecatedWarnings[opt] = true;\n // eslint-disable-next-line no-console\n console.warn(\n formatMessage(\n opt,\n ' has been deprecated since v' + version + ' and will be removed in the near future'\n )\n );\n }\n\n return validator ? validator(value, opt, opts) : true;\n };\n};\n\nvalidators.spelling = function spelling(correctSpelling) {\n return (value, opt) => {\n // eslint-disable-next-line no-console\n console.warn(`${opt} is likely a misspelling of ${correctSpelling}`);\n return true;\n }\n};\n\n/**\n * Assert object's properties type\n *\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n *\n * @returns {object}\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n if (typeof options !== 'object') {\n throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE);\n }\n const keys = Object.keys(options);\n let i = keys.length;\n while (i-- > 0) {\n const opt = keys[i];\n const validator = schema[opt];\n if (validator) {\n const value = options[opt];\n const result = value === undefined || validator(value, opt, options);\n if (result !== true) {\n throw new AxiosError('option ' + opt + ' must be ' + result, AxiosError.ERR_BAD_OPTION_VALUE);\n }\n continue;\n }\n if (allowUnknown !== true) {\n throw new AxiosError('Unknown option ' + opt, AxiosError.ERR_BAD_OPTION);\n }\n }\n}\n\nexport default {\n assertOptions,\n validators\n};\n","'use strict';\n\nimport utils from './../utils.js';\nimport buildURL from '../helpers/buildURL.js';\nimport InterceptorManager from './InterceptorManager.js';\nimport dispatchRequest from './dispatchRequest.js';\nimport mergeConfig from './mergeConfig.js';\nimport buildFullPath from './buildFullPath.js';\nimport validator from '../helpers/validator.js';\nimport AxiosHeaders from './AxiosHeaders.js';\n\nconst validators = validator.validators;\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n *\n * @return {Axios} A new instance of Axios\n */\nclass Axios {\n constructor(instanceConfig) {\n this.defaults = instanceConfig || {};\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n }\n\n /**\n * Dispatch a request\n *\n * @param {String|Object} configOrUrl The config specific for this request (merged with this.defaults)\n * @param {?Object} config\n *\n * @returns {Promise} The Promise to be fulfilled\n */\n async request(configOrUrl, config) {\n try {\n return await this._request(configOrUrl, config);\n } catch (err) {\n if (err instanceof Error) {\n let dummy = {};\n\n Error.captureStackTrace ? Error.captureStackTrace(dummy) : (dummy = new Error());\n\n // slice off the Error: ... line\n const stack = dummy.stack ? dummy.stack.replace(/^.+\\n/, '') : '';\n try {\n if (!err.stack) {\n err.stack = stack;\n // match without the 2 top stack lines\n } else if (stack && !String(err.stack).endsWith(stack.replace(/^.+\\n.+\\n/, ''))) {\n err.stack += '\\n' + stack\n }\n } catch (e) {\n // ignore the case where \"stack\" is an un-writable property\n }\n }\n\n throw err;\n }\n }\n\n _request(configOrUrl, config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof configOrUrl === 'string') {\n config = config || {};\n config.url = configOrUrl;\n } else {\n config = configOrUrl || {};\n }\n\n config = mergeConfig(this.defaults, config);\n\n const {transitional, paramsSerializer, headers} = config;\n\n if (transitional !== undefined) {\n validator.assertOptions(transitional, {\n silentJSONParsing: validators.transitional(validators.boolean),\n forcedJSONParsing: validators.transitional(validators.boolean),\n clarifyTimeoutError: validators.transitional(validators.boolean)\n }, false);\n }\n\n if (paramsSerializer != null) {\n if (utils.isFunction(paramsSerializer)) {\n config.paramsSerializer = {\n serialize: paramsSerializer\n }\n } else {\n validator.assertOptions(paramsSerializer, {\n encode: validators.function,\n serialize: validators.function\n }, true);\n }\n }\n\n // Set config.allowAbsoluteUrls\n if (config.allowAbsoluteUrls !== undefined) {\n // do nothing\n } else if (this.defaults.allowAbsoluteUrls !== undefined) {\n config.allowAbsoluteUrls = this.defaults.allowAbsoluteUrls;\n } else {\n config.allowAbsoluteUrls = true;\n }\n\n validator.assertOptions(config, {\n baseUrl: validators.spelling('baseURL'),\n withXsrfToken: validators.spelling('withXSRFToken')\n }, true);\n\n // Set config.method\n config.method = (config.method || this.defaults.method || 'get').toLowerCase();\n\n // Flatten headers\n let contextHeaders = headers && utils.merge(\n headers.common,\n headers[config.method]\n );\n\n headers && utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n (method) => {\n delete headers[method];\n }\n );\n\n config.headers = AxiosHeaders.concat(contextHeaders, headers);\n\n // filter out skipped interceptors\n const requestInterceptorChain = [];\n let synchronousRequestInterceptors = true;\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n return;\n }\n\n synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n\n requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n const responseInterceptorChain = [];\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n let promise;\n let i = 0;\n let len;\n\n if (!synchronousRequestInterceptors) {\n const chain = [dispatchRequest.bind(this), undefined];\n chain.unshift(...requestInterceptorChain);\n chain.push(...responseInterceptorChain);\n len = chain.length;\n\n promise = Promise.resolve(config);\n\n while (i < len) {\n promise = promise.then(chain[i++], chain[i++]);\n }\n\n return promise;\n }\n\n len = requestInterceptorChain.length;\n\n let newConfig = config;\n\n while (i < len) {\n const onFulfilled = requestInterceptorChain[i++];\n const onRejected = requestInterceptorChain[i++];\n try {\n newConfig = onFulfilled(newConfig);\n } catch (error) {\n onRejected.call(this, error);\n break;\n }\n }\n\n try {\n promise = dispatchRequest.call(this, newConfig);\n } catch (error) {\n return Promise.reject(error);\n }\n\n i = 0;\n len = responseInterceptorChain.length;\n\n while (i < len) {\n promise = promise.then(responseInterceptorChain[i++], responseInterceptorChain[i++]);\n }\n\n return promise;\n }\n\n getUri(config) {\n config = mergeConfig(this.defaults, config);\n const fullPath = buildFullPath(config.baseURL, config.url, config.allowAbsoluteUrls);\n return buildURL(fullPath, config.params, config.paramsSerializer);\n }\n}\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n url,\n data: (config || {}).data\n }));\n };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n\n function generateHTTPMethod(isForm) {\n return function httpMethod(url, data, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n headers: isForm ? {\n 'Content-Type': 'multipart/form-data'\n } : {},\n url,\n data\n }));\n };\n }\n\n Axios.prototype[method] = generateHTTPMethod();\n\n Axios.prototype[method + 'Form'] = generateHTTPMethod(true);\n});\n\nexport default Axios;\n","'use strict';\n\nimport CanceledError from './CanceledError.js';\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @param {Function} executor The executor function.\n *\n * @returns {CancelToken}\n */\nclass CancelToken {\n constructor(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n let resolvePromise;\n\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n\n const token = this;\n\n // eslint-disable-next-line func-names\n this.promise.then(cancel => {\n if (!token._listeners) return;\n\n let i = token._listeners.length;\n\n while (i-- > 0) {\n token._listeners[i](cancel);\n }\n token._listeners = null;\n });\n\n // eslint-disable-next-line func-names\n this.promise.then = onfulfilled => {\n let _resolve;\n // eslint-disable-next-line func-names\n const promise = new Promise(resolve => {\n token.subscribe(resolve);\n _resolve = resolve;\n }).then(onfulfilled);\n\n promise.cancel = function reject() {\n token.unsubscribe(_resolve);\n };\n\n return promise;\n };\n\n executor(function cancel(message, config, request) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new CanceledError(message, config, request);\n resolvePromise(token.reason);\n });\n }\n\n /**\n * Throws a `CanceledError` if cancellation has been requested.\n */\n throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n }\n\n /**\n * Subscribe to the cancel signal\n */\n\n subscribe(listener) {\n if (this.reason) {\n listener(this.reason);\n return;\n }\n\n if (this._listeners) {\n this._listeners.push(listener);\n } else {\n this._listeners = [listener];\n }\n }\n\n /**\n * Unsubscribe from the cancel signal\n */\n\n unsubscribe(listener) {\n if (!this._listeners) {\n return;\n }\n const index = this._listeners.indexOf(listener);\n if (index !== -1) {\n this._listeners.splice(index, 1);\n }\n }\n\n toAbortSignal() {\n const controller = new AbortController();\n\n const abort = (err) => {\n controller.abort(err);\n };\n\n this.subscribe(abort);\n\n controller.signal.unsubscribe = () => this.unsubscribe(abort);\n\n return controller.signal;\n }\n\n /**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\n static source() {\n let cancel;\n const token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token,\n cancel\n };\n }\n}\n\nexport default CancelToken;\n","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n *\n * @returns {Function}\n */\nexport default function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n *\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nexport default function isAxiosError(payload) {\n return utils.isObject(payload) && (payload.isAxiosError === true);\n}\n","const HttpStatusCode = {\n Continue: 100,\n SwitchingProtocols: 101,\n Processing: 102,\n EarlyHints: 103,\n Ok: 200,\n Created: 201,\n Accepted: 202,\n NonAuthoritativeInformation: 203,\n NoContent: 204,\n ResetContent: 205,\n PartialContent: 206,\n MultiStatus: 207,\n AlreadyReported: 208,\n ImUsed: 226,\n MultipleChoices: 300,\n MovedPermanently: 301,\n Found: 302,\n SeeOther: 303,\n NotModified: 304,\n UseProxy: 305,\n Unused: 306,\n TemporaryRedirect: 307,\n PermanentRedirect: 308,\n BadRequest: 400,\n Unauthorized: 401,\n PaymentRequired: 402,\n Forbidden: 403,\n NotFound: 404,\n MethodNotAllowed: 405,\n NotAcceptable: 406,\n ProxyAuthenticationRequired: 407,\n RequestTimeout: 408,\n Conflict: 409,\n Gone: 410,\n LengthRequired: 411,\n PreconditionFailed: 412,\n PayloadTooLarge: 413,\n UriTooLong: 414,\n UnsupportedMediaType: 415,\n RangeNotSatisfiable: 416,\n ExpectationFailed: 417,\n ImATeapot: 418,\n MisdirectedRequest: 421,\n UnprocessableEntity: 422,\n Locked: 423,\n FailedDependency: 424,\n TooEarly: 425,\n UpgradeRequired: 426,\n PreconditionRequired: 428,\n TooManyRequests: 429,\n RequestHeaderFieldsTooLarge: 431,\n UnavailableForLegalReasons: 451,\n InternalServerError: 500,\n NotImplemented: 501,\n BadGateway: 502,\n ServiceUnavailable: 503,\n GatewayTimeout: 504,\n HttpVersionNotSupported: 505,\n VariantAlsoNegotiates: 506,\n InsufficientStorage: 507,\n LoopDetected: 508,\n NotExtended: 510,\n NetworkAuthenticationRequired: 511,\n};\n\nObject.entries(HttpStatusCode).forEach(([key, value]) => {\n HttpStatusCode[value] = key;\n});\n\nexport default HttpStatusCode;\n","'use strict';\n\nimport utils from './utils.js';\nimport bind from './helpers/bind.js';\nimport Axios from './core/Axios.js';\nimport mergeConfig from './core/mergeConfig.js';\nimport defaults from './defaults/index.js';\nimport formDataToJSON from './helpers/formDataToJSON.js';\nimport CanceledError from './cancel/CanceledError.js';\nimport CancelToken from './cancel/CancelToken.js';\nimport isCancel from './cancel/isCancel.js';\nimport {VERSION} from './env/data.js';\nimport toFormData from './helpers/toFormData.js';\nimport AxiosError from './core/AxiosError.js';\nimport spread from './helpers/spread.js';\nimport isAxiosError from './helpers/isAxiosError.js';\nimport AxiosHeaders from \"./core/AxiosHeaders.js\";\nimport adapters from './adapters/adapters.js';\nimport HttpStatusCode from './helpers/HttpStatusCode.js';\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n *\n * @returns {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n const context = new Axios(defaultConfig);\n const instance = bind(Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, Axios.prototype, context, {allOwnKeys: true});\n\n // Copy context to instance\n utils.extend(instance, context, null, {allOwnKeys: true});\n\n // Factory for creating new instances\n instance.create = function create(instanceConfig) {\n return createInstance(mergeConfig(defaultConfig, instanceConfig));\n };\n\n return instance;\n}\n\n// Create the default instance to be exported\nconst axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Expose Cancel & CancelToken\naxios.CanceledError = CanceledError;\naxios.CancelToken = CancelToken;\naxios.isCancel = isCancel;\naxios.VERSION = VERSION;\naxios.toFormData = toFormData;\n\n// Expose AxiosError class\naxios.AxiosError = AxiosError;\n\n// alias for CanceledError for backward compatibility\naxios.Cancel = axios.CanceledError;\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\n\naxios.spread = spread;\n\n// Expose isAxiosError\naxios.isAxiosError = isAxiosError;\n\n// Expose mergeConfig\naxios.mergeConfig = mergeConfig;\n\naxios.AxiosHeaders = AxiosHeaders;\n\naxios.formToJSON = thing => formDataToJSON(utils.isHTMLForm(thing) ? new FormData(thing) : thing);\n\naxios.getAdapter = adapters.getAdapter;\n\naxios.HttpStatusCode = HttpStatusCode;\n\naxios.default = axios;\n\n// this module should only have a default export\nexport default axios\n",null,"/*@license Copyright 2015-2022 Ably Real-time Ltd (ably.com)\n\nAbly JavaScript Library v2.15.0\nhttps://github.com/ably/ably-js\n\nReleased under the Apache Licence v2.0*/(function (g, f) {\n if (\"object\" == typeof exports && \"object\" == typeof module) {\n module.exports = f();\n } else if (\"function\" == typeof define && define.amd) {\n define([], f);\n } else if (\"object\" == typeof exports) {\n exports[\"Ably\"] = f();\n } else {\n g[\"Ably\"] = f();\n }\n }(this, () => {\nvar exports = {};\nvar module = { exports };\n\"use strict\";\nvar __defProp = Object.defineProperty;\nvar __defProps = Object.defineProperties;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropDescs = Object.getOwnPropertyDescriptors;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n if (__getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(b)) {\n if (__propIsEnum.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));\nvar __objRest = (source, exclude) => {\n var target = {};\n for (var prop in source)\n if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)\n target[prop] = source[prop];\n if (source != null && __getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(source)) {\n if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))\n target[prop] = source[prop];\n }\n return target;\n};\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\n\n// src/platform/web/index.ts\nvar web_exports = {};\n__export(web_exports, {\n ErrorInfo: () => ErrorInfo,\n Realtime: () => DefaultRealtime,\n Rest: () => DefaultRest,\n default: () => web_default,\n makeProtocolMessageFromDeserialized: () => makeFromDeserializedWithDependencies,\n msgpack: () => msgpack_default\n});\nmodule.exports = __toCommonJS(web_exports);\n\n// src/common/platform.ts\nvar Platform = class {\n};\n\n// src/common/lib/util/logger.ts\nvar globalObject = typeof global !== \"undefined\" ? global : typeof window !== \"undefined\" ? window : self;\nfunction pad(timeSegment, three) {\n return `${timeSegment}`.padStart(three ? 3 : 2, \"0\");\n}\nfunction getHandler(logger) {\n return Platform.Config.logTimestamps ? function(msg) {\n const time = /* @__PURE__ */ new Date();\n logger(\n pad(time.getHours()) + \":\" + pad(time.getMinutes()) + \":\" + pad(time.getSeconds()) + \".\" + pad(time.getMilliseconds(), 1) + \" \" + msg\n );\n } : function(msg) {\n logger(msg);\n };\n}\nvar getDefaultLoggers = () => {\n var _a2;\n let consoleLogger;\n let errorLogger;\n if (typeof ((_a2 = globalObject == null ? void 0 : globalObject.console) == null ? void 0 : _a2.log) === \"function\") {\n consoleLogger = function(...args) {\n console.log.apply(console, args);\n };\n errorLogger = console.warn ? function(...args) {\n console.warn.apply(console, args);\n } : consoleLogger;\n } else {\n consoleLogger = errorLogger = function() {\n };\n }\n return [consoleLogger, errorLogger].map(getHandler);\n};\nvar _Logger = class _Logger {\n constructor() {\n this.deprecated = (description, msg) => {\n this.deprecationWarning(`${description} is deprecated and will be removed in a future version. ${msg}`);\n };\n /* Where a logging operation is expensive, such as serialisation of data, use shouldLog will prevent\n the object being serialised if the log level will not output the message */\n this.shouldLog = (level) => {\n return level <= this.logLevel;\n };\n this.setLog = (level, handler) => {\n if (level !== void 0)\n this.logLevel = level;\n if (handler !== void 0)\n this.logHandler = this.logErrorHandler = handler;\n };\n this.logLevel = _Logger.defaultLogLevel;\n this.logHandler = _Logger.defaultLogHandler;\n this.logErrorHandler = _Logger.defaultLogErrorHandler;\n }\n static initLogHandlers() {\n const [logHandler, logErrorHandler] = getDefaultLoggers();\n this.defaultLogHandler = logHandler;\n this.defaultLogErrorHandler = logErrorHandler;\n this.defaultLogger = new _Logger();\n }\n /**\n * Calls to this method are never stripped by the `stripLogs` esbuild plugin. Use it for log statements that you wish to always be included in the modular variant of the SDK.\n */\n static logActionNoStrip(logger, level, action, message) {\n logger.logAction(level, action, message);\n }\n logAction(level, action, message) {\n if (this.shouldLog(level)) {\n (level === 1 /* Error */ ? this.logErrorHandler : this.logHandler)(\"Ably: \" + action + \": \" + message, level);\n }\n }\n renamedClientOption(oldName, newName) {\n this.deprecationWarning(\n `The \\`${oldName}\\` client option has been renamed to \\`${newName}\\`. Please update your code to use \\`${newName}\\` instead. \\`${oldName}\\` will be removed in a future version.`\n );\n }\n renamedMethod(className, oldName, newName) {\n this.deprecationWarning(\n `\\`${className}\\`\\u2019s \\`${oldName}\\` method has been renamed to \\`${newName}\\`. Please update your code to use \\`${newName}\\` instead. \\`${oldName}\\` will be removed in a future version.`\n );\n }\n deprecationWarning(message) {\n if (this.shouldLog(1 /* Error */)) {\n this.logErrorHandler(`Ably: Deprecation warning - ${message}`, 1 /* Error */);\n }\n }\n};\n_Logger.defaultLogLevel = 1 /* Error */;\n// public constants\n_Logger.LOG_NONE = 0 /* None */;\n_Logger.LOG_ERROR = 1 /* Error */;\n_Logger.LOG_MAJOR = 2 /* Major */;\n_Logger.LOG_MINOR = 3 /* Minor */;\n_Logger.LOG_MICRO = 4 /* Micro */;\n/* public static functions */\n/**\n * In the modular variant of the SDK, the `stripLogs` esbuild plugin strips out all calls to this method (when invoked as `Logger.logAction(...)`) except when called with level `Logger.LOG_ERROR`. If you wish for a log statement to never be stripped, use the {@link logActionNoStrip} method instead.\n *\n * The aforementioned plugin expects `level` to be an expression of the form `Logger.LOG_*`; that is, you can’t dynamically specify the log level.\n */\n_Logger.logAction = (logger, level, action, message) => {\n _Logger.logActionNoStrip(logger, level, action, message);\n};\nvar Logger = _Logger;\nvar logger_default = Logger;\n\n// src/common/lib/util/utils.ts\nvar utils_exports = {};\n__export(utils_exports, {\n Format: () => Format,\n allSame: () => allSame,\n allToLowerCase: () => allToLowerCase,\n allToUpperCase: () => allToUpperCase,\n arrChooseN: () => arrChooseN,\n arrDeleteValue: () => arrDeleteValue,\n arrEquals: () => arrEquals,\n arrIntersect: () => arrIntersect,\n arrIntersectOb: () => arrIntersectOb,\n arrPopRandomElement: () => arrPopRandomElement,\n arrWithoutValue: () => arrWithoutValue,\n cheapRandStr: () => cheapRandStr,\n containsValue: () => containsValue,\n copy: () => copy,\n createMissingPluginError: () => createMissingPluginError,\n dataSizeBytes: () => dataSizeBytes,\n decodeBody: () => decodeBody,\n encodeBody: () => encodeBody,\n ensureArray: () => ensureArray,\n forInOwnNonNullProperties: () => forInOwnNonNullProperties,\n getBackoffCoefficient: () => getBackoffCoefficient,\n getGlobalObject: () => getGlobalObject,\n getJitterCoefficient: () => getJitterCoefficient,\n getRetryTime: () => getRetryTime,\n inherits: () => inherits,\n inspectBody: () => inspectBody,\n inspectError: () => inspectError,\n intersect: () => intersect,\n isEmpty: () => isEmpty,\n isErrorInfoOrPartialErrorInfo: () => isErrorInfoOrPartialErrorInfo,\n isNil: () => isNil,\n isObject: () => isObject,\n keysArray: () => keysArray,\n matchDerivedChannel: () => matchDerivedChannel,\n mixin: () => mixin,\n parseQueryString: () => parseQueryString,\n prototypicalClone: () => prototypicalClone,\n randomString: () => randomString,\n shallowClone: () => shallowClone,\n shallowEquals: () => shallowEquals,\n throwMissingPluginError: () => throwMissingPluginError,\n toBase64: () => toBase64,\n toQueryString: () => toQueryString,\n valuesArray: () => valuesArray,\n whenPromiseSettles: () => whenPromiseSettles,\n withTimeoutAsync: () => withTimeoutAsync\n});\n\n// src/common/lib/types/errorinfo.ts\nfunction toString(err) {\n let result = \"[\" + err.constructor.name;\n if (err.message)\n result += \": \" + err.message;\n if (err.statusCode)\n result += \"; statusCode=\" + err.statusCode;\n if (err.code)\n result += \"; code=\" + err.code;\n if (err.cause)\n result += \"; cause=\" + inspectError(err.cause);\n if (err.href && !(err.message && err.message.indexOf(\"help.ably.io\") > -1))\n result += \"; see \" + err.href + \" \";\n result += \"]\";\n return result;\n}\nvar ErrorInfo = class _ErrorInfo extends Error {\n constructor(message, code, statusCode, cause) {\n super(message);\n if (typeof Object.setPrototypeOf !== \"undefined\") {\n Object.setPrototypeOf(this, _ErrorInfo.prototype);\n }\n this.code = code;\n this.statusCode = statusCode;\n this.cause = cause;\n }\n toString() {\n return toString(this);\n }\n static fromValues(values) {\n const { message, code, statusCode } = values;\n if (typeof message !== \"string\" || typeof code !== \"number\" || typeof statusCode !== \"number\") {\n throw new Error(\"ErrorInfo.fromValues(): invalid values: \" + Platform.Config.inspect(values));\n }\n const result = Object.assign(new _ErrorInfo(message, code, statusCode), values);\n if (result.code && !result.href) {\n result.href = \"https://help.ably.io/error/\" + result.code;\n }\n return result;\n }\n};\nvar PartialErrorInfo = class _PartialErrorInfo extends Error {\n constructor(message, code, statusCode, cause) {\n super(message);\n if (typeof Object.setPrototypeOf !== \"undefined\") {\n Object.setPrototypeOf(this, _PartialErrorInfo.prototype);\n }\n this.code = code;\n this.statusCode = statusCode;\n this.cause = cause;\n }\n toString() {\n return toString(this);\n }\n static fromValues(values) {\n const { message, code, statusCode } = values;\n if (typeof message !== \"string\" || !isNil(code) && typeof code !== \"number\" || !isNil(statusCode) && typeof statusCode !== \"number\") {\n throw new Error(\"PartialErrorInfo.fromValues(): invalid values: \" + Platform.Config.inspect(values));\n }\n const result = Object.assign(new _PartialErrorInfo(message, code, statusCode), values);\n if (result.code && !result.href) {\n result.href = \"https://help.ably.io/error/\" + result.code;\n }\n return result;\n }\n};\n\n// src/common/lib/util/utils.ts\nfunction randomPosn(arrOrStr) {\n return Math.floor(Math.random() * arrOrStr.length);\n}\nfunction mixin(target, ...args) {\n for (let i = 0; i < args.length; i++) {\n const source = args[i];\n if (!source) {\n break;\n }\n for (const key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n}\nfunction copy(src) {\n return mixin({}, src);\n}\nfunction ensureArray(obj) {\n if (isNil(obj)) {\n return [];\n }\n if (Array.isArray(obj)) {\n return obj;\n }\n return [obj];\n}\nfunction isObject(ob) {\n return Object.prototype.toString.call(ob) == \"[object Object]\";\n}\nfunction isEmpty(ob) {\n for (const prop in ob)\n return false;\n return true;\n}\nfunction isNil(arg) {\n return arg == null;\n}\nfunction shallowClone(ob) {\n const result = new Object();\n for (const prop in ob)\n result[prop] = ob[prop];\n return result;\n}\nfunction prototypicalClone(ob, ownProperties) {\n class F {\n }\n F.prototype = ob;\n const result = new F();\n if (ownProperties)\n mixin(result, ownProperties);\n return result;\n}\nvar inherits = function(ctor, superCtor) {\n if (Platform.Config.inherits) {\n Platform.Config.inherits(ctor, superCtor);\n return;\n }\n ctor.super_ = superCtor;\n ctor.prototype = prototypicalClone(superCtor.prototype, { constructor: ctor });\n};\nfunction containsValue(ob, val) {\n for (const i in ob) {\n if (ob[i] == val)\n return true;\n }\n return false;\n}\nfunction intersect(arr, ob) {\n return Array.isArray(ob) ? arrIntersect(arr, ob) : arrIntersectOb(arr, ob);\n}\nfunction arrIntersect(arr1, arr2) {\n const result = [];\n for (let i = 0; i < arr1.length; i++) {\n const member = arr1[i];\n if (arr2.indexOf(member) != -1)\n result.push(member);\n }\n return result;\n}\nfunction arrIntersectOb(arr, ob) {\n const result = [];\n for (let i = 0; i < arr.length; i++) {\n const member = arr[i];\n if (member in ob)\n result.push(member);\n }\n return result;\n}\nfunction arrDeleteValue(arr, val) {\n const idx = arr.indexOf(val);\n const res = idx != -1;\n if (res)\n arr.splice(idx, 1);\n return res;\n}\nfunction arrWithoutValue(arr, val) {\n const newArr = arr.slice();\n arrDeleteValue(newArr, val);\n return newArr;\n}\nfunction keysArray(ob, ownOnly) {\n const result = [];\n for (const prop in ob) {\n if (ownOnly && !Object.prototype.hasOwnProperty.call(ob, prop))\n continue;\n result.push(prop);\n }\n return result;\n}\nfunction valuesArray(ob, ownOnly) {\n const result = [];\n for (const prop in ob) {\n if (ownOnly && !Object.prototype.hasOwnProperty.call(ob, prop))\n continue;\n result.push(ob[prop]);\n }\n return result;\n}\nfunction forInOwnNonNullProperties(ob, fn) {\n for (const prop in ob) {\n if (Object.prototype.hasOwnProperty.call(ob, prop) && ob[prop]) {\n fn(prop);\n }\n }\n}\nfunction allSame(arr, prop) {\n if (arr.length === 0) {\n return true;\n }\n const first = arr[0][prop];\n return arr.every(function(item) {\n return item[prop] === first;\n });\n}\nvar Format = /* @__PURE__ */ ((Format2) => {\n Format2[\"msgpack\"] = \"msgpack\";\n Format2[\"json\"] = \"json\";\n return Format2;\n})(Format || {});\nfunction arrPopRandomElement(arr) {\n return arr.splice(randomPosn(arr), 1)[0];\n}\nfunction toQueryString(params) {\n const parts = [];\n if (params) {\n for (const key in params)\n parts.push(encodeURIComponent(key) + \"=\" + encodeURIComponent(params[key]));\n }\n return parts.length ? \"?\" + parts.join(\"&\") : \"\";\n}\nfunction parseQueryString(query) {\n let match;\n const search = /([^?&=]+)=?([^&]*)/g;\n const result = {};\n while (match = search.exec(query))\n result[decodeURIComponent(match[1])] = decodeURIComponent(match[2]);\n return result;\n}\nfunction isErrorInfoOrPartialErrorInfo(err) {\n return typeof err == \"object\" && err !== null && (err instanceof ErrorInfo || err instanceof PartialErrorInfo);\n}\nfunction inspectError(err) {\n var _a2, _b;\n if (err instanceof Error || ((_a2 = err == null ? void 0 : err.constructor) == null ? void 0 : _a2.name) === \"ErrorInfo\" || ((_b = err == null ? void 0 : err.constructor) == null ? void 0 : _b.name) === \"PartialErrorInfo\")\n return err.toString();\n return Platform.Config.inspect(err);\n}\nfunction inspectBody(body) {\n if (Platform.BufferUtils.isBuffer(body)) {\n return body.toString();\n } else if (typeof body === \"string\") {\n return body;\n } else {\n return Platform.Config.inspect(body);\n }\n}\nfunction dataSizeBytes(data) {\n if (Platform.BufferUtils.isBuffer(data)) {\n return Platform.BufferUtils.byteLength(data);\n }\n if (typeof data === \"string\") {\n return Platform.Config.stringByteSize(data);\n }\n if (typeof data === \"number\") {\n return 8;\n }\n if (typeof data === \"boolean\") {\n return 1;\n }\n throw new Error(\n `Expected input of Utils.dataSizeBytes to be a string, a number, a boolean or a buffer, but was: ${typeof data}`\n );\n}\nfunction cheapRandStr() {\n return String(Math.random()).substr(2);\n}\nvar randomString = async (numBytes) => {\n const buffer = await Platform.Config.getRandomArrayBuffer(numBytes);\n return Platform.BufferUtils.base64Encode(buffer);\n};\nfunction arrChooseN(arr, n2) {\n const numItems = Math.min(n2, arr.length), mutableArr = arr.slice(), result = [];\n for (let i = 0; i < numItems; i++) {\n result.push(arrPopRandomElement(mutableArr));\n }\n return result;\n}\nfunction whenPromiseSettles(promise, callback) {\n promise.then((result) => {\n callback == null ? void 0 : callback(null, result);\n }).catch((err) => {\n callback == null ? void 0 : callback(err);\n });\n}\nfunction decodeBody(body, MsgPack, format) {\n if (format == \"msgpack\") {\n if (!MsgPack) {\n throwMissingPluginError(\"MsgPack\");\n }\n return MsgPack.decode(body);\n }\n return JSON.parse(String(body));\n}\nfunction encodeBody(body, MsgPack, format) {\n if (format == \"msgpack\") {\n if (!MsgPack) {\n throwMissingPluginError(\"MsgPack\");\n }\n return MsgPack.encode(body, true);\n }\n return JSON.stringify(body);\n}\nfunction allToLowerCase(arr) {\n return arr.map(function(element) {\n return element && element.toLowerCase();\n });\n}\nfunction allToUpperCase(arr) {\n return arr.map(function(element) {\n return element && element.toUpperCase();\n });\n}\nfunction getBackoffCoefficient(count) {\n return Math.min((count + 2) / 3, 2);\n}\nfunction getJitterCoefficient() {\n return 1 - Math.random() * 0.2;\n}\nfunction getRetryTime(initialTimeout, retryAttempt) {\n return initialTimeout * getBackoffCoefficient(retryAttempt) * getJitterCoefficient();\n}\nfunction getGlobalObject() {\n if (typeof global !== \"undefined\") {\n return global;\n }\n if (typeof window !== \"undefined\") {\n return window;\n }\n return self;\n}\nfunction shallowEquals(source, target) {\n return Object.keys(source).every((key) => source[key] === target[key]) && Object.keys(target).every((key) => target[key] === source[key]);\n}\nfunction matchDerivedChannel(name) {\n const regex = /^(\\[([^?]*)(?:(.*))\\])?(.+)$/;\n const match = name.match(regex);\n if (!match || !match.length || match.length < 5) {\n throw new ErrorInfo(\"regex match failed\", 400, 40010);\n }\n if (match[2]) {\n throw new ErrorInfo(`cannot use a derived option with a ${match[2]} channel`, 400, 40010);\n }\n return {\n qualifierParam: match[3] || \"\",\n channelName: match[4]\n };\n}\nfunction toBase64(str) {\n const bufferUtils = Platform.BufferUtils;\n const textBuffer = bufferUtils.utf8Encode(str);\n return bufferUtils.base64Encode(textBuffer);\n}\nfunction arrEquals(a, b) {\n return a.length === b.length && a.every(function(val, i) {\n return val === b[i];\n });\n}\nfunction createMissingPluginError(pluginName) {\n return new ErrorInfo(`${pluginName} plugin not provided`, 40019, 400);\n}\nfunction throwMissingPluginError(pluginName) {\n throw createMissingPluginError(pluginName);\n}\nasync function withTimeoutAsync(promise, timeout = 5e3, err = \"Timeout expired\") {\n const e = new ErrorInfo(err, 5e4, 500);\n return Promise.race([promise, new Promise((_resolve, reject) => setTimeout(() => reject(e), timeout))]);\n}\n\n// package.json\nvar version = \"2.15.0\";\n\n// src/common/lib/util/defaults.ts\nvar agent = \"ably-js/\" + version;\nvar Defaults = {\n ENDPOINT: \"main\",\n ENVIRONMENT: \"\",\n REST_HOST: \"rest.ably.io\",\n REALTIME_HOST: \"realtime.ably.io\",\n FALLBACK_HOSTS: [\n \"main.a.fallback.ably-realtime.com\",\n \"main.b.fallback.ably-realtime.com\",\n \"main.c.fallback.ably-realtime.com\",\n \"main.d.fallback.ably-realtime.com\",\n \"main.e.fallback.ably-realtime.com\"\n ],\n PORT: 80,\n TLS_PORT: 443,\n TIMEOUTS: {\n /* Documented as options params: */\n disconnectedRetryTimeout: 15e3,\n suspendedRetryTimeout: 3e4,\n /* Undocumented, but part of the api and can be used by customers: */\n httpRequestTimeout: 1e4,\n httpMaxRetryDuration: 15e3,\n channelRetryTimeout: 15e3,\n fallbackRetryTimeout: 6e5,\n /* For internal / test use only: */\n connectionStateTtl: 12e4,\n realtimeRequestTimeout: 1e4,\n recvTimeout: 9e4,\n webSocketConnectTimeout: 1e4,\n webSocketSlowTimeout: 4e3\n },\n httpMaxRetryCount: 3,\n maxMessageSize: 65536,\n version,\n protocolVersion: 4,\n agent,\n getPort,\n getHttpScheme,\n getPrimaryDomainFromEndpoint,\n getEndpointFallbackHosts,\n getFallbackHosts,\n getHosts,\n checkHost,\n objectifyOptions,\n normaliseOptions,\n defaultGetHeaders,\n defaultPostHeaders\n};\nfunction getPort(options, tls) {\n return tls || options.tls ? options.tlsPort : options.port;\n}\nfunction getHttpScheme(options) {\n return options.tls ? \"https://\" : \"http://\";\n}\nfunction isFqdnIpOrLocalhost(endpoint) {\n return endpoint.includes(\".\") || endpoint.includes(\"::\") || endpoint === \"localhost\";\n}\nfunction getPrimaryDomainFromEndpoint(endpoint) {\n if (isFqdnIpOrLocalhost(endpoint))\n return endpoint;\n if (endpoint.startsWith(\"nonprod:\")) {\n const routingPolicyId = endpoint.replace(\"nonprod:\", \"\");\n return `${routingPolicyId}.realtime.ably-nonprod.net`;\n }\n return `${endpoint}.realtime.ably.net`;\n}\nfunction getEndpointFallbackHosts(endpoint) {\n if (isFqdnIpOrLocalhost(endpoint))\n return [];\n if (endpoint.startsWith(\"nonprod:\")) {\n const routingPolicyId = endpoint.replace(\"nonprod:\", \"\");\n return endpointFallbacks(routingPolicyId, \"ably-realtime-nonprod.com\");\n }\n return endpointFallbacks(endpoint, \"ably-realtime.com\");\n}\nfunction endpointFallbacks(routingPolicyId, domain) {\n return [\"a\", \"b\", \"c\", \"d\", \"e\"].map((id) => `${routingPolicyId}.${id}.fallback.${domain}`);\n}\nfunction getFallbackHosts(options) {\n const fallbackHosts = options.fallbackHosts, httpMaxRetryCount = typeof options.httpMaxRetryCount !== \"undefined\" ? options.httpMaxRetryCount : Defaults.httpMaxRetryCount;\n return fallbackHosts ? arrChooseN(fallbackHosts, httpMaxRetryCount) : [];\n}\nfunction getHosts(options) {\n return [options.primaryDomain].concat(getFallbackHosts(options));\n}\nfunction checkHost(host) {\n if (typeof host !== \"string\") {\n throw new ErrorInfo(\"host must be a string; was a \" + typeof host, 4e4, 400);\n }\n if (!host.length) {\n throw new ErrorInfo(\"host must not be zero-length\", 4e4, 400);\n }\n}\nfunction getTimeouts(options) {\n const timeouts = {};\n for (const prop in Defaults.TIMEOUTS) {\n timeouts[prop] = options[prop] || Defaults.TIMEOUTS[prop];\n }\n return timeouts;\n}\nfunction getAgentString(options) {\n let agentStr = Defaults.agent;\n if (options.agents) {\n for (var agent2 in options.agents) {\n agentStr += \" \" + agent2 + \"/\" + options.agents[agent2];\n }\n }\n return agentStr;\n}\nfunction objectifyOptions(options, allowKeyOrToken, sourceForErrorMessage, logger, modularPluginsToInclude) {\n if (options === void 0) {\n const msg = allowKeyOrToken ? `${sourceForErrorMessage} must be initialized with either a client options object, an Ably API key, or an Ably Token` : `${sourceForErrorMessage} must be initialized with a client options object`;\n logger_default.logAction(logger, logger_default.LOG_ERROR, `${sourceForErrorMessage}()`, msg);\n throw new Error(msg);\n }\n let optionsObj;\n if (typeof options === \"string\") {\n if (options.indexOf(\":\") == -1) {\n if (!allowKeyOrToken) {\n const msg = `${sourceForErrorMessage} cannot be initialized with just an Ably Token; you must provide a client options object with a \\`plugins\\` property. (Set this Ably Token as the object\\u2019s \\`token\\` property.)`;\n logger_default.logAction(logger, logger_default.LOG_ERROR, `${sourceForErrorMessage}()`, msg);\n throw new Error(msg);\n }\n optionsObj = { token: options };\n } else {\n if (!allowKeyOrToken) {\n const msg = `${sourceForErrorMessage} cannot be initialized with just an Ably API key; you must provide a client options object with a \\`plugins\\` property. (Set this Ably API key as the object\\u2019s \\`key\\` property.)`;\n logger_default.logAction(logger, logger_default.LOG_ERROR, `${sourceForErrorMessage}()`, msg);\n throw new Error(msg);\n }\n optionsObj = { key: options };\n }\n } else {\n optionsObj = options;\n }\n if (modularPluginsToInclude) {\n optionsObj = __spreadProps(__spreadValues({}, optionsObj), { plugins: __spreadValues(__spreadValues({}, modularPluginsToInclude), optionsObj.plugins) });\n }\n return optionsObj;\n}\nfunction checkIfClientOptionsAreValid(options) {\n if (options.endpoint && (options.environment || options.restHost || options.realtimeHost)) {\n throw new ErrorInfo(\n \"The `endpoint` option cannot be used in conjunction with the `environment`, `restHost`, or `realtimeHost` options.\",\n 40106,\n 400\n );\n }\n if (options.environment && (options.restHost || options.realtimeHost)) {\n throw new ErrorInfo(\n \"The `environment` option cannot be used in conjunction with the `restHost`, or `realtimeHost` options.\",\n 40106,\n 400\n );\n }\n}\nfunction normaliseOptions(options, MsgPack, logger) {\n const loggerToUse = logger != null ? logger : logger_default.defaultLogger;\n if (options.environment) {\n loggerToUse.deprecated(\"The `environment` client option\", \"Use the `endpoint` client option instead.\");\n }\n if (options.restHost) {\n loggerToUse.deprecated(\"The `restHost` client option\", \"Use the `endpoint` client option instead.\");\n }\n if (options.realtimeHost) {\n loggerToUse.deprecated(\"The `realtimeHost` client option\", \"Use the `endpoint` client option instead.\");\n }\n checkIfClientOptionsAreValid(options);\n if (typeof options.recover === \"function\" && options.closeOnUnload === true) {\n logger_default.logAction(\n loggerToUse,\n logger_default.LOG_ERROR,\n \"Defaults.normaliseOptions\",\n \"closeOnUnload was true and a session recovery function was set - these are mutually exclusive, so unsetting the latter\"\n );\n options.recover = void 0;\n }\n if (!(\"closeOnUnload\" in options)) {\n options.closeOnUnload = !options.recover;\n }\n if (!(\"queueMessages\" in options))\n options.queueMessages = true;\n const endpoint = options.endpoint || Defaults.ENDPOINT;\n if (!options.fallbackHosts && !options.restHost && !options.realtimeHost && !options.port && !options.tlsPort) {\n options.fallbackHosts = getEndpointFallbackHosts(options.environment || endpoint);\n }\n const primaryDomainFromEnvironment = options.environment && `${options.environment}.realtime.ably.net`;\n const primaryDomainFromLegacyOptions = options.restHost || options.realtimeHost || primaryDomainFromEnvironment;\n const primaryDomain = primaryDomainFromLegacyOptions || getPrimaryDomainFromEndpoint(endpoint);\n (options.fallbackHosts || []).concat(primaryDomain).forEach(checkHost);\n options.port = options.port || Defaults.PORT;\n options.tlsPort = options.tlsPort || Defaults.TLS_PORT;\n if (!(\"tls\" in options))\n options.tls = true;\n const timeouts = getTimeouts(options);\n if (MsgPack) {\n if (\"useBinaryProtocol\" in options) {\n options.useBinaryProtocol = Platform.Config.supportsBinary && options.useBinaryProtocol;\n } else {\n options.useBinaryProtocol = Platform.Config.preferBinary;\n }\n } else {\n options.useBinaryProtocol = false;\n }\n const headers = {};\n if (options.clientId) {\n headers[\"X-Ably-ClientId\"] = Platform.BufferUtils.base64Encode(Platform.BufferUtils.utf8Encode(options.clientId));\n }\n if (!(\"idempotentRestPublishing\" in options)) {\n options.idempotentRestPublishing = true;\n }\n let connectivityCheckParams = null;\n let connectivityCheckUrl = options.connectivityCheckUrl;\n if (options.connectivityCheckUrl) {\n let [uri, qs] = options.connectivityCheckUrl.split(\"?\");\n connectivityCheckParams = qs ? parseQueryString(qs) : {};\n if (uri.indexOf(\"://\") === -1) {\n uri = \"https://\" + uri;\n }\n connectivityCheckUrl = uri;\n }\n let wsConnectivityCheckUrl = options.wsConnectivityCheckUrl;\n if (wsConnectivityCheckUrl && wsConnectivityCheckUrl.indexOf(\"://\") === -1) {\n wsConnectivityCheckUrl = \"wss://\" + wsConnectivityCheckUrl;\n }\n return __spreadProps(__spreadValues({}, options), {\n primaryDomain,\n maxMessageSize: options.maxMessageSize || Defaults.maxMessageSize,\n timeouts,\n connectivityCheckParams,\n connectivityCheckUrl,\n wsConnectivityCheckUrl,\n headers\n });\n}\nfunction normaliseChannelOptions(Crypto2, logger, options) {\n const channelOptions = options || {};\n if (channelOptions.cipher) {\n if (!Crypto2)\n throwMissingPluginError(\"Crypto\");\n const cipher = Crypto2.getCipher(channelOptions.cipher, logger);\n channelOptions.cipher = cipher.cipherParams;\n channelOptions.channelCipher = cipher.cipher;\n } else if (\"cipher\" in channelOptions) {\n channelOptions.cipher = void 0;\n channelOptions.channelCipher = null;\n }\n return channelOptions;\n}\nvar contentTypes = {\n json: \"application/json\",\n xml: \"application/xml\",\n html: \"text/html\",\n msgpack: \"application/x-msgpack\",\n text: \"text/plain\"\n};\nvar defaultHeadersOptions = {\n format: \"json\" /* json */,\n protocolVersion: Defaults.protocolVersion\n};\nfunction defaultGetHeaders(options, { format, protocolVersion = defaultHeadersOptions.protocolVersion } = {}) {\n const accept = contentTypes[format != null ? format : options.useBinaryProtocol ? \"msgpack\" /* msgpack */ : \"json\" /* json */];\n return {\n accept,\n \"X-Ably-Version\": protocolVersion.toString(),\n \"Ably-Agent\": getAgentString(options)\n };\n}\nfunction defaultPostHeaders(options, { format, protocolVersion = defaultHeadersOptions.protocolVersion } = {}) {\n const accept = contentTypes[format != null ? format : options.useBinaryProtocol ? \"msgpack\" /* msgpack */ : \"json\" /* json */];\n const contentType = accept;\n return {\n accept,\n \"content-type\": contentType,\n \"X-Ably-Version\": protocolVersion.toString(),\n \"Ably-Agent\": getAgentString(options)\n };\n}\nvar defaults_default = Defaults;\nfunction getDefaults(platformDefaults) {\n return Object.assign(Defaults, platformDefaults);\n}\n\n// src/common/lib/util/multicaster.ts\nvar Multicaster = class _Multicaster {\n // Private constructor; use static Multicaster.create instead\n constructor(logger, members) {\n this.logger = logger;\n this.members = members || [];\n }\n call(err, result) {\n for (const member of this.members) {\n if (member) {\n try {\n member(err, result);\n } catch (e) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_ERROR,\n \"Multicaster multiple callback handler\",\n \"Unexpected exception: \" + e + \"; stack = \" + e.stack\n );\n }\n }\n }\n }\n push(...args) {\n this.members.push(...args);\n }\n createPromise() {\n return new Promise((resolve, reject) => {\n this.push((err, result) => {\n err ? reject(err) : resolve(result);\n });\n });\n }\n resolveAll(result) {\n this.call(null, result);\n }\n rejectAll(err) {\n this.call(err);\n }\n static create(logger, members) {\n const instance = new _Multicaster(logger, members);\n return Object.assign((err, result) => instance.call(err, result), {\n push: (fn) => instance.push(fn),\n createPromise: () => instance.createPromise(),\n resolveAll: (result) => instance.resolveAll(result),\n rejectAll: (err) => instance.rejectAll(err)\n });\n }\n};\nvar multicaster_default = Multicaster;\n\n// src/common/constants/HttpMethods.ts\nvar HttpMethods = /* @__PURE__ */ ((HttpMethods2) => {\n HttpMethods2[\"Get\"] = \"get\";\n HttpMethods2[\"Delete\"] = \"delete\";\n HttpMethods2[\"Post\"] = \"post\";\n HttpMethods2[\"Put\"] = \"put\";\n HttpMethods2[\"Patch\"] = \"patch\";\n return HttpMethods2;\n})(HttpMethods || {});\nvar HttpMethods_default = HttpMethods;\n\n// src/common/constants/HttpStatusCodes.ts\nvar HttpStatusCodes = /* @__PURE__ */ ((HttpStatusCodes2) => {\n HttpStatusCodes2[HttpStatusCodes2[\"Success\"] = 200] = \"Success\";\n HttpStatusCodes2[HttpStatusCodes2[\"NoContent\"] = 204] = \"NoContent\";\n HttpStatusCodes2[HttpStatusCodes2[\"BadRequest\"] = 400] = \"BadRequest\";\n HttpStatusCodes2[HttpStatusCodes2[\"Unauthorized\"] = 401] = \"Unauthorized\";\n HttpStatusCodes2[HttpStatusCodes2[\"Forbidden\"] = 403] = \"Forbidden\";\n HttpStatusCodes2[HttpStatusCodes2[\"RequestTimeout\"] = 408] = \"RequestTimeout\";\n HttpStatusCodes2[HttpStatusCodes2[\"InternalServerError\"] = 500] = \"InternalServerError\";\n return HttpStatusCodes2;\n})(HttpStatusCodes || {});\nfunction isSuccessCode(statusCode) {\n return statusCode >= 200 /* Success */ && statusCode < 400 /* BadRequest */;\n}\nvar HttpStatusCodes_default = HttpStatusCodes;\n\n// src/common/lib/client/auth.ts\nvar MAX_TOKEN_LENGTH = Math.pow(2, 17);\nfunction random() {\n return (\"000000\" + Math.floor(Math.random() * 1e16)).slice(-16);\n}\nfunction isRealtime(client) {\n return !!client.connection;\n}\nfunction normaliseAuthcallbackError(err) {\n if (!isErrorInfoOrPartialErrorInfo(err)) {\n return new ErrorInfo(inspectError(err), err.code || 40170, err.statusCode || 401);\n }\n if (!err.code) {\n if (err.statusCode === 403) {\n err.code = 40300;\n } else {\n err.code = 40170;\n err.statusCode = 401;\n }\n }\n return err;\n}\nvar hmac = (text, key) => {\n const bufferUtils = Platform.BufferUtils;\n const textBuffer = bufferUtils.utf8Encode(text);\n const keyBuffer = bufferUtils.utf8Encode(key);\n const digest = bufferUtils.hmacSha256(textBuffer, keyBuffer);\n return bufferUtils.base64Encode(digest);\n};\nfunction c14n(capability) {\n if (!capability)\n return \"\";\n if (typeof capability == \"string\")\n capability = JSON.parse(capability);\n const c14nCapability = /* @__PURE__ */ Object.create(null);\n const keys = keysArray(capability, true);\n if (!keys)\n return \"\";\n keys.sort();\n for (let i = 0; i < keys.length; i++) {\n c14nCapability[keys[i]] = capability[keys[i]].sort();\n }\n return JSON.stringify(c14nCapability);\n}\nfunction logAndValidateTokenAuthMethod(authOptions, logger) {\n if (authOptions.authCallback) {\n logger_default.logAction(logger, logger_default.LOG_MINOR, \"Auth()\", \"using token auth with authCallback\");\n } else if (authOptions.authUrl) {\n logger_default.logAction(logger, logger_default.LOG_MINOR, \"Auth()\", \"using token auth with authUrl\");\n } else if (authOptions.key) {\n logger_default.logAction(logger, logger_default.LOG_MINOR, \"Auth()\", \"using token auth with client-side signing\");\n } else if (authOptions.tokenDetails) {\n logger_default.logAction(logger, logger_default.LOG_MINOR, \"Auth()\", \"using token auth with supplied token only\");\n } else {\n const msg = \"authOptions must include valid authentication parameters\";\n logger_default.logAction(logger, logger_default.LOG_ERROR, \"Auth()\", msg);\n throw new Error(msg);\n }\n}\nfunction basicAuthForced(options) {\n return \"useTokenAuth\" in options && !options.useTokenAuth;\n}\nfunction useTokenAuth(options) {\n return options.useTokenAuth || !basicAuthForced(options) && (options.authCallback || options.authUrl || options.token || options.tokenDetails);\n}\nfunction noWayToRenew(options) {\n return !options.key && !options.authCallback && !options.authUrl;\n}\nvar trId = 0;\nfunction getTokenRequestId() {\n return trId++;\n}\nvar Auth = class {\n constructor(client, options) {\n // This initialization is always overwritten and only used to prevent a TypeScript compiler error\n this.authOptions = {};\n this.client = client;\n this.tokenParams = options.defaultTokenParams || {};\n this.currentTokenRequestId = null;\n this.waitingForTokenRequest = null;\n if (useTokenAuth(options)) {\n if (noWayToRenew(options)) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_ERROR,\n \"Auth()\",\n \"Warning: library initialized with a token literal without any way to renew the token when it expires (no authUrl, authCallback, or key). See https://help.ably.io/error/40171 for help\"\n );\n }\n this._saveTokenOptions(options.defaultTokenParams, options);\n logAndValidateTokenAuthMethod(this.authOptions, this.logger);\n } else {\n if (!options.key) {\n const msg = \"No authentication options provided; need one of: key, authUrl, or authCallback (or for testing only, token or tokenDetails)\";\n logger_default.logAction(this.logger, logger_default.LOG_ERROR, \"Auth()\", msg);\n throw new ErrorInfo(msg, 40160, 401);\n }\n logger_default.logAction(this.logger, logger_default.LOG_MINOR, \"Auth()\", \"anonymous, using basic auth\");\n this._saveBasicOptions(options);\n }\n }\n get logger() {\n return this.client.logger;\n }\n async authorize(tokenParams, authOptions) {\n if (authOptions && authOptions.key && this.authOptions.key !== authOptions.key) {\n throw new ErrorInfo(\"Unable to update auth options with incompatible key\", 40102, 401);\n }\n try {\n let tokenDetails = await this._forceNewToken(tokenParams != null ? tokenParams : null, authOptions != null ? authOptions : null);\n if (isRealtime(this.client)) {\n return new Promise((resolve, reject) => {\n this.client.connection.connectionManager.onAuthUpdated(\n tokenDetails,\n (err, tokenDetails2) => err ? reject(err) : resolve(tokenDetails2)\n );\n });\n } else {\n return tokenDetails;\n }\n } catch (err) {\n if (this.client.connection && err.statusCode === HttpStatusCodes_default.Forbidden) {\n this.client.connection.connectionManager.actOnErrorFromAuthorize(err);\n }\n throw err;\n }\n }\n /* For internal use, eg by connectionManager - useful when want to call back\n * as soon as we have the new token, rather than waiting for it to take\n * effect on the connection as #authorize does */\n async _forceNewToken(tokenParams, authOptions) {\n this.tokenDetails = null;\n this._saveTokenOptions(tokenParams, authOptions);\n logAndValidateTokenAuthMethod(this.authOptions, this.logger);\n try {\n return this._ensureValidAuthCredentials(true);\n } finally {\n delete this.tokenParams.timestamp;\n delete this.authOptions.queryTime;\n }\n }\n async requestToken(tokenParams, authOptions) {\n const resolvedAuthOptions = authOptions || this.authOptions;\n const resolvedTokenParams = tokenParams || copy(this.tokenParams);\n let tokenRequestCallback, client = this.client;\n if (resolvedAuthOptions.authCallback) {\n logger_default.logAction(this.logger, logger_default.LOG_MINOR, \"Auth.requestToken()\", \"using token auth with authCallback\");\n tokenRequestCallback = resolvedAuthOptions.authCallback;\n } else if (resolvedAuthOptions.authUrl) {\n logger_default.logAction(this.logger, logger_default.LOG_MINOR, \"Auth.requestToken()\", \"using token auth with authUrl\");\n tokenRequestCallback = (params, cb) => {\n const authHeaders = mixin(\n { accept: \"application/json, text/plain\" },\n resolvedAuthOptions.authHeaders\n );\n const usePost = resolvedAuthOptions.authMethod && resolvedAuthOptions.authMethod.toLowerCase() === \"post\";\n let providedQsParams;\n const queryIdx = resolvedAuthOptions.authUrl.indexOf(\"?\");\n if (queryIdx > -1) {\n providedQsParams = parseQueryString(resolvedAuthOptions.authUrl.slice(queryIdx));\n resolvedAuthOptions.authUrl = resolvedAuthOptions.authUrl.slice(0, queryIdx);\n if (!usePost) {\n resolvedAuthOptions.authParams = mixin(\n providedQsParams,\n resolvedAuthOptions.authParams\n );\n }\n }\n const authParams = mixin({}, resolvedAuthOptions.authParams || {}, params);\n const authUrlRequestCallback = (result) => {\n var _a2, _b;\n let body = (_a2 = result.body) != null ? _a2 : null;\n let contentType = null;\n if (result.error) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MICRO,\n \"Auth.requestToken().tokenRequestCallback\",\n \"Received Error: \" + inspectError(result.error)\n );\n } else {\n const contentTypeHeaderOrHeaders = (_b = result.headers[\"content-type\"]) != null ? _b : null;\n if (Array.isArray(contentTypeHeaderOrHeaders)) {\n contentType = contentTypeHeaderOrHeaders.join(\", \");\n } else {\n contentType = contentTypeHeaderOrHeaders;\n }\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MICRO,\n \"Auth.requestToken().tokenRequestCallback\",\n \"Received; content-type: \" + contentType + \"; body: \" + inspectBody(body)\n );\n }\n if (result.error) {\n cb(result.error, null);\n return;\n }\n if (result.unpacked) {\n cb(null, body);\n return;\n }\n if (Platform.BufferUtils.isBuffer(body))\n body = body.toString();\n if (!contentType) {\n cb(new ErrorInfo(\"authUrl response is missing a content-type header\", 40170, 401), null);\n return;\n }\n const json = contentType.indexOf(\"application/json\") > -1, text = contentType.indexOf(\"text/plain\") > -1 || contentType.indexOf(\"application/jwt\") > -1;\n if (!json && !text) {\n cb(\n new ErrorInfo(\n \"authUrl responded with unacceptable content-type \" + contentType + \", should be either text/plain, application/jwt or application/json\",\n 40170,\n 401\n ),\n null\n );\n return;\n }\n if (json) {\n if (body.length > MAX_TOKEN_LENGTH) {\n cb(new ErrorInfo(\"authUrl response exceeded max permitted length\", 40170, 401), null);\n return;\n }\n try {\n body = JSON.parse(body);\n } catch (e) {\n cb(\n new ErrorInfo(\n \"Unexpected error processing authURL response; err = \" + e.message,\n 40170,\n 401\n ),\n null\n );\n return;\n }\n }\n cb(null, body, contentType);\n };\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MICRO,\n \"Auth.requestToken().tokenRequestCallback\",\n \"Requesting token from \" + resolvedAuthOptions.authUrl + \"; Params: \" + JSON.stringify(authParams) + \"; method: \" + (usePost ? \"POST\" : \"GET\")\n );\n if (usePost) {\n const headers = authHeaders || {};\n headers[\"content-type\"] = \"application/x-www-form-urlencoded\";\n const body = toQueryString(authParams).slice(1);\n whenPromiseSettles(\n this.client.http.doUri(\n HttpMethods_default.Post,\n resolvedAuthOptions.authUrl,\n headers,\n body,\n providedQsParams\n ),\n (err, result) => err ? authUrlRequestCallback(err) : authUrlRequestCallback(result)\n );\n } else {\n whenPromiseSettles(\n this.client.http.doUri(HttpMethods_default.Get, resolvedAuthOptions.authUrl, authHeaders || {}, null, authParams),\n (err, result) => err ? authUrlRequestCallback(err) : authUrlRequestCallback(result)\n );\n }\n };\n } else if (resolvedAuthOptions.key) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MINOR,\n \"Auth.requestToken()\",\n \"using token auth with client-side signing\"\n );\n tokenRequestCallback = (params, cb) => {\n whenPromiseSettles(\n this.createTokenRequest(params, resolvedAuthOptions),\n (err, result) => cb(err, result != null ? result : null)\n );\n };\n } else {\n const msg = \"Need a new token, but authOptions does not include any way to request one (no authUrl, authCallback, or key)\";\n logger_default.logAction(\n this.logger,\n logger_default.LOG_ERROR,\n \"Auth()\",\n \"library initialized with a token literal without any way to renew the token when it expires (no authUrl, authCallback, or key). See https://help.ably.io/error/40171 for help\"\n );\n throw new ErrorInfo(msg, 40171, 403);\n }\n if (\"capability\" in resolvedTokenParams)\n resolvedTokenParams.capability = c14n(\n resolvedTokenParams.capability\n );\n const tokenRequest = (signedTokenParams, tokenCb) => {\n const keyName = signedTokenParams.keyName, path = \"/keys/\" + keyName + \"/requestToken\", tokenUri = function(host) {\n return client.baseUri(host) + path;\n };\n const requestHeaders = defaults_default.defaultPostHeaders(this.client.options, { format: \"json\" /* json */ });\n if (resolvedAuthOptions.requestHeaders)\n mixin(requestHeaders, resolvedAuthOptions.requestHeaders);\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MICRO,\n \"Auth.requestToken().requestToken\",\n \"Sending POST to \" + path + \"; Token params: \" + JSON.stringify(signedTokenParams)\n );\n whenPromiseSettles(\n this.client.http.do(HttpMethods_default.Post, tokenUri, requestHeaders, JSON.stringify(signedTokenParams), null),\n (err, result) => err ? tokenCb(err) : tokenCb(result.error, result.body, result.unpacked)\n );\n };\n return new Promise((resolve, reject) => {\n let tokenRequestCallbackTimeoutExpired = false, timeoutLength = this.client.options.timeouts.realtimeRequestTimeout, tokenRequestCallbackTimeout = setTimeout(() => {\n tokenRequestCallbackTimeoutExpired = true;\n const msg = \"Token request callback timed out after \" + timeoutLength / 1e3 + \" seconds\";\n logger_default.logAction(this.logger, logger_default.LOG_ERROR, \"Auth.requestToken()\", msg);\n reject(new ErrorInfo(msg, 40170, 401));\n }, timeoutLength);\n tokenRequestCallback(resolvedTokenParams, (err, tokenRequestOrDetails, contentType) => {\n if (tokenRequestCallbackTimeoutExpired)\n return;\n clearTimeout(tokenRequestCallbackTimeout);\n if (err) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_ERROR,\n \"Auth.requestToken()\",\n \"token request signing call returned error; err = \" + inspectError(err)\n );\n reject(normaliseAuthcallbackError(err));\n return;\n }\n if (typeof tokenRequestOrDetails === \"string\") {\n if (tokenRequestOrDetails.length === 0) {\n reject(new ErrorInfo(\"Token string is empty\", 40170, 401));\n } else if (tokenRequestOrDetails.length > MAX_TOKEN_LENGTH) {\n reject(\n new ErrorInfo(\n \"Token string exceeded max permitted length (was \" + tokenRequestOrDetails.length + \" bytes)\",\n 40170,\n 401\n )\n );\n } else if (tokenRequestOrDetails === \"undefined\" || tokenRequestOrDetails === \"null\") {\n reject(new ErrorInfo(\"Token string was literal null/undefined\", 40170, 401));\n } else if (tokenRequestOrDetails[0] === \"{\" && !(contentType && contentType.indexOf(\"application/jwt\") > -1)) {\n reject(\n new ErrorInfo(\n \"Token was double-encoded; make sure you're not JSON-encoding an already encoded token request or details\",\n 40170,\n 401\n )\n );\n } else {\n resolve({ token: tokenRequestOrDetails });\n }\n return;\n }\n if (typeof tokenRequestOrDetails !== \"object\" || tokenRequestOrDetails === null) {\n const msg = \"Expected token request callback to call back with a token string or token request/details object, but got a \" + typeof tokenRequestOrDetails;\n logger_default.logAction(this.logger, logger_default.LOG_ERROR, \"Auth.requestToken()\", msg);\n reject(new ErrorInfo(msg, 40170, 401));\n return;\n }\n const objectSize = JSON.stringify(tokenRequestOrDetails).length;\n if (objectSize > MAX_TOKEN_LENGTH && !resolvedAuthOptions.suppressMaxLengthCheck) {\n reject(\n new ErrorInfo(\n \"Token request/details object exceeded max permitted stringified size (was \" + objectSize + \" bytes)\",\n 40170,\n 401\n )\n );\n return;\n }\n if (\"issued\" in tokenRequestOrDetails) {\n resolve(tokenRequestOrDetails);\n return;\n }\n if (!(\"keyName\" in tokenRequestOrDetails)) {\n const msg = \"Expected token request callback to call back with a token string, token request object, or token details object\";\n logger_default.logAction(this.logger, logger_default.LOG_ERROR, \"Auth.requestToken()\", msg);\n reject(new ErrorInfo(msg, 40170, 401));\n return;\n }\n tokenRequest(tokenRequestOrDetails, (err2, tokenResponse, unpacked) => {\n if (err2) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_ERROR,\n \"Auth.requestToken()\",\n \"token request API call returned error; err = \" + inspectError(err2)\n );\n reject(normaliseAuthcallbackError(err2));\n return;\n }\n if (!unpacked)\n tokenResponse = JSON.parse(tokenResponse);\n logger_default.logAction(this.logger, logger_default.LOG_MINOR, \"Auth.getToken()\", \"token received\");\n resolve(tokenResponse);\n });\n });\n });\n }\n /**\n * Create and sign a token request based on the given options.\n * NOTE this can only be used when the key value is available locally.\n * Otherwise, signed token requests must be obtained from the key\n * owner (either using the token request callback or url).\n *\n * @param authOptions\n * an object containing the request options:\n * - key: the key to use. If not specified, a key passed in constructing\n * the Rest interface will be used\n *\n * - queryTime (optional) boolean indicating that the ably system should be\n * queried for the current time when none is specified explicitly\n *\n * - requestHeaders (optional, unsupported, for testing only) extra headers to add to the\n * requestToken request\n *\n * @param tokenParams\n * an object containing the parameters for the requested token:\n * - ttl: (optional) the requested life of the token in ms. If none is specified\n * a default of 1 hour is provided. The maximum lifetime is 24hours; any request\n * exceeding that lifetime will be rejected with an error.\n *\n * - capability: (optional) the capability to associate with the access token.\n * If none is specified, a token will be requested with all of the\n * capabilities of the specified key.\n *\n * - clientId: (optional) a client ID to associate with the token; if not\n * specified, a clientId passed in constructing the Rest interface will be used\n *\n * - timestamp: (optional) the time in ms since the epoch. If none is specified,\n * the system will be queried for a time value to use.\n */\n async createTokenRequest(tokenParams, authOptions) {\n authOptions = authOptions || this.authOptions;\n tokenParams = tokenParams || copy(this.tokenParams);\n const key = authOptions.key;\n if (!key) {\n throw new ErrorInfo(\"No key specified\", 40101, 403);\n }\n const keyParts = key.split(\":\"), keyName = keyParts[0], keySecret = keyParts[1];\n if (!keySecret) {\n throw new ErrorInfo(\"Invalid key specified\", 40101, 403);\n }\n if (tokenParams.clientId === \"\") {\n throw new ErrorInfo(\"clientId can\\u2019t be an empty string\", 40012, 400);\n }\n if (\"capability\" in tokenParams) {\n tokenParams.capability = c14n(tokenParams.capability);\n }\n const request = mixin({ keyName }, tokenParams), clientId = tokenParams.clientId || \"\", ttl = tokenParams.ttl || \"\", capability = tokenParams.capability || \"\";\n if (!request.timestamp) {\n request.timestamp = await this._getTimestamp(authOptions && authOptions.queryTime);\n }\n const nonce = request.nonce || (request.nonce = random()), timestamp = request.timestamp;\n const signText = request.keyName + \"\\n\" + ttl + \"\\n\" + capability + \"\\n\" + clientId + \"\\n\" + timestamp + \"\\n\" + nonce + \"\\n\";\n request.mac = request.mac || hmac(signText, keySecret);\n logger_default.logAction(this.logger, logger_default.LOG_MINOR, \"Auth.getTokenRequest()\", \"generated signed request\");\n return request;\n }\n /**\n * Get the auth query params to use for a websocket connection,\n * based on the current auth parameters\n */\n async getAuthParams() {\n if (this.method == \"basic\")\n return { key: this.key };\n else {\n let tokenDetails = await this._ensureValidAuthCredentials(false);\n if (!tokenDetails) {\n throw new Error(\"Auth.getAuthParams(): _ensureValidAuthCredentials returned no error or tokenDetails\");\n }\n return { access_token: tokenDetails.token };\n }\n }\n /**\n * Get the authorization header to use for a REST or comet request,\n * based on the current auth parameters\n */\n async getAuthHeaders() {\n if (this.method == \"basic\") {\n return { authorization: \"Basic \" + this.basicKey };\n } else {\n const tokenDetails = await this._ensureValidAuthCredentials(false);\n if (!tokenDetails) {\n throw new Error(\"Auth.getAuthParams(): _ensureValidAuthCredentials returned no error or tokenDetails\");\n }\n return { authorization: \"Bearer \" + toBase64(tokenDetails.token) };\n }\n }\n _saveBasicOptions(authOptions) {\n this.method = \"basic\";\n this.key = authOptions.key;\n this.basicKey = toBase64(authOptions.key);\n this.authOptions = authOptions || {};\n if (\"clientId\" in authOptions) {\n this._userSetClientId(authOptions.clientId);\n }\n }\n _saveTokenOptions(tokenParams, authOptions) {\n this.method = \"token\";\n if (tokenParams) {\n this.tokenParams = tokenParams;\n }\n if (authOptions) {\n if (authOptions.token) {\n authOptions.tokenDetails = typeof authOptions.token === \"string\" ? { token: authOptions.token } : authOptions.token;\n }\n if (authOptions.tokenDetails) {\n this.tokenDetails = authOptions.tokenDetails;\n }\n if (\"clientId\" in authOptions) {\n this._userSetClientId(authOptions.clientId);\n }\n this.authOptions = authOptions;\n }\n }\n /* @param forceSupersede: force a new token request even if there's one in\n * progress, making all pending callbacks wait for the new one */\n async _ensureValidAuthCredentials(forceSupersede) {\n const token = this.tokenDetails;\n if (token) {\n if (this._tokenClientIdMismatch(token.clientId)) {\n throw new ErrorInfo(\n \"Mismatch between clientId in token (\" + token.clientId + \") and current clientId (\" + this.clientId + \")\",\n 40102,\n 403\n );\n }\n if (!this.client.isTimeOffsetSet() || !token.expires || token.expires >= this.client.getTimestampUsingOffset()) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MINOR,\n \"Auth.getToken()\",\n \"using cached token; expires = \" + token.expires\n );\n return token;\n }\n logger_default.logAction(this.logger, logger_default.LOG_MINOR, \"Auth.getToken()\", \"deleting expired token\");\n this.tokenDetails = null;\n }\n const promise = (this.waitingForTokenRequest || (this.waitingForTokenRequest = multicaster_default.create(this.logger))).createPromise();\n if (this.currentTokenRequestId !== null && !forceSupersede) {\n return promise;\n }\n const tokenRequestId = this.currentTokenRequestId = getTokenRequestId();\n let tokenResponse, caughtError = null;\n try {\n tokenResponse = await this.requestToken(this.tokenParams, this.authOptions);\n } catch (err) {\n caughtError = err;\n }\n if (this.currentTokenRequestId > tokenRequestId) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MINOR,\n \"Auth._ensureValidAuthCredentials()\",\n \"Discarding token request response; overtaken by newer one\"\n );\n return promise;\n }\n this.currentTokenRequestId = null;\n const multicaster = this.waitingForTokenRequest;\n this.waitingForTokenRequest = null;\n if (caughtError) {\n multicaster == null ? void 0 : multicaster.rejectAll(caughtError);\n return promise;\n }\n multicaster == null ? void 0 : multicaster.resolveAll(this.tokenDetails = tokenResponse);\n return promise;\n }\n /* User-set: check types, '*' is disallowed, throw any errors */\n _userSetClientId(clientId) {\n if (!(typeof clientId === \"string\" || clientId === null)) {\n throw new ErrorInfo(\"clientId must be either a string or null\", 40012, 400);\n } else if (clientId === \"*\") {\n throw new ErrorInfo(\n 'Can\\u2019t use \"*\" as a clientId as that string is reserved. (To change the default token request behaviour to use a wildcard clientId, instantiate the library with {defaultTokenParams: {clientId: \"*\"}}), or if calling authorize(), pass it in as a tokenParam: authorize({clientId: \"*\"}, authOptions)',\n 40012,\n 400\n );\n } else {\n const err = this._uncheckedSetClientId(clientId);\n if (err)\n throw err;\n }\n }\n /* Ably-set: no typechecking, '*' is allowed but not set on this.clientId), return errors to the caller */\n _uncheckedSetClientId(clientId) {\n if (this._tokenClientIdMismatch(clientId)) {\n const msg = \"Unexpected clientId mismatch: client has \" + this.clientId + \", requested \" + clientId;\n const err = new ErrorInfo(msg, 40102, 401);\n logger_default.logAction(this.logger, logger_default.LOG_ERROR, \"Auth._uncheckedSetClientId()\", msg);\n return err;\n } else {\n this.clientId = this.tokenParams.clientId = clientId;\n return null;\n }\n }\n _tokenClientIdMismatch(tokenClientId) {\n return !!(this.clientId && this.clientId !== \"*\" && tokenClientId && tokenClientId !== \"*\" && this.clientId !== tokenClientId);\n }\n static isTokenErr(error) {\n return error.code && error.code >= 40140 && error.code < 40150;\n }\n revokeTokens(specifiers, options) {\n return this.client.rest.revokeTokens(specifiers, options);\n }\n /**\n * Same as {@link BaseClient.getTimestamp} but also takes into account {@link Auth.authOptions}\n */\n async _getTimestamp(queryTime) {\n return this.client.getTimestamp(queryTime || !!this.authOptions.queryTime);\n }\n};\nvar auth_default = Auth;\n\n// src/common/types/http.ts\nfunction paramString(params) {\n const paramPairs = [];\n if (params) {\n for (const needle in params) {\n paramPairs.push(needle + \"=\" + params[needle]);\n }\n }\n return paramPairs.join(\"&\");\n}\nfunction appendingParams(uri, params) {\n return uri + (params ? \"?\" : \"\") + paramString(params);\n}\nfunction logResult(result, method, uri, params, logger) {\n if (result.error) {\n logger_default.logActionNoStrip(\n logger,\n logger_default.LOG_MICRO,\n \"Http.\" + method + \"()\",\n \"Received Error; \" + appendingParams(uri, params) + \"; Error: \" + inspectError(result.error)\n );\n } else {\n logger_default.logActionNoStrip(\n logger,\n logger_default.LOG_MICRO,\n \"Http.\" + method + \"()\",\n \"Received; \" + appendingParams(uri, params) + \"; Headers: \" + paramString(result.headers) + \"; StatusCode: \" + result.statusCode + \"; Body\" + (Platform.BufferUtils.isBuffer(result.body) ? \" (Base64): \" + Platform.BufferUtils.base64Encode(result.body) : \": \" + result.body)\n );\n }\n}\nfunction logRequest(method, uri, body, params, logger) {\n if (logger.shouldLog(logger_default.LOG_MICRO)) {\n logger_default.logActionNoStrip(\n logger,\n logger_default.LOG_MICRO,\n \"Http.\" + method + \"()\",\n \"Sending; \" + appendingParams(uri, params) + \"; Body\" + (Platform.BufferUtils.isBuffer(body) ? \" (Base64): \" + Platform.BufferUtils.base64Encode(body) : \": \" + body)\n );\n }\n}\nvar Http = class {\n constructor(client) {\n this.client = client;\n this.platformHttp = new Platform.Http(client);\n this.checkConnectivity = this.platformHttp.checkConnectivity ? () => this.platformHttp.checkConnectivity() : void 0;\n }\n get logger() {\n var _a2, _b;\n return (_b = (_a2 = this.client) == null ? void 0 : _a2.logger) != null ? _b : logger_default.defaultLogger;\n }\n get supportsAuthHeaders() {\n return this.platformHttp.supportsAuthHeaders;\n }\n get supportsLinkHeaders() {\n return this.platformHttp.supportsLinkHeaders;\n }\n _getHosts(client) {\n const connection = client.connection, connectionHost = connection && connection.connectionManager.host;\n if (connectionHost) {\n return [connectionHost].concat(defaults_default.getFallbackHosts(client.options));\n }\n return defaults_default.getHosts(client.options);\n }\n /**\n * This method will not throw any errors; rather, it will communicate any error by populating the {@link RequestResult.error} property of the returned {@link RequestResult}.\n */\n async do(method, path, headers, body, params) {\n try {\n const client = this.client;\n if (!client) {\n return { error: new ErrorInfo(\"http.do called without client\", 5e4, 500) };\n }\n const uriFromHost = typeof path === \"function\" ? path : function(host) {\n return client.baseUri(host) + path;\n };\n const currentFallback = client._currentFallback;\n if (currentFallback) {\n if (currentFallback.validUntil > Date.now()) {\n const result = await this.doUri(method, uriFromHost(currentFallback.host), headers, body, params);\n if (result.error && this.platformHttp.shouldFallback(result.error)) {\n client._currentFallback = null;\n return this.do(method, path, headers, body, params);\n }\n return result;\n } else {\n client._currentFallback = null;\n }\n }\n const hosts = this._getHosts(client);\n if (hosts.length === 1) {\n return this.doUri(method, uriFromHost(hosts[0]), headers, body, params);\n }\n let tryAHostStartedAt = null;\n const tryAHost = async (candidateHosts, persistOnSuccess) => {\n const host = candidateHosts.shift();\n tryAHostStartedAt = tryAHostStartedAt != null ? tryAHostStartedAt : /* @__PURE__ */ new Date();\n const result = await this.doUri(method, uriFromHost(host), headers, body, params);\n if (result.error && this.platformHttp.shouldFallback(result.error) && candidateHosts.length) {\n const elapsedTime = Date.now() - tryAHostStartedAt.getTime();\n if (elapsedTime > client.options.timeouts.httpMaxRetryDuration) {\n return {\n error: new ErrorInfo(\n `Timeout for trying fallback hosts retries. Total elapsed time exceeded the ${client.options.timeouts.httpMaxRetryDuration}ms limit`,\n 50003,\n 500\n )\n };\n }\n return tryAHost(candidateHosts, true);\n }\n if (persistOnSuccess) {\n client._currentFallback = {\n host,\n validUntil: Date.now() + client.options.timeouts.fallbackRetryTimeout\n };\n }\n return result;\n };\n return tryAHost(hosts);\n } catch (err) {\n return { error: new ErrorInfo(`Unexpected error in Http.do: ${inspectError(err)}`, 500, 5e4) };\n }\n }\n /**\n * This method will not throw any errors; rather, it will communicate any error by populating the {@link RequestResult.error} property of the returned {@link RequestResult}.\n */\n async doUri(method, uri, headers, body, params) {\n try {\n logRequest(method, uri, body, params, this.logger);\n const result = await this.platformHttp.doUri(method, uri, headers, body, params);\n if (this.logger.shouldLog(logger_default.LOG_MICRO)) {\n logResult(result, method, uri, params, this.logger);\n }\n return result;\n } catch (err) {\n return { error: new ErrorInfo(`Unexpected error in Http.doUri: ${inspectError(err)}`, 500, 5e4) };\n }\n }\n};\n\n// src/common/lib/util/eventemitter.ts\nfunction callListener(logger, eventThis, listener, args) {\n try {\n listener.apply(eventThis, args);\n } catch (e) {\n logger_default.logAction(\n logger,\n logger_default.LOG_ERROR,\n \"EventEmitter.emit()\",\n \"Unexpected listener exception: \" + e + \"; stack = \" + (e && e.stack)\n );\n }\n}\nfunction removeListener(targetListeners, listener, eventFilter) {\n let listeners;\n let index;\n let eventName;\n for (let targetListenersIndex = 0; targetListenersIndex < targetListeners.length; targetListenersIndex++) {\n listeners = targetListeners[targetListenersIndex];\n if (eventFilter) {\n listeners = listeners[eventFilter];\n }\n if (Array.isArray(listeners)) {\n while ((index = listeners.indexOf(listener)) !== -1) {\n listeners.splice(index, 1);\n }\n if (eventFilter && listeners.length === 0) {\n delete targetListeners[targetListenersIndex][eventFilter];\n }\n } else if (isObject(listeners)) {\n for (eventName in listeners) {\n if (Object.prototype.hasOwnProperty.call(listeners, eventName) && Array.isArray(listeners[eventName])) {\n removeListener([listeners], listener, eventName);\n }\n }\n }\n }\n}\nvar EventEmitter = class {\n constructor(logger) {\n this.logger = logger;\n this.any = [];\n this.events = /* @__PURE__ */ Object.create(null);\n this.anyOnce = [];\n this.eventsOnce = /* @__PURE__ */ Object.create(null);\n }\n on(...args) {\n if (args.length === 1) {\n const listener = args[0];\n if (typeof listener === \"function\") {\n this.any.push(listener);\n } else {\n throw new Error(\"EventListener.on(): Invalid arguments: \" + Platform.Config.inspect(args));\n }\n }\n if (args.length === 2) {\n const [event, listener] = args;\n if (typeof listener !== \"function\") {\n throw new Error(\"EventListener.on(): Invalid arguments: \" + Platform.Config.inspect(args));\n }\n if (isNil(event)) {\n this.any.push(listener);\n } else if (Array.isArray(event)) {\n event.forEach((eventName) => {\n this.on(eventName, listener);\n });\n } else {\n if (typeof event !== \"string\") {\n throw new Error(\"EventListener.on(): Invalid arguments: \" + Platform.Config.inspect(args));\n }\n const listeners = this.events[event] || (this.events[event] = []);\n listeners.push(listener);\n }\n }\n }\n off(...args) {\n if (args.length == 0 || isNil(args[0]) && isNil(args[1])) {\n this.any = [];\n this.events = /* @__PURE__ */ Object.create(null);\n this.anyOnce = [];\n this.eventsOnce = /* @__PURE__ */ Object.create(null);\n return;\n }\n const [firstArg, secondArg] = args;\n let listener = null;\n let event = null;\n if (args.length === 1 || !secondArg) {\n if (typeof firstArg === \"function\") {\n listener = firstArg;\n } else {\n event = firstArg;\n }\n } else {\n if (typeof secondArg !== \"function\") {\n throw new Error(\"EventEmitter.off(): invalid arguments:\" + Platform.Config.inspect(args));\n }\n [event, listener] = [firstArg, secondArg];\n }\n if (listener && isNil(event)) {\n removeListener([this.any, this.events, this.anyOnce, this.eventsOnce], listener);\n return;\n }\n if (Array.isArray(event)) {\n event.forEach((eventName) => {\n this.off(eventName, listener);\n });\n return;\n }\n if (typeof event !== \"string\") {\n throw new Error(\"EventEmitter.off(): invalid arguments:\" + Platform.Config.inspect(args));\n }\n if (listener) {\n removeListener([this.events, this.eventsOnce], listener, event);\n } else {\n delete this.events[event];\n delete this.eventsOnce[event];\n }\n }\n /**\n * Get the array of listeners for a given event; excludes once events\n * @param event (optional) the name of the event, or none for 'any'\n * @return array of events, or null if none\n */\n listeners(event) {\n if (event) {\n const listeners = this.events[event] || [];\n if (this.eventsOnce[event])\n Array.prototype.push.apply(listeners, this.eventsOnce[event]);\n return listeners.length ? listeners : null;\n }\n return this.any.length ? this.any : null;\n }\n /**\n * Emit an event\n * @param event the event name\n * @param args the arguments to pass to the listener\n */\n emit(event, ...args) {\n const eventThis = { event };\n const listeners = [];\n if (this.anyOnce.length) {\n Array.prototype.push.apply(listeners, this.anyOnce);\n this.anyOnce = [];\n }\n if (this.any.length) {\n Array.prototype.push.apply(listeners, this.any);\n }\n const eventsOnceListeners = this.eventsOnce[event];\n if (eventsOnceListeners) {\n Array.prototype.push.apply(listeners, eventsOnceListeners);\n delete this.eventsOnce[event];\n }\n const eventsListeners = this.events[event];\n if (eventsListeners) {\n Array.prototype.push.apply(listeners, eventsListeners);\n }\n listeners.forEach((listener) => {\n callListener(this.logger, eventThis, listener, args);\n });\n }\n once(...args) {\n const argCount = args.length;\n if (argCount === 0 || argCount === 1 && typeof args[0] !== \"function\") {\n const event = args[0];\n return new Promise((resolve) => {\n this.once(event, resolve);\n });\n }\n const [firstArg, secondArg] = args;\n if (args.length === 1 && typeof firstArg === \"function\") {\n this.anyOnce.push(firstArg);\n } else if (isNil(firstArg)) {\n if (typeof secondArg !== \"function\") {\n throw new Error(\"EventEmitter.once(): Invalid arguments:\" + Platform.Config.inspect(args));\n }\n this.anyOnce.push(secondArg);\n } else if (Array.isArray(firstArg)) {\n const self2 = this;\n const listenerWrapper = function() {\n const innerArgs = Array.prototype.slice.call(arguments);\n firstArg.forEach(function(eventName) {\n self2.off(eventName, listenerWrapper);\n });\n if (typeof secondArg !== \"function\") {\n throw new Error(\"EventEmitter.once(): Invalid arguments:\" + Platform.Config.inspect(args));\n }\n secondArg.apply(this, innerArgs);\n };\n firstArg.forEach(function(eventName) {\n self2.on(eventName, listenerWrapper);\n });\n } else {\n if (typeof firstArg !== \"string\") {\n throw new Error(\"EventEmitter.once(): Invalid arguments:\" + Platform.Config.inspect(args));\n }\n const listeners = this.eventsOnce[firstArg] || (this.eventsOnce[firstArg] = []);\n if (secondArg) {\n if (typeof secondArg !== \"function\") {\n throw new Error(\"EventEmitter.once(): Invalid arguments:\" + Platform.Config.inspect(args));\n }\n listeners.push(secondArg);\n }\n }\n }\n /**\n * Listen for a single occurrence of a state event and fire immediately if currentState matches targetState\n * @param targetState the name of the state event to listen to\n * @param currentState the name of the current state of this object\n */\n async whenState(targetState, currentState) {\n if (typeof targetState !== \"string\" || typeof currentState !== \"string\") {\n throw new Error(\"whenState requires a valid state String argument\");\n }\n if (targetState === currentState) {\n return null;\n } else {\n return this.once(targetState);\n }\n }\n};\nvar eventemitter_default = EventEmitter;\n\n// src/common/lib/types/protocolmessagecommon.ts\nvar actions = {\n HEARTBEAT: 0,\n ACK: 1,\n NACK: 2,\n CONNECT: 3,\n CONNECTED: 4,\n DISCONNECT: 5,\n DISCONNECTED: 6,\n CLOSE: 7,\n CLOSED: 8,\n ERROR: 9,\n ATTACH: 10,\n ATTACHED: 11,\n DETACH: 12,\n DETACHED: 13,\n PRESENCE: 14,\n MESSAGE: 15,\n SYNC: 16,\n AUTH: 17,\n ACTIVATE: 18,\n OBJECT: 19,\n OBJECT_SYNC: 20,\n ANNOTATION: 21\n};\nvar ActionName = [];\nObject.keys(actions).forEach(function(name) {\n ActionName[actions[name]] = name;\n});\nvar flags = {\n /* Channel attach state flags */\n HAS_PRESENCE: 1 << 0,\n HAS_BACKLOG: 1 << 1,\n RESUMED: 1 << 2,\n TRANSIENT: 1 << 4,\n ATTACH_RESUME: 1 << 5,\n HAS_OBJECTS: 1 << 7,\n /* Channel mode flags */\n PRESENCE: 1 << 16,\n PUBLISH: 1 << 17,\n SUBSCRIBE: 1 << 18,\n PRESENCE_SUBSCRIBE: 1 << 19,\n ANNOTATION_PUBLISH: 1 << 21,\n ANNOTATION_SUBSCRIBE: 1 << 22,\n OBJECT_SUBSCRIBE: 1 << 24,\n OBJECT_PUBLISH: 1 << 25\n};\nvar flagNames = Object.keys(flags);\nflags.MODE_ALL = flags.PRESENCE | flags.PUBLISH | flags.SUBSCRIBE | flags.PRESENCE_SUBSCRIBE | flags.ANNOTATION_PUBLISH | flags.ANNOTATION_SUBSCRIBE | flags.OBJECT_SUBSCRIBE | flags.OBJECT_PUBLISH;\nvar channelModes = [\n \"PRESENCE\",\n \"PUBLISH\",\n \"SUBSCRIBE\",\n \"PRESENCE_SUBSCRIBE\",\n \"ANNOTATION_PUBLISH\",\n \"ANNOTATION_SUBSCRIBE\",\n \"OBJECT_SUBSCRIBE\",\n \"OBJECT_PUBLISH\"\n];\n\n// src/common/lib/types/basemessage.ts\nfunction normaliseContext(context) {\n if (!context || !context.channelOptions) {\n return {\n channelOptions: context,\n plugins: {},\n baseEncodedPreviousPayload: void 0\n };\n }\n return context;\n}\nfunction normalizeCipherOptions(Crypto2, logger, options) {\n if (options && options.cipher) {\n if (!Crypto2)\n throwMissingPluginError(\"Crypto\");\n const cipher = Crypto2.getCipher(options.cipher, logger);\n return {\n cipher: cipher.cipherParams,\n channelCipher: cipher.cipher\n };\n }\n return options != null ? options : {};\n}\nasync function encrypt(msg, cipherOptions) {\n const { data, encoding } = await encryptData(msg.data, msg.encoding, cipherOptions);\n msg.data = data;\n msg.encoding = encoding;\n return msg;\n}\nasync function encryptData(data, encoding, cipherOptions) {\n let cipher = cipherOptions.channelCipher;\n let dataToEncrypt = data;\n let finalEncoding = encoding ? encoding + \"/\" : \"\";\n if (!Platform.BufferUtils.isBuffer(dataToEncrypt)) {\n dataToEncrypt = Platform.BufferUtils.utf8Encode(String(dataToEncrypt));\n finalEncoding = finalEncoding + \"utf-8/\";\n }\n const ciphertext = await cipher.encrypt(dataToEncrypt);\n finalEncoding = finalEncoding + \"cipher+\" + cipher.algorithm;\n return {\n data: ciphertext,\n encoding: finalEncoding\n };\n}\nasync function encode(msg, options) {\n const { data, encoding } = encodeData(msg.data, msg.encoding);\n msg.data = data;\n msg.encoding = encoding;\n if (options != null && options.cipher) {\n return encrypt(msg, options);\n } else {\n return msg;\n }\n}\nfunction encodeData(data, encoding) {\n const nativeDataType = typeof data == \"string\" || Platform.BufferUtils.isBuffer(data) || data === null || data === void 0;\n if (nativeDataType) {\n return {\n data,\n encoding\n };\n }\n if (isObject(data) || Array.isArray(data)) {\n return {\n data: JSON.stringify(data),\n encoding: encoding ? encoding + \"/json\" : \"json\"\n };\n }\n throw new ErrorInfo(\"Data type is unsupported\", 40013, 400);\n}\nasync function decode(message, inputContext) {\n const { data, encoding, error } = await decodeData(message.data, message.encoding, inputContext);\n message.data = data;\n message.encoding = encoding;\n if (error) {\n throw error;\n }\n}\nasync function decodeData(data, encoding, inputContext) {\n const context = normaliseContext(inputContext);\n let lastPayload = data;\n let decodedData = data;\n let finalEncoding = encoding;\n let decodingError;\n if (encoding) {\n const xforms = encoding.split(\"/\");\n let lastProcessedEncodingIndex;\n let encodingsToProcess = xforms.length;\n let xform = \"\";\n try {\n while ((lastProcessedEncodingIndex = encodingsToProcess) > 0) {\n const match = xforms[--encodingsToProcess].match(/([-\\w]+)(\\+([\\w-]+))?/);\n if (!match)\n break;\n xform = match[1];\n switch (xform) {\n case \"base64\":\n decodedData = Platform.BufferUtils.base64Decode(String(decodedData));\n if (lastProcessedEncodingIndex == xforms.length) {\n lastPayload = decodedData;\n }\n continue;\n case \"utf-8\":\n decodedData = Platform.BufferUtils.utf8Decode(decodedData);\n continue;\n case \"json\":\n decodedData = JSON.parse(decodedData);\n continue;\n case \"cipher\":\n if (context.channelOptions != null && context.channelOptions.cipher && context.channelOptions.channelCipher) {\n const xformAlgorithm = match[3], cipher = context.channelOptions.channelCipher;\n if (xformAlgorithm != cipher.algorithm) {\n throw new Error(\"Unable to decrypt message with given cipher; incompatible cipher params\");\n }\n decodedData = await cipher.decrypt(decodedData);\n continue;\n } else {\n throw new Error(\"Unable to decrypt message; not an encrypted channel\");\n }\n case \"vcdiff\":\n if (!context.plugins || !context.plugins.vcdiff) {\n throw new ErrorInfo(\"Missing Vcdiff decoder (https://github.com/ably-forks/vcdiff-decoder)\", 40019, 400);\n }\n if (typeof Uint8Array === \"undefined\") {\n throw new ErrorInfo(\n \"Delta decoding not supported on this browser (need ArrayBuffer & Uint8Array)\",\n 40020,\n 400\n );\n }\n try {\n let deltaBase = context.baseEncodedPreviousPayload;\n if (typeof deltaBase === \"string\") {\n deltaBase = Platform.BufferUtils.utf8Encode(deltaBase);\n }\n const deltaBaseBuffer = Platform.BufferUtils.toBuffer(deltaBase);\n decodedData = Platform.BufferUtils.toBuffer(decodedData);\n decodedData = Platform.BufferUtils.arrayBufferViewToBuffer(\n context.plugins.vcdiff.decode(decodedData, deltaBaseBuffer)\n );\n lastPayload = decodedData;\n } catch (e) {\n throw new ErrorInfo(\"Vcdiff delta decode failed with \" + e, 40018, 400);\n }\n continue;\n default:\n throw new Error(\"Unknown encoding\");\n }\n }\n } catch (e) {\n const err = e;\n decodingError = new ErrorInfo(\n `Error processing the ${xform} encoding, decoder returned \\u2018${err.message}\\u2019`,\n err.code || 40013,\n 400\n );\n } finally {\n finalEncoding = lastProcessedEncodingIndex <= 0 ? null : xforms.slice(0, lastProcessedEncodingIndex).join(\"/\");\n }\n }\n if (decodingError) {\n return {\n error: decodingError,\n data: decodedData,\n encoding: finalEncoding\n };\n }\n context.baseEncodedPreviousPayload = lastPayload;\n return {\n data: decodedData,\n encoding: finalEncoding\n };\n}\nfunction wireToJSON(...args) {\n const format = args.length > 0 ? \"json\" /* json */ : \"msgpack\" /* msgpack */;\n const { data, encoding } = encodeDataForWire(this.data, this.encoding, format);\n return Object.assign({}, this, { encoding, data });\n}\nfunction encodeDataForWire(data, encoding, format) {\n if (!data || !Platform.BufferUtils.isBuffer(data)) {\n return {\n data,\n encoding\n };\n }\n if (format === \"msgpack\" /* msgpack */) {\n return {\n data: Platform.BufferUtils.toBuffer(data),\n encoding\n };\n }\n return {\n data: Platform.BufferUtils.base64Encode(data),\n encoding: encoding ? encoding + \"/base64\" : \"base64\"\n };\n}\nvar MessageEncoding = {\n encryptData,\n encodeData,\n encodeDataForWire,\n decodeData\n};\nfunction populateFieldsFromParent(parent) {\n const { id, connectionId, timestamp } = parent;\n let msgs;\n switch (parent.action) {\n case actions.MESSAGE: {\n msgs = parent.messages;\n break;\n }\n case actions.PRESENCE:\n case actions.SYNC:\n msgs = parent.presence;\n break;\n case actions.ANNOTATION:\n msgs = parent.annotations;\n break;\n case actions.OBJECT:\n case actions.OBJECT_SYNC:\n msgs = parent.state;\n break;\n default:\n throw new ErrorInfo(\"Unexpected action \" + parent.action, 4e4, 400);\n }\n for (let i = 0; i < msgs.length; i++) {\n const msg = msgs[i];\n if (!msg.connectionId) {\n msg.connectionId = connectionId;\n }\n if (!msg.timestamp) {\n msg.timestamp = timestamp;\n }\n if (id && !msg.id) {\n msg.id = id + \":\" + i;\n }\n }\n}\nfunction strMsg(m, cls) {\n let result = \"[\" + cls;\n for (const attr in m) {\n if (attr === \"data\") {\n if (typeof m.data == \"string\") {\n result += \"; data=\" + m.data;\n } else if (Platform.BufferUtils.isBuffer(m.data)) {\n result += \"; data (buffer)=\" + Platform.BufferUtils.base64Encode(m.data);\n } else if (typeof m.data !== \"undefined\") {\n result += \"; data (json)=\" + JSON.stringify(m.data);\n }\n } else if (attr && (attr === \"extras\" || attr === \"operation\")) {\n result += \"; \" + attr + \"=\" + JSON.stringify(m[attr]);\n } else if (attr === \"version\") {\n result += \"; version=\" + JSON.stringify(m[attr]);\n } else if (attr === \"annotations\") {\n result += \"; annotations=\" + JSON.stringify(m[attr]);\n } else if (m[attr] !== void 0) {\n result += \"; \" + attr + \"=\" + m[attr];\n }\n }\n result += \"]\";\n return result;\n}\nvar BaseMessage = class {\n};\n\n// src/common/lib/client/baseclient.ts\nvar BaseClient = class {\n constructor(options) {\n /**\n * These exports are for use by UMD plugins; reason being so that constructors and static methods can be accessed by these plugins without needing to import the classes directly and result in the class existing in both the plugin and the core library.\n */\n this.Platform = Platform;\n this.ErrorInfo = ErrorInfo;\n this.Logger = logger_default;\n this.Defaults = defaults_default;\n this.Utils = utils_exports;\n this.EventEmitter = eventemitter_default;\n this.MessageEncoding = MessageEncoding;\n var _a2, _b, _c, _d, _e, _f, _g, _h, _i, _j;\n this._additionalHTTPRequestImplementations = (_a2 = options.plugins) != null ? _a2 : null;\n this.logger = new logger_default();\n this.logger.setLog(options.logLevel, options.logHandler);\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MICRO,\n \"BaseClient()\",\n \"initialized with clientOptions \" + Platform.Config.inspect(options)\n );\n this._MsgPack = (_c = (_b = options.plugins) == null ? void 0 : _b.MsgPack) != null ? _c : null;\n const normalOptions = this.options = defaults_default.normaliseOptions(options, this._MsgPack, this.logger);\n if (normalOptions.key) {\n const keyMatch = normalOptions.key.match(/^([^:\\s]+):([^:.\\s]+)$/);\n if (!keyMatch) {\n const msg = \"invalid key parameter\";\n logger_default.logAction(this.logger, logger_default.LOG_ERROR, \"BaseClient()\", msg);\n throw new ErrorInfo(msg, 40400, 404);\n }\n normalOptions.keyName = keyMatch[1];\n normalOptions.keySecret = keyMatch[2];\n }\n if (\"clientId\" in normalOptions) {\n if (!(typeof normalOptions.clientId === \"string\" || normalOptions.clientId === null))\n throw new ErrorInfo(\"clientId must be either a string or null\", 40012, 400);\n else if (normalOptions.clientId === \"*\")\n throw new ErrorInfo(\n 'Can\\u2019t use \"*\" as a clientId as that string is reserved. (To change the default token request behaviour to use a wildcard clientId, use {defaultTokenParams: {clientId: \"*\"}})',\n 40012,\n 400\n );\n }\n logger_default.logAction(this.logger, logger_default.LOG_MINOR, \"BaseClient()\", \"started; version = \" + defaults_default.version);\n this._currentFallback = null;\n this.serverTimeOffset = null;\n this.http = new Http(this);\n this.auth = new auth_default(this, normalOptions);\n this._rest = ((_d = options.plugins) == null ? void 0 : _d.Rest) ? new options.plugins.Rest(this) : null;\n this._Crypto = (_f = (_e = options.plugins) == null ? void 0 : _e.Crypto) != null ? _f : null;\n this.__FilteredSubscriptions = (_h = (_g = options.plugins) == null ? void 0 : _g.MessageInteractions) != null ? _h : null;\n this._Annotations = (_j = (_i = options.plugins) == null ? void 0 : _i.Annotations) != null ? _j : null;\n }\n get rest() {\n if (!this._rest) {\n throwMissingPluginError(\"Rest\");\n }\n return this._rest;\n }\n get _FilteredSubscriptions() {\n if (!this.__FilteredSubscriptions) {\n throwMissingPluginError(\"MessageInteractions\");\n }\n return this.__FilteredSubscriptions;\n }\n get channels() {\n return this.rest.channels;\n }\n get push() {\n return this.rest.push;\n }\n /** RSH8 */\n device() {\n var _a2;\n if (!((_a2 = this.options.plugins) == null ? void 0 : _a2.Push) || !this.push.LocalDevice) {\n throwMissingPluginError(\"Push\");\n }\n if (!this._device) {\n this._device = this.push.LocalDevice.load(this);\n }\n return this._device;\n }\n baseUri(host) {\n return defaults_default.getHttpScheme(this.options) + host + \":\" + defaults_default.getPort(this.options, false);\n }\n async stats(params) {\n return this.rest.stats(params);\n }\n async time(params) {\n return this.rest.time(params);\n }\n async request(method, path, version2, params, body, customHeaders) {\n return this.rest.request(method, path, version2, params, body, customHeaders);\n }\n batchPublish(specOrSpecs) {\n return this.rest.batchPublish(specOrSpecs);\n }\n batchPresence(channels) {\n return this.rest.batchPresence(channels);\n }\n setLog(logOptions) {\n this.logger.setLog(logOptions.level, logOptions.handler);\n }\n /**\n * Get the current time based on the local clock,\n * or if the option queryTime is true, return the server time.\n * The server time offset from the local time is stored so that\n * only one request to the server to get the time is ever needed\n */\n async getTimestamp(queryTime) {\n if (!this.isTimeOffsetSet() && queryTime) {\n return this.time();\n }\n return this.getTimestampUsingOffset();\n }\n getTimestampUsingOffset() {\n return Date.now() + (this.serverTimeOffset || 0);\n }\n isTimeOffsetSet() {\n return this.serverTimeOffset !== null;\n }\n};\nBaseClient.Platform = Platform;\nvar baseclient_default = BaseClient;\n\n// src/common/lib/types/devicedetails.ts\nvar DeviceDetails = class _DeviceDetails {\n toJSON() {\n var _a2, _b, _c;\n return {\n id: this.id,\n deviceSecret: this.deviceSecret,\n platform: this.platform,\n formFactor: this.formFactor,\n clientId: this.clientId,\n metadata: this.metadata,\n deviceIdentityToken: this.deviceIdentityToken,\n push: {\n recipient: (_a2 = this.push) == null ? void 0 : _a2.recipient,\n state: (_b = this.push) == null ? void 0 : _b.state,\n error: (_c = this.push) == null ? void 0 : _c.error\n }\n };\n }\n toString() {\n var _a2, _b, _c, _d;\n let result = \"[DeviceDetails\";\n if (this.id)\n result += \"; id=\" + this.id;\n if (this.platform)\n result += \"; platform=\" + this.platform;\n if (this.formFactor)\n result += \"; formFactor=\" + this.formFactor;\n if (this.clientId)\n result += \"; clientId=\" + this.clientId;\n if (this.metadata)\n result += \"; metadata=\" + this.metadata;\n if (this.deviceIdentityToken)\n result += \"; deviceIdentityToken=\" + JSON.stringify(this.deviceIdentityToken);\n if ((_a2 = this.push) == null ? void 0 : _a2.recipient)\n result += \"; push.recipient=\" + JSON.stringify(this.push.recipient);\n if ((_b = this.push) == null ? void 0 : _b.state)\n result += \"; push.state=\" + this.push.state;\n if ((_c = this.push) == null ? void 0 : _c.error)\n result += \"; push.error=\" + JSON.stringify(this.push.error);\n if ((_d = this.push) == null ? void 0 : _d.metadata)\n result += \"; push.metadata=\" + this.push.metadata;\n result += \"]\";\n return result;\n }\n static toRequestBody(body, MsgPack, format) {\n return encodeBody(body, MsgPack, format);\n }\n static fromResponseBody(body, MsgPack, format) {\n if (format) {\n body = decodeBody(body, MsgPack, format);\n }\n if (Array.isArray(body)) {\n return _DeviceDetails.fromValuesArray(body);\n } else {\n return _DeviceDetails.fromValues(body);\n }\n }\n static fromValues(values) {\n values.error = values.error && ErrorInfo.fromValues(values.error);\n return Object.assign(new _DeviceDetails(), values);\n }\n static fromLocalDevice(device) {\n return Object.assign(new _DeviceDetails(), device);\n }\n static fromValuesArray(values) {\n const count = values.length, result = new Array(count);\n for (let i = 0; i < count; i++)\n result[i] = _DeviceDetails.fromValues(values[i]);\n return result;\n }\n};\nvar devicedetails_default = DeviceDetails;\n\n// src/common/lib/client/resource.ts\nasync function withAuthDetails(client, headers, params, opCallback) {\n if (client.http.supportsAuthHeaders) {\n const authHeaders = await client.auth.getAuthHeaders();\n return opCallback(mixin(authHeaders, headers), params);\n } else {\n const authParams = await client.auth.getAuthParams();\n return opCallback(headers, mixin(authParams, params));\n }\n}\nfunction unenvelope(result, MsgPack, format) {\n if (result.err && !result.body) {\n return { err: result.err };\n }\n if (result.statusCode === HttpStatusCodes_default.NoContent) {\n return __spreadProps(__spreadValues({}, result), { body: [], unpacked: true });\n }\n let body = result.body;\n if (!result.unpacked) {\n try {\n body = decodeBody(body, MsgPack, format);\n } catch (e) {\n if (isErrorInfoOrPartialErrorInfo(e)) {\n return { err: e };\n } else {\n return { err: new PartialErrorInfo(inspectError(e), null) };\n }\n }\n }\n if (!body) {\n return { err: new PartialErrorInfo(\"unenvelope(): Response body is missing\", null) };\n }\n const { statusCode: wrappedStatusCode, response, headers: wrappedHeaders } = body;\n if (wrappedStatusCode === void 0) {\n return __spreadProps(__spreadValues({}, result), { body, unpacked: true });\n }\n if (wrappedStatusCode < 200 || wrappedStatusCode >= 300) {\n let wrappedErr = response && response.error || result.err;\n if (!wrappedErr) {\n wrappedErr = new Error(\"Error in unenveloping \" + body);\n wrappedErr.statusCode = wrappedStatusCode;\n }\n return { err: wrappedErr, body: response, headers: wrappedHeaders, unpacked: true, statusCode: wrappedStatusCode };\n }\n return { err: result.err, body: response, headers: wrappedHeaders, unpacked: true, statusCode: wrappedStatusCode };\n}\nfunction logResult2(result, method, path, params, logger) {\n if (result.err) {\n logger_default.logAction(\n logger,\n logger_default.LOG_MICRO,\n \"Resource.\" + method + \"()\",\n \"Received Error; \" + appendingParams(path, params) + \"; Error: \" + inspectError(result.err)\n );\n } else {\n logger_default.logAction(\n logger,\n logger_default.LOG_MICRO,\n \"Resource.\" + method + \"()\",\n \"Received; \" + appendingParams(path, params) + \"; Headers: \" + paramString(result.headers) + \"; StatusCode: \" + result.statusCode + \"; Body: \" + (Platform.BufferUtils.isBuffer(result.body) ? \" (Base64): \" + Platform.BufferUtils.base64Encode(result.body) : \": \" + Platform.Config.inspect(result.body))\n );\n }\n}\nvar Resource = class _Resource {\n static async get(client, path, headers, params, envelope, throwError) {\n return _Resource.do(HttpMethods_default.Get, client, path, null, headers, params, envelope, throwError != null ? throwError : false);\n }\n static async delete(client, path, headers, params, envelope, throwError) {\n return _Resource.do(HttpMethods_default.Delete, client, path, null, headers, params, envelope, throwError);\n }\n static async post(client, path, body, headers, params, envelope, throwError) {\n return _Resource.do(HttpMethods_default.Post, client, path, body, headers, params, envelope, throwError);\n }\n static async patch(client, path, body, headers, params, envelope, throwError) {\n return _Resource.do(HttpMethods_default.Patch, client, path, body, headers, params, envelope, throwError);\n }\n static async put(client, path, body, headers, params, envelope, throwError) {\n return _Resource.do(HttpMethods_default.Put, client, path, body, headers, params, envelope, throwError);\n }\n static async do(method, client, path, body, headers, params, envelope, throwError) {\n if (envelope) {\n (params = params || {})[\"envelope\"] = envelope;\n }\n const logger = client.logger;\n async function doRequest(headers2, params2) {\n var _a2;\n if (logger.shouldLog(logger_default.LOG_MICRO)) {\n let decodedBody = body;\n if (((_a2 = headers2[\"content-type\"]) == null ? void 0 : _a2.indexOf(\"msgpack\")) > 0) {\n try {\n if (!client._MsgPack) {\n throwMissingPluginError(\"MsgPack\");\n }\n decodedBody = client._MsgPack.decode(body);\n } catch (decodeErr) {\n logger_default.logAction(\n logger,\n logger_default.LOG_MICRO,\n \"Resource.\" + method + \"()\",\n \"Sending MsgPack Decoding Error: \" + inspectError(decodeErr)\n );\n }\n }\n logger_default.logAction(\n logger,\n logger_default.LOG_MICRO,\n \"Resource.\" + method + \"()\",\n \"Sending; \" + appendingParams(path, params2) + \"; Body: \" + decodedBody\n );\n }\n const httpResult = await client.http.do(method, path, headers2, body, params2);\n if (httpResult.error && auth_default.isTokenErr(httpResult.error)) {\n await client.auth.authorize(null, null);\n return withAuthDetails(client, headers2, params2, doRequest);\n }\n return {\n err: httpResult.error,\n body: httpResult.body,\n headers: httpResult.headers,\n unpacked: httpResult.unpacked,\n statusCode: httpResult.statusCode\n };\n }\n let result = await withAuthDetails(client, headers, params, doRequest);\n if (envelope) {\n result = unenvelope(result, client._MsgPack, envelope);\n }\n if (logger.shouldLog(logger_default.LOG_MICRO)) {\n logResult2(result, method, path, params, logger);\n }\n if (throwError) {\n if (result.err) {\n throw result.err;\n } else {\n const response = __spreadValues({}, result);\n delete response.err;\n return response;\n }\n }\n return result;\n }\n};\nvar resource_default = Resource;\n\n// src/common/lib/client/paginatedresource.ts\nfunction getRelParams(linkUrl) {\n const urlMatch = linkUrl.match(/^\\.\\/(\\w+)\\?(.*)$/);\n return urlMatch && urlMatch[2] && parseQueryString(urlMatch[2]);\n}\nfunction parseRelLinks(linkHeader) {\n if (typeof linkHeader == \"string\")\n linkHeader = linkHeader.split(\",\");\n const relParams = {};\n for (let i = 0; i < linkHeader.length; i++) {\n const linkMatch = linkHeader[i].match(/^\\s*<(.+)>;\\s*rel=\"(\\w+)\"$/);\n if (linkMatch) {\n const params = getRelParams(linkMatch[1]);\n if (params)\n relParams[linkMatch[2]] = params;\n }\n }\n return relParams;\n}\nfunction returnErrOnly(err, body, useHPR) {\n return !(useHPR && (body || typeof err.code === \"number\"));\n}\nvar PaginatedResource = class {\n constructor(client, path, headers, envelope, bodyHandler, useHttpPaginatedResponse) {\n this.client = client;\n this.path = path;\n this.headers = headers;\n this.envelope = envelope != null ? envelope : null;\n this.bodyHandler = bodyHandler;\n this.useHttpPaginatedResponse = useHttpPaginatedResponse || false;\n }\n get logger() {\n return this.client.logger;\n }\n async get(params) {\n const result = await resource_default.get(this.client, this.path, this.headers, params, this.envelope, false);\n return this.handlePage(result);\n }\n async delete(params) {\n const result = await resource_default.delete(this.client, this.path, this.headers, params, this.envelope, false);\n return this.handlePage(result);\n }\n async post(params, body) {\n const result = await resource_default.post(this.client, this.path, body, this.headers, params, this.envelope, false);\n return this.handlePage(result);\n }\n async put(params, body) {\n const result = await resource_default.put(this.client, this.path, body, this.headers, params, this.envelope, false);\n return this.handlePage(result);\n }\n async patch(params, body) {\n const result = await resource_default.patch(this.client, this.path, body, this.headers, params, this.envelope, false);\n return this.handlePage(result);\n }\n async handlePage(result) {\n if (result.err && returnErrOnly(result.err, result.body, this.useHttpPaginatedResponse)) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_ERROR,\n \"PaginatedResource.handlePage()\",\n \"Unexpected error getting resource: err = \" + inspectError(result.err)\n );\n throw result.err;\n }\n let items, linkHeader, relParams;\n try {\n items = result.statusCode == HttpStatusCodes_default.NoContent ? [] : await this.bodyHandler(result.body, result.headers || {}, result.unpacked);\n } catch (e) {\n throw result.err || e;\n }\n if (result.headers && (linkHeader = result.headers[\"Link\"] || result.headers[\"link\"])) {\n relParams = parseRelLinks(linkHeader);\n }\n if (this.useHttpPaginatedResponse) {\n return new HttpPaginatedResponse(\n this,\n items,\n result.headers || {},\n result.statusCode,\n relParams,\n result.err\n );\n } else {\n return new PaginatedResult(this, items, relParams);\n }\n }\n};\nvar PaginatedResult = class {\n constructor(resource, items, relParams) {\n this.resource = resource;\n this.items = items;\n this._relParams = relParams;\n }\n async first() {\n if (this.hasFirst()) {\n return this.get(this._relParams.first);\n }\n throw new ErrorInfo(\"No link to the first page of results\", 40400, 404);\n }\n async current() {\n if (this.hasCurrent()) {\n return this.get(this._relParams.current);\n }\n throw new ErrorInfo(\"No link to the current page of results\", 40400, 404);\n }\n async next() {\n if (this.hasNext()) {\n return this.get(this._relParams.next);\n }\n return null;\n }\n hasFirst() {\n return this._relParams != null && \"first\" in this._relParams;\n }\n hasCurrent() {\n return this._relParams != null && \"current\" in this._relParams;\n }\n hasNext() {\n return this._relParams != null && \"next\" in this._relParams;\n }\n isLast() {\n return !this.hasNext();\n }\n /* We assume that only the initial request can be a POST, and that accessing\n * the rest of a multipage set of results can always be done with GET */\n async get(params) {\n const res = this.resource;\n const result = await resource_default.get(res.client, res.path, res.headers, params, res.envelope, false);\n return res.handlePage(result);\n }\n};\nvar HttpPaginatedResponse = class extends PaginatedResult {\n constructor(resource, items, headers, statusCode, relParams, err) {\n super(resource, items, relParams);\n this.statusCode = statusCode;\n this.success = statusCode < 300 && statusCode >= 200;\n this.headers = headers;\n this.errorCode = err && err.code;\n this.errorMessage = err && err.message;\n }\n toJSON() {\n return {\n items: this.items,\n statusCode: this.statusCode,\n success: this.success,\n headers: this.headers,\n errorCode: this.errorCode,\n errorMessage: this.errorMessage\n };\n }\n};\nvar paginatedresource_default = PaginatedResource;\n\n// src/common/lib/types/pushchannelsubscription.ts\nvar _PushChannelSubscription = class _PushChannelSubscription {\n /**\n * Overload toJSON() to intercept JSON.stringify()\n * @return {*}\n */\n toJSON() {\n return {\n channel: this.channel,\n deviceId: this.deviceId,\n clientId: this.clientId\n };\n }\n toString() {\n let result = \"[PushChannelSubscription\";\n if (this.channel)\n result += \"; channel=\" + this.channel;\n if (this.deviceId)\n result += \"; deviceId=\" + this.deviceId;\n if (this.clientId)\n result += \"; clientId=\" + this.clientId;\n result += \"]\";\n return result;\n }\n static fromResponseBody(body, MsgPack, format) {\n if (format) {\n body = decodeBody(body, MsgPack, format);\n }\n if (Array.isArray(body)) {\n return _PushChannelSubscription.fromValuesArray(body);\n } else {\n return _PushChannelSubscription.fromValues(body);\n }\n }\n static fromValues(values) {\n return Object.assign(new _PushChannelSubscription(), values);\n }\n static fromValuesArray(values) {\n const count = values.length, result = new Array(count);\n for (let i = 0; i < count; i++)\n result[i] = _PushChannelSubscription.fromValues(values[i]);\n return result;\n }\n};\n_PushChannelSubscription.toRequestBody = encodeBody;\nvar PushChannelSubscription = _PushChannelSubscription;\nvar pushchannelsubscription_default = PushChannelSubscription;\n\n// src/common/lib/client/push.ts\nvar Push = class {\n constructor(client) {\n var _a2;\n this.client = client;\n this.admin = new Admin(client);\n if (Platform.Config.push && ((_a2 = client.options.plugins) == null ? void 0 : _a2.Push)) {\n this.stateMachine = new client.options.plugins.Push.ActivationStateMachine(client);\n this.LocalDevice = client.options.plugins.Push.localDeviceFactory(devicedetails_default);\n }\n }\n async activate(registerCallback, updateFailedCallback) {\n await new Promise((resolve, reject) => {\n var _a2;\n if (!((_a2 = this.client.options.plugins) == null ? void 0 : _a2.Push)) {\n reject(createMissingPluginError(\"Push\"));\n return;\n }\n if (!this.stateMachine) {\n reject(new ErrorInfo(\"This platform is not supported as a target of push notifications\", 4e4, 400));\n return;\n }\n if (this.stateMachine.activatedCallback) {\n reject(new ErrorInfo(\"Activation already in progress\", 4e4, 400));\n return;\n }\n this.stateMachine.activatedCallback = (err) => {\n if (err) {\n reject(err);\n return;\n }\n resolve();\n };\n this.stateMachine.updateFailedCallback = updateFailedCallback;\n this.stateMachine.handleEvent(\n new this.client.options.plugins.Push.CalledActivate(this.stateMachine, registerCallback)\n );\n });\n }\n async deactivate(deregisterCallback) {\n await new Promise((resolve, reject) => {\n var _a2;\n if (!((_a2 = this.client.options.plugins) == null ? void 0 : _a2.Push)) {\n reject(createMissingPluginError(\"Push\"));\n return;\n }\n if (!this.stateMachine) {\n reject(new ErrorInfo(\"This platform is not supported as a target of push notifications\", 4e4, 400));\n return;\n }\n if (this.stateMachine.deactivatedCallback) {\n reject(new ErrorInfo(\"Deactivation already in progress\", 4e4, 400));\n return;\n }\n this.stateMachine.deactivatedCallback = (err) => {\n if (err) {\n reject(err);\n return;\n }\n resolve();\n };\n this.stateMachine.handleEvent(\n new this.client.options.plugins.Push.CalledDeactivate(this.stateMachine, deregisterCallback)\n );\n });\n }\n};\nvar Admin = class {\n constructor(client) {\n this.client = client;\n this.deviceRegistrations = new DeviceRegistrations(client);\n this.channelSubscriptions = new ChannelSubscriptions(client);\n }\n async publish(recipient, payload) {\n const client = this.client;\n const format = client.options.useBinaryProtocol ? \"msgpack\" /* msgpack */ : \"json\" /* json */, headers = defaults_default.defaultPostHeaders(client.options), params = {};\n const body = mixin({ recipient }, payload);\n mixin(headers, client.options.headers);\n if (client.options.pushFullWait)\n mixin(params, { fullWait: \"true\" });\n const requestBody = encodeBody(body, client._MsgPack, format);\n await resource_default.post(client, \"/push/publish\", requestBody, headers, params, null, true);\n }\n};\nvar DeviceRegistrations = class {\n constructor(client) {\n this.client = client;\n }\n async save(device) {\n const client = this.client;\n const body = devicedetails_default.fromValues(device);\n const format = client.options.useBinaryProtocol ? \"msgpack\" /* msgpack */ : \"json\" /* json */, headers = defaults_default.defaultPostHeaders(client.options), params = {};\n mixin(headers, client.options.headers);\n if (client.options.pushFullWait)\n mixin(params, { fullWait: \"true\" });\n const requestBody = encodeBody(body, client._MsgPack, format);\n const response = await resource_default.put(\n client,\n \"/push/deviceRegistrations/\" + encodeURIComponent(device.id),\n requestBody,\n headers,\n params,\n null,\n true\n );\n return devicedetails_default.fromResponseBody(\n response.body,\n client._MsgPack,\n response.unpacked ? void 0 : format\n );\n }\n async get(deviceIdOrDetails) {\n const client = this.client, format = client.options.useBinaryProtocol ? \"msgpack\" /* msgpack */ : \"json\" /* json */, headers = defaults_default.defaultGetHeaders(client.options), deviceId = deviceIdOrDetails.id || deviceIdOrDetails;\n if (typeof deviceId !== \"string\" || !deviceId.length) {\n throw new ErrorInfo(\n \"First argument to DeviceRegistrations#get must be a deviceId string or DeviceDetails\",\n 4e4,\n 400\n );\n }\n mixin(headers, client.options.headers);\n const response = await resource_default.get(\n client,\n \"/push/deviceRegistrations/\" + encodeURIComponent(deviceId),\n headers,\n {},\n null,\n true\n );\n return devicedetails_default.fromResponseBody(\n response.body,\n client._MsgPack,\n response.unpacked ? void 0 : format\n );\n }\n async list(params) {\n const client = this.client, format = client.options.useBinaryProtocol ? \"msgpack\" /* msgpack */ : \"json\" /* json */, envelope = this.client.http.supportsLinkHeaders ? void 0 : format, headers = defaults_default.defaultGetHeaders(client.options);\n mixin(headers, client.options.headers);\n return new paginatedresource_default(client, \"/push/deviceRegistrations\", headers, envelope, async function(body, headers2, unpacked) {\n return devicedetails_default.fromResponseBody(\n body,\n client._MsgPack,\n unpacked ? void 0 : format\n );\n }).get(params);\n }\n async remove(deviceIdOrDetails) {\n const client = this.client, headers = defaults_default.defaultGetHeaders(client.options), params = {}, deviceId = deviceIdOrDetails.id || deviceIdOrDetails;\n if (typeof deviceId !== \"string\" || !deviceId.length) {\n throw new ErrorInfo(\n \"First argument to DeviceRegistrations#remove must be a deviceId string or DeviceDetails\",\n 4e4,\n 400\n );\n }\n mixin(headers, client.options.headers);\n if (client.options.pushFullWait)\n mixin(params, { fullWait: \"true\" });\n await resource_default[\"delete\"](\n client,\n \"/push/deviceRegistrations/\" + encodeURIComponent(deviceId),\n headers,\n params,\n null,\n true\n );\n }\n async removeWhere(params) {\n const client = this.client, format = client.options.useBinaryProtocol ? \"msgpack\" /* msgpack */ : \"json\" /* json */, headers = defaults_default.defaultGetHeaders(client.options, { format });\n mixin(headers, client.options.headers);\n if (client.options.pushFullWait)\n mixin(params, { fullWait: \"true\" });\n await resource_default[\"delete\"](client, \"/push/deviceRegistrations\", headers, params, null, true);\n }\n};\nvar ChannelSubscriptions = class _ChannelSubscriptions {\n constructor(client) {\n /* ChannelSubscriptions have no unique id; removing one is equivalent to removeWhere by its properties */\n this.remove = _ChannelSubscriptions.prototype.removeWhere;\n this.client = client;\n }\n async save(subscription) {\n const client = this.client;\n const body = pushchannelsubscription_default.fromValues(subscription);\n const format = client.options.useBinaryProtocol ? \"msgpack\" /* msgpack */ : \"json\" /* json */, headers = defaults_default.defaultPostHeaders(client.options), params = {};\n mixin(headers, client.options.headers);\n if (client.options.pushFullWait)\n mixin(params, { fullWait: \"true\" });\n const requestBody = encodeBody(body, client._MsgPack, format);\n const response = await resource_default.post(\n client,\n \"/push/channelSubscriptions\",\n requestBody,\n headers,\n params,\n null,\n true\n );\n return pushchannelsubscription_default.fromResponseBody(\n response.body,\n client._MsgPack,\n response.unpacked ? void 0 : format\n );\n }\n async list(params) {\n const client = this.client, format = client.options.useBinaryProtocol ? \"msgpack\" /* msgpack */ : \"json\" /* json */, envelope = this.client.http.supportsLinkHeaders ? void 0 : format, headers = defaults_default.defaultGetHeaders(client.options);\n mixin(headers, client.options.headers);\n return new paginatedresource_default(client, \"/push/channelSubscriptions\", headers, envelope, async function(body, headers2, unpacked) {\n return pushchannelsubscription_default.fromResponseBody(\n body,\n client._MsgPack,\n unpacked ? void 0 : format\n );\n }).get(params);\n }\n async removeWhere(params) {\n const client = this.client, format = client.options.useBinaryProtocol ? \"msgpack\" /* msgpack */ : \"json\" /* json */, headers = defaults_default.defaultGetHeaders(client.options, { format });\n mixin(headers, client.options.headers);\n if (client.options.pushFullWait)\n mixin(params, { fullWait: \"true\" });\n await resource_default[\"delete\"](client, \"/push/channelSubscriptions\", headers, params, null, true);\n }\n async listChannels(params) {\n const client = this.client, format = client.options.useBinaryProtocol ? \"msgpack\" /* msgpack */ : \"json\" /* json */, envelope = this.client.http.supportsLinkHeaders ? void 0 : format, headers = defaults_default.defaultGetHeaders(client.options);\n mixin(headers, client.options.headers);\n if (client.options.pushFullWait)\n mixin(params, { fullWait: \"true\" });\n return new paginatedresource_default(client, \"/push/channels\", headers, envelope, async function(body, headers2, unpacked) {\n const parsedBody = !unpacked && format ? decodeBody(body, client._MsgPack, format) : body;\n for (let i = 0; i < parsedBody.length; i++) {\n parsedBody[i] = String(parsedBody[i]);\n }\n return parsedBody;\n }).get(params);\n }\n};\nvar push_default = Push;\n\n// src/common/lib/types/presencemessage.ts\nvar actions2 = [\"absent\", \"present\", \"enter\", \"leave\", \"update\"];\nasync function fromEncoded(logger, Crypto2, encoded, inputOptions) {\n const options = normalizeCipherOptions(Crypto2, logger, inputOptions != null ? inputOptions : null);\n const wpm = WirePresenceMessage.fromValues(encoded);\n return wpm.decode(options, logger);\n}\nasync function fromEncodedArray(logger, Crypto2, encodedArray, options) {\n return Promise.all(\n encodedArray.map(function(encoded) {\n return fromEncoded(logger, Crypto2, encoded, options);\n })\n );\n}\nasync function _fromEncoded(encoded, channel) {\n return WirePresenceMessage.fromValues(encoded).decode(channel.channelOptions, channel.logger);\n}\nasync function _fromEncodedArray(encodedArray, channel) {\n return Promise.all(\n encodedArray.map(function(encoded) {\n return _fromEncoded(encoded, channel);\n })\n );\n}\nvar PresenceMessage = class _PresenceMessage extends BaseMessage {\n /* Returns whether this presenceMessage is synthesized, i.e. was not actually\n * sent by the connection (usually means a leave event sent 15s after a\n * disconnection). This is useful because synthesized messages cannot be\n * compared for newness by id lexicographically - RTP2b1\n */\n isSynthesized() {\n if (!this.id || !this.connectionId) {\n return true;\n }\n return this.id.substring(this.connectionId.length, 0) !== this.connectionId;\n }\n /* RTP2b2 */\n parseId() {\n if (!this.id)\n throw new Error(\"parseId(): Presence message does not contain an id\");\n const parts = this.id.split(\":\");\n return {\n connectionId: parts[0],\n msgSerial: parseInt(parts[1], 10),\n index: parseInt(parts[2], 10)\n };\n }\n async encode(options) {\n const res = Object.assign(new WirePresenceMessage(), this, {\n action: actions2.indexOf(this.action || \"present\")\n });\n return encode(res, options);\n }\n static fromValues(values) {\n return Object.assign(new _PresenceMessage(), values);\n }\n static fromValuesArray(values) {\n return values.map((v) => _PresenceMessage.fromValues(v));\n }\n static fromData(data) {\n if (data instanceof _PresenceMessage) {\n return data;\n }\n return _PresenceMessage.fromValues({\n data\n });\n }\n toString() {\n return strMsg(this, \"PresenceMessage\");\n }\n};\nvar WirePresenceMessage = class _WirePresenceMessage extends BaseMessage {\n toJSON(...args) {\n return wireToJSON.call(this, ...args);\n }\n static fromValues(values) {\n return Object.assign(new _WirePresenceMessage(), values);\n }\n static fromValuesArray(values) {\n return values.map((v) => _WirePresenceMessage.fromValues(v));\n }\n async decode(channelOptions, logger) {\n const res = Object.assign(new PresenceMessage(), __spreadProps(__spreadValues({}, this), {\n action: actions2[this.action]\n }));\n try {\n await decode(res, channelOptions);\n } catch (e) {\n logger_default.logAction(logger, logger_default.LOG_ERROR, \"WirePresenceMessage.decode()\", inspectError(e));\n }\n return res;\n }\n toString() {\n return strMsg(this, \"WirePresenceMessage\");\n }\n};\nvar presencemessage_default = PresenceMessage;\n\n// src/common/lib/client/restpresence.ts\nvar RestPresence = class {\n constructor(channel) {\n this.channel = channel;\n }\n get logger() {\n return this.channel.logger;\n }\n async get(params) {\n logger_default.logAction(this.logger, logger_default.LOG_MICRO, \"RestPresence.get()\", \"channel = \" + this.channel.name);\n const client = this.channel.client, format = client.options.useBinaryProtocol ? \"msgpack\" /* msgpack */ : \"json\" /* json */, envelope = this.channel.client.http.supportsLinkHeaders ? void 0 : format, headers = defaults_default.defaultGetHeaders(client.options);\n mixin(headers, client.options.headers);\n return new paginatedresource_default(\n client,\n this.channel.client.rest.presenceMixin.basePath(this),\n headers,\n envelope,\n async (body, headers2, unpacked) => {\n const decoded = unpacked ? body : decodeBody(body, client._MsgPack, format);\n return _fromEncodedArray(decoded, this.channel);\n }\n ).get(params);\n }\n async history(params) {\n logger_default.logAction(this.logger, logger_default.LOG_MICRO, \"RestPresence.history()\", \"channel = \" + this.channel.name);\n return this.channel.client.rest.presenceMixin.history(this, params);\n }\n};\nvar restpresence_default = RestPresence;\n\n// src/common/lib/types/message.ts\nvar actions3 = [\"message.create\", \"message.update\", \"message.delete\", \"meta\", \"message.summary\"];\nfunction stringifyAction(action) {\n return actions3[action || 0] || \"unknown\";\n}\nfunction getMessageSize(msg) {\n let size = 0;\n if (msg.name) {\n size += msg.name.length;\n }\n if (msg.clientId) {\n size += msg.clientId.length;\n }\n if (msg.extras) {\n size += JSON.stringify(msg.extras).length;\n }\n if (msg.data) {\n size += dataSizeBytes(msg.data);\n }\n return size;\n}\nasync function fromEncoded2(logger, Crypto2, encoded, inputOptions) {\n const options = normalizeCipherOptions(Crypto2, logger, inputOptions != null ? inputOptions : null);\n const wm = WireMessage.fromValues(encoded);\n return wm.decode(options, logger);\n}\nasync function fromEncodedArray2(logger, Crypto2, encodedArray, options) {\n return Promise.all(\n encodedArray.map(function(encoded) {\n return fromEncoded2(logger, Crypto2, encoded, options);\n })\n );\n}\nasync function _fromEncoded2(encoded, channel) {\n const wm = WireMessage.fromValues(encoded);\n return wm.decode(channel.channelOptions, channel.logger);\n}\nasync function _fromEncodedArray2(encodedArray, channel) {\n return Promise.all(\n encodedArray.map(function(encoded) {\n return _fromEncoded2(encoded, channel);\n })\n );\n}\nasync function encodeArray(messages, options) {\n return Promise.all(messages.map((message) => message.encode(options)));\n}\nvar serialize = encodeBody;\nfunction getMessagesSize(messages) {\n let msg, total = 0;\n for (let i = 0; i < messages.length; i++) {\n msg = messages[i];\n total += msg.size || (msg.size = getMessageSize(msg));\n }\n return total;\n}\nvar Message = class _Message extends BaseMessage {\n expandFields() {\n if (!this.version) {\n this.version = {};\n }\n if (!this.version.serial && this.serial) {\n this.version.serial = this.serial;\n }\n if (!this.version.timestamp && this.timestamp) {\n this.version.timestamp = this.timestamp;\n }\n if (!this.annotations) {\n this.annotations = {\n summary: {}\n };\n } else if (!this.annotations.summary) {\n this.annotations.summary = {};\n }\n if (this.annotations && this.annotations.summary) {\n for (const [type, summaryEntry] of Object.entries(this.annotations.summary)) {\n if (type.endsWith(\":distinct.v1\") || type.endsWith(\":unique.v1\") || type.endsWith(\":multiple.v1\")) {\n for (const [, entry] of Object.entries(summaryEntry)) {\n if (!entry.clipped) {\n entry.clipped = false;\n }\n }\n } else if (type.endsWith(\":flag.v1\")) {\n if (!summaryEntry.clipped) {\n summaryEntry.clipped = false;\n }\n }\n }\n }\n }\n async encode(options) {\n const res = Object.assign(new WireMessage(), this, {\n action: actions3.indexOf(this.action || \"message.create\")\n });\n return encode(res, options);\n }\n static fromValues(values) {\n return Object.assign(new _Message(), values);\n }\n static fromValuesArray(values) {\n return values.map((v) => _Message.fromValues(v));\n }\n toString() {\n return strMsg(this, \"Message\");\n }\n};\nvar WireMessage = class _WireMessage extends BaseMessage {\n // Overload toJSON() to intercept JSON.stringify()\n toJSON(...args) {\n return wireToJSON.call(this, ...args);\n }\n static fromValues(values) {\n return Object.assign(new _WireMessage(), values);\n }\n static fromValuesArray(values) {\n return values.map((v) => _WireMessage.fromValues(v));\n }\n // for contexts where some decoding errors need to be handled specially by the caller\n async decodeWithErr(inputContext, logger) {\n const res = Object.assign(new Message(), __spreadProps(__spreadValues({}, this), {\n action: stringifyAction(this.action)\n }));\n let err;\n try {\n await decode(res, inputContext);\n } catch (e) {\n logger_default.logAction(logger, logger_default.LOG_ERROR, \"WireMessage.decode()\", inspectError(e));\n err = e;\n }\n res.expandFields();\n return { decoded: res, err };\n }\n async decode(inputContext, logger) {\n const { decoded } = await this.decodeWithErr(inputContext, logger);\n return decoded;\n }\n toString() {\n return strMsg(this, \"WireMessage\");\n }\n};\nvar message_default = Message;\n\n// src/common/lib/client/restchannel.ts\nvar MSG_ID_ENTROPY_BYTES = 9;\nfunction allEmptyIds(messages) {\n return messages.every(function(message) {\n return !message.id;\n });\n}\nvar RestChannel = class {\n constructor(client, name, channelOptions) {\n this._annotations = null;\n var _a2, _b;\n logger_default.logAction(client.logger, logger_default.LOG_MINOR, \"RestChannel()\", \"started; name = \" + name);\n this.name = name;\n this.client = client;\n this.presence = new restpresence_default(this);\n this.channelOptions = normaliseChannelOptions((_a2 = client._Crypto) != null ? _a2 : null, this.logger, channelOptions);\n if ((_b = client.options.plugins) == null ? void 0 : _b.Push) {\n this._push = new client.options.plugins.Push.PushChannel(this);\n }\n if (client._Annotations) {\n this._annotations = new client._Annotations.RestAnnotations(this);\n }\n }\n get annotations() {\n if (!this._annotations) {\n throwMissingPluginError(\"Annotations\");\n }\n return this._annotations;\n }\n get push() {\n if (!this._push) {\n throwMissingPluginError(\"Push\");\n }\n return this._push;\n }\n get logger() {\n return this.client.logger;\n }\n setOptions(options) {\n var _a2;\n this.channelOptions = normaliseChannelOptions((_a2 = this.client._Crypto) != null ? _a2 : null, this.logger, options);\n }\n async history(params) {\n logger_default.logAction(this.logger, logger_default.LOG_MICRO, \"RestChannel.history()\", \"channel = \" + this.name);\n return this.client.rest.channelMixin.history(this, params);\n }\n async publish(...args) {\n const first = args[0], second = args[1];\n let messages;\n let params;\n if (typeof first === \"string\" || first === null) {\n messages = [message_default.fromValues({ name: first, data: second })];\n params = args[2];\n } else if (isObject(first)) {\n messages = [message_default.fromValues(first)];\n params = args[1];\n } else if (Array.isArray(first)) {\n messages = message_default.fromValuesArray(first);\n params = args[1];\n } else {\n throw new ErrorInfo(\n \"The single-argument form of publish() expects a message object or an array of message objects\",\n 40013,\n 400\n );\n }\n if (!params) {\n params = {};\n }\n const client = this.client, options = client.options, format = options.useBinaryProtocol ? \"msgpack\" /* msgpack */ : \"json\" /* json */, idempotentRestPublishing = client.options.idempotentRestPublishing, headers = defaults_default.defaultPostHeaders(client.options);\n mixin(headers, options.headers);\n if (idempotentRestPublishing && allEmptyIds(messages)) {\n const msgIdBase = await randomString(MSG_ID_ENTROPY_BYTES);\n messages.forEach(function(message, index) {\n message.id = msgIdBase + \":\" + index.toString();\n });\n }\n const wireMessages = await encodeArray(messages, this.channelOptions);\n const size = getMessagesSize(wireMessages), maxMessageSize = options.maxMessageSize;\n if (size > maxMessageSize) {\n throw new ErrorInfo(\n `Maximum size of messages that can be published at once exceeded (was ${size} bytes; limit is ${maxMessageSize} bytes)`,\n 40009,\n 400\n );\n }\n await this._publish(serialize(wireMessages, client._MsgPack, format), headers, params);\n }\n async _publish(requestBody, headers, params) {\n await resource_default.post(\n this.client,\n this.client.rest.channelMixin.basePath(this) + \"/messages\",\n requestBody,\n headers,\n params,\n null,\n true\n );\n }\n async status() {\n return this.client.rest.channelMixin.status(this);\n }\n async getMessage(serialOrMessage) {\n logger_default.logAction(this.logger, logger_default.LOG_MICRO, \"RestChannel.getMessage()\", \"channel = \" + this.name);\n return this.client.rest.channelMixin.getMessage(this, serialOrMessage);\n }\n async updateMessage(message, operation, params) {\n logger_default.logAction(this.logger, logger_default.LOG_MICRO, \"RestChannel.updateMessage()\", \"channel = \" + this.name);\n return this.client.rest.channelMixin.updateDeleteMessage(this, { isDelete: false }, message, operation, params);\n }\n async deleteMessage(message, operation, params) {\n logger_default.logAction(this.logger, logger_default.LOG_MICRO, \"RestChannel.deleteMessage()\", \"channel = \" + this.name);\n return this.client.rest.channelMixin.updateDeleteMessage(this, { isDelete: true }, message, operation, params);\n }\n async getMessageVersions(serialOrMessage, params) {\n logger_default.logAction(this.logger, logger_default.LOG_MICRO, \"RestChannel.getMessageVersions()\", \"channel = \" + this.name);\n return this.client.rest.channelMixin.getMessageVersions(this, serialOrMessage, params);\n }\n};\nvar restchannel_default = RestChannel;\n\n// src/common/lib/types/stats.ts\nvar Stats = class _Stats {\n constructor(values) {\n this.entries = values && values.entries || void 0;\n this.schema = values && values.schema || void 0;\n this.appId = values && values.appId || void 0;\n this.inProgress = values && values.inProgress || void 0;\n this.unit = values && values.unit || void 0;\n this.intervalId = values && values.intervalId || void 0;\n }\n static fromValues(values) {\n return new _Stats(values);\n }\n};\nvar stats_default = Stats;\n\n// src/common/lib/client/restchannelmixin.ts\nvar RestChannelMixin = class {\n static basePath(channel) {\n return \"/channels/\" + encodeURIComponent(channel.name);\n }\n static history(channel, params) {\n const client = channel.client, format = client.options.useBinaryProtocol ? \"msgpack\" /* msgpack */ : \"json\" /* json */, envelope = channel.client.http.supportsLinkHeaders ? void 0 : format, headers = defaults_default.defaultGetHeaders(client.options);\n mixin(headers, client.options.headers);\n return new paginatedresource_default(client, this.basePath(channel) + \"/messages\", headers, envelope, async function(body, headers2, unpacked) {\n const decoded = unpacked ? body : decodeBody(body, client._MsgPack, format);\n return _fromEncodedArray2(decoded, channel);\n }).get(params);\n }\n static async status(channel) {\n const format = channel.client.options.useBinaryProtocol ? \"msgpack\" /* msgpack */ : \"json\" /* json */;\n const headers = defaults_default.defaultPostHeaders(channel.client.options);\n const response = await resource_default.get(\n channel.client,\n this.basePath(channel),\n headers,\n {},\n format,\n true\n );\n return response.body;\n }\n static async getMessage(channel, serialOrMessage) {\n const serial = typeof serialOrMessage === \"string\" ? serialOrMessage : serialOrMessage.serial;\n if (!serial) {\n throw new ErrorInfo(\n 'This message lacks a serial. Make sure you have enabled \"Message annotations, updates, and deletes\" in channel settings on your dashboard.',\n 40003,\n 400\n );\n }\n const client = channel.client;\n const format = client.options.useBinaryProtocol ? \"msgpack\" /* msgpack */ : \"json\" /* json */;\n const headers = defaults_default.defaultGetHeaders(client.options);\n mixin(headers, client.options.headers);\n const { body, unpacked } = await resource_default.get(\n client,\n this.basePath(channel) + \"/messages/\" + encodeURIComponent(serial),\n headers,\n {},\n null,\n true\n );\n const decoded = unpacked ? body : decodeBody(body, client._MsgPack, format);\n return _fromEncoded2(decoded, channel);\n }\n static async updateDeleteMessage(channel, opts, message, operation, params) {\n if (!message.serial) {\n throw new ErrorInfo(\n 'This message lacks a serial and cannot be updated. Make sure you have enabled \"Message annotations, updates, and deletes\" in channel settings on your dashboard.',\n 40003,\n 400\n );\n }\n const client = channel.client;\n const format = client.options.useBinaryProtocol ? \"msgpack\" /* msgpack */ : \"json\" /* json */;\n const headers = defaults_default.defaultPostHeaders(client.options);\n mixin(headers, client.options.headers);\n let encoded = null;\n if (message.data !== void 0) {\n encoded = await message_default.fromValues(message).encode(channel.channelOptions);\n }\n const req = {\n serial: message.serial,\n operation,\n name: message.name,\n data: encoded && encoded.data,\n encoding: encoded && encoded.encoding,\n extras: message.extras\n };\n const requestBody = serialize(req, client._MsgPack, format);\n const method = opts.isDelete ? resource_default.post : resource_default.patch;\n const pathSuffix = opts.isDelete ? \"/delete\" : \"\";\n await method(\n client,\n this.basePath(channel) + \"/messages/\" + encodeURIComponent(message.serial) + pathSuffix,\n requestBody,\n headers,\n params || {},\n null,\n true\n );\n }\n static getMessageVersions(channel, serialOrMessage, params) {\n const serial = typeof serialOrMessage === \"string\" ? serialOrMessage : serialOrMessage.serial;\n if (!serial) {\n throw new ErrorInfo(\n 'This message lacks a serial. Make sure you have enabled \"Message annotations, updates, and deletes\" in channel settings on your dashboard.',\n 40003,\n 400\n );\n }\n const client = channel.client;\n const format = client.options.useBinaryProtocol ? \"msgpack\" /* msgpack */ : \"json\" /* json */;\n const envelope = channel.client.http.supportsLinkHeaders ? void 0 : format;\n const headers = defaults_default.defaultGetHeaders(client.options);\n mixin(headers, client.options.headers);\n return new paginatedresource_default(\n client,\n this.basePath(channel) + \"/messages/\" + encodeURIComponent(serial) + \"/versions\",\n headers,\n envelope,\n async (body, headers2, unpacked) => {\n const decoded = unpacked ? body : decodeBody(body, client._MsgPack, format);\n return _fromEncodedArray2(decoded, channel);\n }\n ).get(params || {});\n }\n};\n\n// src/common/lib/client/restpresencemixin.ts\nvar RestPresenceMixin = class {\n static basePath(presence) {\n return RestChannelMixin.basePath(presence.channel) + \"/presence\";\n }\n static async history(presence, params) {\n const client = presence.channel.client, format = client.options.useBinaryProtocol ? \"msgpack\" /* msgpack */ : \"json\" /* json */, envelope = presence.channel.client.http.supportsLinkHeaders ? void 0 : format, headers = defaults_default.defaultGetHeaders(client.options);\n mixin(headers, client.options.headers);\n return new paginatedresource_default(\n client,\n this.basePath(presence) + \"/history\",\n headers,\n envelope,\n async (body, headers2, unpacked) => {\n const decoded = unpacked ? body : decodeBody(body, client._MsgPack, format);\n return _fromEncodedArray(decoded, presence.channel);\n }\n ).get(params);\n }\n};\n\n// src/common/lib/client/rest.ts\nvar Rest = class {\n constructor(client) {\n this.channelMixin = RestChannelMixin;\n this.presenceMixin = RestPresenceMixin;\n // exposed for plugins but shouldn't be bundled with minimal realtime\n this.Resource = resource_default;\n this.PaginatedResource = paginatedresource_default;\n this.DeviceDetails = devicedetails_default;\n this.PushChannelSubscription = pushchannelsubscription_default;\n this.client = client;\n this.channels = new Channels(this.client);\n this.push = new push_default(this.client);\n }\n async stats(params) {\n const headers = defaults_default.defaultGetHeaders(this.client.options), format = this.client.options.useBinaryProtocol ? \"msgpack\" /* msgpack */ : \"json\" /* json */, envelope = this.client.http.supportsLinkHeaders ? void 0 : format;\n mixin(headers, this.client.options.headers);\n return new paginatedresource_default(this.client, \"/stats\", headers, envelope, async (body, _, unpacked) => {\n const statsValues = unpacked ? body : decodeBody(body, this.client._MsgPack, format);\n for (let i = 0; i < statsValues.length; i++)\n statsValues[i] = stats_default.fromValues(statsValues[i]);\n return statsValues;\n }).get(params);\n }\n async time(params) {\n const headers = defaults_default.defaultGetHeaders(this.client.options, { format: \"json\" /* json */ });\n if (this.client.options.headers)\n mixin(headers, this.client.options.headers);\n const timeUri = (host) => {\n return this.client.baseUri(host) + \"/time\";\n };\n let { error, body, unpacked } = await this.client.http.do(\n HttpMethods_default.Get,\n timeUri,\n headers,\n null,\n params\n );\n if (error) {\n throw error;\n }\n if (!unpacked)\n body = JSON.parse(body);\n const time = body[0];\n if (!time) {\n throw new ErrorInfo(\"Internal error (unexpected result type from GET /time)\", 5e4, 500);\n }\n this.client.serverTimeOffset = time - Date.now();\n return time;\n }\n async request(method, path, version2, params, body, customHeaders) {\n var _a2;\n const [encoder, decoder, format] = (() => {\n if (this.client.options.useBinaryProtocol) {\n if (!this.client._MsgPack) {\n throwMissingPluginError(\"MsgPack\");\n }\n return [this.client._MsgPack.encode, this.client._MsgPack.decode, \"msgpack\" /* msgpack */];\n } else {\n return [JSON.stringify, JSON.parse, \"json\" /* json */];\n }\n })();\n const envelope = this.client.http.supportsLinkHeaders ? void 0 : format;\n params = params || {};\n const _method = method.toLowerCase();\n const headers = _method == \"get\" ? defaults_default.defaultGetHeaders(this.client.options, { format, protocolVersion: version2 }) : defaults_default.defaultPostHeaders(this.client.options, { format, protocolVersion: version2 });\n if (typeof body !== \"string\") {\n body = (_a2 = encoder(body)) != null ? _a2 : null;\n }\n mixin(headers, this.client.options.headers);\n if (customHeaders) {\n mixin(headers, customHeaders);\n }\n const paginatedResource = new paginatedresource_default(\n this.client,\n path,\n headers,\n envelope,\n async function(resbody, headers2, unpacked) {\n return ensureArray(unpacked ? resbody : decoder(resbody));\n },\n /* useHttpPaginatedResponse: */\n true\n );\n if (!Platform.Http.methods.includes(_method)) {\n throw new ErrorInfo(\"Unsupported method \" + _method, 40500, 405);\n }\n if (Platform.Http.methodsWithBody.includes(_method)) {\n return paginatedResource[_method](params, body);\n } else {\n return paginatedResource[_method](params);\n }\n }\n async batchPublish(specOrSpecs) {\n let requestBodyDTO;\n let singleSpecMode;\n if (Array.isArray(specOrSpecs)) {\n requestBodyDTO = specOrSpecs;\n singleSpecMode = false;\n } else {\n requestBodyDTO = [specOrSpecs];\n singleSpecMode = true;\n }\n const format = this.client.options.useBinaryProtocol ? \"msgpack\" /* msgpack */ : \"json\" /* json */, headers = defaults_default.defaultPostHeaders(this.client.options);\n if (this.client.options.headers)\n mixin(headers, this.client.options.headers);\n const requestBody = encodeBody(requestBodyDTO, this.client._MsgPack, format);\n const response = await resource_default.post(this.client, \"/messages\", requestBody, headers, {}, null, true);\n const batchResults = response.unpacked ? response.body : decodeBody(response.body, this.client._MsgPack, format);\n if (singleSpecMode) {\n return batchResults[0];\n } else {\n return batchResults;\n }\n }\n async batchPresence(channels) {\n const format = this.client.options.useBinaryProtocol ? \"msgpack\" /* msgpack */ : \"json\" /* json */, headers = defaults_default.defaultGetHeaders(this.client.options);\n if (this.client.options.headers)\n mixin(headers, this.client.options.headers);\n const channelsParam = channels.join(\",\");\n const response = await resource_default.get(this.client, \"/presence\", headers, { channels: channelsParam }, null, true);\n return response.unpacked ? response.body : decodeBody(response.body, this.client._MsgPack, format);\n }\n async revokeTokens(specifiers, options) {\n if (useTokenAuth(this.client.options)) {\n throw new ErrorInfo(\"Cannot revoke tokens when using token auth\", 40162, 401);\n }\n const keyName = this.client.options.keyName;\n let resolvedOptions = options != null ? options : {};\n const requestBodyDTO = __spreadValues({\n targets: specifiers.map((specifier) => `${specifier.type}:${specifier.value}`)\n }, resolvedOptions);\n const format = this.client.options.useBinaryProtocol ? \"msgpack\" /* msgpack */ : \"json\" /* json */, headers = defaults_default.defaultPostHeaders(this.client.options);\n if (this.client.options.headers)\n mixin(headers, this.client.options.headers);\n const requestBody = encodeBody(requestBodyDTO, this.client._MsgPack, format);\n const response = await resource_default.post(\n this.client,\n `/keys/${keyName}/revokeTokens`,\n requestBody,\n headers,\n {},\n null,\n true\n );\n return response.unpacked ? response.body : decodeBody(response.body, this.client._MsgPack, format);\n }\n};\nvar Channels = class {\n constructor(client) {\n this.client = client;\n this.all = /* @__PURE__ */ Object.create(null);\n }\n get(name, channelOptions) {\n name = String(name);\n let channel = this.all[name];\n if (!channel) {\n this.all[name] = channel = new restchannel_default(this.client, name, channelOptions);\n } else if (channelOptions) {\n channel.setOptions(channelOptions);\n }\n return channel;\n }\n /* Included to support certain niche use-cases; most users should ignore this.\n * Please do not use this unless you know what you're doing */\n release(name) {\n delete this.all[String(name)];\n }\n};\n\n// src/common/lib/client/baserest.ts\nvar BaseRest = class extends baseclient_default {\n /*\n * The public typings declare that this only accepts an object, but since we want to emit a good error message in the case where a non-TypeScript user does one of these things:\n *\n * 1. passes a string (which is quite likely if they’re e.g. migrating from the default variant to the modular variant)\n * 2. passes no argument at all\n *\n * tell the compiler that these cases are possible so that it forces us to handle them.\n */\n constructor(options) {\n super(defaults_default.objectifyOptions(options, false, \"BaseRest\", logger_default.defaultLogger, { Rest }));\n }\n};\n\n// src/common/lib/client/modularplugins.ts\nvar allCommonModularPlugins = { Rest };\n\n// src/common/lib/types/defaultmessage.ts\nvar DefaultMessage = class extends message_default {\n static async fromEncoded(encoded, inputOptions) {\n return fromEncoded2(logger_default.defaultLogger, Platform.Crypto, encoded, inputOptions);\n }\n static async fromEncodedArray(encodedArray, options) {\n return fromEncodedArray2(logger_default.defaultLogger, Platform.Crypto, encodedArray, options);\n }\n static fromValues(values) {\n return message_default.fromValues(values);\n }\n};\n\n// src/common/lib/types/defaultpresencemessage.ts\nvar DefaultPresenceMessage = class extends presencemessage_default {\n static async fromEncoded(encoded, inputOptions) {\n return fromEncoded(logger_default.defaultLogger, Platform.Crypto, encoded, inputOptions);\n }\n static async fromEncodedArray(encodedArray, options) {\n return fromEncodedArray(logger_default.defaultLogger, Platform.Crypto, encodedArray, options);\n }\n static fromValues(values) {\n return presencemessage_default.fromValues(values);\n }\n};\n\n// src/common/lib/types/annotation.ts\nvar actions4 = [\"annotation.create\", \"annotation.delete\"];\nasync function fromEncoded3(logger, encoded, options) {\n const wa = WireAnnotation.fromValues(encoded);\n return wa.decode(options || {}, logger);\n}\nasync function fromEncodedArray3(logger, encodedArray, options) {\n return Promise.all(\n encodedArray.map(function(encoded) {\n return fromEncoded3(logger, encoded, options);\n })\n );\n}\nasync function _fromEncoded3(encoded, channel) {\n return WireAnnotation.fromValues(encoded).decode(channel.channelOptions, channel.logger);\n}\nasync function _fromEncodedArray3(encodedArray, channel) {\n return Promise.all(\n encodedArray.map(function(encoded) {\n return _fromEncoded3(encoded, channel);\n })\n );\n}\nvar Annotation = class _Annotation extends BaseMessage {\n async encode() {\n const res = Object.assign(new WireAnnotation(), this, {\n action: actions4.indexOf(this.action || \"annotation.create\")\n });\n return encode(res, {});\n }\n static fromValues(values) {\n return Object.assign(new _Annotation(), values);\n }\n static fromValuesArray(values) {\n return values.map((v) => _Annotation.fromValues(v));\n }\n toString() {\n return strMsg(this, \"Annotation\");\n }\n};\nvar WireAnnotation = class _WireAnnotation extends BaseMessage {\n toJSON(...args) {\n return wireToJSON.call(this, ...args);\n }\n static fromValues(values) {\n return Object.assign(new _WireAnnotation(), values);\n }\n static fromValuesArray(values) {\n return values.map((v) => _WireAnnotation.fromValues(v));\n }\n async decode(channelOptions, logger) {\n const res = Object.assign(new Annotation(), __spreadProps(__spreadValues({}, this), {\n action: actions4[this.action]\n }));\n try {\n await decode(res, channelOptions);\n } catch (e) {\n logger_default.logAction(logger, logger_default.LOG_ERROR, \"WireAnnotation.decode()\", inspectError(e));\n }\n return res;\n }\n toString() {\n return strMsg(this, \"WireAnnotation\");\n }\n};\nvar annotation_default = Annotation;\n\n// src/common/lib/types/defaultannotation.ts\nvar DefaultAnnotation = class extends annotation_default {\n static async fromEncoded(encoded, inputOptions) {\n return fromEncoded3(logger_default.defaultLogger, encoded, inputOptions);\n }\n static async fromEncodedArray(encodedArray, options) {\n return fromEncodedArray3(logger_default.defaultLogger, encodedArray, options);\n }\n static fromValues(values) {\n return annotation_default.fromValues(values);\n }\n};\n\n// src/common/lib/client/restannotations.ts\nfunction serialFromMsgOrSerial(msgOrSerial) {\n let messageSerial;\n switch (typeof msgOrSerial) {\n case \"string\":\n messageSerial = msgOrSerial;\n break;\n case \"object\":\n messageSerial = msgOrSerial.serial;\n break;\n }\n if (!messageSerial || typeof messageSerial !== \"string\") {\n throw new ErrorInfo(\n \"First argument of annotations.publish() must be either a Message (or at least an object with a string `serial` property) or a message serial (string)\",\n 40003,\n 400\n );\n }\n return messageSerial;\n}\nfunction constructValidateAnnotation(msgOrSerial, annotationValues) {\n const messageSerial = serialFromMsgOrSerial(msgOrSerial);\n if (!annotationValues || typeof annotationValues !== \"object\") {\n throw new ErrorInfo(\n \"Second argument of annotations.publish() must be an object (the intended annotation to publish)\",\n 40003,\n 400\n );\n }\n const annotation = annotation_default.fromValues(annotationValues);\n annotation.messageSerial = messageSerial;\n if (!annotation.action) {\n annotation.action = \"annotation.create\";\n }\n return annotation;\n}\nfunction basePathForSerial(channel, serial) {\n return channel.client.rest.channelMixin.basePath(channel) + \"/messages/\" + encodeURIComponent(serial) + \"/annotations\";\n}\nvar RestAnnotations = class {\n constructor(channel) {\n this.channel = channel;\n }\n async publish(msgOrSerial, annotationValues) {\n const annotation = constructValidateAnnotation(msgOrSerial, annotationValues);\n const wireAnnotation = await annotation.encode();\n const client = this.channel.client, options = client.options, format = options.useBinaryProtocol ? \"msgpack\" /* msgpack */ : \"json\" /* json */, headers = defaults_default.defaultPostHeaders(client.options), params = {};\n mixin(headers, client.options.headers);\n const requestBody = encodeBody([wireAnnotation], client._MsgPack, format);\n await resource_default.post(\n client,\n basePathForSerial(this.channel, annotation.messageSerial),\n requestBody,\n headers,\n params,\n null,\n true\n );\n }\n async delete(msgOrSerial, annotationValues) {\n annotationValues.action = \"annotation.delete\";\n return this.publish(msgOrSerial, annotationValues);\n }\n async get(msgOrSerial, params) {\n const client = this.channel.client, messageSerial = serialFromMsgOrSerial(msgOrSerial), format = client.options.useBinaryProtocol ? \"msgpack\" /* msgpack */ : \"json\" /* json */, envelope = client.http.supportsLinkHeaders ? void 0 : format, headers = defaults_default.defaultGetHeaders(client.options);\n mixin(headers, client.options.headers);\n return new paginatedresource_default(\n client,\n basePathForSerial(this.channel, messageSerial),\n headers,\n envelope,\n async (body, _, unpacked) => {\n const decoded = unpacked ? body : decodeBody(body, client._MsgPack, format);\n return _fromEncodedArray3(decoded, this.channel);\n }\n ).get(params);\n }\n};\nvar restannotations_default = RestAnnotations;\n\n// src/common/lib/types/protocolmessage.ts\nvar serialize2 = encodeBody;\nfunction toStringArray(array) {\n const result = [];\n if (array) {\n for (let i = 0; i < array.length; i++) {\n result.push(array[i].toString());\n }\n }\n return \"[ \" + result.join(\", \") + \" ]\";\n}\nfunction deserialize(serialized, MsgPack, presenceMessagePlugin, annotationsPlugin, objectsPlugin, format) {\n const deserialized = decodeBody(serialized, MsgPack, format);\n return fromDeserialized(deserialized, presenceMessagePlugin, annotationsPlugin, objectsPlugin);\n}\nfunction fromDeserialized(deserialized, presenceMessagePlugin, annotationsPlugin, objectsPlugin) {\n let error;\n if (deserialized.error) {\n error = ErrorInfo.fromValues(deserialized.error);\n }\n let messages;\n if (deserialized.messages) {\n messages = WireMessage.fromValuesArray(deserialized.messages);\n }\n let presence;\n if (presenceMessagePlugin && deserialized.presence) {\n presence = presenceMessagePlugin.WirePresenceMessage.fromValuesArray(\n deserialized.presence\n );\n }\n let annotations;\n if (annotationsPlugin && deserialized.annotations) {\n annotations = annotationsPlugin.WireAnnotation.fromValuesArray(\n deserialized.annotations\n );\n }\n let state;\n if (objectsPlugin && deserialized.state) {\n state = objectsPlugin.WireObjectMessage.fromValuesArray(\n deserialized.state,\n utils_exports,\n MessageEncoding\n );\n }\n return Object.assign(new ProtocolMessage(), __spreadProps(__spreadValues({}, deserialized), { presence, messages, annotations, state, error }));\n}\nfunction makeFromDeserializedWithDependencies(dependencies) {\n return (deserialized) => {\n var _a2;\n return fromDeserialized(\n deserialized,\n {\n PresenceMessage: presencemessage_default,\n WirePresenceMessage\n },\n { Annotation: annotation_default, WireAnnotation, RealtimeAnnotations: realtimeannotations_default, RestAnnotations: restannotations_default },\n (_a2 = dependencies == null ? void 0 : dependencies.ObjectsPlugin) != null ? _a2 : null\n );\n };\n}\nfunction fromValues(values) {\n return Object.assign(new ProtocolMessage(), values);\n}\nfunction stringify(msg, presenceMessagePlugin, annotationsPlugin, objectsPlugin) {\n let result = \"[ProtocolMessage\";\n if (msg.action !== void 0)\n result += \"; action=\" + ActionName[msg.action] || msg.action;\n const simpleAttributes = [\"id\", \"channel\", \"channelSerial\", \"connectionId\", \"count\", \"msgSerial\", \"timestamp\"];\n let attribute;\n for (let attribIndex = 0; attribIndex < simpleAttributes.length; attribIndex++) {\n attribute = simpleAttributes[attribIndex];\n if (msg[attribute] !== void 0)\n result += \"; \" + attribute + \"=\" + msg[attribute];\n }\n if (msg.messages)\n result += \"; messages=\" + toStringArray(WireMessage.fromValuesArray(msg.messages));\n if (msg.presence && presenceMessagePlugin)\n result += \"; presence=\" + toStringArray(presenceMessagePlugin.WirePresenceMessage.fromValuesArray(msg.presence));\n if (msg.annotations && annotationsPlugin) {\n result += \"; annotations=\" + toStringArray(annotationsPlugin.WireAnnotation.fromValuesArray(msg.annotations));\n }\n if (msg.state && objectsPlugin) {\n result += \"; state=\" + toStringArray(objectsPlugin.WireObjectMessage.fromValuesArray(msg.state, utils_exports, MessageEncoding));\n }\n if (msg.error)\n result += \"; error=\" + ErrorInfo.fromValues(msg.error).toString();\n if (msg.auth && msg.auth.accessToken)\n result += \"; token=\" + msg.auth.accessToken;\n if (msg.flags)\n result += \"; flags=\" + flagNames.filter(msg.hasFlag).join(\",\");\n if (msg.params) {\n let stringifiedParams = \"\";\n forInOwnNonNullProperties(msg.params, function(prop) {\n if (stringifiedParams.length > 0) {\n stringifiedParams += \"; \";\n }\n stringifiedParams += prop + \"=\" + msg.params[prop];\n });\n if (stringifiedParams.length > 0) {\n result += \"; params=[\" + stringifiedParams + \"]\";\n }\n }\n result += \"]\";\n return result;\n}\nvar ProtocolMessage = class {\n constructor() {\n this.hasFlag = (flag) => {\n return (this.flags & flags[flag]) > 0;\n };\n }\n setFlag(flag) {\n return this.flags = this.flags | flags[flag];\n }\n getMode() {\n return (this.flags || 0) & flags.MODE_ALL;\n }\n encodeModesToFlags(modes) {\n modes.forEach((mode) => this.setFlag(mode));\n }\n decodeModesFromFlags() {\n const modes = [];\n channelModes.forEach((mode) => {\n if (this.hasFlag(mode)) {\n modes.push(mode);\n }\n });\n return modes.length > 0 ? modes : void 0;\n }\n};\nvar protocolmessage_default = ProtocolMessage;\n\n// src/common/lib/client/channelstatechange.ts\nvar ChannelStateChange = class {\n constructor(previous, current, resumed, hasBacklog, reason) {\n this.previous = previous;\n this.current = current;\n if (current === \"attached\") {\n this.resumed = resumed;\n this.hasBacklog = hasBacklog;\n }\n if (reason)\n this.reason = reason;\n }\n};\nvar channelstatechange_default = ChannelStateChange;\n\n// src/common/lib/client/realtimechannel.ts\nvar noop = function() {\n};\nfunction validateChannelOptions(options) {\n if (options && \"params\" in options && !isObject(options.params)) {\n return new ErrorInfo(\"options.params must be an object\", 4e4, 400);\n }\n if (options && \"modes\" in options) {\n if (!Array.isArray(options.modes)) {\n return new ErrorInfo(\"options.modes must be an array\", 4e4, 400);\n }\n for (let i = 0; i < options.modes.length; i++) {\n const currentMode = options.modes[i];\n if (!currentMode || typeof currentMode !== \"string\" || !channelModes.includes(String.prototype.toUpperCase.call(currentMode))) {\n return new ErrorInfo(\"Invalid channel mode: \" + currentMode, 4e4, 400);\n }\n }\n }\n}\nvar RealtimeChannel = class _RealtimeChannel extends eventemitter_default {\n constructor(client, name, options) {\n var _a2, _b, _c;\n super(client.logger);\n this._annotations = null;\n this._mode = 0;\n this.retryCount = 0;\n this.history = async function(params) {\n logger_default.logAction(this.logger, logger_default.LOG_MICRO, \"RealtimeChannel.history()\", \"channel = \" + this.name);\n const restMixin = this.client.rest.channelMixin;\n if (params && params.untilAttach) {\n if (this.state !== \"attached\") {\n throw new ErrorInfo(\"option untilAttach requires the channel to be attached\", 4e4, 400);\n }\n if (!this.properties.attachSerial) {\n throw new ErrorInfo(\n \"untilAttach was specified and channel is attached, but attachSerial is not defined\",\n 4e4,\n 400\n );\n }\n delete params.untilAttach;\n params.from_serial = this.properties.attachSerial;\n }\n return restMixin.history(this, params);\n };\n this.whenState = (state) => {\n return eventemitter_default.prototype.whenState.call(this, state, this.state);\n };\n logger_default.logAction(this.logger, logger_default.LOG_MINOR, \"RealtimeChannel()\", \"started; name = \" + name);\n this.name = name;\n this.channelOptions = normaliseChannelOptions((_a2 = client._Crypto) != null ? _a2 : null, this.logger, options);\n this.client = client;\n this._presence = client._RealtimePresence ? new client._RealtimePresence.RealtimePresence(this) : null;\n if (client._Annotations) {\n this._annotations = new client._Annotations.RealtimeAnnotations(this);\n }\n this.connectionManager = client.connection.connectionManager;\n this.state = \"initialized\";\n this.subscriptions = new eventemitter_default(this.logger);\n this.syncChannelSerial = void 0;\n this.properties = {\n attachSerial: void 0,\n channelSerial: void 0\n };\n this.setOptions(options);\n this.errorReason = null;\n this._attachResume = false;\n this._decodingContext = {\n channelOptions: this.channelOptions,\n plugins: client.options.plugins || {},\n baseEncodedPreviousPayload: void 0\n };\n this._lastPayload = {\n messageId: null,\n protocolMessageChannelSerial: null,\n decodeFailureRecoveryInProgress: null\n };\n this._allChannelChanges = new eventemitter_default(this.logger);\n if ((_b = client.options.plugins) == null ? void 0 : _b.Push) {\n this._push = new client.options.plugins.Push.PushChannel(this);\n }\n if ((_c = client.options.plugins) == null ? void 0 : _c.Objects) {\n this._objects = new client.options.plugins.Objects.Objects(this);\n }\n }\n get presence() {\n if (!this._presence) {\n throwMissingPluginError(\"RealtimePresence\");\n }\n return this._presence;\n }\n get annotations() {\n if (!this._annotations) {\n throwMissingPluginError(\"Annotations\");\n }\n return this._annotations;\n }\n get push() {\n if (!this._push) {\n throwMissingPluginError(\"Push\");\n }\n return this._push;\n }\n /** @spec RTL27 */\n get objects() {\n if (!this._objects) {\n throwMissingPluginError(\"Objects\");\n }\n return this._objects;\n }\n invalidStateError() {\n return new ErrorInfo(\n \"Channel operation failed as channel state is \" + this.state,\n 90001,\n 400,\n this.errorReason || void 0\n );\n }\n static processListenerArgs(args) {\n args = Array.prototype.slice.call(args);\n if (typeof args[0] === \"function\") {\n args.unshift(null);\n }\n return args;\n }\n async setOptions(options) {\n var _a2;\n const previousChannelOptions = this.channelOptions;\n const err = validateChannelOptions(options);\n if (err) {\n throw err;\n }\n this.channelOptions = normaliseChannelOptions((_a2 = this.client._Crypto) != null ? _a2 : null, this.logger, options);\n if (this._decodingContext)\n this._decodingContext.channelOptions = this.channelOptions;\n if (this._shouldReattachToSetOptions(options, previousChannelOptions)) {\n this.attachImpl();\n return new Promise((resolve, reject) => {\n this._allChannelChanges.once(\n [\"attached\", \"update\", \"detached\", \"failed\"],\n function(stateChange) {\n switch (this.event) {\n case \"update\":\n case \"attached\":\n resolve();\n break;\n default:\n reject(stateChange.reason);\n }\n }\n );\n });\n }\n }\n _shouldReattachToSetOptions(options, prevOptions) {\n if (!(this.state === \"attached\" || this.state === \"attaching\")) {\n return false;\n }\n if (options == null ? void 0 : options.params) {\n const requestedParams = omitAgent(options.params);\n const existingParams = omitAgent(prevOptions.params);\n if (Object.keys(requestedParams).length !== Object.keys(existingParams).length) {\n return true;\n }\n if (!shallowEquals(existingParams, requestedParams)) {\n return true;\n }\n }\n if (options == null ? void 0 : options.modes) {\n if (!prevOptions.modes || !arrEquals(options.modes, prevOptions.modes)) {\n return true;\n }\n }\n return false;\n }\n async publish(...args) {\n let messages;\n let argCount = args.length;\n if (argCount == 1) {\n if (isObject(args[0])) {\n messages = [message_default.fromValues(args[0])];\n } else if (Array.isArray(args[0])) {\n messages = message_default.fromValuesArray(args[0]);\n } else {\n throw new ErrorInfo(\n \"The single-argument form of publish() expects a message object or an array of message objects\",\n 40013,\n 400\n );\n }\n } else {\n messages = [message_default.fromValues({ name: args[0], data: args[1] })];\n }\n const maxMessageSize = this.client.options.maxMessageSize;\n const wireMessages = await encodeArray(messages, this.channelOptions);\n const size = getMessagesSize(wireMessages);\n if (size > maxMessageSize) {\n throw new ErrorInfo(\n `Maximum size of messages that can be published at once exceeded (was ${size} bytes; limit is ${maxMessageSize} bytes)`,\n 40009,\n 400\n );\n }\n this.throwIfUnpublishableState();\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MICRO,\n \"RealtimeChannel.publish()\",\n \"sending message; channel state is \" + this.state + \", message count = \" + wireMessages.length\n );\n const pm = fromValues({ action: actions.MESSAGE, channel: this.name, messages: wireMessages });\n return this.sendMessage(pm);\n }\n throwIfUnpublishableState() {\n if (!this.connectionManager.activeState()) {\n throw this.connectionManager.getError();\n }\n if (this.state === \"failed\" || this.state === \"suspended\") {\n throw this.invalidStateError();\n }\n }\n onEvent(messages) {\n logger_default.logAction(this.logger, logger_default.LOG_MICRO, \"RealtimeChannel.onEvent()\", \"received message\");\n const subscriptions = this.subscriptions;\n for (let i = 0; i < messages.length; i++) {\n const message = messages[i];\n subscriptions.emit(message.name, message);\n }\n }\n async attach() {\n if (this.state === \"attached\") {\n return null;\n }\n return new Promise((resolve, reject) => {\n this._attach(false, null, (err, result) => err ? reject(err) : resolve(result));\n });\n }\n _attach(forceReattach, attachReason, callback) {\n if (!callback) {\n callback = (err) => {\n if (err) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_ERROR,\n \"RealtimeChannel._attach()\",\n \"Channel attach failed: \" + err.toString()\n );\n }\n };\n }\n const connectionManager = this.connectionManager;\n if (!connectionManager.activeState()) {\n callback(connectionManager.getError());\n return;\n }\n if (this.state !== \"attaching\" || forceReattach) {\n this.requestState(\"attaching\", attachReason);\n }\n this.once(function(stateChange) {\n switch (this.event) {\n case \"attached\":\n callback == null ? void 0 : callback(null, stateChange);\n break;\n case \"detached\":\n case \"suspended\":\n case \"failed\":\n callback == null ? void 0 : callback(\n stateChange.reason || connectionManager.getError() || new ErrorInfo(\"Unable to attach; reason unknown; state = \" + this.event, 9e4, 500)\n );\n break;\n case \"detaching\":\n callback == null ? void 0 : callback(new ErrorInfo(\"Attach request superseded by a subsequent detach request\", 9e4, 409));\n break;\n }\n });\n }\n attachImpl() {\n logger_default.logAction(this.logger, logger_default.LOG_MICRO, \"RealtimeChannel.attachImpl()\", \"sending ATTACH message\");\n const attachMsg = fromValues({\n action: actions.ATTACH,\n channel: this.name,\n params: this.channelOptions.params,\n // RTL4c1: Includes the channel serial to resume from a previous message\n // or attachment.\n channelSerial: this.properties.channelSerial\n });\n if (this.channelOptions.modes) {\n attachMsg.encodeModesToFlags(allToUpperCase(this.channelOptions.modes));\n }\n if (this._attachResume) {\n attachMsg.setFlag(\"ATTACH_RESUME\");\n }\n if (this._lastPayload.decodeFailureRecoveryInProgress) {\n attachMsg.channelSerial = this._lastPayload.protocolMessageChannelSerial;\n }\n this.sendMessage(attachMsg).catch(noop);\n }\n async detach() {\n const connectionManager = this.connectionManager;\n if (!connectionManager.activeState()) {\n throw connectionManager.getError();\n }\n switch (this.state) {\n case \"suspended\":\n this.notifyState(\"detached\");\n return;\n case \"detached\":\n return;\n case \"failed\":\n throw new ErrorInfo(\"Unable to detach; channel state = failed\", 90001, 400);\n default:\n this.requestState(\"detaching\");\n case \"detaching\":\n return new Promise((resolve, reject) => {\n this.once(function(stateChange) {\n switch (this.event) {\n case \"detached\":\n resolve();\n break;\n case \"attached\":\n case \"suspended\":\n case \"failed\":\n reject(\n stateChange.reason || connectionManager.getError() || new ErrorInfo(\"Unable to detach; reason unknown; state = \" + this.event, 9e4, 500)\n );\n break;\n case \"attaching\":\n reject(new ErrorInfo(\"Detach request superseded by a subsequent attach request\", 9e4, 409));\n break;\n }\n });\n });\n }\n }\n detachImpl() {\n logger_default.logAction(this.logger, logger_default.LOG_MICRO, \"RealtimeChannel.detach()\", \"sending DETACH message\");\n const msg = fromValues({ action: actions.DETACH, channel: this.name });\n this.sendMessage(msg).catch(noop);\n }\n async subscribe(...args) {\n const [event, listener] = _RealtimeChannel.processListenerArgs(args);\n if (this.state === \"failed\") {\n throw ErrorInfo.fromValues(this.invalidStateError());\n }\n if (event && typeof event === \"object\" && !Array.isArray(event)) {\n this.client._FilteredSubscriptions.subscribeFilter(this, event, listener);\n } else {\n this.subscriptions.on(event, listener);\n }\n if (this.channelOptions.attachOnSubscribe !== false) {\n return this.attach();\n } else {\n return null;\n }\n }\n unsubscribe(...args) {\n var _a2;\n const [event, listener] = _RealtimeChannel.processListenerArgs(args);\n if (typeof event === \"object\" && !listener || ((_a2 = this.filteredSubscriptions) == null ? void 0 : _a2.has(listener))) {\n this.client._FilteredSubscriptions.getAndDeleteFilteredSubscriptions(this, event, listener).forEach((l) => this.subscriptions.off(l));\n return;\n }\n this.subscriptions.off(event, listener);\n }\n sync() {\n switch (this.state) {\n case \"initialized\":\n case \"detaching\":\n case \"detached\":\n throw new PartialErrorInfo(\"Unable to sync to channel; not attached\", 4e4);\n default:\n }\n const connectionManager = this.connectionManager;\n if (!connectionManager.activeState()) {\n throw connectionManager.getError();\n }\n const syncMessage = fromValues({ action: actions.SYNC, channel: this.name });\n if (this.syncChannelSerial) {\n syncMessage.channelSerial = this.syncChannelSerial;\n }\n connectionManager.send(syncMessage);\n }\n async sendMessage(msg) {\n return new Promise((resolve, reject) => {\n this.connectionManager.send(msg, this.client.options.queueMessages, (err) => {\n if (err) {\n reject(err);\n } else {\n resolve();\n }\n });\n });\n }\n async sendPresence(presence) {\n const msg = fromValues({\n action: actions.PRESENCE,\n channel: this.name,\n presence\n });\n return this.sendMessage(msg);\n }\n sendState(objectMessages) {\n const msg = fromValues({\n action: actions.OBJECT,\n channel: this.name,\n state: objectMessages\n });\n return this.sendMessage(msg);\n }\n // Access to this method is synchronised by ConnectionManager#processChannelMessage, in order to synchronise access to the state stored in _decodingContext.\n async processMessage(message) {\n if (message.action === actions.ATTACHED || message.action === actions.MESSAGE || message.action === actions.PRESENCE || message.action === actions.OBJECT || message.action === actions.ANNOTATION) {\n this.setChannelSerial(message.channelSerial);\n }\n let syncChannelSerial, isSync = false;\n switch (message.action) {\n case actions.ATTACHED: {\n this.properties.attachSerial = message.channelSerial;\n this._mode = message.getMode();\n this.params = message.params || {};\n const modesFromFlags = message.decodeModesFromFlags();\n this.modes = modesFromFlags && allToLowerCase(modesFromFlags) || void 0;\n const resumed = message.hasFlag(\"RESUMED\");\n const hasPresence = message.hasFlag(\"HAS_PRESENCE\");\n const hasBacklog = message.hasFlag(\"HAS_BACKLOG\");\n const hasObjects = message.hasFlag(\"HAS_OBJECTS\");\n if (this.state === \"attached\") {\n if (!resumed) {\n if (this._presence) {\n this._presence.onAttached(hasPresence);\n }\n if (this._objects) {\n this._objects.onAttached(hasObjects);\n }\n }\n const change = new channelstatechange_default(this.state, this.state, resumed, hasBacklog, message.error);\n this._allChannelChanges.emit(\"update\", change);\n if (!resumed || this.channelOptions.updateOnAttached) {\n this.emit(\"update\", change);\n }\n } else if (this.state === \"detaching\") {\n this.checkPendingState();\n } else {\n this.notifyState(\"attached\", message.error, resumed, hasPresence, hasBacklog, hasObjects);\n }\n break;\n }\n case actions.DETACHED: {\n const detachErr = message.error ? ErrorInfo.fromValues(message.error) : new ErrorInfo(\"Channel detached\", 90001, 404);\n if (this.state === \"detaching\") {\n this.notifyState(\"detached\", detachErr);\n } else if (this.state === \"attaching\") {\n this.notifyState(\"suspended\", detachErr);\n } else if (this.state === \"attached\" || this.state === \"suspended\") {\n this.requestState(\"attaching\", detachErr);\n }\n break;\n }\n case actions.SYNC:\n isSync = true;\n syncChannelSerial = this.syncChannelSerial = message.channelSerial;\n if (!message.presence)\n break;\n case actions.PRESENCE: {\n if (!message.presence) {\n break;\n }\n populateFieldsFromParent(message);\n const options = this.channelOptions;\n if (this._presence) {\n const presenceMessages = await Promise.all(\n message.presence.map((wpm) => {\n return wpm.decode(options, this.logger);\n })\n );\n this._presence.setPresence(presenceMessages, isSync, syncChannelSerial);\n }\n break;\n }\n case actions.OBJECT:\n case actions.OBJECT_SYNC: {\n if (!this._objects || !message.state) {\n return;\n }\n populateFieldsFromParent(message);\n const format = this.client.connection.connectionManager.getActiveTransportFormat();\n const objectMessages = message.state.map((om) => om.decode(this.client, format));\n if (message.action === actions.OBJECT) {\n this._objects.handleObjectMessages(objectMessages);\n } else {\n this._objects.handleObjectSyncMessages(objectMessages, message.channelSerial);\n }\n break;\n }\n case actions.MESSAGE: {\n if (this.state !== \"attached\") {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MAJOR,\n \"RealtimeChannel.processMessage()\",\n 'Message \"' + message.id + '\" skipped as this channel \"' + this.name + '\" state is not \"attached\" (state is \"' + this.state + '\").'\n );\n return;\n }\n populateFieldsFromParent(message);\n const encoded = message.messages, firstMessage = encoded[0], lastMessage = encoded[encoded.length - 1];\n if (firstMessage.extras && firstMessage.extras.delta && firstMessage.extras.delta.from !== this._lastPayload.messageId) {\n const msg = 'Delta message decode failure - previous message not available for message \"' + message.id + '\" on this channel \"' + this.name + '\".';\n logger_default.logAction(this.logger, logger_default.LOG_ERROR, \"RealtimeChannel.processMessage()\", msg);\n this._startDecodeFailureRecovery(new ErrorInfo(msg, 40018, 400));\n break;\n }\n let messages = [];\n for (let i = 0; i < encoded.length; i++) {\n const { decoded, err } = await encoded[i].decodeWithErr(this._decodingContext, this.logger);\n messages[i] = decoded;\n if (err) {\n switch (err.code) {\n case 40018:\n this._startDecodeFailureRecovery(err);\n return;\n case 40019:\n case 40021:\n this.notifyState(\"failed\", err);\n return;\n default:\n }\n }\n }\n this._lastPayload.messageId = lastMessage.id;\n this._lastPayload.protocolMessageChannelSerial = message.channelSerial;\n this.onEvent(messages);\n break;\n }\n case actions.ANNOTATION: {\n populateFieldsFromParent(message);\n const options = this.channelOptions;\n if (this._annotations) {\n const annotations = await Promise.all(\n (message.annotations || []).map((wpm) => {\n return wpm.decode(options, this.logger);\n })\n );\n this._annotations._processIncoming(annotations);\n }\n break;\n }\n case actions.ERROR: {\n const err = message.error;\n if (err && err.code == 80016) {\n this.checkPendingState();\n } else {\n this.notifyState(\"failed\", ErrorInfo.fromValues(err));\n }\n break;\n }\n default:\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MAJOR,\n \"RealtimeChannel.processMessage()\",\n \"Protocol error: unrecognised message action (\" + message.action + \")\"\n );\n }\n }\n _startDecodeFailureRecovery(reason) {\n if (!this._lastPayload.decodeFailureRecoveryInProgress) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MAJOR,\n \"RealtimeChannel.processMessage()\",\n \"Starting decode failure recovery process.\"\n );\n this._lastPayload.decodeFailureRecoveryInProgress = true;\n this._attach(true, reason, () => {\n this._lastPayload.decodeFailureRecoveryInProgress = false;\n });\n }\n }\n onAttached() {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MINOR,\n \"RealtimeChannel.onAttached\",\n \"activating channel; name = \" + this.name\n );\n }\n notifyState(state, reason, resumed, hasPresence, hasBacklog, hasObjects) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MICRO,\n \"RealtimeChannel.notifyState\",\n \"name = \" + this.name + \", current state = \" + this.state + \", notifying state \" + state\n );\n this.clearStateTimer();\n if ([\"detached\", \"suspended\", \"failed\"].includes(state)) {\n this.properties.channelSerial = null;\n }\n if (state === this.state) {\n return;\n }\n if (this._presence) {\n this._presence.actOnChannelState(state, hasPresence, reason);\n }\n if (this._objects) {\n this._objects.actOnChannelState(state, hasObjects);\n }\n if (state === \"suspended\" && this.connectionManager.state.sendEvents) {\n this.startRetryTimer();\n } else {\n this.cancelRetryTimer();\n }\n if (reason) {\n this.errorReason = reason;\n }\n const change = new channelstatechange_default(this.state, state, resumed, hasBacklog, reason);\n const action = 'Channel state for channel \"' + this.name + '\"';\n const message = state + (reason ? \"; reason: \" + reason : \"\");\n if (state === \"failed\") {\n logger_default.logAction(this.logger, logger_default.LOG_ERROR, action, message);\n } else {\n logger_default.logAction(this.logger, logger_default.LOG_MAJOR, action, message);\n }\n if (state !== \"attaching\" && state !== \"suspended\") {\n this.retryCount = 0;\n }\n if (state === \"attached\") {\n this.onAttached();\n }\n if (state === \"attached\") {\n this._attachResume = true;\n } else if (state === \"detaching\" || state === \"failed\") {\n this._attachResume = false;\n }\n this.state = state;\n this._allChannelChanges.emit(state, change);\n this.emit(state, change);\n }\n requestState(state, reason) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MINOR,\n \"RealtimeChannel.requestState\",\n \"name = \" + this.name + \", state = \" + state\n );\n this.notifyState(state, reason);\n this.checkPendingState();\n }\n checkPendingState() {\n const cmState = this.connectionManager.state;\n if (!cmState.sendEvents) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MINOR,\n \"RealtimeChannel.checkPendingState\",\n \"sendEvents is false; state is \" + this.connectionManager.state.state\n );\n return;\n }\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MINOR,\n \"RealtimeChannel.checkPendingState\",\n \"name = \" + this.name + \", state = \" + this.state\n );\n switch (this.state) {\n case \"attaching\":\n this.startStateTimerIfNotRunning();\n this.attachImpl();\n break;\n case \"detaching\":\n this.startStateTimerIfNotRunning();\n this.detachImpl();\n break;\n case \"attached\":\n this.sync();\n break;\n default:\n break;\n }\n }\n timeoutPendingState() {\n switch (this.state) {\n case \"attaching\": {\n const err = new ErrorInfo(\"Channel attach timed out\", 90007, 408);\n this.notifyState(\"suspended\", err);\n break;\n }\n case \"detaching\": {\n const err = new ErrorInfo(\"Channel detach timed out\", 90007, 408);\n this.notifyState(\"attached\", err);\n break;\n }\n default:\n this.checkPendingState();\n break;\n }\n }\n startStateTimerIfNotRunning() {\n if (!this.stateTimer) {\n this.stateTimer = setTimeout(() => {\n logger_default.logAction(this.logger, logger_default.LOG_MINOR, \"RealtimeChannel.startStateTimerIfNotRunning\", \"timer expired\");\n this.stateTimer = null;\n this.timeoutPendingState();\n }, this.client.options.timeouts.realtimeRequestTimeout);\n }\n }\n clearStateTimer() {\n const stateTimer = this.stateTimer;\n if (stateTimer) {\n clearTimeout(stateTimer);\n this.stateTimer = null;\n }\n }\n startRetryTimer() {\n if (this.retryTimer)\n return;\n this.retryCount++;\n const retryDelay = getRetryTime(this.client.options.timeouts.channelRetryTimeout, this.retryCount);\n this.retryTimer = setTimeout(() => {\n if (this.state === \"suspended\" && this.connectionManager.state.sendEvents) {\n this.retryTimer = null;\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MINOR,\n \"RealtimeChannel retry timer expired\",\n \"attempting a new attach\"\n );\n this.requestState(\"attaching\");\n }\n }, retryDelay);\n }\n cancelRetryTimer() {\n if (this.retryTimer) {\n clearTimeout(this.retryTimer);\n this.retryTimer = null;\n }\n }\n /* @returns null (if can safely be released) | ErrorInfo (if cannot) */\n getReleaseErr() {\n const s = this.state;\n if (s === \"initialized\" || s === \"detached\" || s === \"failed\") {\n return null;\n }\n return new ErrorInfo(\n \"Can only release a channel in a state where there is no possibility of further updates from the server being received (initialized, detached, or failed); was \" + s,\n 90001,\n 400\n );\n }\n setChannelSerial(channelSerial) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MICRO,\n \"RealtimeChannel.setChannelSerial()\",\n \"Updating channel serial; serial = \" + channelSerial + \"; previous = \" + this.properties.channelSerial\n );\n if (channelSerial) {\n this.properties.channelSerial = channelSerial;\n }\n }\n async status() {\n return this.client.rest.channelMixin.status(this);\n }\n async getMessage(serialOrMessage) {\n logger_default.logAction(this.logger, logger_default.LOG_MICRO, \"RealtimeChannel.getMessage()\", \"channel = \" + this.name);\n const restMixin = this.client.rest.channelMixin;\n return restMixin.getMessage(this, serialOrMessage);\n }\n async updateMessage(message, operation, params) {\n logger_default.logAction(this.logger, logger_default.LOG_MICRO, \"RealtimeChannel.updateMessage()\", \"channel = \" + this.name);\n const restMixin = this.client.rest.channelMixin;\n return restMixin.updateDeleteMessage(this, { isDelete: false }, message, operation, params);\n }\n async deleteMessage(message, operation, params) {\n logger_default.logAction(this.logger, logger_default.LOG_MICRO, \"RealtimeChannel.deleteMessage()\", \"channel = \" + this.name);\n const restMixin = this.client.rest.channelMixin;\n return restMixin.updateDeleteMessage(this, { isDelete: true }, message, operation, params);\n }\n async getMessageVersions(serialOrMessage, params) {\n logger_default.logAction(this.logger, logger_default.LOG_MICRO, \"RealtimeChannel.getMessageVersions()\", \"channel = \" + this.name);\n const restMixin = this.client.rest.channelMixin;\n return restMixin.getMessageVersions(this, serialOrMessage, params);\n }\n};\nfunction omitAgent(channelParams) {\n const _a2 = channelParams || {}, { agent: _ } = _a2, paramsWithoutAgent = __objRest(_a2, [\"agent\"]);\n return paramsWithoutAgent;\n}\nvar realtimechannel_default = RealtimeChannel;\n\n// src/common/lib/client/realtimeannotations.ts\nvar RealtimeAnnotations = class {\n constructor(channel) {\n this.channel = channel;\n this.logger = channel.logger;\n this.subscriptions = new eventemitter_default(this.logger);\n }\n async publish(msgOrSerial, annotationValues) {\n const channelName = this.channel.name;\n const annotation = constructValidateAnnotation(msgOrSerial, annotationValues);\n const wireAnnotation = await annotation.encode();\n this.channel.throwIfUnpublishableState();\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MICRO,\n \"RealtimeAnnotations.publish()\",\n \"channelName = \" + channelName + \", sending annotation with messageSerial = \" + annotation.messageSerial + \", type = \" + annotation.type\n );\n const pm = fromValues({\n action: actions.ANNOTATION,\n channel: channelName,\n annotations: [wireAnnotation]\n });\n return this.channel.sendMessage(pm);\n }\n async delete(msgOrSerial, annotationValues) {\n annotationValues.action = \"annotation.delete\";\n return this.publish(msgOrSerial, annotationValues);\n }\n async subscribe(..._args) {\n const args = realtimechannel_default.processListenerArgs(_args);\n const event = args[0];\n const listener = args[1];\n const channel = this.channel;\n if (channel.state === \"failed\") {\n throw ErrorInfo.fromValues(channel.invalidStateError());\n }\n this.subscriptions.on(event, listener);\n if (this.channel.channelOptions.attachOnSubscribe !== false) {\n await channel.attach();\n }\n if ((this.channel.state === \"attached\" && this.channel._mode & flags.ANNOTATION_SUBSCRIBE) === 0) {\n throw new ErrorInfo(\n \"You are trying to add an annotation listener, but you haven't requested the annotation_subscribe channel mode in ChannelOptions, so this won't do anything (we only deliver annotations to clients who have explicitly requested them)\",\n 93001,\n 400\n );\n }\n }\n unsubscribe(..._args) {\n const args = realtimechannel_default.processListenerArgs(_args);\n const event = args[0];\n const listener = args[1];\n this.subscriptions.off(event, listener);\n }\n _processIncoming(annotations) {\n for (const annotation of annotations) {\n this.subscriptions.emit(annotation.type || \"\", annotation);\n }\n }\n async get(msgOrSerial, params) {\n return restannotations_default.prototype.get.call(this, msgOrSerial, params);\n }\n};\nvar realtimeannotations_default = RealtimeAnnotations;\n\n// src/common/lib/client/defaultrest.ts\nvar _DefaultRest = class _DefaultRest extends BaseRest {\n // The public typings declare that this requires an argument to be passed, but since we want to emit a good error message in the case where a non-TypeScript user does not pass an argument, tell the compiler that this is possible so that it forces us to handle it.\n constructor(options) {\n var _a2, _b;\n const MsgPack = _DefaultRest._MsgPack;\n if (!MsgPack) {\n throw new Error(\"Expected DefaultRest._MsgPack to have been set\");\n }\n super(\n defaults_default.objectifyOptions(options, true, \"Rest\", logger_default.defaultLogger, __spreadProps(__spreadValues({}, allCommonModularPlugins), {\n Crypto: (_a2 = _DefaultRest.Crypto) != null ? _a2 : void 0,\n MsgPack: (_b = _DefaultRest._MsgPack) != null ? _b : void 0,\n Annotations: {\n Annotation: annotation_default,\n WireAnnotation,\n RealtimeAnnotations: realtimeannotations_default,\n RestAnnotations: restannotations_default\n }\n }))\n );\n }\n static get Crypto() {\n if (this._Crypto === null) {\n throw new Error(\"Encryption not enabled; use ably.encryption.js instead\");\n }\n return this._Crypto;\n }\n static set Crypto(newValue) {\n this._Crypto = newValue;\n }\n};\n_DefaultRest._Crypto = null;\n_DefaultRest.Message = DefaultMessage;\n_DefaultRest.PresenceMessage = DefaultPresenceMessage;\n_DefaultRest.Annotation = DefaultAnnotation;\n_DefaultRest._MsgPack = null;\n// Used by tests\n_DefaultRest._Http = Http;\nvar DefaultRest = _DefaultRest;\n\n// src/common/lib/transport/messagequeue.ts\nvar MessageQueue = class extends eventemitter_default {\n constructor(logger) {\n super(logger);\n this.messages = [];\n }\n count() {\n return this.messages.length;\n }\n push(message) {\n this.messages.push(message);\n }\n shift() {\n return this.messages.shift();\n }\n last() {\n return this.messages[this.messages.length - 1];\n }\n copyAll() {\n return this.messages.slice();\n }\n append(messages) {\n this.messages.push.apply(this.messages, messages);\n }\n prepend(messages) {\n this.messages.unshift.apply(this.messages, messages);\n }\n completeMessages(serial, count, err) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MICRO,\n \"MessageQueue.completeMessages()\",\n \"serial = \" + serial + \"; count = \" + count\n );\n err = err || null;\n const messages = this.messages;\n if (messages.length === 0) {\n throw new Error(\"MessageQueue.completeMessages(): completeMessages called on any empty MessageQueue\");\n }\n const first = messages[0];\n if (first) {\n const startSerial = first.message.msgSerial;\n const endSerial = serial + count;\n if (endSerial > startSerial) {\n const completeMessages = messages.splice(0, endSerial - startSerial);\n for (const message of completeMessages) {\n message.callback(err);\n }\n }\n if (messages.length == 0)\n this.emit(\"idle\");\n }\n }\n completeAllMessages(err) {\n this.completeMessages(0, Number.MAX_SAFE_INTEGER || Number.MAX_VALUE, err);\n }\n resetSendAttempted() {\n for (let msg of this.messages) {\n msg.sendAttempted = false;\n }\n }\n clear() {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MICRO,\n \"MessageQueue.clear()\",\n \"clearing \" + this.messages.length + \" messages\"\n );\n this.messages = [];\n this.emit(\"idle\");\n }\n};\nvar messagequeue_default = MessageQueue;\n\n// src/common/lib/transport/protocol.ts\nvar PendingMessage = class {\n constructor(message, callback) {\n this.message = message;\n this.callback = callback;\n this.merged = false;\n const action = message.action;\n this.sendAttempted = false;\n this.ackRequired = typeof action === \"number\" && [actions.MESSAGE, actions.PRESENCE, actions.ANNOTATION, actions.OBJECT].includes(action);\n }\n};\nvar Protocol = class extends eventemitter_default {\n constructor(transport) {\n super(transport.logger);\n this.transport = transport;\n this.messageQueue = new messagequeue_default(this.logger);\n transport.on(\"ack\", (serial, count) => {\n this.onAck(serial, count);\n });\n transport.on(\"nack\", (serial, count, err) => {\n this.onNack(serial, count, err);\n });\n }\n onAck(serial, count) {\n logger_default.logAction(this.logger, logger_default.LOG_MICRO, \"Protocol.onAck()\", \"serial = \" + serial + \"; count = \" + count);\n this.messageQueue.completeMessages(serial, count);\n }\n onNack(serial, count, err) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_ERROR,\n \"Protocol.onNack()\",\n \"serial = \" + serial + \"; count = \" + count + \"; err = \" + inspectError(err)\n );\n if (!err) {\n err = new ErrorInfo(\"Unable to send message; channel not responding\", 50001, 500);\n }\n this.messageQueue.completeMessages(serial, count, err);\n }\n onceIdle(listener) {\n const messageQueue = this.messageQueue;\n if (messageQueue.count() === 0) {\n listener();\n return;\n }\n messageQueue.once(\"idle\", listener);\n }\n send(pendingMessage) {\n if (pendingMessage.ackRequired) {\n this.messageQueue.push(pendingMessage);\n }\n if (this.logger.shouldLog(logger_default.LOG_MICRO)) {\n logger_default.logActionNoStrip(\n this.logger,\n logger_default.LOG_MICRO,\n \"Protocol.send()\",\n \"sending msg; \" + stringify(\n pendingMessage.message,\n this.transport.connectionManager.realtime._RealtimePresence,\n this.transport.connectionManager.realtime._Annotations,\n this.transport.connectionManager.realtime._objectsPlugin\n )\n );\n }\n pendingMessage.sendAttempted = true;\n this.transport.send(pendingMessage.message);\n }\n getTransport() {\n return this.transport;\n }\n getPendingMessages() {\n return this.messageQueue.copyAll();\n }\n clearPendingMessages() {\n return this.messageQueue.clear();\n }\n finish() {\n const transport = this.transport;\n this.onceIdle(function() {\n transport.disconnect();\n });\n }\n};\nvar protocol_default = Protocol;\n\n// src/common/lib/client/connectionstatechange.ts\nvar ConnectionStateChange = class {\n constructor(previous, current, retryIn, reason) {\n this.previous = previous;\n this.current = current;\n if (retryIn)\n this.retryIn = retryIn;\n if (reason)\n this.reason = reason;\n }\n};\nvar connectionstatechange_default = ConnectionStateChange;\n\n// src/common/lib/transport/connectionerrors.ts\nvar ConnectionErrorCodes = {\n DISCONNECTED: 80003,\n SUSPENDED: 80002,\n FAILED: 8e4,\n CLOSING: 80017,\n CLOSED: 80017,\n UNKNOWN_CONNECTION_ERR: 50002,\n UNKNOWN_CHANNEL_ERR: 50001\n};\nvar ConnectionErrors = {\n disconnected: () => ErrorInfo.fromValues({\n statusCode: 400,\n code: ConnectionErrorCodes.DISCONNECTED,\n message: \"Connection to server temporarily unavailable\"\n }),\n suspended: () => ErrorInfo.fromValues({\n statusCode: 400,\n code: ConnectionErrorCodes.SUSPENDED,\n message: \"Connection to server unavailable\"\n }),\n failed: () => ErrorInfo.fromValues({\n statusCode: 400,\n code: ConnectionErrorCodes.FAILED,\n message: \"Connection failed or disconnected by server\"\n }),\n closing: () => ErrorInfo.fromValues({\n statusCode: 400,\n code: ConnectionErrorCodes.CLOSING,\n message: \"Connection closing\"\n }),\n closed: () => ErrorInfo.fromValues({\n statusCode: 400,\n code: ConnectionErrorCodes.CLOSED,\n message: \"Connection closed\"\n }),\n unknownConnectionErr: () => ErrorInfo.fromValues({\n statusCode: 500,\n code: ConnectionErrorCodes.UNKNOWN_CONNECTION_ERR,\n message: \"Internal connection error\"\n }),\n unknownChannelErr: () => ErrorInfo.fromValues({\n statusCode: 500,\n code: ConnectionErrorCodes.UNKNOWN_CONNECTION_ERR,\n message: \"Internal channel error\"\n })\n};\nfunction isRetriable(err) {\n if (!err.statusCode || !err.code || err.statusCode >= 500) {\n return true;\n }\n return Object.values(ConnectionErrorCodes).includes(err.code);\n}\nvar connectionerrors_default = ConnectionErrors;\n\n// src/common/lib/transport/transport.ts\nvar closeMessage = fromValues({ action: actions.CLOSE });\nvar disconnectMessage = fromValues({ action: actions.DISCONNECT });\nvar Transport = class extends eventemitter_default {\n constructor(connectionManager, auth, params, forceJsonProtocol) {\n super(connectionManager.logger);\n if (forceJsonProtocol) {\n params.format = void 0;\n params.heartbeats = true;\n }\n this.connectionManager = connectionManager;\n this.auth = auth;\n this.params = params;\n this.timeouts = params.options.timeouts;\n this.format = params.format;\n this.isConnected = false;\n this.isFinished = false;\n this.isDisposed = false;\n this.maxIdleInterval = null;\n this.idleTimer = null;\n this.lastActivity = null;\n }\n connect() {\n }\n close() {\n if (this.isConnected) {\n this.requestClose();\n }\n this.finish(\"closed\", connectionerrors_default.closed());\n }\n disconnect(err) {\n if (this.isConnected) {\n this.requestDisconnect();\n }\n this.finish(\"disconnected\", err || connectionerrors_default.disconnected());\n }\n fail(err) {\n if (this.isConnected) {\n this.requestDisconnect();\n }\n this.finish(\"failed\", err || connectionerrors_default.failed());\n }\n finish(event, err) {\n var _a2;\n if (this.isFinished) {\n return;\n }\n this.isFinished = true;\n this.isConnected = false;\n this.maxIdleInterval = null;\n clearTimeout((_a2 = this.idleTimer) != null ? _a2 : void 0);\n this.idleTimer = null;\n this.emit(event, err);\n this.dispose();\n }\n onProtocolMessage(message) {\n if (this.logger.shouldLog(logger_default.LOG_MICRO)) {\n logger_default.logActionNoStrip(\n this.logger,\n logger_default.LOG_MICRO,\n \"Transport.onProtocolMessage()\",\n \"received on \" + this.shortName + \": \" + stringify(\n message,\n this.connectionManager.realtime._RealtimePresence,\n this.connectionManager.realtime._Annotations,\n this.connectionManager.realtime._objectsPlugin\n ) + \"; connectionId = \" + this.connectionManager.connectionId\n );\n }\n this.onActivity();\n switch (message.action) {\n case actions.HEARTBEAT:\n logger_default.logActionNoStrip(\n this.logger,\n logger_default.LOG_MICRO,\n \"Transport.onProtocolMessage()\",\n this.shortName + \" heartbeat; connectionId = \" + this.connectionManager.connectionId\n );\n this.emit(\"heartbeat\", message.id);\n break;\n case actions.CONNECTED:\n this.onConnect(message);\n this.emit(\"connected\", message.error, message.connectionId, message.connectionDetails, message);\n break;\n case actions.CLOSED:\n this.onClose(message);\n break;\n case actions.DISCONNECTED:\n this.onDisconnect(message);\n break;\n case actions.ACK:\n this.emit(\"ack\", message.msgSerial, message.count);\n break;\n case actions.NACK:\n this.emit(\"nack\", message.msgSerial, message.count, message.error);\n break;\n case actions.SYNC:\n this.connectionManager.onChannelMessage(message, this);\n break;\n case actions.ACTIVATE:\n break;\n case actions.AUTH:\n whenPromiseSettles(this.auth.authorize(), (err) => {\n if (err) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_ERROR,\n \"Transport.onProtocolMessage()\",\n \"Ably requested re-authentication, but unable to obtain a new token: \" + inspectError(err)\n );\n }\n });\n break;\n case actions.ERROR:\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MINOR,\n \"Transport.onProtocolMessage()\",\n \"received error action; connectionId = \" + this.connectionManager.connectionId + \"; err = \" + Platform.Config.inspect(message.error) + (message.channel ? \", channel: \" + message.channel : \"\")\n );\n if (message.channel === void 0) {\n this.onFatalError(message);\n break;\n }\n this.connectionManager.onChannelMessage(message, this);\n break;\n default:\n this.connectionManager.onChannelMessage(message, this);\n }\n }\n onConnect(message) {\n this.isConnected = true;\n if (!message.connectionDetails) {\n throw new Error(\"Transport.onConnect(): Connect message recieved without connectionDetails\");\n }\n const maxPromisedIdle = message.connectionDetails.maxIdleInterval;\n if (maxPromisedIdle) {\n this.maxIdleInterval = maxPromisedIdle + this.timeouts.realtimeRequestTimeout;\n this.onActivity();\n }\n }\n onDisconnect(message) {\n const err = message && message.error;\n logger_default.logAction(this.logger, logger_default.LOG_MINOR, \"Transport.onDisconnect()\", \"err = \" + inspectError(err));\n this.finish(\"disconnected\", err);\n }\n onFatalError(message) {\n const err = message && message.error;\n logger_default.logAction(this.logger, logger_default.LOG_MINOR, \"Transport.onFatalError()\", \"err = \" + inspectError(err));\n this.finish(\"failed\", err);\n }\n onClose(message) {\n const err = message && message.error;\n logger_default.logAction(this.logger, logger_default.LOG_MINOR, \"Transport.onClose()\", \"err = \" + inspectError(err));\n this.finish(\"closed\", err);\n }\n requestClose() {\n logger_default.logAction(this.logger, logger_default.LOG_MINOR, \"Transport.requestClose()\", \"\");\n this.send(closeMessage);\n }\n requestDisconnect() {\n logger_default.logAction(this.logger, logger_default.LOG_MINOR, \"Transport.requestDisconnect()\", \"\");\n this.send(disconnectMessage);\n }\n ping(id) {\n const msg = { action: actions.HEARTBEAT };\n if (id)\n msg.id = id;\n this.send(fromValues(msg));\n }\n dispose() {\n logger_default.logAction(this.logger, logger_default.LOG_MINOR, \"Transport.dispose()\", \"\");\n this.isDisposed = true;\n this.off();\n }\n onActivity() {\n if (!this.maxIdleInterval) {\n return;\n }\n this.lastActivity = this.connectionManager.lastActivity = Date.now();\n this.setIdleTimer(this.maxIdleInterval + 100);\n }\n setIdleTimer(timeout) {\n if (!this.idleTimer) {\n this.idleTimer = setTimeout(() => {\n this.onIdleTimerExpire();\n }, timeout);\n }\n }\n onIdleTimerExpire() {\n if (!this.lastActivity || !this.maxIdleInterval) {\n throw new Error(\"Transport.onIdleTimerExpire(): lastActivity/maxIdleInterval not set\");\n }\n this.idleTimer = null;\n const sinceLast = Date.now() - this.lastActivity;\n const timeRemaining = this.maxIdleInterval - sinceLast;\n if (timeRemaining <= 0) {\n const msg = \"No activity seen from realtime in \" + sinceLast + \"ms; assuming connection has dropped\";\n logger_default.logAction(this.logger, logger_default.LOG_ERROR, \"Transport.onIdleTimerExpire()\", msg);\n this.disconnect(new ErrorInfo(msg, 80003, 408));\n } else {\n this.setIdleTimer(timeRemaining + 100);\n }\n }\n static tryConnect(transportCtor, connectionManager, auth, transportParams, callback) {\n const transport = new transportCtor(connectionManager, auth, transportParams);\n let transportAttemptTimer;\n const errorCb = function(err) {\n clearTimeout(transportAttemptTimer);\n callback({ event: this.event, error: err });\n };\n const realtimeRequestTimeout = connectionManager.options.timeouts.realtimeRequestTimeout;\n transportAttemptTimer = setTimeout(() => {\n transport.off([\"preconnect\", \"disconnected\", \"failed\"]);\n transport.dispose();\n errorCb.call(\n { event: \"disconnected\" },\n new ErrorInfo(\"Timeout waiting for transport to indicate itself viable\", 5e4, 500)\n );\n }, realtimeRequestTimeout);\n transport.on([\"failed\", \"disconnected\"], errorCb);\n transport.on(\"preconnect\", function() {\n logger_default.logAction(\n connectionManager.logger,\n logger_default.LOG_MINOR,\n \"Transport.tryConnect()\",\n \"viable transport \" + transport\n );\n clearTimeout(transportAttemptTimer);\n transport.off([\"failed\", \"disconnected\"], errorCb);\n callback(null, transport);\n });\n transport.connect();\n return transport;\n }\n static isAvailable() {\n throw new ErrorInfo(\"isAvailable not implemented for transport\", 5e4, 500);\n }\n};\nvar transport_default = Transport;\n\n// src/common/constants/TransportName.ts\nvar TransportNames;\n((TransportNames2) => {\n TransportNames2.WebSocket = \"web_socket\";\n TransportNames2.Comet = \"comet\";\n TransportNames2.XhrPolling = \"xhr_polling\";\n})(TransportNames || (TransportNames = {}));\n\n// src/common/lib/transport/connectionmanager.ts\nvar globalObject2 = typeof global !== \"undefined\" ? global : typeof window !== \"undefined\" ? window : self;\nvar haveWebStorage = () => {\n var _a2;\n return typeof Platform.WebStorage !== \"undefined\" && ((_a2 = Platform.WebStorage) == null ? void 0 : _a2.localSupported);\n};\nvar haveSessionStorage = () => {\n var _a2;\n return typeof Platform.WebStorage !== \"undefined\" && ((_a2 = Platform.WebStorage) == null ? void 0 : _a2.sessionSupported);\n};\nvar noop2 = function() {\n};\nvar transportPreferenceName = \"ably-transport-preference\";\nfunction bundleWith(dest, src, maxSize) {\n let action;\n if (dest.channel !== src.channel) {\n return false;\n }\n if ((action = dest.action) !== actions.PRESENCE && action !== actions.MESSAGE) {\n return false;\n }\n if (action !== src.action) {\n return false;\n }\n const kind = action === actions.PRESENCE ? \"presence\" : \"messages\", proposed = dest[kind].concat(src[kind]), size = getMessagesSize(proposed);\n if (size > maxSize) {\n return false;\n }\n if (!allSame(proposed, \"clientId\")) {\n return false;\n }\n if (!proposed.every(function(msg) {\n return !msg.id;\n })) {\n return false;\n }\n dest[kind] = proposed;\n return true;\n}\nfunction decodeRecoveryKey(recoveryKey) {\n try {\n return JSON.parse(recoveryKey);\n } catch (e) {\n return null;\n }\n}\nvar TransportParams = class {\n constructor(options, host, mode, connectionKey) {\n this.options = options;\n this.host = host;\n this.mode = mode;\n this.connectionKey = connectionKey;\n this.format = options.useBinaryProtocol ? \"msgpack\" /* msgpack */ : \"json\" /* json */;\n }\n getConnectParams(authParams) {\n const params = authParams ? copy(authParams) : {};\n const options = this.options;\n switch (this.mode) {\n case \"resume\":\n params.resume = this.connectionKey;\n break;\n case \"recover\": {\n const recoveryContext = decodeRecoveryKey(options.recover);\n if (recoveryContext) {\n params.recover = recoveryContext.connectionKey;\n }\n break;\n }\n default:\n }\n if (options.clientId !== void 0) {\n params.clientId = options.clientId;\n }\n if (options.echoMessages === false) {\n params.echo = \"false\";\n }\n if (this.format !== void 0) {\n params.format = this.format;\n }\n if (this.stream !== void 0) {\n params.stream = this.stream;\n }\n if (this.heartbeats !== void 0) {\n params.heartbeats = this.heartbeats;\n }\n params.v = defaults_default.protocolVersion;\n params.agent = getAgentString(this.options);\n if (options.transportParams !== void 0) {\n mixin(params, options.transportParams);\n }\n return params;\n }\n toString() {\n let result = \"[mode=\" + this.mode;\n if (this.host) {\n result += \",host=\" + this.host;\n }\n if (this.connectionKey) {\n result += \",connectionKey=\" + this.connectionKey;\n }\n if (this.format) {\n result += \",format=\" + this.format;\n }\n result += \"]\";\n return result;\n }\n};\nvar ConnectionManager = class _ConnectionManager extends eventemitter_default {\n constructor(realtime, options) {\n super(realtime.logger);\n this.supportedTransports = {};\n this.disconnectedRetryCount = 0;\n this.pendingChannelMessagesState = { isProcessing: false, queue: [] };\n this.realtime = realtime;\n this.initTransports();\n this.options = options;\n const timeouts = options.timeouts;\n const connectingTimeout = timeouts.webSocketConnectTimeout + timeouts.realtimeRequestTimeout;\n this.states = {\n initialized: {\n state: \"initialized\",\n terminal: false,\n queueEvents: true,\n sendEvents: false,\n failState: \"disconnected\"\n },\n connecting: {\n state: \"connecting\",\n terminal: false,\n queueEvents: true,\n sendEvents: false,\n retryDelay: connectingTimeout,\n failState: \"disconnected\"\n },\n connected: {\n state: \"connected\",\n terminal: false,\n queueEvents: false,\n sendEvents: true,\n failState: \"disconnected\"\n },\n disconnected: {\n state: \"disconnected\",\n terminal: false,\n queueEvents: true,\n sendEvents: false,\n retryDelay: timeouts.disconnectedRetryTimeout,\n failState: \"disconnected\"\n },\n suspended: {\n state: \"suspended\",\n terminal: false,\n queueEvents: false,\n sendEvents: false,\n retryDelay: timeouts.suspendedRetryTimeout,\n failState: \"suspended\"\n },\n closing: {\n state: \"closing\",\n terminal: false,\n queueEvents: false,\n sendEvents: false,\n retryDelay: timeouts.realtimeRequestTimeout,\n failState: \"closed\"\n },\n closed: { state: \"closed\", terminal: true, queueEvents: false, sendEvents: false, failState: \"closed\" },\n failed: { state: \"failed\", terminal: true, queueEvents: false, sendEvents: false, failState: \"failed\" }\n };\n this.state = this.states.initialized;\n this.errorReason = null;\n this.queuedMessages = new messagequeue_default(this.logger);\n this.msgSerial = 0;\n this.connectionDetails = void 0;\n this.connectionId = void 0;\n this.connectionKey = void 0;\n this.connectionStateTtl = timeouts.connectionStateTtl;\n this.maxIdleInterval = null;\n this.transports = intersect(options.transports || defaults_default.defaultTransports, this.supportedTransports);\n this.transportPreference = null;\n if (this.transports.includes(TransportNames.WebSocket)) {\n this.webSocketTransportAvailable = true;\n }\n if (this.transports.includes(TransportNames.XhrPolling)) {\n this.baseTransport = TransportNames.XhrPolling;\n } else if (this.transports.includes(TransportNames.Comet)) {\n this.baseTransport = TransportNames.Comet;\n }\n this.domains = defaults_default.getHosts(options);\n this.activeProtocol = null;\n this.host = null;\n this.lastAutoReconnectAttempt = null;\n this.lastActivity = null;\n this.forceFallbackHost = false;\n this.connectCounter = 0;\n this.wsCheckResult = null;\n this.webSocketSlowTimer = null;\n this.webSocketGiveUpTimer = null;\n this.abandonedWebSocket = false;\n logger_default.logAction(this.logger, logger_default.LOG_MINOR, \"Realtime.ConnectionManager()\", \"started\");\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MICRO,\n \"Realtime.ConnectionManager()\",\n \"requested transports = [\" + (options.transports || defaults_default.defaultTransports) + \"]\"\n );\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MICRO,\n \"Realtime.ConnectionManager()\",\n \"available transports = [\" + this.transports + \"]\"\n );\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MICRO,\n \"Realtime.ConnectionManager()\",\n \"http domains = [\" + this.domains + \"]\"\n );\n if (!this.transports.length) {\n const msg = \"no requested transports available\";\n logger_default.logAction(this.logger, logger_default.LOG_ERROR, \"realtime.ConnectionManager()\", msg);\n throw new Error(msg);\n }\n const addEventListener = Platform.Config.addEventListener;\n if (addEventListener) {\n if (haveSessionStorage() && typeof options.recover === \"function\") {\n addEventListener(\"beforeunload\", this.persistConnection.bind(this));\n }\n if (options.closeOnUnload === true) {\n addEventListener(\"beforeunload\", () => {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MAJOR,\n \"Realtime.ConnectionManager()\",\n \"beforeunload event has triggered the connection to close as closeOnUnload is true\"\n );\n this.requestState({ state: \"closing\" });\n });\n }\n addEventListener(\"online\", () => {\n var _a2;\n if (this.state == this.states.disconnected || this.state == this.states.suspended) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MINOR,\n \"ConnectionManager caught browser \\u2018online\\u2019 event\",\n \"reattempting connection\"\n );\n this.requestState({ state: \"connecting\" });\n } else if (this.state == this.states.connecting) {\n (_a2 = this.pendingTransport) == null ? void 0 : _a2.off();\n this.disconnectAllTransports();\n this.startConnect();\n }\n });\n addEventListener(\"offline\", () => {\n if (this.state == this.states.connected) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MINOR,\n \"ConnectionManager caught browser \\u2018offline\\u2019 event\",\n \"disconnecting active transport\"\n );\n this.disconnectAllTransports();\n }\n });\n }\n }\n /*********************\n * transport management\n *********************/\n // Used by tests\n static supportedTransports(additionalImplementations) {\n const storage = { supportedTransports: {} };\n this.initTransports(additionalImplementations, storage);\n return storage.supportedTransports;\n }\n static initTransports(additionalImplementations, storage) {\n const implementations = __spreadValues(__spreadValues({}, Platform.Transports.bundledImplementations), additionalImplementations);\n [TransportNames.WebSocket, ...Platform.Transports.order].forEach((transportName) => {\n const transport = implementations[transportName];\n if (transport && transport.isAvailable()) {\n storage.supportedTransports[transportName] = transport;\n }\n });\n }\n initTransports() {\n _ConnectionManager.initTransports(this.realtime._additionalTransportImplementations, this);\n }\n createTransportParams(host, mode) {\n return new TransportParams(this.options, host, mode, this.connectionKey);\n }\n getTransportParams(callback) {\n const decideMode = (modeCb) => {\n if (this.connectionKey) {\n modeCb(\"resume\");\n return;\n }\n if (typeof this.options.recover === \"string\") {\n modeCb(\"recover\");\n return;\n }\n const recoverFn = this.options.recover, lastSessionData = this.getSessionRecoverData(), sessionRecoveryName = this.sessionRecoveryName();\n if (lastSessionData && typeof recoverFn === \"function\") {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MINOR,\n \"ConnectionManager.getTransportParams()\",\n \"Calling clientOptions-provided recover function with last session data (recovery scope: \" + sessionRecoveryName + \")\"\n );\n recoverFn(lastSessionData, (shouldRecover) => {\n if (shouldRecover) {\n this.options.recover = lastSessionData.recoveryKey;\n modeCb(\"recover\");\n } else {\n modeCb(\"clean\");\n }\n });\n return;\n }\n modeCb(\"clean\");\n };\n decideMode((mode) => {\n const transportParams = this.createTransportParams(null, mode);\n if (mode === \"recover\") {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MINOR,\n \"ConnectionManager.getTransportParams()\",\n \"Transport recovery mode = recover; recoveryKey = \" + this.options.recover\n );\n const recoveryContext = decodeRecoveryKey(this.options.recover);\n if (recoveryContext) {\n this.msgSerial = recoveryContext.msgSerial;\n }\n } else {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MINOR,\n \"ConnectionManager.getTransportParams()\",\n \"Transport params = \" + transportParams.toString()\n );\n }\n callback(transportParams);\n });\n }\n /**\n * Attempt to connect using a given transport\n * @param transportParams\n * @param candidate, the transport to try\n * @param callback\n */\n tryATransport(transportParams, candidate, callback) {\n logger_default.logAction(this.logger, logger_default.LOG_MICRO, \"ConnectionManager.tryATransport()\", \"trying \" + candidate);\n this.proposedTransport = transport_default.tryConnect(\n this.supportedTransports[candidate],\n this,\n this.realtime.auth,\n transportParams,\n (wrappedErr, transport) => {\n const state = this.state;\n if (state == this.states.closing || state == this.states.closed || state == this.states.failed) {\n if (transport) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MINOR,\n \"ConnectionManager.tryATransport()\",\n \"connection \" + state.state + \" while we were attempting the transport; closing \" + transport\n );\n transport.close();\n }\n callback(true);\n return;\n }\n if (wrappedErr) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MINOR,\n \"ConnectionManager.tryATransport()\",\n \"transport \" + candidate + \" \" + wrappedErr.event + \", err: \" + wrappedErr.error.toString()\n );\n if (auth_default.isTokenErr(wrappedErr.error) && !(this.errorReason && auth_default.isTokenErr(this.errorReason))) {\n this.errorReason = wrappedErr.error;\n whenPromiseSettles(this.realtime.auth._forceNewToken(null, null), (err) => {\n if (err) {\n this.actOnErrorFromAuthorize(err);\n return;\n }\n this.tryATransport(transportParams, candidate, callback);\n });\n } else if (wrappedErr.event === \"failed\") {\n this.notifyState({ state: \"failed\", error: wrappedErr.error });\n callback(true);\n } else if (wrappedErr.event === \"disconnected\") {\n if (!isRetriable(wrappedErr.error)) {\n this.notifyState({ state: this.states.connecting.failState, error: wrappedErr.error });\n callback(true);\n } else {\n callback(false);\n }\n }\n return;\n }\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MICRO,\n \"ConnectionManager.tryATransport()\",\n \"viable transport \" + candidate + \"; setting pending\"\n );\n this.setTransportPending(transport, transportParams);\n callback(null, transport);\n }\n );\n }\n /**\n * Called when a transport is indicated to be viable, and the ConnectionManager\n * expects to activate this transport as soon as it is connected.\n * @param transport\n * @param transportParams\n */\n setTransportPending(transport, transportParams) {\n const mode = transportParams.mode;\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MINOR,\n \"ConnectionManager.setTransportPending()\",\n \"transport = \" + transport + \"; mode = \" + mode\n );\n this.pendingTransport = transport;\n this.cancelWebSocketSlowTimer();\n this.cancelWebSocketGiveUpTimer();\n transport.once(\"connected\", (error, connectionId, connectionDetails) => {\n this.activateTransport(error, transport, connectionId, connectionDetails);\n if (mode === \"recover\" && this.options.recover) {\n delete this.options.recover;\n this.unpersistConnection();\n }\n });\n const self2 = this;\n transport.on([\"disconnected\", \"closed\", \"failed\"], function(error) {\n self2.deactivateTransport(transport, this.event, error);\n });\n this.emit(\"transport.pending\", transport);\n }\n /**\n * Called when a transport is connected, and the connectionmanager decides that\n * it will now be the active transport. Returns whether or not it activated\n * the transport (if the connection is closing/closed it will choose not to).\n * @param transport the transport instance\n * @param connectionId the id of the new active connection\n * @param connectionDetails the details of the new active connection\n */\n activateTransport(error, transport, connectionId, connectionDetails) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MINOR,\n \"ConnectionManager.activateTransport()\",\n \"transport = \" + transport\n );\n if (error) {\n logger_default.logAction(this.logger, logger_default.LOG_ERROR, \"ConnectionManager.activateTransport()\", \"error = \" + error);\n }\n if (connectionId) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MICRO,\n \"ConnectionManager.activateTransport()\",\n \"connectionId = \" + connectionId\n );\n }\n if (connectionDetails) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MICRO,\n \"ConnectionManager.activateTransport()\",\n \"connectionDetails = \" + JSON.stringify(connectionDetails)\n );\n }\n this.persistTransportPreference(transport);\n const existingState = this.state, connectedState = this.states.connected.state;\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MINOR,\n \"ConnectionManager.activateTransport()\",\n \"current state = \" + existingState.state\n );\n if (existingState.state == this.states.closing.state || existingState.state == this.states.closed.state || existingState.state == this.states.failed.state) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MINOR,\n \"ConnectionManager.activateTransport()\",\n \"Disconnecting transport and abandoning\"\n );\n transport.disconnect();\n return false;\n }\n delete this.pendingTransport;\n if (!transport.isConnected) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MINOR,\n \"ConnectionManager.activateTransport()\",\n \"Declining to activate transport \" + transport + \" since it appears to no longer be connected\"\n );\n return false;\n }\n const existingActiveProtocol = this.activeProtocol;\n this.activeProtocol = new protocol_default(transport);\n this.host = transport.params.host;\n const connectionKey = connectionDetails.connectionKey;\n if (connectionKey && this.connectionKey != connectionKey) {\n this.setConnection(connectionId, connectionDetails, !!error);\n }\n this.onConnectionDetailsUpdate(connectionDetails, transport);\n Platform.Config.nextTick(() => {\n transport.on(\n \"connected\",\n (connectedErr, _connectionId, connectionDetails2) => {\n this.onConnectionDetailsUpdate(connectionDetails2, transport);\n this.emit(\"update\", new connectionstatechange_default(connectedState, connectedState, null, connectedErr));\n }\n );\n });\n if (existingState.state === this.states.connected.state) {\n if (error) {\n this.errorReason = this.realtime.connection.errorReason = error;\n this.emit(\"update\", new connectionstatechange_default(connectedState, connectedState, null, error));\n }\n } else {\n this.notifyState({ state: \"connected\", error });\n this.errorReason = this.realtime.connection.errorReason = error || null;\n }\n this.emit(\"transport.active\", transport);\n if (existingActiveProtocol) {\n if (existingActiveProtocol.messageQueue.count() > 0) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_ERROR,\n \"ConnectionManager.activateTransport()\",\n \"Previous active protocol (for transport \" + existingActiveProtocol.transport.shortName + \", new one is \" + transport.shortName + \") finishing with \" + existingActiveProtocol.messageQueue.count() + \" messages still pending\"\n );\n }\n if (existingActiveProtocol.transport === transport) {\n const msg = \"Assumption violated: activating a transport that was also the transport for the previous active protocol; transport = \" + transport.shortName + \"; stack = \" + new Error().stack;\n logger_default.logAction(this.logger, logger_default.LOG_ERROR, \"ConnectionManager.activateTransport()\", msg);\n } else {\n existingActiveProtocol.finish();\n }\n }\n return true;\n }\n /**\n * Called when a transport is no longer the active transport. This can occur\n * in any transport connection state.\n * @param transport\n */\n deactivateTransport(transport, state, error) {\n const currentProtocol = this.activeProtocol, wasActive = currentProtocol && currentProtocol.getTransport() === transport, wasPending = transport === this.pendingTransport, noTransportsScheduledForActivation = this.noTransportsScheduledForActivation();\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MINOR,\n \"ConnectionManager.deactivateTransport()\",\n \"transport = \" + transport\n );\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MINOR,\n \"ConnectionManager.deactivateTransport()\",\n \"state = \" + state + (wasActive ? \"; was active\" : wasPending ? \"; was pending\" : \"\") + (noTransportsScheduledForActivation ? \"\" : \"; another transport is scheduled for activation\")\n );\n if (error && error.message)\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MICRO,\n \"ConnectionManager.deactivateTransport()\",\n \"reason = \" + error.message\n );\n if (wasActive) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MICRO,\n \"ConnectionManager.deactivateTransport()\",\n \"Getting, clearing, and requeuing \" + this.activeProtocol.messageQueue.count() + \" pending messages\"\n );\n this.queuePendingMessages(currentProtocol.getPendingMessages());\n currentProtocol.clearPendingMessages();\n this.activeProtocol = this.host = null;\n }\n this.emit(\"transport.inactive\", transport);\n if (wasActive && noTransportsScheduledForActivation || wasActive && state === \"failed\" || state === \"closed\" || currentProtocol === null && wasPending) {\n if (state === \"disconnected\" && error && error.statusCode > 500 && this.domains.length > 1) {\n this.unpersistTransportPreference();\n this.forceFallbackHost = true;\n this.notifyState({ state, error, retryImmediately: true });\n return;\n }\n const newConnectionState = state === \"failed\" && auth_default.isTokenErr(error) ? \"disconnected\" : state;\n this.notifyState({ state: newConnectionState, error });\n return;\n }\n }\n /* Helper that returns true if there are no transports which are pending,\n * have been connected, and are just waiting for onceNoPending to fire before\n * being activated */\n noTransportsScheduledForActivation() {\n return !this.pendingTransport || !this.pendingTransport.isConnected;\n }\n setConnection(connectionId, connectionDetails, hasConnectionError) {\n const prevConnId = this.connectionId, connIdChanged = prevConnId && prevConnId !== connectionId, recoverFailure = !prevConnId && hasConnectionError;\n if (connIdChanged || recoverFailure) {\n logger_default.logAction(this.logger, logger_default.LOG_MINOR, \"ConnectionManager.setConnection()\", \"Resetting msgSerial\");\n this.msgSerial = 0;\n this.queuedMessages.resetSendAttempted();\n }\n if (this.connectionId !== connectionId) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MINOR,\n \"ConnectionManager.setConnection()\",\n \"New connectionId; reattaching any attached channels\"\n );\n }\n this.realtime.connection.id = this.connectionId = connectionId;\n this.realtime.connection.key = this.connectionKey = connectionDetails.connectionKey;\n }\n clearConnection() {\n this.realtime.connection.id = this.connectionId = void 0;\n this.realtime.connection.key = this.connectionKey = void 0;\n this.msgSerial = 0;\n this.unpersistConnection();\n }\n createRecoveryKey() {\n if (!this.connectionKey) {\n return null;\n }\n return JSON.stringify({\n connectionKey: this.connectionKey,\n msgSerial: this.msgSerial,\n channelSerials: this.realtime.channels.channelSerials()\n });\n }\n checkConnectionStateFreshness() {\n if (!this.lastActivity || !this.connectionId) {\n return;\n }\n const sinceLast = Date.now() - this.lastActivity;\n if (sinceLast > this.connectionStateTtl + this.maxIdleInterval) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MINOR,\n \"ConnectionManager.checkConnectionStateFreshness()\",\n \"Last known activity from realtime was \" + sinceLast + \"ms ago; discarding connection state\"\n );\n this.clearConnection();\n this.states.connecting.failState = \"suspended\";\n }\n }\n /**\n * Called when the connectionmanager wants to persist transport\n * state for later recovery. Only applicable in the browser context.\n */\n persistConnection() {\n if (haveSessionStorage()) {\n const recoveryKey = this.createRecoveryKey();\n if (recoveryKey) {\n this.setSessionRecoverData({\n recoveryKey,\n disconnectedAt: Date.now(),\n location: globalObject2.location,\n clientId: this.realtime.auth.clientId\n });\n }\n }\n }\n /**\n * Called when the connectionmanager wants to persist transport\n * state for later recovery. Only applicable in the browser context.\n */\n unpersistConnection() {\n this.clearSessionRecoverData();\n }\n getActiveTransportFormat() {\n var _a2;\n return (_a2 = this.activeProtocol) == null ? void 0 : _a2.getTransport().format;\n }\n /*********************\n * state management\n *********************/\n getError() {\n if (this.errorReason) {\n const newError = PartialErrorInfo.fromValues(this.errorReason);\n newError.cause = this.errorReason;\n return newError;\n }\n return this.getStateError();\n }\n getStateError() {\n var _a2, _b;\n return (_b = (_a2 = connectionerrors_default)[this.state.state]) == null ? void 0 : _b.call(_a2);\n }\n activeState() {\n return this.state.queueEvents || this.state.sendEvents;\n }\n enactStateChange(stateChange) {\n const action = \"Connection state\";\n const message = stateChange.current + (stateChange.reason ? \"; reason: \" + stateChange.reason : \"\");\n if (stateChange.current === \"failed\") {\n logger_default.logAction(this.logger, logger_default.LOG_ERROR, action, message);\n } else {\n logger_default.logAction(this.logger, logger_default.LOG_MAJOR, action, message);\n }\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MINOR,\n \"ConnectionManager.enactStateChange\",\n \"setting new state: \" + stateChange.current + \"; reason = \" + (stateChange.reason && stateChange.reason.message)\n );\n const newState = this.state = this.states[stateChange.current];\n if (stateChange.reason) {\n this.errorReason = stateChange.reason;\n this.realtime.connection.errorReason = stateChange.reason;\n }\n if (newState.terminal || newState.state === \"suspended\") {\n this.clearConnection();\n }\n this.emit(\"connectionstate\", stateChange);\n }\n /****************************************\n * ConnectionManager connection lifecycle\n ****************************************/\n startTransitionTimer(transitionState) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MINOR,\n \"ConnectionManager.startTransitionTimer()\",\n \"transitionState: \" + transitionState.state\n );\n if (this.transitionTimer) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MINOR,\n \"ConnectionManager.startTransitionTimer()\",\n \"clearing already-running timer\"\n );\n clearTimeout(this.transitionTimer);\n }\n this.transitionTimer = setTimeout(() => {\n if (this.transitionTimer) {\n this.transitionTimer = null;\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MINOR,\n \"ConnectionManager \" + transitionState.state + \" timer expired\",\n \"requesting new state: \" + transitionState.failState\n );\n this.notifyState({ state: transitionState.failState });\n }\n }, transitionState.retryDelay);\n }\n cancelTransitionTimer() {\n logger_default.logAction(this.logger, logger_default.LOG_MINOR, \"ConnectionManager.cancelTransitionTimer()\", \"\");\n if (this.transitionTimer) {\n clearTimeout(this.transitionTimer);\n this.transitionTimer = null;\n }\n }\n startSuspendTimer() {\n if (this.suspendTimer)\n return;\n this.suspendTimer = setTimeout(() => {\n if (this.suspendTimer) {\n this.suspendTimer = null;\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MINOR,\n \"ConnectionManager suspend timer expired\",\n \"requesting new state: suspended\"\n );\n this.states.connecting.failState = \"suspended\";\n this.notifyState({ state: \"suspended\" });\n }\n }, this.connectionStateTtl);\n }\n checkSuspendTimer(state) {\n if (state !== \"disconnected\" && state !== \"suspended\" && state !== \"connecting\")\n this.cancelSuspendTimer();\n }\n cancelSuspendTimer() {\n this.states.connecting.failState = \"disconnected\";\n if (this.suspendTimer) {\n clearTimeout(this.suspendTimer);\n this.suspendTimer = null;\n }\n }\n startRetryTimer(interval) {\n this.retryTimer = setTimeout(() => {\n logger_default.logAction(this.logger, logger_default.LOG_MINOR, \"ConnectionManager retry timer expired\", \"retrying\");\n this.retryTimer = null;\n this.requestState({ state: \"connecting\" });\n }, interval);\n }\n cancelRetryTimer() {\n if (this.retryTimer) {\n clearTimeout(this.retryTimer);\n this.retryTimer = null;\n }\n }\n startWebSocketSlowTimer() {\n this.webSocketSlowTimer = setTimeout(() => {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MINOR,\n \"ConnectionManager WebSocket slow timer\",\n \"checking connectivity\"\n );\n this.checkWsConnectivity().then(() => {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MINOR,\n \"ConnectionManager WebSocket slow timer\",\n \"ws connectivity check succeeded\"\n );\n this.wsCheckResult = true;\n }).catch(() => {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MAJOR,\n \"ConnectionManager WebSocket slow timer\",\n \"ws connectivity check failed\"\n );\n this.wsCheckResult = false;\n });\n if (this.realtime.http.checkConnectivity) {\n whenPromiseSettles(this.realtime.http.checkConnectivity(), (err, connectivity) => {\n if (err || !connectivity) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MAJOR,\n \"ConnectionManager WebSocket slow timer\",\n \"http connectivity check failed\"\n );\n this.cancelWebSocketGiveUpTimer();\n this.notifyState({\n state: \"disconnected\",\n error: new ErrorInfo(\"Unable to connect (network unreachable)\", 80003, 404)\n });\n } else {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MINOR,\n \"ConnectionManager WebSocket slow timer\",\n \"http connectivity check succeeded\"\n );\n }\n });\n }\n }, this.options.timeouts.webSocketSlowTimeout);\n }\n cancelWebSocketSlowTimer() {\n if (this.webSocketSlowTimer) {\n clearTimeout(this.webSocketSlowTimer);\n this.webSocketSlowTimer = null;\n }\n }\n startWebSocketGiveUpTimer(transportParams) {\n this.webSocketGiveUpTimer = setTimeout(() => {\n var _a2, _b;\n if (!this.wsCheckResult) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MINOR,\n \"ConnectionManager WebSocket give up timer\",\n \"websocket connection took more than 10s; \" + (this.baseTransport ? \"trying base transport\" : \"\")\n );\n if (this.baseTransport) {\n this.abandonedWebSocket = true;\n (_a2 = this.proposedTransport) == null ? void 0 : _a2.dispose();\n (_b = this.pendingTransport) == null ? void 0 : _b.dispose();\n this.connectBase(transportParams, ++this.connectCounter);\n } else {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MAJOR,\n \"ConnectionManager WebSocket give up timer\",\n \"websocket connectivity appears to be unavailable but no other transports to try\"\n );\n }\n }\n }, this.options.timeouts.webSocketConnectTimeout);\n }\n cancelWebSocketGiveUpTimer() {\n if (this.webSocketGiveUpTimer) {\n clearTimeout(this.webSocketGiveUpTimer);\n this.webSocketGiveUpTimer = null;\n }\n }\n notifyState(indicated) {\n var _a2, _b;\n const state = indicated.state;\n const retryImmediately = state === \"disconnected\" && (this.state === this.states.connected || indicated.retryImmediately || this.state === this.states.connecting && indicated.error && auth_default.isTokenErr(indicated.error) && !(this.errorReason && auth_default.isTokenErr(this.errorReason)));\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MINOR,\n \"ConnectionManager.notifyState()\",\n \"new state: \" + state + (retryImmediately ? \"; will retry connection immediately\" : \"\")\n );\n if (state == this.state.state)\n return;\n this.cancelTransitionTimer();\n this.cancelRetryTimer();\n this.cancelWebSocketSlowTimer();\n this.cancelWebSocketGiveUpTimer();\n this.checkSuspendTimer(indicated.state);\n if (state === \"suspended\" || state === \"connected\") {\n this.disconnectedRetryCount = 0;\n }\n if (this.state.terminal)\n return;\n const newState = this.states[indicated.state];\n let retryDelay = newState.retryDelay;\n if (newState.state === \"disconnected\") {\n this.disconnectedRetryCount++;\n retryDelay = getRetryTime(newState.retryDelay, this.disconnectedRetryCount);\n }\n const change = new connectionstatechange_default(\n this.state.state,\n newState.state,\n retryDelay,\n indicated.error || ((_b = (_a2 = connectionerrors_default)[newState.state]) == null ? void 0 : _b.call(_a2))\n );\n if (retryImmediately) {\n const autoReconnect = () => {\n if (this.state === this.states.disconnected) {\n this.lastAutoReconnectAttempt = Date.now();\n this.requestState({ state: \"connecting\" });\n }\n };\n const sinceLast = this.lastAutoReconnectAttempt && Date.now() - this.lastAutoReconnectAttempt + 1;\n if (sinceLast && sinceLast < 1e3) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MICRO,\n \"ConnectionManager.notifyState()\",\n \"Last reconnect attempt was only \" + sinceLast + \"ms ago, waiting another \" + (1e3 - sinceLast) + \"ms before trying again\"\n );\n setTimeout(autoReconnect, 1e3 - sinceLast);\n } else {\n Platform.Config.nextTick(autoReconnect);\n }\n } else if (state === \"disconnected\" || state === \"suspended\") {\n this.startRetryTimer(retryDelay);\n }\n if (state === \"disconnected\" && !retryImmediately || state === \"suspended\" || newState.terminal) {\n Platform.Config.nextTick(() => {\n this.disconnectAllTransports();\n });\n }\n if (state == \"connected\" && !this.activeProtocol) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_ERROR,\n \"ConnectionManager.notifyState()\",\n \"Broken invariant: attempted to go into connected state, but there is no active protocol\"\n );\n }\n this.enactStateChange(change);\n if (this.state.sendEvents) {\n this.sendQueuedMessages();\n } else if (!this.state.queueEvents) {\n this.realtime.channels.propogateConnectionInterruption(state, change.reason);\n this.failQueuedMessages(change.reason);\n }\n }\n requestState(request) {\n var _a2, _b;\n const state = request.state;\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MINOR,\n \"ConnectionManager.requestState()\",\n \"requested state: \" + state + \"; current state: \" + this.state.state\n );\n if (state == this.state.state)\n return;\n this.cancelWebSocketSlowTimer();\n this.cancelWebSocketGiveUpTimer();\n this.cancelTransitionTimer();\n this.cancelRetryTimer();\n this.checkSuspendTimer(state);\n if (state == \"connecting\" && this.state.state == \"connected\")\n return;\n if (state == \"closing\" && this.state.state == \"closed\")\n return;\n const newState = this.states[state], change = new connectionstatechange_default(\n this.state.state,\n newState.state,\n null,\n request.error || ((_b = (_a2 = connectionerrors_default)[newState.state]) == null ? void 0 : _b.call(_a2))\n );\n this.enactStateChange(change);\n if (state == \"connecting\") {\n Platform.Config.nextTick(() => {\n this.startConnect();\n });\n }\n if (state == \"closing\") {\n this.closeImpl();\n }\n }\n startConnect() {\n if (this.state !== this.states.connecting) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MINOR,\n \"ConnectionManager.startConnect()\",\n \"Must be in connecting state to connect, but was \" + this.state.state\n );\n return;\n }\n const auth = this.realtime.auth;\n const connectCount = ++this.connectCounter;\n const connect = () => {\n this.checkConnectionStateFreshness();\n this.getTransportParams((transportParams) => {\n if (transportParams.mode === \"recover\" && transportParams.options.recover) {\n const recoveryContext = decodeRecoveryKey(transportParams.options.recover);\n if (recoveryContext) {\n this.realtime.channels.recoverChannels(recoveryContext.channelSerials);\n }\n }\n if (connectCount !== this.connectCounter) {\n return;\n }\n this.connectImpl(transportParams, connectCount);\n });\n };\n logger_default.logAction(this.logger, logger_default.LOG_MINOR, \"ConnectionManager.startConnect()\", \"starting connection\");\n this.startSuspendTimer();\n this.startTransitionTimer(this.states.connecting);\n if (auth.method === \"basic\") {\n connect();\n } else {\n const authCb = (err) => {\n if (connectCount !== this.connectCounter) {\n return;\n }\n if (err) {\n this.actOnErrorFromAuthorize(err);\n } else {\n connect();\n }\n };\n if (this.errorReason && auth_default.isTokenErr(this.errorReason)) {\n whenPromiseSettles(auth._forceNewToken(null, null), authCb);\n } else {\n whenPromiseSettles(auth._ensureValidAuthCredentials(false), authCb);\n }\n }\n }\n /*\n * there are, at most, two transports available with which a connection may\n * be attempted: web_socket and/or a base transport (xhr_polling in browsers,\n * comet in nodejs). web_socket is always preferred, and the base transport is\n * only used in case web_socket connectivity appears to be unavailable.\n *\n * connectImpl begins the transport selection process by checking which transports\n * are available, and if there is a cached preference. It then defers to the\n * transport-specific connect methods: connectWs and connectBase.\n *\n * It is also responsible for invalidating the cache in the case that a base\n * transport preference is stored but web socket connectivity is now available.\n *\n * handling of the case where we need to failover from web_socket to the base\n * transport is implemented in the connectWs method.\n */\n connectImpl(transportParams, connectCount) {\n const state = this.state.state;\n if (state !== this.states.connecting.state) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MINOR,\n \"ConnectionManager.connectImpl()\",\n \"Must be in connecting state to connect, but was \" + state\n );\n return;\n }\n const transportPreference = this.getTransportPreference();\n if (transportPreference && transportPreference === this.baseTransport && this.webSocketTransportAvailable) {\n this.checkWsConnectivity().then(() => {\n this.unpersistTransportPreference();\n if (this.state === this.states.connecting) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MINOR,\n \"ConnectionManager.connectImpl():\",\n \"web socket connectivity available, cancelling connection attempt with \" + this.baseTransport\n );\n this.disconnectAllTransports();\n this.connectWs(transportParams, ++this.connectCounter);\n }\n }).catch(noop2);\n }\n if (transportPreference && transportPreference === this.baseTransport || this.baseTransport && !this.webSocketTransportAvailable) {\n this.connectBase(transportParams, connectCount);\n } else {\n this.connectWs(transportParams, connectCount);\n }\n }\n /*\n * connectWs starts two timers to monitor the success of a web_socket connection attempt:\n * - webSocketSlowTimer: if this timer fires before the connection succeeds,\n * cm will simultaneously check websocket and http/xhr connectivity. if the http\n * connectivity check fails, we give up the connection sequence entirely and\n * transition to disconnected. if the websocket connectivity check fails then\n * we assume no ws connectivity and failover to base transport. in the case that\n * the checks succeed, we continue with websocket and wait for it to try fallback hosts\n * and, if unsuccessful, ultimately transition to disconnected.\n * - webSocketGiveUpTimer: if this timer fires, and the preceding websocket\n * connectivity check is still pending then we assume that there is an issue\n * with the transport and fallback to base transport.\n */\n connectWs(transportParams, connectCount) {\n logger_default.logAction(this.logger, logger_default.LOG_MICRO, \"ConnectionManager.connectWs()\");\n this.wsCheckResult = null;\n this.abandonedWebSocket = false;\n this.startWebSocketSlowTimer();\n this.startWebSocketGiveUpTimer(transportParams);\n this.tryTransportWithFallbacks(\"web_socket\", transportParams, true, connectCount, () => {\n return this.wsCheckResult !== false && !this.abandonedWebSocket;\n });\n }\n connectBase(transportParams, connectCount) {\n logger_default.logAction(this.logger, logger_default.LOG_MICRO, \"ConnectionManager.connectBase()\");\n if (this.baseTransport) {\n this.tryTransportWithFallbacks(this.baseTransport, transportParams, false, connectCount, () => true);\n } else {\n this.notifyState({\n state: \"disconnected\",\n error: new ErrorInfo(\"No transports left to try\", 8e4, 404)\n });\n }\n }\n tryTransportWithFallbacks(transportName, transportParams, ws, connectCount, shouldContinue) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MICRO,\n \"ConnectionManager.tryTransportWithFallbacks()\",\n transportName\n );\n const giveUp = (err) => {\n this.notifyState({ state: this.states.connecting.failState, error: err });\n };\n const candidateHosts = this.domains.slice();\n const hostAttemptCb = (fatal, transport) => {\n if (connectCount !== this.connectCounter) {\n return;\n }\n if (!shouldContinue()) {\n if (transport) {\n transport.dispose();\n }\n return;\n }\n if (!transport && !fatal) {\n tryFallbackHosts();\n }\n };\n const host = candidateHosts.shift();\n if (!host) {\n giveUp(new ErrorInfo(\"Unable to connect (no available host)\", 80003, 404));\n return;\n }\n transportParams.host = host;\n const tryFallbackHosts = () => {\n if (!candidateHosts.length) {\n giveUp(new ErrorInfo(\"Unable to connect (and no more fallback hosts to try)\", 80003, 404));\n return;\n }\n if (!this.realtime.http.checkConnectivity) {\n giveUp(new PartialErrorInfo(\"Internal error: Http.checkConnectivity not set\", null, 500));\n return;\n }\n whenPromiseSettles(\n this.realtime.http.checkConnectivity(),\n (err, connectivity) => {\n if (connectCount !== this.connectCounter) {\n return;\n }\n if (!shouldContinue()) {\n return;\n }\n if (err) {\n giveUp(err);\n return;\n }\n if (!connectivity) {\n giveUp(new ErrorInfo(\"Unable to connect (network unreachable)\", 80003, 404));\n return;\n }\n transportParams.host = arrPopRandomElement(candidateHosts);\n this.tryATransport(transportParams, transportName, hostAttemptCb);\n }\n );\n };\n if (this.forceFallbackHost && candidateHosts.length) {\n this.forceFallbackHost = false;\n tryFallbackHosts();\n return;\n }\n this.tryATransport(transportParams, transportName, hostAttemptCb);\n }\n closeImpl() {\n logger_default.logAction(this.logger, logger_default.LOG_MINOR, \"ConnectionManager.closeImpl()\", \"closing connection\");\n this.cancelSuspendTimer();\n this.startTransitionTimer(this.states.closing);\n if (this.pendingTransport) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MICRO,\n \"ConnectionManager.closeImpl()\",\n \"Closing pending transport: \" + this.pendingTransport\n );\n this.pendingTransport.close();\n }\n if (this.activeProtocol) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MICRO,\n \"ConnectionManager.closeImpl()\",\n \"Closing active transport: \" + this.activeProtocol.getTransport()\n );\n this.activeProtocol.getTransport().close();\n }\n this.notifyState({ state: \"closed\" });\n }\n onAuthUpdated(tokenDetails, callback) {\n var _a2;\n switch (this.state.state) {\n case \"connected\": {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MICRO,\n \"ConnectionManager.onAuthUpdated()\",\n \"Sending AUTH message on active transport\"\n );\n const activeTransport = (_a2 = this.activeProtocol) == null ? void 0 : _a2.getTransport();\n if (activeTransport && activeTransport.onAuthUpdated) {\n activeTransport.onAuthUpdated(tokenDetails);\n }\n const authMsg = fromValues({\n action: actions.AUTH,\n auth: {\n accessToken: tokenDetails.token\n }\n });\n this.send(authMsg);\n const successListener = () => {\n this.off(failureListener);\n callback(null, tokenDetails);\n };\n const failureListener = (stateChange) => {\n if (stateChange.current === \"failed\") {\n this.off(successListener);\n this.off(failureListener);\n callback(stateChange.reason || this.getStateError());\n }\n };\n this.once(\"connectiondetails\", successListener);\n this.on(\"connectionstate\", failureListener);\n break;\n }\n case \"connecting\":\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MICRO,\n \"ConnectionManager.onAuthUpdated()\",\n \"Aborting current connection attempts in order to start again with the new auth details\"\n );\n this.disconnectAllTransports();\n default: {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MICRO,\n \"ConnectionManager.onAuthUpdated()\",\n \"Connection state is \" + this.state.state + \"; waiting until either connected or failed\"\n );\n const listener = (stateChange) => {\n switch (stateChange.current) {\n case \"connected\":\n this.off(listener);\n callback(null, tokenDetails);\n break;\n case \"failed\":\n case \"closed\":\n case \"suspended\":\n this.off(listener);\n callback(stateChange.reason || this.getStateError());\n break;\n default:\n break;\n }\n };\n this.on(\"connectionstate\", listener);\n if (this.state.state === \"connecting\") {\n this.startConnect();\n } else {\n this.requestState({ state: \"connecting\" });\n }\n }\n }\n }\n disconnectAllTransports() {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MINOR,\n \"ConnectionManager.disconnectAllTransports()\",\n \"Disconnecting all transports\"\n );\n this.connectCounter++;\n if (this.pendingTransport) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MICRO,\n \"ConnectionManager.disconnectAllTransports()\",\n \"Disconnecting pending transport: \" + this.pendingTransport\n );\n this.pendingTransport.disconnect();\n }\n delete this.pendingTransport;\n if (this.proposedTransport) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MICRO,\n \"ConnectionManager.disconnectAllTransports()\",\n \"Disconnecting proposed transport: \" + this.pendingTransport\n );\n this.proposedTransport.disconnect();\n }\n delete this.pendingTransport;\n if (this.activeProtocol) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MICRO,\n \"ConnectionManager.disconnectAllTransports()\",\n \"Disconnecting active transport: \" + this.activeProtocol.getTransport()\n );\n this.activeProtocol.getTransport().disconnect();\n }\n }\n /******************\n * event queueing\n ******************/\n send(msg, queueEvent, callback) {\n callback = callback || noop2;\n const state = this.state;\n if (state.sendEvents) {\n logger_default.logAction(this.logger, logger_default.LOG_MICRO, \"ConnectionManager.send()\", \"sending event\");\n this.sendImpl(new PendingMessage(msg, callback));\n return;\n }\n const shouldQueue = queueEvent && state.queueEvents;\n if (!shouldQueue) {\n const err = \"rejecting event, queueEvent was \" + queueEvent + \", state was \" + state.state;\n logger_default.logAction(this.logger, logger_default.LOG_MICRO, \"ConnectionManager.send()\", err);\n callback(this.errorReason || new ErrorInfo(err, 9e4, 400));\n return;\n }\n if (this.logger.shouldLog(logger_default.LOG_MICRO)) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MICRO,\n \"ConnectionManager.send()\",\n \"queueing msg; \" + stringify(\n msg,\n this.realtime._RealtimePresence,\n this.realtime._Annotations,\n this.realtime._objectsPlugin\n )\n );\n }\n this.queue(msg, callback);\n }\n sendImpl(pendingMessage) {\n const msg = pendingMessage.message;\n if (pendingMessage.ackRequired && !pendingMessage.sendAttempted) {\n msg.msgSerial = this.msgSerial++;\n }\n try {\n this.activeProtocol.send(pendingMessage);\n } catch (e) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_ERROR,\n \"ConnectionManager.sendImpl()\",\n \"Unexpected exception in transport.send(): \" + e.stack\n );\n }\n }\n queue(msg, callback) {\n logger_default.logAction(this.logger, logger_default.LOG_MICRO, \"ConnectionManager.queue()\", \"queueing event\");\n const lastQueued = this.queuedMessages.last();\n const maxSize = this.options.maxMessageSize;\n if (lastQueued && !lastQueued.sendAttempted && bundleWith(lastQueued.message, msg, maxSize)) {\n if (!lastQueued.merged) {\n lastQueued.callback = multicaster_default.create(this.logger, [lastQueued.callback]);\n lastQueued.merged = true;\n }\n lastQueued.callback.push(callback);\n } else {\n this.queuedMessages.push(new PendingMessage(msg, callback));\n }\n }\n sendQueuedMessages() {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MICRO,\n \"ConnectionManager.sendQueuedMessages()\",\n \"sending \" + this.queuedMessages.count() + \" queued messages\"\n );\n let pendingMessage;\n while (pendingMessage = this.queuedMessages.shift())\n this.sendImpl(pendingMessage);\n }\n queuePendingMessages(pendingMessages) {\n if (pendingMessages && pendingMessages.length) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MICRO,\n \"ConnectionManager.queuePendingMessages()\",\n \"queueing \" + pendingMessages.length + \" pending messages\"\n );\n this.queuedMessages.prepend(pendingMessages);\n }\n }\n failQueuedMessages(err) {\n const numQueued = this.queuedMessages.count();\n if (numQueued > 0) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_ERROR,\n \"ConnectionManager.failQueuedMessages()\",\n \"failing \" + numQueued + \" queued messages, err = \" + inspectError(err)\n );\n this.queuedMessages.completeAllMessages(err);\n }\n }\n onChannelMessage(message, transport) {\n this.pendingChannelMessagesState.queue.push({ message, transport });\n if (!this.pendingChannelMessagesState.isProcessing) {\n this.processNextPendingChannelMessage();\n }\n }\n processNextPendingChannelMessage() {\n if (this.pendingChannelMessagesState.queue.length > 0) {\n this.pendingChannelMessagesState.isProcessing = true;\n const pendingChannelMessage = this.pendingChannelMessagesState.queue.shift();\n this.processChannelMessage(pendingChannelMessage.message).catch((err) => {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_ERROR,\n \"ConnectionManager.processNextPendingChannelMessage() received error \",\n err\n );\n }).finally(() => {\n this.pendingChannelMessagesState.isProcessing = false;\n this.processNextPendingChannelMessage();\n });\n }\n }\n async processChannelMessage(message) {\n await this.realtime.channels.processChannelMessage(message);\n }\n async ping() {\n var _a2;\n if (this.state.state !== \"connected\") {\n throw new ErrorInfo(\"Unable to ping service; not connected\", 4e4, 400);\n }\n const transport = (_a2 = this.activeProtocol) == null ? void 0 : _a2.getTransport();\n if (!transport) {\n throw this.getStateError();\n }\n logger_default.logAction(this.logger, logger_default.LOG_MINOR, \"ConnectionManager.ping()\", \"transport = \" + transport);\n const pingStart = Date.now();\n const id = cheapRandStr();\n return withTimeoutAsync(\n new Promise((resolve) => {\n const onHeartbeat = (responseId) => {\n if (responseId === id) {\n transport.off(\"heartbeat\", onHeartbeat);\n resolve(Date.now() - pingStart);\n }\n };\n transport.on(\"heartbeat\", onHeartbeat);\n transport.ping(id);\n }),\n this.options.timeouts.realtimeRequestTimeout,\n \"Timeout waiting for heartbeat response\"\n );\n }\n abort(error) {\n this.activeProtocol.getTransport().fail(error);\n }\n getTransportPreference() {\n var _a2, _b;\n return this.transportPreference || haveWebStorage() && ((_b = (_a2 = Platform.WebStorage) == null ? void 0 : _a2.get) == null ? void 0 : _b.call(_a2, transportPreferenceName));\n }\n persistTransportPreference(transport) {\n var _a2, _b;\n this.transportPreference = transport.shortName;\n if (haveWebStorage()) {\n (_b = (_a2 = Platform.WebStorage) == null ? void 0 : _a2.set) == null ? void 0 : _b.call(_a2, transportPreferenceName, transport.shortName);\n }\n }\n unpersistTransportPreference() {\n var _a2, _b;\n this.transportPreference = null;\n if (haveWebStorage()) {\n (_b = (_a2 = Platform.WebStorage) == null ? void 0 : _a2.remove) == null ? void 0 : _b.call(_a2, transportPreferenceName);\n }\n }\n /* This method is only used during connection attempts, so implements RSA4c1, RSA4c2,\n * and RSA4d. It is generally not invoked for serverside-triggered reauths or manual\n * reauths, so RSA4c3 does not apply, except (per per RSA4d1) in the case that the auth\n * server returns 403. */\n actOnErrorFromAuthorize(err) {\n if (err.code === 40171) {\n this.notifyState({ state: \"failed\", error: err });\n } else if (err.code === 40102) {\n this.notifyState({ state: \"failed\", error: err });\n } else if (err.statusCode === HttpStatusCodes_default.Forbidden) {\n const msg = \"Client configured authentication provider returned 403; failing the connection\";\n logger_default.logAction(this.logger, logger_default.LOG_ERROR, \"ConnectionManager.actOnErrorFromAuthorize()\", msg);\n this.notifyState({ state: \"failed\", error: new ErrorInfo(msg, 80019, 403, err) });\n } else {\n const msg = \"Client configured authentication provider request failed\";\n logger_default.logAction(this.logger, logger_default.LOG_MINOR, \"ConnectionManager.actOnErrorFromAuthorize\", msg);\n this.notifyState({ state: this.state.failState, error: new ErrorInfo(msg, 80019, 401, err) });\n }\n }\n onConnectionDetailsUpdate(connectionDetails, transport) {\n if (!connectionDetails) {\n return;\n }\n this.connectionDetails = connectionDetails;\n if (connectionDetails.maxMessageSize) {\n this.options.maxMessageSize = connectionDetails.maxMessageSize;\n }\n const clientId = connectionDetails.clientId;\n if (clientId) {\n const err = this.realtime.auth._uncheckedSetClientId(clientId);\n if (err) {\n logger_default.logAction(this.logger, logger_default.LOG_ERROR, \"ConnectionManager.onConnectionDetailsUpdate()\", err.message);\n transport.fail(err);\n return;\n }\n }\n const connectionStateTtl = connectionDetails.connectionStateTtl;\n if (connectionStateTtl) {\n this.connectionStateTtl = connectionStateTtl;\n }\n this.maxIdleInterval = connectionDetails.maxIdleInterval;\n this.emit(\"connectiondetails\", connectionDetails);\n }\n checkWsConnectivity() {\n const wsConnectivityCheckUrl = this.options.wsConnectivityCheckUrl || defaults_default.wsConnectivityCheckUrl;\n const ws = new Platform.Config.WebSocket(wsConnectivityCheckUrl);\n return new Promise((resolve, reject) => {\n let finished = false;\n ws.onopen = () => {\n if (!finished) {\n finished = true;\n resolve();\n ws.close();\n }\n };\n ws.onclose = ws.onerror = () => {\n if (!finished) {\n finished = true;\n reject();\n }\n };\n });\n }\n sessionRecoveryName() {\n return this.options.recoveryKeyStorageName || \"ably-connection-recovery\";\n }\n getSessionRecoverData() {\n var _a2, _b;\n return haveSessionStorage() && ((_b = (_a2 = Platform.WebStorage) == null ? void 0 : _a2.getSession) == null ? void 0 : _b.call(_a2, this.sessionRecoveryName()));\n }\n setSessionRecoverData(value) {\n var _a2, _b;\n return haveSessionStorage() && ((_b = (_a2 = Platform.WebStorage) == null ? void 0 : _a2.setSession) == null ? void 0 : _b.call(_a2, this.sessionRecoveryName(), value));\n }\n clearSessionRecoverData() {\n var _a2, _b;\n return haveSessionStorage() && ((_b = (_a2 = Platform.WebStorage) == null ? void 0 : _a2.removeSession) == null ? void 0 : _b.call(_a2, this.sessionRecoveryName()));\n }\n};\nvar connectionmanager_default = ConnectionManager;\n\n// src/common/lib/client/connection.ts\nvar Connection = class extends eventemitter_default {\n constructor(ably, options) {\n super(ably.logger);\n this.whenState = (state) => {\n return eventemitter_default.prototype.whenState.call(this, state, this.state);\n };\n this.ably = ably;\n this.connectionManager = new connectionmanager_default(ably, options);\n this.state = this.connectionManager.state.state;\n this.key = void 0;\n this.id = void 0;\n this.errorReason = null;\n this.connectionManager.on(\"connectionstate\", (stateChange) => {\n const state = this.state = stateChange.current;\n Platform.Config.nextTick(() => {\n this.emit(state, stateChange);\n });\n });\n this.connectionManager.on(\"update\", (stateChange) => {\n Platform.Config.nextTick(() => {\n this.emit(\"update\", stateChange);\n });\n });\n }\n connect() {\n logger_default.logAction(this.logger, logger_default.LOG_MINOR, \"Connection.connect()\", \"\");\n this.connectionManager.requestState({ state: \"connecting\" });\n }\n async ping() {\n logger_default.logAction(this.logger, logger_default.LOG_MINOR, \"Connection.ping()\", \"\");\n return this.connectionManager.ping();\n }\n close() {\n logger_default.logAction(this.logger, logger_default.LOG_MINOR, \"Connection.close()\", \"connectionKey = \" + this.key);\n this.connectionManager.requestState({ state: \"closing\" });\n }\n get recoveryKey() {\n this.logger.deprecationWarning(\n \"The `Connection.recoveryKey` attribute has been replaced by the `Connection.createRecoveryKey()` method. Replace your usage of `recoveryKey` with the return value of `createRecoveryKey()`. `recoveryKey` will be removed in a future version.\"\n );\n return this.createRecoveryKey();\n }\n createRecoveryKey() {\n return this.connectionManager.createRecoveryKey();\n }\n};\nvar connection_default = Connection;\n\n// src/common/lib/client/baserealtime.ts\nvar _BaseRealtime = class _BaseRealtime extends baseclient_default {\n /*\n * The public typings declare that this only accepts an object, but since we want to emit a good error message in the case where a non-TypeScript user does one of these things:\n *\n * 1. passes a string (which is quite likely if they’re e.g. migrating from the default variant to the modular variant)\n * 2. passes no argument at all\n *\n * tell the compiler that these cases are possible so that it forces us to handle them.\n */\n constructor(options) {\n var _a2, _b, _c, _d;\n super(defaults_default.objectifyOptions(options, false, \"BaseRealtime\", logger_default.defaultLogger));\n logger_default.logAction(this.logger, logger_default.LOG_MINOR, \"Realtime()\", \"\");\n if (typeof EdgeRuntime === \"string\") {\n throw new ErrorInfo(\n `Ably.Realtime instance cannot be used in Vercel Edge runtime. If you are running Vercel Edge functions, please replace your \"new Ably.Realtime()\" with \"new Ably.Rest()\" and use Ably Rest API instead of the Realtime API. If you are server-rendering your application in the Vercel Edge runtime, please use the condition \"if (typeof EdgeRuntime === 'string')\" to prevent instantiating Ably.Realtime instance during SSR in the Vercel Edge runtime.`,\n 4e4,\n 400\n );\n }\n this._additionalTransportImplementations = _BaseRealtime.transportImplementationsFromPlugins(this.options.plugins);\n this._RealtimePresence = (_b = (_a2 = this.options.plugins) == null ? void 0 : _a2.RealtimePresence) != null ? _b : null;\n this._objectsPlugin = (_d = (_c = this.options.plugins) == null ? void 0 : _c.Objects) != null ? _d : null;\n this.connection = new connection_default(this, this.options);\n this._channels = new Channels2(this);\n if (this.options.autoConnect !== false)\n this.connect();\n }\n static transportImplementationsFromPlugins(plugins) {\n const transports = {};\n if (plugins == null ? void 0 : plugins.WebSocketTransport) {\n transports[TransportNames.WebSocket] = plugins.WebSocketTransport;\n }\n if (plugins == null ? void 0 : plugins.XHRPolling) {\n transports[TransportNames.XhrPolling] = plugins.XHRPolling;\n }\n return transports;\n }\n get channels() {\n return this._channels;\n }\n get clientId() {\n return this.auth.clientId;\n }\n connect() {\n logger_default.logAction(this.logger, logger_default.LOG_MINOR, \"Realtime.connect()\", \"\");\n this.connection.connect();\n }\n close() {\n logger_default.logAction(this.logger, logger_default.LOG_MINOR, \"Realtime.close()\", \"\");\n this.connection.close();\n }\n};\n// internal API to make EventEmitter usable in other SDKs\n_BaseRealtime.EventEmitter = eventemitter_default;\nvar BaseRealtime = _BaseRealtime;\nvar Channels2 = class extends eventemitter_default {\n constructor(realtime) {\n super(realtime.logger);\n this.realtime = realtime;\n this.all = /* @__PURE__ */ Object.create(null);\n realtime.connection.connectionManager.on(\"transport.active\", () => {\n this.onTransportActive();\n });\n }\n channelSerials() {\n let serials = {};\n for (const name of keysArray(this.all, true)) {\n const channel = this.all[name];\n if (channel.properties.channelSerial) {\n serials[name] = channel.properties.channelSerial;\n }\n }\n return serials;\n }\n // recoverChannels gets the given channels and sets their channel serials.\n recoverChannels(channelSerials) {\n for (const name of keysArray(channelSerials, true)) {\n const channel = this.get(name);\n channel.properties.channelSerial = channelSerials[name];\n }\n }\n // Access to this method is synchronised by ConnectionManager#processChannelMessage.\n async processChannelMessage(msg) {\n const channelName = msg.channel;\n if (channelName === void 0) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_ERROR,\n \"Channels.processChannelMessage()\",\n \"received event unspecified channel, action = \" + msg.action\n );\n return;\n }\n const channel = this.all[channelName];\n if (!channel) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_ERROR,\n \"Channels.processChannelMessage()\",\n \"received event for non-existent channel: \" + channelName\n );\n return;\n }\n await channel.processMessage(msg);\n }\n /* called when a transport becomes connected; reattempt attach/detach\n * for channels that are attaching or detaching. */\n onTransportActive() {\n for (const channelName in this.all) {\n const channel = this.all[channelName];\n if (channel.state === \"attaching\" || channel.state === \"detaching\") {\n channel.checkPendingState();\n } else if (channel.state === \"suspended\") {\n channel._attach(false, null);\n } else if (channel.state === \"attached\") {\n channel.requestState(\"attaching\");\n }\n }\n }\n /* Connection interruptions (ie when the connection will no longer queue\n * events) imply connection state changes for any channel which is either\n * attached, pending, or will attempt to become attached in the future */\n propogateConnectionInterruption(connectionState, reason) {\n const connectionStateToChannelState = {\n closing: \"detached\",\n closed: \"detached\",\n failed: \"failed\",\n suspended: \"suspended\"\n };\n const fromChannelStates = [\"attaching\", \"attached\", \"detaching\", \"suspended\"];\n const toChannelState = connectionStateToChannelState[connectionState];\n for (const channelId in this.all) {\n const channel = this.all[channelId];\n if (fromChannelStates.includes(channel.state)) {\n channel.notifyState(toChannelState, reason);\n }\n }\n }\n get(name, channelOptions) {\n name = String(name);\n let channel = this.all[name];\n if (!channel) {\n channel = this.all[name] = new realtimechannel_default(this.realtime, name, channelOptions);\n } else if (channelOptions) {\n if (channel._shouldReattachToSetOptions(channelOptions, channel.channelOptions)) {\n throw new ErrorInfo(\n \"Channels.get() cannot be used to set channel options that would cause the channel to reattach. Please, use RealtimeChannel.setOptions() instead.\",\n 4e4,\n 400\n );\n }\n channel.setOptions(channelOptions);\n }\n return channel;\n }\n getDerived(name, deriveOptions, channelOptions) {\n if (deriveOptions.filter) {\n const filter = toBase64(deriveOptions.filter);\n const match = matchDerivedChannel(name);\n name = `[filter=${filter}${match.qualifierParam}]${match.channelName}`;\n }\n return this.get(name, channelOptions);\n }\n /* Included to support certain niche use-cases; most users should ignore this.\n * Please do not use this unless you know what you're doing */\n release(name) {\n name = String(name);\n const channel = this.all[name];\n if (!channel) {\n return;\n }\n const releaseErr = channel.getReleaseErr();\n if (releaseErr) {\n throw releaseErr;\n }\n delete this.all[name];\n }\n};\nvar baserealtime_default = BaseRealtime;\n\n// src/common/lib/client/presencemap.ts\nfunction newerThan(item, existing) {\n if (item.isSynthesized() || existing.isSynthesized()) {\n return item.timestamp >= existing.timestamp;\n }\n const itemOrderings = item.parseId(), existingOrderings = existing.parseId();\n if (itemOrderings.msgSerial === existingOrderings.msgSerial) {\n return itemOrderings.index > existingOrderings.index;\n } else {\n return itemOrderings.msgSerial > existingOrderings.msgSerial;\n }\n}\nvar PresenceMap = class extends eventemitter_default {\n constructor(presence, memberKey, newer = newerThan) {\n super(presence.logger);\n this.presence = presence;\n this.map = /* @__PURE__ */ Object.create(null);\n this.syncInProgress = false;\n this.residualMembers = null;\n this.memberKey = memberKey;\n this.newerThan = newer;\n }\n get(key) {\n return this.map[key];\n }\n getClient(clientId) {\n const map = this.map, result = [];\n for (const key in map) {\n const item = map[key];\n if (item.clientId == clientId && item.action != \"absent\")\n result.push(item);\n }\n return result;\n }\n list(params) {\n const map = this.map, clientId = params && params.clientId, connectionId = params && params.connectionId, result = [];\n for (const key in map) {\n const item = map[key];\n if (item.action === \"absent\")\n continue;\n if (clientId && clientId != item.clientId)\n continue;\n if (connectionId && connectionId != item.connectionId)\n continue;\n result.push(item);\n }\n return result;\n }\n put(item) {\n if (item.action === \"enter\" || item.action === \"update\") {\n item = presencemessage_default.fromValues(item);\n item.action = \"present\";\n }\n const map = this.map, key = this.memberKey(item);\n if (this.residualMembers)\n delete this.residualMembers[key];\n const existingItem = map[key];\n if (existingItem && !this.newerThan(item, existingItem)) {\n return false;\n }\n map[key] = item;\n return true;\n }\n values() {\n const map = this.map, result = [];\n for (const key in map) {\n const item = map[key];\n if (item.action != \"absent\")\n result.push(item);\n }\n return result;\n }\n remove(item) {\n const map = this.map, key = this.memberKey(item);\n const existingItem = map[key];\n if (existingItem && !this.newerThan(item, existingItem)) {\n return false;\n }\n if (this.syncInProgress) {\n item = presencemessage_default.fromValues(item);\n item.action = \"absent\";\n map[key] = item;\n } else {\n delete map[key];\n }\n return !!existingItem;\n }\n startSync() {\n const map = this.map, syncInProgress = this.syncInProgress;\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MINOR,\n \"PresenceMap.startSync()\",\n \"channel = \" + this.presence.channel.name + \"; syncInProgress = \" + syncInProgress\n );\n if (!this.syncInProgress) {\n this.residualMembers = copy(map);\n this.setInProgress(true);\n }\n }\n endSync() {\n const map = this.map, syncInProgress = this.syncInProgress;\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MINOR,\n \"PresenceMap.endSync()\",\n \"channel = \" + this.presence.channel.name + \"; syncInProgress = \" + syncInProgress\n );\n if (syncInProgress) {\n for (const memberKey in map) {\n const entry = map[memberKey];\n if (entry.action === \"absent\") {\n delete map[memberKey];\n }\n }\n this.presence._synthesizeLeaves(valuesArray(this.residualMembers));\n for (const memberKey in this.residualMembers) {\n delete map[memberKey];\n }\n this.residualMembers = null;\n this.setInProgress(false);\n }\n this.emit(\"sync\");\n }\n waitSync(callback) {\n const syncInProgress = this.syncInProgress;\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MINOR,\n \"PresenceMap.waitSync()\",\n \"channel = \" + this.presence.channel.name + \"; syncInProgress = \" + syncInProgress\n );\n if (!syncInProgress) {\n callback();\n return;\n }\n this.once(\"sync\", callback);\n }\n clear() {\n this.map = {};\n this.setInProgress(false);\n this.residualMembers = null;\n }\n setInProgress(inProgress) {\n logger_default.logAction(this.logger, logger_default.LOG_MICRO, \"PresenceMap.setInProgress()\", \"inProgress = \" + inProgress);\n this.syncInProgress = inProgress;\n this.presence.syncComplete = !inProgress;\n }\n};\n\n// src/common/lib/client/realtimepresence.ts\nfunction getClientId(realtimePresence) {\n return realtimePresence.channel.client.auth.clientId;\n}\nfunction isAnonymousOrWildcard(realtimePresence) {\n const realtime = realtimePresence.channel.client;\n const clientId = realtime.auth.clientId;\n return (!clientId || clientId === \"*\") && realtime.connection.state === \"connected\";\n}\nfunction waitAttached(channel, callback, action) {\n switch (channel.state) {\n case \"attached\":\n case \"suspended\":\n action();\n break;\n case \"initialized\":\n case \"detached\":\n case \"detaching\":\n case \"attaching\":\n whenPromiseSettles(channel.attach(), function(err) {\n if (err)\n callback(err);\n else\n action();\n });\n break;\n default:\n callback(ErrorInfo.fromValues(channel.invalidStateError()));\n }\n}\nvar RealtimePresence = class extends eventemitter_default {\n constructor(channel) {\n super(channel.logger);\n this.channel = channel;\n this.syncComplete = false;\n this.members = new PresenceMap(this, (item) => item.clientId + \":\" + item.connectionId);\n this._myMembers = new PresenceMap(this, (item) => item.clientId);\n this.subscriptions = new eventemitter_default(this.logger);\n this.pendingPresence = [];\n }\n async enter(data) {\n if (isAnonymousOrWildcard(this)) {\n throw new ErrorInfo(\"clientId must be specified to enter a presence channel\", 40012, 400);\n }\n return this._enterOrUpdateClient(void 0, void 0, data, \"enter\");\n }\n async update(data) {\n if (isAnonymousOrWildcard(this)) {\n throw new ErrorInfo(\"clientId must be specified to update presence data\", 40012, 400);\n }\n return this._enterOrUpdateClient(void 0, void 0, data, \"update\");\n }\n async enterClient(clientId, data) {\n return this._enterOrUpdateClient(void 0, clientId, data, \"enter\");\n }\n async updateClient(clientId, data) {\n return this._enterOrUpdateClient(void 0, clientId, data, \"update\");\n }\n async _enterOrUpdateClient(id, clientId, data, action) {\n const channel = this.channel;\n if (!channel.connectionManager.activeState()) {\n throw channel.connectionManager.getError();\n }\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MICRO,\n \"RealtimePresence.\" + action + \"Client()\",\n \"channel = \" + channel.name + \", id = \" + id + \", client = \" + (clientId || \"(implicit) \" + getClientId(this))\n );\n const presence = presencemessage_default.fromData(data);\n presence.action = action;\n if (id) {\n presence.id = id;\n }\n if (clientId) {\n presence.clientId = clientId;\n }\n const wirePresMsg = await presence.encode(channel.channelOptions);\n switch (channel.state) {\n case \"attached\":\n return channel.sendPresence([wirePresMsg]);\n case \"initialized\":\n case \"detached\":\n channel.attach();\n case \"attaching\":\n return new Promise((resolve, reject) => {\n this.pendingPresence.push({\n presence: wirePresMsg,\n callback: (err) => err ? reject(err) : resolve()\n });\n });\n default: {\n const err = new PartialErrorInfo(\n \"Unable to \" + action + \" presence channel while in \" + channel.state + \" state\",\n 90001\n );\n err.code = 90001;\n throw err;\n }\n }\n }\n async leave(data) {\n if (isAnonymousOrWildcard(this)) {\n throw new ErrorInfo(\"clientId must have been specified to enter or leave a presence channel\", 40012, 400);\n }\n return this.leaveClient(void 0, data);\n }\n async leaveClient(clientId, data) {\n const channel = this.channel;\n if (!channel.connectionManager.activeState()) {\n throw channel.connectionManager.getError();\n }\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MICRO,\n \"RealtimePresence.leaveClient()\",\n \"leaving; channel = \" + this.channel.name + \", client = \" + clientId\n );\n const presence = presencemessage_default.fromData(data);\n presence.action = \"leave\";\n if (clientId) {\n presence.clientId = clientId;\n }\n const wirePresMsg = await presence.encode(channel.channelOptions);\n switch (channel.state) {\n case \"attached\":\n return channel.sendPresence([wirePresMsg]);\n case \"attaching\":\n return new Promise((resolve, reject) => {\n this.pendingPresence.push({\n presence: wirePresMsg,\n callback: (err) => err ? reject(err) : resolve()\n });\n });\n case \"initialized\":\n case \"failed\": {\n throw new PartialErrorInfo(\"Unable to leave presence channel (incompatible state)\", 90001);\n }\n default:\n throw channel.invalidStateError();\n }\n }\n async get(params) {\n const waitForSync = !params || (\"waitForSync\" in params ? params.waitForSync : true);\n return new Promise((resolve, reject) => {\n function returnMembers(members) {\n resolve(params ? members.list(params) : members.values());\n }\n if (this.channel.state === \"suspended\") {\n if (waitForSync) {\n reject(\n ErrorInfo.fromValues({\n statusCode: 400,\n code: 91005,\n message: \"Presence state is out of sync due to channel being in the SUSPENDED state\"\n })\n );\n } else {\n returnMembers(this.members);\n }\n return;\n }\n waitAttached(\n this.channel,\n (err) => reject(err),\n () => {\n const members = this.members;\n if (waitForSync) {\n members.waitSync(function() {\n returnMembers(members);\n });\n } else {\n returnMembers(members);\n }\n }\n );\n });\n }\n async history(params) {\n logger_default.logAction(this.logger, logger_default.LOG_MICRO, \"RealtimePresence.history()\", \"channel = \" + this.name);\n const restMixin = this.channel.client.rest.presenceMixin;\n if (params && params.untilAttach) {\n if (this.channel.state === \"attached\") {\n delete params.untilAttach;\n params.from_serial = this.channel.properties.attachSerial;\n } else {\n throw new ErrorInfo(\n \"option untilAttach requires the channel to be attached, was: \" + this.channel.state,\n 4e4,\n 400\n );\n }\n }\n return restMixin.history(this, params);\n }\n setPresence(presenceSet, isSync, syncChannelSerial) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MICRO,\n \"RealtimePresence.setPresence()\",\n \"received presence for \" + presenceSet.length + \" participants; syncChannelSerial = \" + syncChannelSerial\n );\n let syncCursor, match;\n const members = this.members, myMembers = this._myMembers, broadcastMessages = [], connId = this.channel.connectionManager.connectionId;\n if (isSync) {\n this.members.startSync();\n if (syncChannelSerial && (match = syncChannelSerial.match(/^[\\w-]+:(.*)$/))) {\n syncCursor = match[1];\n }\n }\n for (let presence of presenceSet) {\n switch (presence.action) {\n case \"leave\":\n if (members.remove(presence)) {\n broadcastMessages.push(presence);\n }\n if (presence.connectionId === connId && !presence.isSynthesized()) {\n myMembers.remove(presence);\n }\n break;\n case \"enter\":\n case \"present\":\n case \"update\":\n if (members.put(presence)) {\n broadcastMessages.push(presence);\n }\n if (presence.connectionId === connId) {\n myMembers.put(presence);\n }\n break;\n }\n }\n if (isSync && !syncCursor) {\n members.endSync();\n this.channel.syncChannelSerial = null;\n }\n for (let i = 0; i < broadcastMessages.length; i++) {\n const presence = broadcastMessages[i];\n this.subscriptions.emit(presence.action, presence);\n }\n }\n onAttached(hasPresence) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MINOR,\n \"RealtimePresence.onAttached()\",\n \"channel = \" + this.channel.name + \", hasPresence = \" + hasPresence\n );\n if (hasPresence) {\n this.members.startSync();\n } else {\n this._synthesizeLeaves(this.members.values());\n this.members.clear();\n }\n this._ensureMyMembersPresent();\n const pendingPresence = this.pendingPresence, pendingPresCount = pendingPresence.length;\n if (pendingPresCount) {\n this.pendingPresence = [];\n const presenceArray = [];\n const multicaster = multicaster_default.create(this.logger);\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MICRO,\n \"RealtimePresence.onAttached\",\n \"sending \" + pendingPresCount + \" queued presence messages\"\n );\n for (let i = 0; i < pendingPresCount; i++) {\n const event = pendingPresence[i];\n presenceArray.push(event.presence);\n multicaster.push(event.callback);\n }\n this.channel.sendPresence(presenceArray).then(() => multicaster()).catch((err) => multicaster(err));\n }\n }\n actOnChannelState(state, hasPresence, err) {\n switch (state) {\n case \"attached\":\n this.onAttached(hasPresence);\n break;\n case \"detached\":\n case \"failed\":\n this._clearMyMembers();\n this.members.clear();\n case \"suspended\":\n this.failPendingPresence(err);\n break;\n }\n }\n failPendingPresence(err) {\n if (this.pendingPresence.length) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MINOR,\n \"RealtimeChannel.failPendingPresence\",\n \"channel; name = \" + this.channel.name + \", err = \" + inspectError(err)\n );\n for (let i = 0; i < this.pendingPresence.length; i++)\n try {\n this.pendingPresence[i].callback(err);\n } catch (e) {\n }\n this.pendingPresence = [];\n }\n }\n _clearMyMembers() {\n this._myMembers.clear();\n }\n _ensureMyMembersPresent() {\n const myMembers = this._myMembers;\n const connId = this.channel.connectionManager.connectionId;\n for (const memberKey in myMembers.map) {\n const entry = myMembers.map[memberKey];\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MICRO,\n \"RealtimePresence._ensureMyMembersPresent()\",\n 'Auto-reentering clientId \"' + entry.clientId + '\" into the presence set'\n );\n const id = entry.connectionId === connId ? entry.id : void 0;\n this._enterOrUpdateClient(id, entry.clientId, entry.data, \"enter\").catch((err) => {\n const wrappedErr = new ErrorInfo(\"Presence auto re-enter failed\", 91004, 400, err);\n logger_default.logAction(\n this.logger,\n logger_default.LOG_ERROR,\n \"RealtimePresence._ensureMyMembersPresent()\",\n \"Presence auto re-enter failed; reason = \" + inspectError(err)\n );\n const change = new channelstatechange_default(this.channel.state, this.channel.state, true, false, wrappedErr);\n this.channel.emit(\"update\", change);\n });\n }\n }\n _synthesizeLeaves(items) {\n const subscriptions = this.subscriptions;\n items.forEach(function(item) {\n const presence = presencemessage_default.fromValues({\n action: \"leave\",\n connectionId: item.connectionId,\n clientId: item.clientId,\n data: item.data,\n encoding: item.encoding,\n timestamp: Date.now()\n });\n subscriptions.emit(\"leave\", presence);\n });\n }\n async subscribe(..._args) {\n const args = realtimechannel_default.processListenerArgs(_args);\n const event = args[0];\n const listener = args[1];\n const channel = this.channel;\n if (channel.state === \"failed\") {\n throw ErrorInfo.fromValues(channel.invalidStateError());\n }\n this.subscriptions.on(event, listener);\n if (channel.channelOptions.attachOnSubscribe !== false) {\n await channel.attach();\n }\n }\n unsubscribe(..._args) {\n const args = realtimechannel_default.processListenerArgs(_args);\n const event = args[0];\n const listener = args[1];\n this.subscriptions.off(event, listener);\n }\n};\nvar realtimepresence_default = RealtimePresence;\n\n// src/common/lib/transport/websockettransport.ts\nvar shortName = TransportNames.WebSocket;\nfunction isNodeWebSocket(ws) {\n return !!ws.on;\n}\nvar WebSocketTransport = class extends transport_default {\n constructor(connectionManager, auth, params) {\n super(connectionManager, auth, params);\n this.shortName = shortName;\n params.heartbeats = Platform.Config.useProtocolHeartbeats;\n this.wsHost = params.host;\n }\n static isAvailable() {\n return !!Platform.Config.WebSocket;\n }\n createWebSocket(uri, connectParams) {\n this.uri = uri + toQueryString(connectParams);\n return new Platform.Config.WebSocket(this.uri);\n }\n toString() {\n return \"WebSocketTransport; uri=\" + this.uri;\n }\n connect() {\n logger_default.logAction(this.logger, logger_default.LOG_MINOR, \"WebSocketTransport.connect()\", \"starting\");\n transport_default.prototype.connect.call(this);\n const self2 = this, params = this.params, options = params.options;\n const wsScheme = options.tls ? \"wss://\" : \"ws://\";\n const wsUri = wsScheme + this.wsHost + \":\" + defaults_default.getPort(options) + \"/\";\n logger_default.logAction(this.logger, logger_default.LOG_MINOR, \"WebSocketTransport.connect()\", \"uri: \" + wsUri);\n whenPromiseSettles(\n this.auth.getAuthParams(),\n function(err, authParams) {\n if (self2.isDisposed) {\n return;\n }\n let paramStr = \"\";\n for (const param in authParams)\n paramStr += \" \" + param + \": \" + authParams[param] + \";\";\n logger_default.logAction(\n self2.logger,\n logger_default.LOG_MINOR,\n \"WebSocketTransport.connect()\",\n \"authParams:\" + paramStr + \" err: \" + err\n );\n if (err) {\n self2.disconnect(err);\n return;\n }\n const connectParams = params.getConnectParams(authParams);\n try {\n const wsConnection = self2.wsConnection = self2.createWebSocket(wsUri, connectParams);\n wsConnection.binaryType = Platform.Config.binaryType;\n wsConnection.onopen = function() {\n self2.onWsOpen();\n };\n wsConnection.onclose = function(ev) {\n self2.onWsClose(ev);\n };\n wsConnection.onmessage = function(ev) {\n self2.onWsData(ev.data);\n };\n wsConnection.onerror = function(ev) {\n self2.onWsError(ev);\n };\n if (isNodeWebSocket(wsConnection)) {\n wsConnection.on(\"ping\", function() {\n self2.onActivity();\n });\n }\n } catch (e) {\n logger_default.logAction(\n self2.logger,\n logger_default.LOG_ERROR,\n \"WebSocketTransport.connect()\",\n \"Unexpected exception creating websocket: err = \" + (e.stack || e.message)\n );\n self2.disconnect(e);\n }\n }\n );\n }\n send(message) {\n const wsConnection = this.wsConnection;\n if (!wsConnection) {\n logger_default.logAction(this.logger, logger_default.LOG_ERROR, \"WebSocketTransport.send()\", \"No socket connection\");\n return;\n }\n try {\n wsConnection.send(\n serialize2(message, this.connectionManager.realtime._MsgPack, this.params.format)\n );\n } catch (e) {\n const msg = \"Exception from ws connection when trying to send: \" + inspectError(e);\n logger_default.logAction(this.logger, logger_default.LOG_ERROR, \"WebSocketTransport.send()\", msg);\n this.finish(\"disconnected\", new ErrorInfo(msg, 5e4, 500));\n }\n }\n onWsData(data) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MICRO,\n \"WebSocketTransport.onWsData()\",\n \"data received; length = \" + data.length + \"; type = \" + typeof data\n );\n try {\n this.onProtocolMessage(\n deserialize(\n data,\n this.connectionManager.realtime._MsgPack,\n this.connectionManager.realtime._RealtimePresence,\n this.connectionManager.realtime._Annotations,\n this.connectionManager.realtime._objectsPlugin,\n this.format\n )\n );\n } catch (e) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_ERROR,\n \"WebSocketTransport.onWsData()\",\n \"Unexpected exception handing channel message: \" + e.stack\n );\n }\n }\n onWsOpen() {\n logger_default.logAction(this.logger, logger_default.LOG_MINOR, \"WebSocketTransport.onWsOpen()\", \"opened WebSocket\");\n this.emit(\"preconnect\");\n }\n onWsClose(ev) {\n let wasClean, code;\n if (typeof ev == \"object\") {\n code = ev.code;\n wasClean = ev.wasClean || code === 1e3;\n } else {\n code = ev;\n wasClean = code == 1e3;\n }\n delete this.wsConnection;\n if (wasClean) {\n logger_default.logAction(this.logger, logger_default.LOG_MINOR, \"WebSocketTransport.onWsClose()\", \"Cleanly closed WebSocket\");\n const err = new ErrorInfo(\"Websocket closed\", 80003, 400);\n this.finish(\"disconnected\", err);\n } else {\n const msg = \"Unclean disconnection of WebSocket ; code = \" + code, err = new ErrorInfo(msg, 80003, 400);\n logger_default.logAction(this.logger, logger_default.LOG_MINOR, \"WebSocketTransport.onWsClose()\", msg);\n this.finish(\"disconnected\", err);\n }\n this.emit(\"disposed\");\n }\n onWsError(err) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MINOR,\n \"WebSocketTransport.onError()\",\n \"Error from WebSocket: \" + err.message\n );\n Platform.Config.nextTick(() => {\n this.disconnect(Error(err.message));\n });\n }\n dispose() {\n logger_default.logAction(this.logger, logger_default.LOG_MINOR, \"WebSocketTransport.dispose()\", \"\");\n this.isDisposed = true;\n const wsConnection = this.wsConnection;\n if (wsConnection) {\n wsConnection.onmessage = function() {\n };\n delete this.wsConnection;\n Platform.Config.nextTick(() => {\n logger_default.logAction(this.logger, logger_default.LOG_MICRO, \"WebSocketTransport.dispose()\", \"closing websocket\");\n if (!wsConnection) {\n throw new Error(\"WebSocketTransport.dispose(): wsConnection is not defined\");\n }\n wsConnection.close();\n });\n }\n }\n};\nvar websockettransport_default = WebSocketTransport;\n\n// src/common/lib/client/filteredsubscriptions.ts\nvar FilteredSubscriptions = class {\n static subscribeFilter(channel, filter, listener) {\n const filteredListener = (m) => {\n var _a2, _b, _c, _d, _e, _f;\n const mapping = {\n name: m.name,\n refTimeserial: (_b = (_a2 = m.extras) == null ? void 0 : _a2.ref) == null ? void 0 : _b.timeserial,\n refType: (_d = (_c = m.extras) == null ? void 0 : _c.ref) == null ? void 0 : _d.type,\n isRef: !!((_f = (_e = m.extras) == null ? void 0 : _e.ref) == null ? void 0 : _f.timeserial),\n clientId: m.clientId\n };\n if (Object.entries(filter).find(\n ([key, value]) => value !== void 0 ? mapping[key] !== value : false\n )) {\n return;\n }\n listener(m);\n };\n this.addFilteredSubscription(channel, filter, listener, filteredListener);\n channel.subscriptions.on(filteredListener);\n }\n // Adds a new filtered subscription\n static addFilteredSubscription(channel, filter, realListener, filteredListener) {\n var _a2;\n if (!channel.filteredSubscriptions) {\n channel.filteredSubscriptions = /* @__PURE__ */ new Map();\n }\n if (channel.filteredSubscriptions.has(realListener)) {\n const realListenerMap = channel.filteredSubscriptions.get(realListener);\n realListenerMap.set(filter, ((_a2 = realListenerMap == null ? void 0 : realListenerMap.get(filter)) == null ? void 0 : _a2.concat(filteredListener)) || [filteredListener]);\n } else {\n channel.filteredSubscriptions.set(\n realListener,\n /* @__PURE__ */ new Map([[filter, [filteredListener]]])\n );\n }\n }\n static getAndDeleteFilteredSubscriptions(channel, filter, realListener) {\n if (!channel.filteredSubscriptions) {\n return [];\n }\n if (!realListener && filter) {\n return Array.from(channel.filteredSubscriptions.entries()).map(([key, filterMaps]) => {\n var _a2;\n let listenerMaps = filterMaps.get(filter);\n filterMaps.delete(filter);\n if (filterMaps.size === 0) {\n (_a2 = channel.filteredSubscriptions) == null ? void 0 : _a2.delete(key);\n }\n return listenerMaps;\n }).reduce(\n (prev, cur) => cur ? prev.concat(...cur) : prev,\n []\n );\n }\n if (!realListener || !channel.filteredSubscriptions.has(realListener)) {\n return [];\n }\n const realListenerMap = channel.filteredSubscriptions.get(realListener);\n if (!filter) {\n const listeners2 = Array.from(realListenerMap.values()).reduce((prev, cur) => prev.concat(...cur), []);\n channel.filteredSubscriptions.delete(realListener);\n return listeners2;\n }\n let listeners = realListenerMap.get(filter);\n realListenerMap.delete(filter);\n return listeners || [];\n }\n};\n\n// src/common/lib/client/defaultrealtime.ts\nvar _DefaultRealtime = class _DefaultRealtime extends baserealtime_default {\n // The public typings declare that this requires an argument to be passed, but since we want to emit a good error message in the case where a non-TypeScript user does not pass an argument, tell the compiler that this is possible so that it forces us to handle it.\n constructor(options) {\n var _a2;\n const MsgPack = _DefaultRealtime._MsgPack;\n if (!MsgPack) {\n throw new Error(\"Expected DefaultRealtime._MsgPack to have been set\");\n }\n super(\n defaults_default.objectifyOptions(options, true, \"Realtime\", logger_default.defaultLogger, __spreadProps(__spreadValues({}, allCommonModularPlugins), {\n Crypto: (_a2 = _DefaultRealtime.Crypto) != null ? _a2 : void 0,\n MsgPack,\n RealtimePresence: {\n RealtimePresence: realtimepresence_default,\n PresenceMessage: presencemessage_default,\n WirePresenceMessage\n },\n Annotations: {\n Annotation: annotation_default,\n WireAnnotation,\n RealtimeAnnotations: realtimeannotations_default,\n RestAnnotations: restannotations_default\n },\n WebSocketTransport: websockettransport_default,\n MessageInteractions: FilteredSubscriptions\n }))\n );\n }\n static get Crypto() {\n if (this._Crypto === null) {\n throw new Error(\"Encryption not enabled; use ably.encryption.js instead\");\n }\n return this._Crypto;\n }\n static set Crypto(newValue) {\n this._Crypto = newValue;\n }\n};\n_DefaultRealtime.Utils = utils_exports;\n_DefaultRealtime.ConnectionManager = connectionmanager_default;\n_DefaultRealtime.ProtocolMessage = protocolmessage_default;\n_DefaultRealtime._Crypto = null;\n_DefaultRealtime.Message = DefaultMessage;\n_DefaultRealtime.PresenceMessage = DefaultPresenceMessage;\n_DefaultRealtime.Annotation = DefaultAnnotation;\n_DefaultRealtime._MsgPack = null;\n// Used by tests\n_DefaultRealtime._Http = Http;\n_DefaultRealtime._PresenceMap = PresenceMap;\n_DefaultRealtime._MessageEncoding = MessageEncoding;\nvar DefaultRealtime = _DefaultRealtime;\n\n// src/platform/web/lib/util/hmac-sha256.ts\nvar uint8Array = Uint8Array;\nvar uint32Array = Uint32Array;\nvar pow = Math.pow;\nvar DEFAULT_STATE = new uint32Array(8);\nvar ROUND_CONSTANTS = [];\nvar M = new uint32Array(64);\nfunction getFractionalBits(n2) {\n return (n2 - (n2 | 0)) * pow(2, 32) | 0;\n}\nvar n = 2;\nvar nPrime = 0;\nwhile (nPrime < 64) {\n isPrime = true;\n for (factor = 2; factor <= n / 2; factor++) {\n if (n % factor === 0) {\n isPrime = false;\n }\n }\n if (isPrime) {\n if (nPrime < 8) {\n DEFAULT_STATE[nPrime] = getFractionalBits(pow(n, 1 / 2));\n }\n ROUND_CONSTANTS[nPrime] = getFractionalBits(pow(n, 1 / 3));\n nPrime++;\n }\n n++;\n}\nvar isPrime;\nvar factor;\nvar LittleEndian = !!new uint8Array(new uint32Array([1]).buffer)[0];\nfunction convertEndian(word) {\n if (LittleEndian) {\n return (\n // byte 1 -> byte 4\n word >>> 24 | // byte 2 -> byte 3\n (word >>> 16 & 255) << 8 | // byte 3 -> byte 2\n (word & 65280) << 8 | // byte 4 -> byte 1\n word << 24\n );\n } else {\n return word;\n }\n}\nfunction rightRotate(word, bits) {\n return word >>> bits | word << 32 - bits;\n}\nfunction sha256(data) {\n var STATE = DEFAULT_STATE.slice();\n var legth = data.length;\n var bitLength = legth * 8;\n var newBitLength = 512 - (bitLength + 64) % 512 - 1 + bitLength + 65;\n var bytes = new uint8Array(newBitLength / 8);\n var words = new uint32Array(bytes.buffer);\n bytes.set(data, 0);\n bytes[legth] = 128;\n words[words.length - 1] = convertEndian(bitLength);\n var round;\n for (var block = 0; block < newBitLength / 32; block += 16) {\n var workingState = STATE.slice();\n for (round = 0; round < 64; round++) {\n var MRound;\n if (round < 16) {\n MRound = convertEndian(words[block + round]);\n } else {\n var gamma0x = M[round - 15];\n var gamma1x = M[round - 2];\n MRound = M[round - 7] + M[round - 16] + (rightRotate(gamma0x, 7) ^ rightRotate(gamma0x, 18) ^ gamma0x >>> 3) + (rightRotate(gamma1x, 17) ^ rightRotate(gamma1x, 19) ^ gamma1x >>> 10);\n }\n M[round] = MRound |= 0;\n var t1 = (rightRotate(workingState[4], 6) ^ rightRotate(workingState[4], 11) ^ rightRotate(workingState[4], 25)) + (workingState[4] & workingState[5] ^ ~workingState[4] & workingState[6]) + workingState[7] + MRound + ROUND_CONSTANTS[round];\n var t2 = (rightRotate(workingState[0], 2) ^ rightRotate(workingState[0], 13) ^ rightRotate(workingState[0], 22)) + (workingState[0] & workingState[1] ^ workingState[2] & (workingState[0] ^ workingState[1]));\n for (var i = 7; i > 0; i--) {\n workingState[i] = workingState[i - 1];\n }\n workingState[0] = t1 + t2 | 0;\n workingState[4] = workingState[4] + t1 | 0;\n }\n for (round = 0; round < 8; round++) {\n STATE[round] = STATE[round] + workingState[round] | 0;\n }\n }\n return new uint8Array(\n new uint32Array(\n STATE.map(function(val) {\n return convertEndian(val);\n })\n ).buffer\n );\n}\nfunction hmac2(key, data) {\n if (key.length > 64)\n key = sha256(key);\n if (key.length < 64) {\n const tmp = new Uint8Array(64);\n tmp.set(key, 0);\n key = tmp;\n }\n var innerKey = new Uint8Array(64);\n var outerKey = new Uint8Array(64);\n for (var i = 0; i < 64; i++) {\n innerKey[i] = 54 ^ key[i];\n outerKey[i] = 92 ^ key[i];\n }\n var msg = new Uint8Array(data.length + 64);\n msg.set(innerKey, 0);\n msg.set(data, 64);\n var result = new Uint8Array(64 + 32);\n result.set(outerKey, 0);\n result.set(sha256(msg), 64);\n return sha256(result);\n}\n\n// src/platform/web/lib/util/bufferutils.ts\nvar BufferUtils = class {\n constructor() {\n this.base64CharSet = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\n this.hexCharSet = \"0123456789abcdef\";\n }\n // https://gist.githubusercontent.com/jonleighton/958841/raw/f200e30dfe95212c0165ccf1ae000ca51e9de803/gistfile1.js\n uint8ViewToBase64(bytes) {\n let base64 = \"\";\n const encodings = this.base64CharSet;\n const byteLength = bytes.byteLength;\n const byteRemainder = byteLength % 3;\n const mainLength = byteLength - byteRemainder;\n let a, b, c, d;\n let chunk;\n for (let i = 0; i < mainLength; i = i + 3) {\n chunk = bytes[i] << 16 | bytes[i + 1] << 8 | bytes[i + 2];\n a = (chunk & 16515072) >> 18;\n b = (chunk & 258048) >> 12;\n c = (chunk & 4032) >> 6;\n d = chunk & 63;\n base64 += encodings[a] + encodings[b] + encodings[c] + encodings[d];\n }\n if (byteRemainder == 1) {\n chunk = bytes[mainLength];\n a = (chunk & 252) >> 2;\n b = (chunk & 3) << 4;\n base64 += encodings[a] + encodings[b] + \"==\";\n } else if (byteRemainder == 2) {\n chunk = bytes[mainLength] << 8 | bytes[mainLength + 1];\n a = (chunk & 64512) >> 10;\n b = (chunk & 1008) >> 4;\n c = (chunk & 15) << 2;\n base64 += encodings[a] + encodings[b] + encodings[c] + \"=\";\n }\n return base64;\n }\n base64ToArrayBuffer(base64) {\n const binary_string = atob == null ? void 0 : atob(base64);\n const len = binary_string.length;\n const bytes = new Uint8Array(len);\n for (let i = 0; i < len; i++) {\n const ascii = binary_string.charCodeAt(i);\n bytes[i] = ascii;\n }\n return this.toArrayBuffer(bytes);\n }\n isBuffer(buffer) {\n return buffer instanceof ArrayBuffer || ArrayBuffer.isView(buffer);\n }\n toBuffer(buffer) {\n if (!ArrayBuffer) {\n throw new Error(\"Can't convert to Buffer: browser does not support the necessary types\");\n }\n if (buffer instanceof ArrayBuffer) {\n return new Uint8Array(buffer);\n }\n if (ArrayBuffer.isView(buffer)) {\n return new Uint8Array(this.toArrayBuffer(buffer));\n }\n throw new Error(\"BufferUtils.toBuffer expected an ArrayBuffer or a view onto one\");\n }\n toArrayBuffer(buffer) {\n if (!ArrayBuffer) {\n throw new Error(\"Can't convert to ArrayBuffer: browser does not support the necessary types\");\n }\n if (buffer instanceof ArrayBuffer) {\n return buffer;\n }\n if (ArrayBuffer.isView(buffer)) {\n return buffer.buffer.slice(buffer.byteOffset, buffer.byteOffset + buffer.byteLength);\n }\n throw new Error(\"BufferUtils.toArrayBuffer expected an ArrayBuffer or a view onto one\");\n }\n base64Encode(buffer) {\n return this.uint8ViewToBase64(this.toBuffer(buffer));\n }\n base64UrlEncode(buffer) {\n return this.base64Encode(buffer).replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=+$/, \"\");\n }\n base64Decode(str) {\n if (ArrayBuffer && Platform.Config.atob) {\n return this.base64ToArrayBuffer(str);\n } else {\n throw new Error(\"Expected ArrayBuffer to exist and Platform.Config.atob to be configured\");\n }\n }\n hexEncode(buffer) {\n const uint8Array2 = this.toBuffer(buffer);\n return uint8Array2.reduce((accum, byte) => accum + byte.toString(16).padStart(2, \"0\"), \"\");\n }\n hexDecode(hexEncodedBytes) {\n if (hexEncodedBytes.length % 2 !== 0) {\n throw new Error(\"Can't create a byte array from a hex string of odd length\");\n }\n const uint8Array2 = new Uint8Array(hexEncodedBytes.length / 2);\n for (let i = 0; i < uint8Array2.length; i++) {\n uint8Array2[i] = parseInt(hexEncodedBytes.slice(2 * i, 2 * (i + 1)), 16);\n }\n return this.toArrayBuffer(uint8Array2);\n }\n utf8Encode(string) {\n if (Platform.Config.TextEncoder) {\n const encodedByteArray = new Platform.Config.TextEncoder().encode(string);\n return this.toArrayBuffer(encodedByteArray);\n } else {\n throw new Error(\"Expected TextEncoder to be configured\");\n }\n }\n /* For utf8 decoding we apply slightly stricter input validation than to\n * hexEncode/base64Encode/etc: in those we accept anything that Buffer.from\n * can take (in particular allowing strings, which are just interpreted as\n * binary); here we ensure that the input is actually a buffer since trying\n * to utf8-decode a string to another string is almost certainly a mistake */\n utf8Decode(buffer) {\n if (!this.isBuffer(buffer)) {\n throw new Error(\"Expected input of utf8decode to be an arraybuffer or typed array\");\n }\n if (TextDecoder) {\n return new TextDecoder().decode(buffer);\n } else {\n throw new Error(\"Expected TextDecoder to be configured\");\n }\n }\n areBuffersEqual(buffer1, buffer2) {\n if (!buffer1 || !buffer2)\n return false;\n const arrayBuffer1 = this.toArrayBuffer(buffer1);\n const arrayBuffer2 = this.toArrayBuffer(buffer2);\n if (arrayBuffer1.byteLength != arrayBuffer2.byteLength)\n return false;\n const bytes1 = new Uint8Array(arrayBuffer1);\n const bytes2 = new Uint8Array(arrayBuffer2);\n for (var i = 0; i < bytes1.length; i++) {\n if (bytes1[i] != bytes2[i])\n return false;\n }\n return true;\n }\n byteLength(buffer) {\n if (buffer instanceof ArrayBuffer || ArrayBuffer.isView(buffer)) {\n return buffer.byteLength;\n }\n return -1;\n }\n arrayBufferViewToBuffer(arrayBufferView) {\n return this.toArrayBuffer(arrayBufferView);\n }\n concat(buffers) {\n const sumLength = buffers.reduce((acc, v) => acc + v.byteLength, 0);\n const result = new Uint8Array(sumLength);\n let offset = 0;\n for (const buffer of buffers) {\n const uint8Array2 = this.toBuffer(buffer);\n result.set(uint8Array2, offset);\n offset += uint8Array2.byteLength;\n }\n return result.buffer;\n }\n sha256(message) {\n const hash = sha256(this.toBuffer(message));\n return this.toArrayBuffer(hash);\n }\n hmacSha256(message, key) {\n const hash = hmac2(this.toBuffer(key), this.toBuffer(message));\n return this.toArrayBuffer(hash);\n }\n};\nvar bufferutils_default = new BufferUtils();\n\n// src/platform/web/lib/util/crypto.ts\nvar createCryptoClass = function(config, bufferUtils) {\n var DEFAULT_ALGORITHM = \"aes\";\n var DEFAULT_KEYLENGTH = 256;\n var DEFAULT_MODE = \"cbc\";\n var DEFAULT_BLOCKLENGTH = 16;\n function validateCipherParams(params) {\n if (params.algorithm === \"aes\" && params.mode === \"cbc\") {\n if (params.keyLength === 128 || params.keyLength === 256) {\n return;\n }\n throw new Error(\n \"Unsupported key length \" + params.keyLength + \" for aes-cbc encryption. Encryption key must be 128 or 256 bits (16 or 32 ASCII characters)\"\n );\n }\n }\n function normaliseBase64(string) {\n return string.replace(\"_\", \"/\").replace(\"-\", \"+\");\n }\n function isCipherParams(params) {\n return params instanceof CipherParams;\n }\n class CipherParams {\n constructor(algorithm, keyLength, mode, key) {\n this.algorithm = algorithm;\n this.keyLength = keyLength;\n this.mode = mode;\n this.key = key;\n }\n }\n class Crypto2 {\n /**\n * Obtain a complete CipherParams instance from the provided params, filling\n * in any not provided with default values, calculating a keyLength from\n * the supplied key, and validating the result.\n * @param params an object containing at a minimum a `key` key with value the\n * key, as either a binary or a base64-encoded string.\n * May optionally also contain: algorithm (defaults to AES),\n * mode (defaults to 'cbc')\n */\n static getDefaultParams(params) {\n var key;\n if (!params.key) {\n throw new Error(\"Crypto.getDefaultParams: a key is required\");\n }\n if (typeof params.key === \"string\") {\n key = bufferUtils.toArrayBuffer(bufferUtils.base64Decode(normaliseBase64(params.key)));\n } else if (params.key instanceof ArrayBuffer) {\n key = params.key;\n } else {\n key = bufferUtils.toArrayBuffer(params.key);\n }\n var algorithm = params.algorithm || DEFAULT_ALGORITHM;\n var keyLength = key.byteLength * 8;\n var mode = params.mode || DEFAULT_MODE;\n var cipherParams = new CipherParams(algorithm, keyLength, mode, key);\n if (params.keyLength && params.keyLength !== cipherParams.keyLength) {\n throw new Error(\n \"Crypto.getDefaultParams: a keyLength of \" + params.keyLength + \" was specified, but the key actually has length \" + cipherParams.keyLength\n );\n }\n validateCipherParams(cipherParams);\n return cipherParams;\n }\n /**\n * Generate a random encryption key from the supplied keylength (or the\n * default keyLength if none supplied) as an ArrayBuffer\n * @param keyLength (optional) the required keyLength in bits\n */\n static async generateRandomKey(keyLength) {\n try {\n return config.getRandomArrayBuffer((keyLength || DEFAULT_KEYLENGTH) / 8);\n } catch (err) {\n throw new ErrorInfo(\"Failed to generate random key: \" + err.message, 400, 5e4, err);\n }\n }\n /**\n * Internal; get a ChannelCipher instance based on the given cipherParams\n * @param params either a CipherParams instance or some subset of its\n * fields that includes a key\n */\n static getCipher(params, logger) {\n var _a2;\n var cipherParams = isCipherParams(params) ? params : this.getDefaultParams(params);\n return {\n cipherParams,\n cipher: new CBCCipher(cipherParams, (_a2 = params.iv) != null ? _a2 : null, logger)\n };\n }\n }\n Crypto2.CipherParams = CipherParams;\n Crypto2;\n class CBCCipher {\n constructor(params, iv, logger) {\n this.logger = logger;\n if (!crypto.subtle) {\n if (isSecureContext) {\n throw new Error(\n \"Crypto operations are not possible since the browser\\u2019s SubtleCrypto class is unavailable (reason unknown).\"\n );\n } else {\n throw new Error(\n \"Crypto operations are is not possible since the current environment is a non-secure context and hence the browser\\u2019s SubtleCrypto class is not available.\"\n );\n }\n }\n this.algorithm = params.algorithm + \"-\" + String(params.keyLength) + \"-\" + params.mode;\n this.webCryptoAlgorithm = params.algorithm + \"-\" + params.mode;\n this.key = bufferUtils.toArrayBuffer(params.key);\n this.iv = iv ? bufferUtils.toArrayBuffer(iv) : null;\n }\n concat(buffer1, buffer2) {\n const output = new ArrayBuffer(buffer1.byteLength + buffer2.byteLength);\n const outputView = new DataView(output);\n const buffer1View = new DataView(bufferUtils.toArrayBuffer(buffer1));\n for (let i = 0; i < buffer1View.byteLength; i++) {\n outputView.setInt8(i, buffer1View.getInt8(i));\n }\n const buffer2View = new DataView(bufferUtils.toArrayBuffer(buffer2));\n for (let i = 0; i < buffer2View.byteLength; i++) {\n outputView.setInt8(buffer1View.byteLength + i, buffer2View.getInt8(i));\n }\n return output;\n }\n async encrypt(plaintext) {\n logger_default.logAction(this.logger, logger_default.LOG_MICRO, \"CBCCipher.encrypt()\", \"\");\n const iv = await this.getIv();\n const cryptoKey = await crypto.subtle.importKey(\"raw\", this.key, this.webCryptoAlgorithm, false, [\"encrypt\"]);\n const ciphertext = await crypto.subtle.encrypt({ name: this.webCryptoAlgorithm, iv }, cryptoKey, plaintext);\n return this.concat(iv, ciphertext);\n }\n async decrypt(ciphertext) {\n logger_default.logAction(this.logger, logger_default.LOG_MICRO, \"CBCCipher.decrypt()\", \"\");\n const ciphertextArrayBuffer = bufferUtils.toArrayBuffer(ciphertext);\n const iv = ciphertextArrayBuffer.slice(0, DEFAULT_BLOCKLENGTH);\n const ciphertextBody = ciphertextArrayBuffer.slice(DEFAULT_BLOCKLENGTH);\n const cryptoKey = await crypto.subtle.importKey(\"raw\", this.key, this.webCryptoAlgorithm, false, [\"decrypt\"]);\n return crypto.subtle.decrypt({ name: this.webCryptoAlgorithm, iv }, cryptoKey, ciphertextBody);\n }\n async getIv() {\n if (this.iv) {\n var iv = this.iv;\n this.iv = null;\n return iv;\n }\n const randomBlock = await config.getRandomArrayBuffer(DEFAULT_BLOCKLENGTH);\n return bufferUtils.toArrayBuffer(randomBlock);\n }\n }\n return Crypto2;\n};\n\n// src/common/constants/XHRStates.ts\nvar XHRStates = /* @__PURE__ */ ((XHRStates2) => {\n XHRStates2[XHRStates2[\"REQ_SEND\"] = 0] = \"REQ_SEND\";\n XHRStates2[XHRStates2[\"REQ_RECV\"] = 1] = \"REQ_RECV\";\n XHRStates2[XHRStates2[\"REQ_RECV_POLL\"] = 2] = \"REQ_RECV_POLL\";\n XHRStates2[XHRStates2[\"REQ_RECV_STREAM\"] = 3] = \"REQ_RECV_STREAM\";\n return XHRStates2;\n})(XHRStates || {});\nvar XHRStates_default = XHRStates;\n\n// src/platform/web/lib/http/http.ts\nfunction createMissingImplementationError() {\n return new ErrorInfo(\n \"No HTTP request plugin provided. Provide at least one of the FetchRequest or XHRRequest plugins.\",\n 400,\n 4e4\n );\n}\nvar _a;\nvar Http2 = (_a = class {\n constructor(client) {\n this.checksInProgress = null;\n this.checkConnectivity = void 0;\n this.supportsAuthHeaders = false;\n this.supportsLinkHeaders = false;\n var _a2;\n this.client = client != null ? client : null;\n const connectivityCheckUrl = (client == null ? void 0 : client.options.connectivityCheckUrl) || defaults_default.connectivityCheckUrl;\n const connectivityCheckParams = (_a2 = client == null ? void 0 : client.options.connectivityCheckParams) != null ? _a2 : null;\n const connectivityUrlIsDefault = !(client == null ? void 0 : client.options.connectivityCheckUrl);\n const requestImplementations = __spreadValues(__spreadValues({}, Http2.bundledRequestImplementations), client == null ? void 0 : client._additionalHTTPRequestImplementations);\n const xhrRequestImplementation = requestImplementations.XHRRequest;\n const fetchRequestImplementation = requestImplementations.FetchRequest;\n const hasImplementation = !!(xhrRequestImplementation || fetchRequestImplementation);\n if (!hasImplementation) {\n throw createMissingImplementationError();\n }\n if (Platform.Config.xhrSupported && xhrRequestImplementation) {\n this.supportsAuthHeaders = true;\n this.Request = async function(method, uri, headers, params, body) {\n return new Promise((resolve) => {\n var _a3;\n const req = xhrRequestImplementation.createRequest(\n uri,\n headers,\n params,\n body,\n XHRStates_default.REQ_SEND,\n (_a3 = client && client.options.timeouts) != null ? _a3 : null,\n this.logger,\n method\n );\n req.once(\n \"complete\",\n (error, body2, headers2, unpacked, statusCode) => resolve({ error, body: body2, headers: headers2, unpacked, statusCode })\n );\n req.exec();\n });\n };\n if (client == null ? void 0 : client.options.disableConnectivityCheck) {\n this.checkConnectivity = async function() {\n return true;\n };\n } else {\n this.checkConnectivity = async function() {\n var _a3;\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MICRO,\n \"(XHRRequest)Http.checkConnectivity()\",\n \"Sending; \" + connectivityCheckUrl\n );\n const requestResult = await this.doUri(\n HttpMethods_default.Get,\n connectivityCheckUrl,\n null,\n null,\n connectivityCheckParams\n );\n let result = false;\n if (!connectivityUrlIsDefault) {\n result = !requestResult.error && isSuccessCode(requestResult.statusCode);\n } else {\n result = !requestResult.error && ((_a3 = requestResult.body) == null ? void 0 : _a3.replace(/\\n/, \"\")) == \"yes\";\n }\n logger_default.logAction(this.logger, logger_default.LOG_MICRO, \"(XHRRequest)Http.checkConnectivity()\", \"Result: \" + result);\n return result;\n };\n }\n } else if (Platform.Config.fetchSupported && fetchRequestImplementation) {\n this.supportsAuthHeaders = true;\n this.Request = async (method, uri, headers, params, body) => {\n return fetchRequestImplementation(method, client != null ? client : null, uri, headers, params, body);\n };\n if (client == null ? void 0 : client.options.disableConnectivityCheck) {\n this.checkConnectivity = async function() {\n return true;\n };\n } else {\n this.checkConnectivity = async function() {\n var _a3;\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MICRO,\n \"(Fetch)Http.checkConnectivity()\",\n \"Sending; \" + connectivityCheckUrl\n );\n const requestResult = await this.doUri(HttpMethods_default.Get, connectivityCheckUrl, null, null, null);\n const result = !requestResult.error && ((_a3 = requestResult.body) == null ? void 0 : _a3.replace(/\\n/, \"\")) == \"yes\";\n logger_default.logAction(this.logger, logger_default.LOG_MICRO, \"(Fetch)Http.checkConnectivity()\", \"Result: \" + result);\n return result;\n };\n }\n } else {\n this.Request = async () => {\n const error = hasImplementation ? new PartialErrorInfo(\"no supported HTTP transports available\", null, 400) : createMissingImplementationError();\n return { error };\n };\n }\n }\n get logger() {\n var _a2, _b;\n return (_b = (_a2 = this.client) == null ? void 0 : _a2.logger) != null ? _b : logger_default.defaultLogger;\n }\n async doUri(method, uri, headers, body, params) {\n if (!this.Request) {\n return { error: new PartialErrorInfo(\"Request invoked before assigned to\", null, 500) };\n }\n return this.Request(method, uri, headers, params, body);\n }\n shouldFallback(errorInfo) {\n const statusCode = errorInfo.statusCode;\n return statusCode === 408 && !errorInfo.code || statusCode === 400 && !errorInfo.code || statusCode >= 500 && statusCode <= 504;\n }\n}, _a.methods = [HttpMethods_default.Get, HttpMethods_default.Delete, HttpMethods_default.Post, HttpMethods_default.Put, HttpMethods_default.Patch], _a.methodsWithoutBody = [HttpMethods_default.Get, HttpMethods_default.Delete], _a.methodsWithBody = [HttpMethods_default.Post, HttpMethods_default.Put, HttpMethods_default.Patch], _a);\nvar http_default = Http2;\n\n// src/platform/web/lib/util/webstorage.ts\nvar test = \"ablyjs-storage-test\";\nvar globalObject3 = typeof global !== \"undefined\" ? global : typeof window !== \"undefined\" ? window : self;\nvar Webstorage = class {\n constructor() {\n try {\n globalObject3.sessionStorage.setItem(test, test);\n globalObject3.sessionStorage.removeItem(test);\n this.sessionSupported = true;\n } catch (e) {\n this.sessionSupported = false;\n }\n try {\n globalObject3.localStorage.setItem(test, test);\n globalObject3.localStorage.removeItem(test);\n this.localSupported = true;\n } catch (e) {\n this.localSupported = false;\n }\n }\n get(name) {\n return this._get(name, false);\n }\n getSession(name) {\n return this._get(name, true);\n }\n remove(name) {\n return this._remove(name, false);\n }\n removeSession(name) {\n return this._remove(name, true);\n }\n set(name, value, ttl) {\n return this._set(name, value, ttl, false);\n }\n setSession(name, value, ttl) {\n return this._set(name, value, ttl, true);\n }\n _set(name, value, ttl, session) {\n const wrappedValue = { value };\n if (ttl) {\n wrappedValue.expires = Date.now() + ttl;\n }\n return this.storageInterface(session).setItem(name, JSON.stringify(wrappedValue));\n }\n _get(name, session) {\n if (session && !this.sessionSupported)\n throw new Error(\"Session Storage not supported\");\n if (!session && !this.localSupported)\n throw new Error(\"Local Storage not supported\");\n const rawItem = this.storageInterface(session).getItem(name);\n if (!rawItem)\n return null;\n const wrappedValue = JSON.parse(rawItem);\n if (wrappedValue.expires && wrappedValue.expires < Date.now()) {\n this.storageInterface(session).removeItem(name);\n return null;\n }\n return wrappedValue.value;\n }\n _remove(name, session) {\n return this.storageInterface(session).removeItem(name);\n }\n storageInterface(session) {\n return session ? globalObject3.sessionStorage : globalObject3.localStorage;\n }\n};\nvar webstorage_default = new Webstorage();\n\n// src/platform/web/config.ts\nvar globalObject4 = getGlobalObject();\nvar isVercelEdgeRuntime = typeof EdgeRuntime === \"string\";\nif (typeof Window === \"undefined\" && typeof WorkerGlobalScope === \"undefined\" && !isVercelEdgeRuntime) {\n console.log(\n \"Warning: this distribution of Ably is intended for browsers. On nodejs, please use the 'ably' package on npm\"\n );\n}\nfunction allowComet() {\n const loc = globalObject4.location;\n return !globalObject4.WebSocket || !loc || !loc.origin || loc.origin.indexOf(\"http\") > -1;\n}\nfunction isWebWorkerContext() {\n if (typeof WorkerGlobalScope !== \"undefined\" && self instanceof WorkerGlobalScope) {\n return true;\n } else {\n return false;\n }\n}\nvar userAgent = globalObject4.navigator && globalObject4.navigator.userAgent.toString();\nvar currentUrl = globalObject4.location && globalObject4.location.href;\nvar Config = {\n agent: \"browser\",\n logTimestamps: true,\n userAgent,\n currentUrl,\n binaryType: \"arraybuffer\",\n WebSocket: globalObject4.WebSocket,\n fetchSupported: !!globalObject4.fetch,\n xhrSupported: globalObject4.XMLHttpRequest && \"withCredentials\" in new XMLHttpRequest(),\n allowComet: allowComet(),\n useProtocolHeartbeats: true,\n supportsBinary: !!globalObject4.TextDecoder,\n /* Per Paddy (https://ably-real-time.slack.com/archives/CURL4U2FP/p1705674537763479) web intentionally prefers JSON to MessagePack:\n *\n * > browsers' support for binary types in general was historically poor, and JSON transport performance is significantly better in a browser than msgpack. In modern browsers then binary is supported consistently, but I'd still expect that JSON encode/decode performance is dramatically better than msgpack in a browser.\n */\n preferBinary: false,\n ArrayBuffer: globalObject4.ArrayBuffer,\n atob: globalObject4.atob,\n nextTick: typeof globalObject4.queueMicrotask === \"function\" ? (f) => globalObject4.queueMicrotask(f) : (f) => Promise.resolve().then(f),\n addEventListener: globalObject4.addEventListener,\n inspect: JSON.stringify,\n stringByteSize: function(str) {\n return globalObject4.TextDecoder && new globalObject4.TextEncoder().encode(str).length || str.length;\n },\n TextEncoder: globalObject4.TextEncoder,\n TextDecoder: globalObject4.TextDecoder,\n getRandomArrayBuffer: async function(byteLength) {\n const byteArray = new Uint8Array(byteLength);\n globalObject4.crypto.getRandomValues(byteArray);\n return byteArray.buffer;\n },\n isWebworker: isWebWorkerContext(),\n push: {\n platform: \"browser\" /* Browser */,\n formFactor: \"desktop\" /* Desktop */,\n storage: webstorage_default\n }\n};\nvar config_default = Config;\n\n// src/common/lib/transport/comettransport.ts\nfunction shouldBeErrorAction(err) {\n const UNRESOLVABLE_ERROR_CODES = [80015, 80017, 80030];\n if (err.code) {\n if (auth_default.isTokenErr(err))\n return false;\n if (UNRESOLVABLE_ERROR_CODES.includes(err.code))\n return true;\n return err.code >= 4e4 && err.code < 5e4;\n } else {\n return false;\n }\n}\nfunction protocolMessageFromRawError(err) {\n if (shouldBeErrorAction(err)) {\n return [fromValues({ action: actions.ERROR, error: err })];\n } else {\n return [fromValues({ action: actions.DISCONNECTED, error: err })];\n }\n}\nvar CometTransport = class extends transport_default {\n constructor(connectionManager, auth, params) {\n super(\n connectionManager,\n auth,\n params,\n /* binary not supported for comet so force JSON protocol */\n true\n );\n /* Historical comment, back from when we supported JSONP:\n *\n * > For comet, we could do the auth update by aborting the current recv and\n * > starting a new one with the new token, that'd be sufficient for realtime.\n * > Problem is JSONP - you can't cancel truly abort a recv once started. So\n * > we need to send an AUTH for jsonp. In which case it's simpler to keep all\n * > comet transports the same and do it for all of them. So we send the AUTH\n * > instead, and don't need to abort the recv\n *\n * Now that we’ve dropped JSONP support, we may be able to revisit the above;\n * see https://github.com/ably/ably-js/issues/1214.\n */\n this.onAuthUpdated = (tokenDetails) => {\n this.authParams = { access_token: tokenDetails.token };\n };\n this.stream = \"stream\" in params ? params.stream : true;\n this.sendRequest = null;\n this.recvRequest = null;\n this.pendingCallback = null;\n this.pendingItems = null;\n }\n connect() {\n logger_default.logAction(this.logger, logger_default.LOG_MINOR, \"CometTransport.connect()\", \"starting\");\n transport_default.prototype.connect.call(this);\n const params = this.params;\n const options = params.options;\n const host = params.host || options.primaryDomain;\n const port = defaults_default.getPort(options);\n const cometScheme = options.tls ? \"https://\" : \"http://\";\n this.baseUri = cometScheme + host + \":\" + port + \"/comet/\";\n const connectUri = this.baseUri + \"connect\";\n logger_default.logAction(this.logger, logger_default.LOG_MINOR, \"CometTransport.connect()\", \"uri: \" + connectUri);\n whenPromiseSettles(this.auth.getAuthParams(), (err, authParams) => {\n if (err) {\n this.disconnect(err);\n return;\n }\n if (this.isDisposed) {\n return;\n }\n this.authParams = authParams;\n const connectParams = this.params.getConnectParams(authParams);\n if (\"stream\" in connectParams)\n this.stream = connectParams.stream;\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MINOR,\n \"CometTransport.connect()\",\n \"connectParams:\" + toQueryString(connectParams)\n );\n let preconnected = false;\n const connectRequest = this.recvRequest = this.createRequest(\n connectUri,\n null,\n connectParams,\n null,\n this.stream ? XHRStates_default.REQ_RECV_STREAM : XHRStates_default.REQ_RECV\n );\n connectRequest.on(\"data\", (data) => {\n if (!this.recvRequest) {\n return;\n }\n if (!preconnected) {\n preconnected = true;\n this.emit(\"preconnect\");\n }\n this.onData(data);\n });\n connectRequest.on(\"complete\", (err2) => {\n if (!this.recvRequest) {\n err2 = err2 || new ErrorInfo(\"Request cancelled\", 80003, 400);\n }\n this.recvRequest = null;\n if (!preconnected && !err2) {\n preconnected = true;\n this.emit(\"preconnect\");\n }\n this.onActivity();\n if (err2) {\n if (err2.code) {\n this.onData(protocolMessageFromRawError(err2));\n } else {\n this.disconnect(err2);\n }\n return;\n }\n Platform.Config.nextTick(() => {\n this.recv();\n });\n });\n connectRequest.exec();\n });\n }\n requestClose() {\n logger_default.logAction(this.logger, logger_default.LOG_MINOR, \"CometTransport.requestClose()\");\n this._requestCloseOrDisconnect(true);\n }\n requestDisconnect() {\n logger_default.logAction(this.logger, logger_default.LOG_MINOR, \"CometTransport.requestDisconnect()\");\n this._requestCloseOrDisconnect(false);\n }\n _requestCloseOrDisconnect(closing) {\n const closeOrDisconnectUri = closing ? this.closeUri : this.disconnectUri;\n if (closeOrDisconnectUri) {\n const request = this.createRequest(closeOrDisconnectUri, null, this.authParams, null, XHRStates_default.REQ_SEND);\n request.on(\"complete\", (err) => {\n if (err) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_ERROR,\n \"CometTransport.request\" + (closing ? \"Close()\" : \"Disconnect()\"),\n \"request returned err = \" + inspectError(err)\n );\n this.finish(\"disconnected\", err);\n }\n });\n request.exec();\n }\n }\n dispose() {\n logger_default.logAction(this.logger, logger_default.LOG_MINOR, \"CometTransport.dispose()\", \"\");\n if (!this.isDisposed) {\n this.isDisposed = true;\n if (this.recvRequest) {\n logger_default.logAction(this.logger, logger_default.LOG_MINOR, \"CometTransport.dispose()\", \"aborting recv request\");\n this.recvRequest.abort();\n this.recvRequest = null;\n }\n this.finish(\"disconnected\", connectionerrors_default.disconnected());\n Platform.Config.nextTick(() => {\n this.emit(\"disposed\");\n });\n }\n }\n onConnect(message) {\n var _a2;\n if (this.isDisposed) {\n return;\n }\n const connectionStr = (_a2 = message.connectionDetails) == null ? void 0 : _a2.connectionKey;\n transport_default.prototype.onConnect.call(this, message);\n const baseConnectionUri = this.baseUri + connectionStr;\n logger_default.logAction(this.logger, logger_default.LOG_MICRO, \"CometTransport.onConnect()\", \"baseUri = \" + baseConnectionUri);\n this.sendUri = baseConnectionUri + \"/send\";\n this.recvUri = baseConnectionUri + \"/recv\";\n this.closeUri = baseConnectionUri + \"/close\";\n this.disconnectUri = baseConnectionUri + \"/disconnect\";\n }\n send(message) {\n if (this.sendRequest) {\n this.pendingItems = this.pendingItems || [];\n this.pendingItems.push(message);\n return;\n }\n const pendingItems = this.pendingItems || [];\n pendingItems.push(message);\n this.pendingItems = null;\n this.sendItems(pendingItems);\n }\n sendAnyPending() {\n const pendingItems = this.pendingItems;\n if (!pendingItems) {\n return;\n }\n this.pendingItems = null;\n this.sendItems(pendingItems);\n }\n sendItems(items) {\n const sendRequest = this.sendRequest = this.createRequest(\n this.sendUri,\n null,\n this.authParams,\n this.encodeRequest(items),\n XHRStates_default.REQ_SEND\n );\n sendRequest.on(\"complete\", (err, data) => {\n if (err)\n logger_default.logAction(\n this.logger,\n logger_default.LOG_ERROR,\n \"CometTransport.sendItems()\",\n \"on complete: err = \" + inspectError(err)\n );\n this.sendRequest = null;\n if (err) {\n if (err.code) {\n this.onData(protocolMessageFromRawError(err));\n } else {\n this.disconnect(err);\n }\n return;\n }\n if (data) {\n this.onData(data);\n }\n if (this.pendingItems) {\n Platform.Config.nextTick(() => {\n if (!this.sendRequest) {\n this.sendAnyPending();\n }\n });\n }\n });\n sendRequest.exec();\n }\n recv() {\n if (this.recvRequest)\n return;\n if (!this.isConnected)\n return;\n const recvRequest = this.recvRequest = this.createRequest(\n this.recvUri,\n null,\n this.authParams,\n null,\n this.stream ? XHRStates_default.REQ_RECV_STREAM : XHRStates_default.REQ_RECV_POLL\n );\n recvRequest.on(\"data\", (data) => {\n this.onData(data);\n });\n recvRequest.on(\"complete\", (err) => {\n this.recvRequest = null;\n this.onActivity();\n if (err) {\n if (err.code) {\n this.onData(protocolMessageFromRawError(err));\n } else {\n this.disconnect(err);\n }\n return;\n }\n Platform.Config.nextTick(() => {\n this.recv();\n });\n });\n recvRequest.exec();\n }\n onData(responseData) {\n try {\n const items = this.decodeResponse(responseData);\n if (items && items.length)\n for (let i = 0; i < items.length; i++)\n this.onProtocolMessage(\n fromDeserialized(\n items[i],\n this.connectionManager.realtime._RealtimePresence,\n this.connectionManager.realtime._Annotations,\n this.connectionManager.realtime._objectsPlugin\n )\n );\n } catch (e) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_ERROR,\n \"CometTransport.onData()\",\n \"Unexpected exception handing channel event: \" + e.stack\n );\n }\n }\n encodeRequest(requestItems) {\n return JSON.stringify(requestItems);\n }\n decodeResponse(responseData) {\n if (typeof responseData == \"string\")\n return JSON.parse(responseData);\n return responseData;\n }\n};\nvar comettransport_default = CometTransport;\n\n// src/platform/web/lib/http/request/xhrrequest.ts\nfunction isAblyError(responseBody, headers) {\n return allToLowerCase(keysArray(headers)).includes(\"x-ably-errorcode\");\n}\nfunction getAblyError(responseBody, headers) {\n if (isAblyError(responseBody, headers)) {\n return responseBody.error && ErrorInfo.fromValues(responseBody.error);\n }\n}\nvar noop3 = function() {\n};\nvar idCounter = 0;\nvar pendingRequests = {};\nfunction getHeader(xhr, header) {\n return xhr.getResponseHeader && xhr.getResponseHeader(header);\n}\nfunction isEncodingChunked(xhr) {\n return xhr.getResponseHeader && (xhr.getResponseHeader(\"transfer-encoding\") || !xhr.getResponseHeader(\"content-length\"));\n}\nfunction getHeadersAsObject(xhr) {\n const headerPairs = xhr.getAllResponseHeaders().trim().split(\"\\r\\n\");\n const headers = {};\n for (let i = 0; i < headerPairs.length; i++) {\n const parts = headerPairs[i].split(\":\").map((x) => x.trim());\n headers[parts[0].toLowerCase()] = parts[1];\n }\n return headers;\n}\nvar XHRRequest = class _XHRRequest extends eventemitter_default {\n constructor(uri, headers, params, body, requestMode, timeouts, logger, method) {\n super(logger);\n params = params || {};\n params.rnd = cheapRandStr();\n this.uri = uri + toQueryString(params);\n this.headers = headers || {};\n this.body = body;\n this.method = method ? method.toUpperCase() : isNil(body) ? \"GET\" : \"POST\";\n this.requestMode = requestMode;\n this.timeouts = timeouts;\n this.timedOut = false;\n this.requestComplete = false;\n this.id = String(++idCounter);\n pendingRequests[this.id] = this;\n }\n static createRequest(uri, headers, params, body, requestMode, timeouts, logger, method) {\n const _timeouts = timeouts || defaults_default.TIMEOUTS;\n return new _XHRRequest(\n uri,\n headers,\n copy(params),\n body,\n requestMode,\n _timeouts,\n logger,\n method\n );\n }\n complete(err, body, headers, unpacked, statusCode) {\n if (!this.requestComplete) {\n this.requestComplete = true;\n if (!err && body) {\n this.emit(\"data\", body);\n }\n this.emit(\"complete\", err, body, headers, unpacked, statusCode);\n this.dispose();\n }\n }\n abort() {\n this.dispose();\n }\n exec() {\n let headers = this.headers;\n const timeout = this.requestMode == XHRStates_default.REQ_SEND ? this.timeouts.httpRequestTimeout : this.timeouts.recvTimeout, timer = this.timer = setTimeout(() => {\n this.timedOut = true;\n xhr.abort();\n }, timeout), method = this.method, xhr = this.xhr = new XMLHttpRequest(), accept = headers[\"accept\"];\n let body = this.body;\n let responseType = \"text\";\n if (!accept) {\n headers[\"accept\"] = \"application/json\";\n } else if (accept.indexOf(\"application/x-msgpack\") === 0) {\n responseType = \"arraybuffer\";\n }\n if (body) {\n const contentType = headers[\"content-type\"] || (headers[\"content-type\"] = \"application/json\");\n if (contentType.indexOf(\"application/json\") > -1 && typeof body != \"string\")\n body = JSON.stringify(body);\n }\n xhr.open(method, this.uri, true);\n xhr.responseType = responseType;\n if (\"authorization\" in headers) {\n xhr.withCredentials = true;\n }\n for (const h in headers)\n xhr.setRequestHeader(h, headers[h]);\n const errorHandler = (errorEvent, message, code, statusCode2) => {\n var _a2;\n let errorMessage = message + \" (event type: \" + errorEvent.type + \")\";\n if ((_a2 = this == null ? void 0 : this.xhr) == null ? void 0 : _a2.statusText)\n errorMessage += \", current statusText is \" + this.xhr.statusText;\n logger_default.logAction(this.logger, logger_default.LOG_ERROR, \"Request.on\" + errorEvent.type + \"()\", errorMessage);\n this.complete(new PartialErrorInfo(errorMessage, code, statusCode2));\n };\n xhr.onerror = (errorEvent) => {\n errorHandler(errorEvent, \"XHR error occurred\", null, 400);\n };\n xhr.onabort = (errorEvent) => {\n if (this.timedOut) {\n errorHandler(errorEvent, \"Request aborted due to request timeout expiring\", null, 408);\n } else {\n errorHandler(errorEvent, \"Request cancelled\", null, 400);\n }\n };\n xhr.ontimeout = (errorEvent) => {\n errorHandler(errorEvent, \"Request timed out\", null, 408);\n };\n let streaming;\n let statusCode;\n let successResponse;\n let streamPos = 0;\n let unpacked = false;\n const onResponse = () => {\n clearTimeout(timer);\n successResponse = statusCode < 400;\n if (statusCode == 204) {\n this.complete(null, null, null, null, statusCode);\n return;\n }\n streaming = this.requestMode == XHRStates_default.REQ_RECV_STREAM && successResponse && isEncodingChunked(xhr);\n };\n const onEnd = () => {\n let parsedResponse;\n try {\n const contentType = getHeader(xhr, \"content-type\");\n const json = contentType ? contentType.indexOf(\"application/json\") >= 0 : xhr.responseType == \"text\";\n if (json) {\n const jsonResponseBody = xhr.responseType === \"arraybuffer\" ? Platform.BufferUtils.utf8Decode(xhr.response) : String(xhr.responseText);\n if (jsonResponseBody.length) {\n parsedResponse = JSON.parse(jsonResponseBody);\n } else {\n parsedResponse = jsonResponseBody;\n }\n unpacked = true;\n } else {\n parsedResponse = xhr.response;\n }\n if (parsedResponse.response !== void 0) {\n statusCode = parsedResponse.statusCode;\n successResponse = statusCode < 400;\n headers = parsedResponse.headers;\n parsedResponse = parsedResponse.response;\n } else {\n headers = getHeadersAsObject(xhr);\n }\n } catch (e) {\n this.complete(new PartialErrorInfo(\"Malformed response body from server: \" + e.message, null, 400));\n return;\n }\n if (successResponse || Array.isArray(parsedResponse)) {\n this.complete(null, parsedResponse, headers, unpacked, statusCode);\n return;\n }\n let err = getAblyError(parsedResponse, headers);\n if (!err) {\n err = new PartialErrorInfo(\n \"Error response received from server: \" + statusCode + \" body was: \" + Platform.Config.inspect(parsedResponse),\n null,\n statusCode\n );\n }\n this.complete(err, parsedResponse, headers, unpacked, statusCode);\n };\n function onProgress() {\n const responseText = xhr.responseText;\n const bodyEnd = responseText.length - 1;\n let idx, chunk;\n while (streamPos < bodyEnd && (idx = responseText.indexOf(\"\\n\", streamPos)) > -1) {\n chunk = responseText.slice(streamPos, idx);\n streamPos = idx + 1;\n onChunk(chunk);\n }\n }\n const onChunk = (chunk) => {\n try {\n chunk = JSON.parse(chunk);\n } catch (e) {\n this.complete(new PartialErrorInfo(\"Malformed response body from server: \" + e.message, null, 400));\n return;\n }\n this.emit(\"data\", chunk);\n };\n const onStreamEnd = () => {\n onProgress();\n this.streamComplete = true;\n Platform.Config.nextTick(() => {\n this.complete();\n });\n };\n xhr.onreadystatechange = () => {\n const readyState = xhr.readyState;\n if (readyState < 3)\n return;\n if (xhr.status !== 0) {\n if (statusCode === void 0) {\n statusCode = xhr.status;\n onResponse();\n }\n if (readyState == 3 && streaming) {\n onProgress();\n } else if (readyState == 4) {\n if (streaming)\n onStreamEnd();\n else\n onEnd();\n }\n }\n };\n xhr.send(body);\n }\n dispose() {\n const xhr = this.xhr;\n if (xhr) {\n xhr.onreadystatechange = xhr.onerror = xhr.onabort = xhr.ontimeout = noop3;\n this.xhr = null;\n const timer = this.timer;\n if (timer) {\n clearTimeout(timer);\n this.timer = null;\n }\n if (!this.requestComplete)\n xhr.abort();\n }\n delete pendingRequests[this.id];\n }\n};\nvar xhrrequest_default = XHRRequest;\n\n// src/platform/web/lib/transport/xhrpollingtransport.ts\nvar shortName2 = TransportNames.XhrPolling;\nvar XHRPollingTransport = class extends comettransport_default {\n constructor(connectionManager, auth, params) {\n super(connectionManager, auth, params);\n this.shortName = shortName2;\n params.stream = false;\n this.shortName = shortName2;\n }\n static isAvailable() {\n return !!(Platform.Config.xhrSupported && Platform.Config.allowComet);\n }\n toString() {\n return \"XHRPollingTransport; uri=\" + this.baseUri + \"; isConnected=\" + this.isConnected;\n }\n createRequest(uri, headers, params, body, requestMode) {\n return xhrrequest_default.createRequest(uri, headers, params, body, requestMode, this.timeouts, this.logger);\n }\n};\nvar xhrpollingtransport_default = XHRPollingTransport;\n\n// src/platform/web/lib/transport/index.ts\nvar order = [\"xhr_polling\"];\nvar defaultTransports = {\n order,\n bundledImplementations: {\n web_socket: websockettransport_default,\n xhr_polling: xhrpollingtransport_default\n }\n};\nvar transport_default2 = defaultTransports;\n\n// src/platform/web/lib/util/defaults.ts\nvar Defaults2 = {\n connectivityCheckUrl: \"https://internet-up.ably-realtime.com/is-the-internet-up.txt\",\n wsConnectivityCheckUrl: \"wss://ws-up.ably-realtime.com\",\n /* Order matters here: the base transport is the leftmost one in the\n * intersection of baseTransportOrder and the transports clientOption that's\n * supported. */\n defaultTransports: [TransportNames.XhrPolling, TransportNames.WebSocket]\n};\nvar defaults_default2 = Defaults2;\n\n// src/platform/web/lib/util/msgpack.ts\nfunction inspect(buffer) {\n if (buffer === void 0)\n return \"undefined\";\n let view;\n let type;\n if (buffer instanceof ArrayBuffer) {\n type = \"ArrayBuffer\";\n view = new DataView(buffer);\n } else if (buffer instanceof DataView) {\n type = \"DataView\";\n view = buffer;\n }\n if (!view)\n return JSON.stringify(buffer);\n const bytes = [];\n for (let i = 0; i < buffer.byteLength; i++) {\n if (i > 20) {\n bytes.push(\"...\");\n break;\n }\n let byte_ = view.getUint8(i).toString(16);\n if (byte_.length === 1)\n byte_ = \"0\" + byte_;\n bytes.push(byte_);\n }\n return \"<\" + type + \" \" + bytes.join(\" \") + \">\";\n}\nfunction utf8Write(view, offset, string) {\n for (let i = 0, l = string.length; i < l; i++) {\n const codePoint = string.charCodeAt(i);\n if (codePoint < 128) {\n view.setUint8(offset++, codePoint >>> 0 & 127 | 0);\n continue;\n }\n if (codePoint < 2048) {\n view.setUint8(offset++, codePoint >>> 6 & 31 | 192);\n view.setUint8(offset++, codePoint >>> 0 & 63 | 128);\n continue;\n }\n if (codePoint < 65536) {\n view.setUint8(offset++, codePoint >>> 12 & 15 | 224);\n view.setUint8(offset++, codePoint >>> 6 & 63 | 128);\n view.setUint8(offset++, codePoint >>> 0 & 63 | 128);\n continue;\n }\n if (codePoint < 1114112) {\n view.setUint8(offset++, codePoint >>> 18 & 7 | 240);\n view.setUint8(offset++, codePoint >>> 12 & 63 | 128);\n view.setUint8(offset++, codePoint >>> 6 & 63 | 128);\n view.setUint8(offset++, codePoint >>> 0 & 63 | 128);\n continue;\n }\n throw new Error(\"bad codepoint \" + codePoint);\n }\n}\nfunction utf8Read(view, offset, length) {\n let string = \"\";\n for (let i = offset, end = offset + length; i < end; i++) {\n const byte_ = view.getUint8(i);\n if ((byte_ & 128) === 0) {\n string += String.fromCharCode(byte_);\n continue;\n }\n if ((byte_ & 224) === 192) {\n string += String.fromCharCode((byte_ & 15) << 6 | view.getUint8(++i) & 63);\n continue;\n }\n if ((byte_ & 240) === 224) {\n string += String.fromCharCode(\n (byte_ & 15) << 12 | (view.getUint8(++i) & 63) << 6 | (view.getUint8(++i) & 63) << 0\n );\n continue;\n }\n if ((byte_ & 248) === 240) {\n string += String.fromCharCode(\n (byte_ & 7) << 18 | (view.getUint8(++i) & 63) << 12 | (view.getUint8(++i) & 63) << 6 | (view.getUint8(++i) & 63) << 0\n );\n continue;\n }\n throw new Error(\"Invalid byte \" + byte_.toString(16));\n }\n return string;\n}\nfunction utf8ByteCount(string) {\n let count = 0;\n for (let i = 0, l = string.length; i < l; i++) {\n const codePoint = string.charCodeAt(i);\n if (codePoint < 128) {\n count += 1;\n continue;\n }\n if (codePoint < 2048) {\n count += 2;\n continue;\n }\n if (codePoint < 65536) {\n count += 3;\n continue;\n }\n if (codePoint < 1114112) {\n count += 4;\n continue;\n }\n throw new Error(\"bad codepoint \" + codePoint);\n }\n return count;\n}\nfunction encode2(value, sparse) {\n const size = sizeof(value, sparse);\n if (size === 0)\n return void 0;\n const buffer = new ArrayBuffer(size);\n const view = new DataView(buffer);\n _encode(value, view, 0, sparse);\n return buffer;\n}\nvar SH_L_32 = (1 << 16) * (1 << 16);\nvar SH_R_32 = 1 / SH_L_32;\nfunction getInt64(view, offset) {\n offset = offset || 0;\n return view.getInt32(offset) * SH_L_32 + view.getUint32(offset + 4);\n}\nfunction getUint64(view, offset) {\n offset = offset || 0;\n return view.getUint32(offset) * SH_L_32 + view.getUint32(offset + 4);\n}\nfunction setInt64(view, offset, val) {\n if (val < 9223372036854776e3) {\n view.setInt32(offset, Math.floor(val * SH_R_32));\n view.setInt32(offset + 4, val & -1);\n } else {\n view.setUint32(offset, 2147483647);\n view.setUint32(offset + 4, 2147483647);\n }\n}\nfunction setUint64(view, offset, val) {\n if (val < 18446744073709552e3) {\n view.setUint32(offset, Math.floor(val * SH_R_32));\n view.setInt32(offset + 4, val & -1);\n } else {\n view.setUint32(offset, 4294967295);\n view.setUint32(offset + 4, 4294967295);\n }\n}\nvar Decoder = class {\n constructor(view, offset) {\n this.map = (length) => {\n const value = {};\n for (let i = 0; i < length; i++) {\n const key = this.parse();\n value[key] = this.parse();\n }\n return value;\n };\n this.bin = (length) => {\n const value = new ArrayBuffer(length);\n new Uint8Array(value).set(new Uint8Array(this.view.buffer, this.offset, length), 0);\n this.offset += length;\n return value;\n };\n this.buf = this.bin;\n this.str = (length) => {\n const value = utf8Read(this.view, this.offset, length);\n this.offset += length;\n return value;\n };\n this.array = (length) => {\n const value = new Array(length);\n for (let i = 0; i < length; i++) {\n value[i] = this.parse();\n }\n return value;\n };\n this.ext = (length) => {\n this.offset += length;\n return {\n type: this.view.getInt8(this.offset),\n data: this.buf(length)\n };\n };\n this.parse = () => {\n const type = this.view.getUint8(this.offset);\n let value, length;\n if ((type & 128) === 0) {\n this.offset++;\n return type;\n }\n if ((type & 240) === 128) {\n length = type & 15;\n this.offset++;\n return this.map(length);\n }\n if ((type & 240) === 144) {\n length = type & 15;\n this.offset++;\n return this.array(length);\n }\n if ((type & 224) === 160) {\n length = type & 31;\n this.offset++;\n return this.str(length);\n }\n if ((type & 224) === 224) {\n value = this.view.getInt8(this.offset);\n this.offset++;\n return value;\n }\n switch (type) {\n case 192:\n this.offset++;\n return null;\n case 193:\n this.offset++;\n return void 0;\n case 194:\n this.offset++;\n return false;\n case 195:\n this.offset++;\n return true;\n case 196:\n length = this.view.getUint8(this.offset + 1);\n this.offset += 2;\n return this.bin(length);\n case 197:\n length = this.view.getUint16(this.offset + 1);\n this.offset += 3;\n return this.bin(length);\n case 198:\n length = this.view.getUint32(this.offset + 1);\n this.offset += 5;\n return this.bin(length);\n case 199:\n length = this.view.getUint8(this.offset + 1);\n this.offset += 2;\n return this.ext(length);\n case 200:\n length = this.view.getUint16(this.offset + 1);\n this.offset += 3;\n return this.ext(length);\n case 201:\n length = this.view.getUint32(this.offset + 1);\n this.offset += 5;\n return this.ext(length);\n case 202:\n value = this.view.getFloat32(this.offset + 1);\n this.offset += 5;\n return value;\n case 203:\n value = this.view.getFloat64(this.offset + 1);\n this.offset += 9;\n return value;\n case 204:\n value = this.view.getUint8(this.offset + 1);\n this.offset += 2;\n return value;\n case 205:\n value = this.view.getUint16(this.offset + 1);\n this.offset += 3;\n return value;\n case 206:\n value = this.view.getUint32(this.offset + 1);\n this.offset += 5;\n return value;\n case 207:\n value = getUint64(this.view, this.offset + 1);\n this.offset += 9;\n return value;\n case 208:\n value = this.view.getInt8(this.offset + 1);\n this.offset += 2;\n return value;\n case 209:\n value = this.view.getInt16(this.offset + 1);\n this.offset += 3;\n return value;\n case 210:\n value = this.view.getInt32(this.offset + 1);\n this.offset += 5;\n return value;\n case 211:\n value = getInt64(this.view, this.offset + 1);\n this.offset += 9;\n return value;\n case 212:\n length = 1;\n this.offset++;\n return this.ext(length);\n case 213:\n length = 2;\n this.offset++;\n return this.ext(length);\n case 214:\n length = 4;\n this.offset++;\n return this.ext(length);\n case 215:\n length = 8;\n this.offset++;\n return this.ext(length);\n case 216:\n length = 16;\n this.offset++;\n return this.ext(length);\n case 217:\n length = this.view.getUint8(this.offset + 1);\n this.offset += 2;\n return this.str(length);\n case 218:\n length = this.view.getUint16(this.offset + 1);\n this.offset += 3;\n return this.str(length);\n case 219:\n length = this.view.getUint32(this.offset + 1);\n this.offset += 5;\n return this.str(length);\n case 220:\n length = this.view.getUint16(this.offset + 1);\n this.offset += 3;\n return this.array(length);\n case 221:\n length = this.view.getUint32(this.offset + 1);\n this.offset += 5;\n return this.array(length);\n case 222:\n length = this.view.getUint16(this.offset + 1);\n this.offset += 3;\n return this.map(length);\n case 223:\n length = this.view.getUint32(this.offset + 1);\n this.offset += 5;\n return this.map(length);\n }\n throw new Error(\"Unknown type 0x\" + type.toString(16));\n };\n this.offset = offset || 0;\n this.view = view;\n }\n};\nfunction decode2(buffer) {\n const view = new DataView(buffer);\n const decoder = new Decoder(view);\n const value = decoder.parse();\n if (decoder.offset !== buffer.byteLength)\n throw new Error(buffer.byteLength - decoder.offset + \" trailing bytes\");\n return value;\n}\nfunction encodeableKeys(value, sparse) {\n return Object.keys(value).filter(function(e) {\n const val = value[e], type = typeof val;\n return (!sparse || val !== void 0 && val !== null) && (\"function\" !== type || !!val.toJSON);\n });\n}\nfunction _encode(value, view, offset, sparse) {\n const type = typeof value;\n if (typeof value === \"string\") {\n const length = utf8ByteCount(value);\n if (length < 32) {\n view.setUint8(offset, length | 160);\n utf8Write(view, offset + 1, value);\n return 1 + length;\n }\n if (length < 256) {\n view.setUint8(offset, 217);\n view.setUint8(offset + 1, length);\n utf8Write(view, offset + 2, value);\n return 2 + length;\n }\n if (length < 65536) {\n view.setUint8(offset, 218);\n view.setUint16(offset + 1, length);\n utf8Write(view, offset + 3, value);\n return 3 + length;\n }\n if (length < 4294967296) {\n view.setUint8(offset, 219);\n view.setUint32(offset + 1, length);\n utf8Write(view, offset + 5, value);\n return 5 + length;\n }\n }\n if (ArrayBuffer.isView && ArrayBuffer.isView(value)) {\n value = value.buffer;\n }\n if (value instanceof ArrayBuffer) {\n const length = value.byteLength;\n if (length < 256) {\n view.setUint8(offset, 196);\n view.setUint8(offset + 1, length);\n new Uint8Array(view.buffer).set(new Uint8Array(value), offset + 2);\n return 2 + length;\n }\n if (length < 65536) {\n view.setUint8(offset, 197);\n view.setUint16(offset + 1, length);\n new Uint8Array(view.buffer).set(new Uint8Array(value), offset + 3);\n return 3 + length;\n }\n if (length < 4294967296) {\n view.setUint8(offset, 198);\n view.setUint32(offset + 1, length);\n new Uint8Array(view.buffer).set(new Uint8Array(value), offset + 5);\n return 5 + length;\n }\n }\n if (typeof value === \"number\") {\n if (Math.floor(value) !== value) {\n view.setUint8(offset, 203);\n view.setFloat64(offset + 1, value);\n return 9;\n }\n if (value >= 0) {\n if (value < 128) {\n view.setUint8(offset, value);\n return 1;\n }\n if (value < 256) {\n view.setUint8(offset, 204);\n view.setUint8(offset + 1, value);\n return 2;\n }\n if (value < 65536) {\n view.setUint8(offset, 205);\n view.setUint16(offset + 1, value);\n return 3;\n }\n if (value < 4294967296) {\n view.setUint8(offset, 206);\n view.setUint32(offset + 1, value);\n return 5;\n }\n if (value < 18446744073709552e3) {\n view.setUint8(offset, 207);\n setUint64(view, offset + 1, value);\n return 9;\n }\n throw new Error(\"Number too big 0x\" + value.toString(16));\n }\n if (value >= -32) {\n view.setInt8(offset, value);\n return 1;\n }\n if (value >= -128) {\n view.setUint8(offset, 208);\n view.setInt8(offset + 1, value);\n return 2;\n }\n if (value >= -32768) {\n view.setUint8(offset, 209);\n view.setInt16(offset + 1, value);\n return 3;\n }\n if (value >= -2147483648) {\n view.setUint8(offset, 210);\n view.setInt32(offset + 1, value);\n return 5;\n }\n if (value >= -9223372036854776e3) {\n view.setUint8(offset, 211);\n setInt64(view, offset + 1, value);\n return 9;\n }\n throw new Error(\"Number too small -0x\" + (-value).toString(16).substr(1));\n }\n if (type === \"undefined\") {\n if (sparse)\n return 0;\n view.setUint8(offset, 212);\n view.setUint8(offset + 1, 0);\n view.setUint8(offset + 2, 0);\n return 3;\n }\n if (value === null) {\n if (sparse)\n return 0;\n view.setUint8(offset, 192);\n return 1;\n }\n if (type === \"boolean\") {\n view.setUint8(offset, value ? 195 : 194);\n return 1;\n }\n if (\"function\" === typeof value.toJSON)\n return _encode(value.toJSON(), view, offset, sparse);\n if (type === \"object\") {\n let length, size = 0;\n let keys;\n const isArray = Array.isArray(value);\n if (isArray) {\n length = value.length;\n } else {\n keys = encodeableKeys(value, sparse);\n length = keys.length;\n }\n if (length < 16) {\n view.setUint8(offset, length | (isArray ? 144 : 128));\n size = 1;\n } else if (length < 65536) {\n view.setUint8(offset, isArray ? 220 : 222);\n view.setUint16(offset + 1, length);\n size = 3;\n } else if (length < 4294967296) {\n view.setUint8(offset, isArray ? 221 : 223);\n view.setUint32(offset + 1, length);\n size = 5;\n }\n if (isArray) {\n for (let i = 0; i < length; i++) {\n size += _encode(value[i], view, offset + size, sparse);\n }\n } else if (keys) {\n for (let i = 0; i < length; i++) {\n const key = keys[i];\n size += _encode(key, view, offset + size);\n size += _encode(value[key], view, offset + size, sparse);\n }\n }\n return size;\n }\n if (type === \"function\")\n return 0;\n throw new Error(\"Unknown type \" + type);\n}\nfunction sizeof(value, sparse) {\n const type = typeof value;\n if (type === \"string\") {\n const length = utf8ByteCount(value);\n if (length < 32) {\n return 1 + length;\n }\n if (length < 256) {\n return 2 + length;\n }\n if (length < 65536) {\n return 3 + length;\n }\n if (length < 4294967296) {\n return 5 + length;\n }\n }\n if (ArrayBuffer.isView && ArrayBuffer.isView(value)) {\n value = value.buffer;\n }\n if (value instanceof ArrayBuffer) {\n const length = value.byteLength;\n if (length < 256) {\n return 2 + length;\n }\n if (length < 65536) {\n return 3 + length;\n }\n if (length < 4294967296) {\n return 5 + length;\n }\n }\n if (typeof value === \"number\") {\n if (Math.floor(value) !== value)\n return 9;\n if (value >= 0) {\n if (value < 128)\n return 1;\n if (value < 256)\n return 2;\n if (value < 65536)\n return 3;\n if (value < 4294967296)\n return 5;\n if (value < 18446744073709552e3)\n return 9;\n throw new Error(\"Number too big 0x\" + value.toString(16));\n }\n if (value >= -32)\n return 1;\n if (value >= -128)\n return 2;\n if (value >= -32768)\n return 3;\n if (value >= -2147483648)\n return 5;\n if (value >= -9223372036854776e3)\n return 9;\n throw new Error(\"Number too small -0x\" + value.toString(16).substr(1));\n }\n if (type === \"boolean\")\n return 1;\n if (value === null)\n return sparse ? 0 : 1;\n if (value === void 0)\n return sparse ? 0 : 3;\n if (\"function\" === typeof value.toJSON)\n return sizeof(value.toJSON(), sparse);\n if (type === \"object\") {\n let length, size = 0;\n if (Array.isArray(value)) {\n length = value.length;\n for (let i = 0; i < length; i++) {\n size += sizeof(value[i], sparse);\n }\n } else {\n const keys = encodeableKeys(value, sparse);\n length = keys.length;\n for (let i = 0; i < length; i++) {\n const key = keys[i];\n size += sizeof(key) + sizeof(value[key], sparse);\n }\n }\n if (length < 16) {\n return 1 + size;\n }\n if (length < 65536) {\n return 3 + size;\n }\n if (length < 4294967296) {\n return 5 + size;\n }\n throw new Error(\"Array or object too long 0x\" + length.toString(16));\n }\n if (type === \"function\")\n return 0;\n throw new Error(\"Unknown type \" + type);\n}\nvar msgpack_default = {\n encode: encode2,\n decode: decode2,\n inspect,\n utf8Write,\n utf8Read,\n utf8ByteCount\n};\n\n// src/platform/web/lib/http/request/fetchrequest.ts\nfunction isAblyError2(responseBody, headers) {\n return !!headers.get(\"x-ably-errorcode\");\n}\nfunction getAblyError2(responseBody, headers) {\n if (isAblyError2(responseBody, headers)) {\n return responseBody.error && ErrorInfo.fromValues(responseBody.error);\n }\n}\nfunction convertHeaders(headers) {\n const result = {};\n headers.forEach((value, key) => {\n result[key] = value;\n });\n return result;\n}\nasync function fetchRequest(method, client, uri, headers, params, body) {\n const fetchHeaders = new Headers(headers || {});\n const _method = method ? method.toUpperCase() : isNil(body) ? \"GET\" : \"POST\";\n const controller = new AbortController();\n let timeout;\n const timeoutPromise = new Promise((resolve) => {\n timeout = setTimeout(\n () => {\n controller.abort();\n resolve({ error: new PartialErrorInfo(\"Request timed out\", null, 408) });\n },\n client ? client.options.timeouts.httpRequestTimeout : defaults_default.TIMEOUTS.httpRequestTimeout\n );\n });\n const requestInit = {\n method: _method,\n headers: fetchHeaders,\n body,\n signal: controller.signal\n };\n if (!Platform.Config.isWebworker) {\n requestInit.credentials = fetchHeaders.has(\"authorization\") ? \"include\" : \"same-origin\";\n }\n const resultPromise = (async () => {\n try {\n const urlParams = new URLSearchParams(params || {});\n urlParams.set(\"rnd\", cheapRandStr());\n const preparedURI = uri + \"?\" + urlParams;\n const res = await getGlobalObject().fetch(preparedURI, requestInit);\n clearTimeout(timeout);\n if (res.status == 204) {\n return { error: null, statusCode: res.status };\n }\n const contentType = res.headers.get(\"Content-Type\");\n let body2;\n if (contentType && contentType.indexOf(\"application/x-msgpack\") > -1) {\n body2 = await res.arrayBuffer();\n } else if (contentType && contentType.indexOf(\"application/json\") > -1) {\n body2 = await res.json();\n } else {\n body2 = await res.text();\n }\n const unpacked = !!contentType && contentType.indexOf(\"application/x-msgpack\") === -1;\n const headers2 = convertHeaders(res.headers);\n if (!res.ok) {\n const error = getAblyError2(body2, res.headers) || new PartialErrorInfo(\n \"Error response received from server: \" + res.status + \" body was: \" + Platform.Config.inspect(body2),\n null,\n res.status\n );\n return { error, body: body2, headers: headers2, unpacked, statusCode: res.status };\n } else {\n return { error: null, body: body2, headers: headers2, unpacked, statusCode: res.status };\n }\n } catch (error) {\n clearTimeout(timeout);\n return { error };\n }\n })();\n return Promise.race([timeoutPromise, resultPromise]);\n}\n\n// src/platform/web/lib/http/request/index.ts\nvar defaultBundledRequestImplementations = {\n XHRRequest: xhrrequest_default,\n FetchRequest: fetchRequest\n};\n\n// src/platform/web/index.ts\nvar Crypto = createCryptoClass(config_default, bufferutils_default);\nPlatform.Crypto = Crypto;\nPlatform.BufferUtils = bufferutils_default;\nPlatform.Http = http_default;\nPlatform.Config = config_default;\nPlatform.Transports = transport_default2;\nPlatform.WebStorage = webstorage_default;\nfor (const clientClass of [DefaultRest, DefaultRealtime]) {\n clientClass.Crypto = Crypto;\n clientClass._MsgPack = msgpack_default;\n}\nhttp_default.bundledRequestImplementations = defaultBundledRequestImplementations;\nlogger_default.initLogHandlers();\nPlatform.Defaults = getDefaults(defaults_default2);\nif (Platform.Config.agent) {\n Platform.Defaults.agent += \" \" + Platform.Config.agent;\n}\nvar web_default = {\n ErrorInfo,\n Rest: DefaultRest,\n Realtime: DefaultRealtime,\n msgpack: msgpack_default,\n makeProtocolMessageFromDeserialized: makeFromDeserializedWithDependencies\n};\nif (typeof module.exports == \"object\" && typeof exports == \"object\") {\n var __cp = (to, from, except, desc) => {\n if ((from && typeof from === \"object\") || typeof from === \"function\") {\n for (let key of Object.getOwnPropertyNames(from)) {\n if (!Object.prototype.hasOwnProperty.call(to, key) && key !== except)\n Object.defineProperty(to, key, {\n get: () => from[key],\n enumerable: !(desc = Object.getOwnPropertyDescriptor(from, key)) || desc.enumerable,\n });\n }\n }\n return to;\n };\n module.exports = __cp(module.exports, exports);\n}\nreturn module.exports;\n}))\n//# sourceMappingURL=ably.js.map\n",null,null,null],"names":["bind","fn","thisArg","wrap","apply","arguments","toString","Object","prototype","getPrototypeOf","iterator","toStringTag","Symbol","kindOf","cache","thing","str","call","slice","toLowerCase","create","kindOfTest","type","typeOfTest","isArray","Array","isUndefined","isBuffer","val","constructor","isFunction","isArrayBuffer","isArrayBufferView","result","ArrayBuffer","isView","buffer","isString","isNumber","isObject","isBoolean","isPlainObject","isEmptyObject","keys","length","e","isDate","isFile","isBlob","isFileList","isStream","pipe","isFormData","kind","FormData","append","isURLSearchParams","isReadableStream","isRequest","isResponse","isHeaders","map","trim","replace","forEach","obj","allOwnKeys","undefined","i","l","getOwnPropertyNames","len","key","findKey","_key","_global","globalThis","self","window","global","isContextDefined","context","merge","caseless","skipUndefined","assignValue","targetKey","extend","a","b","stripBOM","content","charCodeAt","inherits","superConstructor","props","descriptors","defineProperty","value","assign","toFlatObject","sourceObj","destObj","filter","propFilter","prop","merged","endsWith","searchString","position","String","lastIndex","indexOf","toArray","arr","isTypedArray","TypedArray","Uint8Array","forEachEntry","generator","_iterator","next","done","pair","matchAll","regExp","matches","exec","push","isHTMLForm","toCamelCase","replacer","m","p1","p2","toUpperCase","hasOwnProperty","_ref","isRegExp","reduceDescriptors","reducer","getOwnPropertyDescriptors","reducedDescriptors","descriptor","name","ret","defineProperties","freezeMethods","enumerable","writable","set","Error","toObjectSet","arrayOrString","delimiter","define","split","noop","toFiniteNumber","defaultValue","Number","isFinite","isSpecCompliantForm","toJSONObject","stack","visit","source","target","reducedValue","isAsyncFn","isThenable","then","catch","_setImmediate","setImmediateSupported","postMessageSupported","setImmediate","token","callbacks","addEventListener","_ref2","data","shift","cb","postMessage","concat","Math","random","setTimeout","asap","queueMicrotask","process","nextTick","isIterable","hasOwnProp","AxiosError","message","code","config","request","response","captureStackTrace","status","utils","toJSON","description","number","fileName","lineNumber","columnNumber","from","error","customProps","axiosError","msg","errCode","cause","configurable","isVisitable","removeBrackets","renderKey","path","dots","each","join","isFlatArray","some","predicates","test","toFormData","formData","options","TypeError","metaTokens","indexes","defined","option","visitor","defaultVisitor","_Blob","Blob","useBlob","convertValue","toISOString","Buffer","JSON","stringify","el","index","exposedHelpers","build","pop","encode","charMap","encodeURIComponent","match","AxiosURLSearchParams","params","_pairs","encoder","_encode","buildURL","url","serialize","serializeFn","serializedParams","hashmarkIndex","InterceptorManager","handlers","use","fulfilled","rejected","synchronous","runWhen","eject","id","clear","forEachHandler","h","silentJSONParsing","forcedJSONParsing","clarifyTimeoutError","URLSearchParams","isBrowser","classes","protocols","hasBrowserEnv","document","_navigator","navigator","hasStandardBrowserEnv","product","hasStandardBrowserWebWorkerEnv","WorkerGlobalScope","importScripts","origin","location","href","_objectSpread","platform","toURLEncodedForm","helpers","isNode","parsePropPath","arrayToObject","formDataToJSON","buildPath","isNumericKey","isLast","entries","stringifySafely","rawValue","parser","parse","defaults","transitional","transitionalDefaults","adapter","transformRequest","headers","contentType","getContentType","hasJSONContentType","isObjectPayload","setContentType","formSerializer","_FormData","env","transformResponse","JSONRequested","responseType","strictJSONParsing","parseReviver","ERR_BAD_RESPONSE","timeout","xsrfCookieName","xsrfHeaderName","maxContentLength","maxBodyLength","validateStatus","common","method","ignoreDuplicateOf","rawHeaders","parsed","line","substring","$internals","normalizeHeader","header","normalizeValue","parseTokens","tokens","tokensRE","isValidHeaderName","matchHeaderValue","isHeaderNameFilter","formatHeader","w","char","buildAccessors","accessorName","methodName","arg1","arg2","arg3","AxiosHeaders","valueOrRewrite","rewrite","setHeader","_value","_header","_rewrite","lHeader","setHeaders","parseHeaders","dest","entry","get","has","matcher","delete","deleted","deleteHeader","normalize","format","normalized","_len","targets","asStrings","getSetCookie","first","computed","_len2","_key2","accessor","internals","accessors","defineAccessor","mapped","headerValue","transformData","fns","transform","isCancel","__CANCEL__","CanceledError","ERR_CANCELED","settle","resolve","reject","ERR_BAD_REQUEST","floor","parseProtocol","speedometer","samplesCount","min","bytes","timestamps","head","tail","firstSampleTS","chunkLength","now","Date","startedAt","bytesCount","passed","round","throttle","freq","timestamp","threshold","lastArgs","timer","invoke","args","clearTimeout","throttled","flush","progressEventReducer","listener","isDownloadStream","bytesNotified","_speedometer","loaded","total","lengthComputable","progressBytes","rate","inRange","progress","estimated","event","progressEventDecorator","asyncDecorator","isMSIE","URL","protocol","host","port","userAgent","write","expires","domain","secure","cookie","toGMTString","read","RegExp","decodeURIComponent","remove","isAbsoluteURL","combineURLs","baseURL","relativeURL","buildFullPath","requestedURL","allowAbsoluteUrls","isRelativeUrl","headersToObject","mergeConfig","config1","config2","getMergedValue","mergeDeepProperties","valueFromConfig2","defaultToConfig2","mergeDirectKeys","mergeMap","paramsSerializer","timeoutMessage","withCredentials","withXSRFToken","onUploadProgress","onDownloadProgress","decompress","beforeRedirect","transport","httpAgent","httpsAgent","cancelToken","socketPath","responseEncoding","computeConfigValue","configValue","newConfig","auth","btoa","username","password","unescape","getHeaders","formHeaders","allowedHeaders","includes","isURLSameOrigin","xsrfValue","cookies","isXHRAdapterSupported","XMLHttpRequest","Promise","dispatchXhrRequest","_config","resolveConfig","requestData","requestHeaders","onCanceled","uploadThrottled","downloadThrottled","flushUpload","flushDownload","unsubscribe","signal","removeEventListener","open","onloadend","responseHeaders","getAllResponseHeaders","responseData","responseText","statusText","_resolve","_reject","err","onreadystatechange","handleLoad","readyState","responseURL","onabort","handleAbort","ECONNABORTED","onerror","handleError","ERR_NETWORK","ontimeout","handleTimeout","timeoutErrorMessage","ETIMEDOUT","setRequestHeader","upload","cancel","abort","subscribe","aborted","send","composeSignals","signals","Boolean","controller","AbortController","reason","streamChunk","chunk","chunkSize","byteLength","pos","end","readBytes","_wrapAsyncGenerator","iterable","_iteratorAbruptCompletion","_didIteratorError","_iteratorError","_asyncIterator","readStream","_step","_awaitAsyncGenerator","_asyncGeneratorDelegate","return","_x","_x2","stream","asyncIterator","reader","getReader","_x3","trackStream","onProgress","onFinish","_onFinish","ReadableStream","pull","_asyncToGenerator","close","loadedBytes","enqueue","highWaterMark","DEFAULT_CHUNK_SIZE","globalFetchAPI","Request","Response","TextEncoder","factory","fetch","envFetch","isFetchSupported","isRequestSupported","isResponseSupported","isReadableStreamSupported","encodeText","arrayBuffer","supportsRequestStream","duplexAccessed","hasContentType","body","duplex","supportsResponseStream","resolvers","res","ERR_NOT_SUPPORT","getBodyLength","_ref3","size","_request","resolveBodyLength","_ref4","getContentLength","_x4","_ref5","fetchOptions","_fetch","composedSignal","toAbortSignal","requestContentLength","contentTypeHeader","isCredentialsSupported","resolvedOptions","credentials","isStreamResponse","responseContentLength","_x5","seedCache","Map","getFetch","seeds","seed","knownAdapters","http","httpAdapter","xhr","xhrAdapter","fetchAdapter","renderReason","isResolvedHandle","getAdapter","adapters","nameOrAdapter","rejectedReasons","reasons","state","s","throwIfCancellationRequested","throwIfRequested","dispatchRequest","onAdapterResolution","onAdapterRejection","VERSION","validators","validator","deprecatedWarnings","version","formatMessage","opt","desc","opts","ERR_DEPRECATED","console","warn","spelling","correctSpelling","assertOptions","schema","allowUnknown","ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","Axios","instanceConfig","interceptors","configOrUrl","_this","dummy","boolean","function","baseUrl","withXsrfToken","contextHeaders","requestInterceptorChain","synchronousRequestInterceptors","unshiftRequestInterceptors","interceptor","unshift","responseInterceptorChain","pushResponseInterceptors","promise","chain","onFulfilled","onRejected","getUri","fullPath","forEachMethodNoData","forEachMethodWithData","generateHTTPMethod","isForm","httpMethod","CancelToken","executor","resolvePromise","promiseExecutor","_listeners","onfulfilled","splice","c","spread","callback","isAxiosError","payload","HttpStatusCode","Continue","SwitchingProtocols","Processing","EarlyHints","Ok","Created","Accepted","NonAuthoritativeInformation","NoContent","ResetContent","PartialContent","MultiStatus","AlreadyReported","ImUsed","MultipleChoices","MovedPermanently","Found","SeeOther","NotModified","UseProxy","Unused","TemporaryRedirect","PermanentRedirect","BadRequest","Unauthorized","PaymentRequired","Forbidden","NotFound","MethodNotAllowed","NotAcceptable","ProxyAuthenticationRequired","RequestTimeout","Conflict","Gone","LengthRequired","PreconditionFailed","PayloadTooLarge","UriTooLong","UnsupportedMediaType","RangeNotSatisfiable","ExpectationFailed","ImATeapot","MisdirectedRequest","UnprocessableEntity","Locked","FailedDependency","TooEarly","UpgradeRequired","PreconditionRequired","TooManyRequests","RequestHeaderFieldsTooLarge","UnavailableForLegalReasons","InternalServerError","NotImplemented","BadGateway","ServiceUnavailable","GatewayTimeout","HttpVersionNotSupported","VariantAlsoNegotiates","InsufficientStorage","LoopDetected","NotExtended","NetworkAuthenticationRequired","createInstance","defaultConfig","instance","axios","Cancel","all","promises","formToJSON","default","ApiService","tokenExpiryTime","currentToken","axiosInstance","setupInterceptors","getValidToken","Authorization","_a","_arguments","_this2","forceRefresh","currentTime","getToken","expiresIn","endpoint","_this3","post","_this4","put","_this5","_this6","onError","XHRRequest","xhrrequest_default","FetchRequest","fetchRequest","Crypto","createCryptoClass","config_default","bufferutils_default","Platform","BufferUtils","Http","Config","Transports","transport_default2","WebStorage","webstorage_default","clientClass","DefaultRest","_MsgPack","msgpack_default","http_default","bundledRequestImplementations","defaultBundledRequestImplementations","logger_default","initLogHandlers","Defaults","getDefaults","defaults_default2","agent","web_default","ErrorInfo","ClientAblyService","startConnection","sessionId","ablyToken","onMessageReceived","tenantId","isConnected","stopConnection","client","Ably","authUrl","autoConnect","connection","once","stateChange","joinChannel","roomName","channel","channels","messageContent","_b","senderType","_c","needsAgent","_d","_e","actionType","attachments","_f","attach","messageUnsubscribe","detach","isConnectionActive","getConnectionState","sendMessage","publish","text","metadata","sentAt","TokenService","ok","json","getTokenFunction","requestCache","CACHE_TTL","pendingRequests","initializeAPI","_getValidToken","storedToken","localStorage","getItem","storedExpiry","bufferTime","isTokenExpiring","tokenResponse","setItem","fetchWithAuth","_fetchWithAuth","retry","Headers","timeoutId","mode","newToken","getCachedResponse","cacheKey","cached","ttl","setCachedResponse","getDuplicateRequest","requestKey","setPendingRequest","finally","apiRequest","_apiRequest","duplicateRequest","requestOptions","language","requestPromise","errorMessage","errorResponse","clone","errorData","parseError","errorText"],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AClGDyqB,MAAAA,UAAU,EAAKC,kBAAU;AAEzBC,MAAAA,YAAa,EAAAC,YAAAA;AACb,KAAA,CAAA;;AAEA;AACA,IAAA,IAAAC,MAAqB,GAAAC,iBAAA,CAAAC,cAAA,EAAAC,mBAAA,CAAA,CAAA;IACrBC,QAAA,CAAuBJ,MAAA,GAAAA,MAAA,CAAA;IAEvBI,QAAA,CAAAC;IACAD,QAAA,CAAAE,IAAA,eAAuB,CAAA;IACvBF,QAAA,CAAAG,uBAAyB,CAAA;IACzBH,QAAA,CAAAI,UAAA,GAAAC,kBAAA,CAAA;IAEAL,QAAA,CAAAM,UAAM,GAAAC,kBAAA,CAAA;AAEN,IAAA,KAAA,IAAAC,WAAI,IAAA,CAAAC;MAEJD,WAAQ,CAAAZ,MAAA,GAAAA,MAAA,CAAA;MAERY,WAAW,CAAAE,QAAA,GAAAC,eAAA,CAAA;AAEX,KAAA;IACAC,YAAA,CAAAC,6BAAA,GAAAC,oCAAA,CAAA;AAIAC,IAAAA,cAAM,CAAAC,eAAW,EAAA,CAAA;AAAAhB,IAAAA,QACf,CAAAiB,QAAA,GAAAC,WAAA,CAAAC,iBAAA,CAAA,CAAA;AAAA,IAAA,IACEnB,QAAA,CAAAG,MAAA,CAAAiB,KAAA,EAAA;MACJpB,QAAA,CAAAiB,QAAiB,CAAAG,KAAA,UAAApB,QAAA,CAAAG,MAAA,CAAAiB,KAAA,CAAA;AAAA,KAAA;AACT,IAAA,IACHC,WAAA,GAAA;AACLC,MAAAA,SAAA,EAAAA,WAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;MChDaC,iBAAiB,CAAA;EAO5B,OAAaC,eAAeA,CAACC,SAAiB,EAAEC,SAAiB,EAAEC,iBAA2B,EAAEC,QAAgB,EAAA;AAAA,IAAA,IAAAxK,KAAA,GAAA,IAAA,CAAA;AAAA,IAAA,OAAAjG,iBAAA,CAAA,aAAA;AAC9G;MACA,IAAIiG,KAAI,CAACyK,WAAW,IAAIzK,KAAI,CAACqK,SAAS,KAAKA,SAAS,EAAE;AACpD,QAAA,OAAA;AACF,OAAA;AAEA;MACA,IAAIrK,KAAI,CAACyK,WAAW,IAAIzK,KAAI,CAACqK,SAAS,KAAKA,SAAS,EAAE;AACpD,QAAA,MAAMrK,KAAI,CAAC0K,cAAc,EAAE,CAAA;AAC7B,OAAA;MAEA,IAAI;AACF;AACA1K,QAAAA,KAAI,CAAC2K,MAAM,GAAG,IAAIC,qBAAa,CAAC;AAC9BC,UAAAA,OAAO,EAAEtyB,SAAS;AAClB8G,UAAAA,KAAK,EAAEirB,SAAS;AAChBQ,UAAAA,WAAW,EAAE,IAAA;AACd,SAAA,CAAC,CAAA;AAEF;AACA,QAAA,MAAM,IAAIjW,OAAO,CAAO,CAAChH,OAAO,EAAEC,MAAM,KAAI;AAC1C,UAAA,IAAI,CAACkS,KAAI,CAAC2K,MAAM,EAAE;AAChB7c,YAAAA,MAAM,CAAC,IAAInQ,KAAK,CAAC,kCAAkC,CAAC,CAAC,CAAA;AACrD,YAAA,OAAA;AACF,WAAA;UAEAqiB,KAAI,CAAC2K,MAAM,CAACI,UAAU,CAACC,IAAI,CAAC,WAAW,EAAE,MAAK;YAC5ChL,KAAI,CAACyK,WAAW,GAAG,IAAI,CAAA;YACvBzK,KAAI,CAACqK,SAAS,GAAGA,SAAS,CAAA;AAC1Bxc,YAAAA,OAAO,EAAE,CAAA;AACX,WAAC,CAAC,CAAA;UAEFmS,KAAI,CAAC2K,MAAM,CAACI,UAAU,CAACC,IAAI,CAAC,QAAQ,EAAGC,WAAW,IAAI;;AACpDnd,YAAAA,MAAM,CAAC,IAAInQ,KAAK,CAAA,0BAAA,CAAAkC,MAAA,CAA4B,CAAA,CAAAwnB,EAAA,GAAA4D,WAAW,CAAClT,MAAM,0CAAEvX,OAAO,KAAI,eAAe,CAAE,CAAC,CAAC,CAAA;AAChG,WAAC,CAAC,CAAA;UAEFwf,KAAI,CAAC2K,MAAM,CAACI,UAAU,CAACC,IAAI,CAAC,cAAc,EAAGC,WAAW,IAAI;;AAC1Dnd,YAAAA,MAAM,CAAC,IAAInQ,KAAK,CAAA,gCAAA,CAAAkC,MAAA,CAAkC,CAAA,CAAAwnB,EAAA,GAAA4D,WAAW,CAAClT,MAAM,0CAAEvX,OAAO,KAAI,eAAe,CAAE,CAAC,CAAC,CAAA;AACtG,WAAC,CAAC,CAAA;AAEF;AACAR,UAAAA,UAAU,CAAC,MAAK;AACd,YAAA,IAAI,CAACggB,KAAI,CAACyK,WAAW,EAAE;AACrB3c,cAAAA,MAAM,CAAC,IAAInQ,KAAK,CAAC,yBAAyB,CAAC,CAAC,CAAA;AAC9C,aAAA;WACD,EAAE,KAAK,CAAC,CAAA;AACX,SAAC,CAAC,CAAA;AAEF;QACA,MAAMqiB,KAAI,CAACkL,WAAW,CAACb,SAAS,EAAEE,iBAAiB,EAAEC,QAAQ,CAAC,CAAA;OAC/D,CAAC,OAAOjpB,KAAK,EAAE;QACdye,KAAI,CAACyK,WAAW,GAAG,KAAK,CAAA;QACxBzK,KAAI,CAACqK,SAAS,GAAG,IAAI,CAAA;AACrB,QAAA,MAAM9oB,KAAK,CAAA;AACb,OAAA;AAAC,KAAA,CAAA,EAAA,CAAA;AACH,GAAA;AAEQ,EAAA,OAAa2pB,WAAWA,CAACb,SAAiB,EAAEE,iBAA2B,EAAEC,QAAgB,EAAA;AAAA,IAAA,IAAAjD,MAAA,GAAA,IAAA,CAAA;AAAA,IAAA,OAAAxN,iBAAA,CAAA,aAAA;AAC/F,MAAA,IAAI,CAACwN,MAAI,CAACoD,MAAM,EAAE;AAChB,QAAA,MAAM,IAAIhtB,KAAK,CAAC,6BAA6B,CAAC,CAAA;AAChD,OAAA;MAEA,IAAMwtB,QAAQ,cAAAtrB,MAAA,CAAc2qB,QAAQ,EAAA3qB,GAAAA,CAAAA,CAAAA,MAAA,CAAIwqB,SAAS,CAAE,CAAA;AAEnD;MACA,IAAI9C,MAAI,CAACoD,MAAM,EAAE;AACfpD,QAAAA,MAAI,CAAC6D,OAAO,GAAG7D,MAAI,CAACoD,MAAM,CAACU,QAAQ,CAACvf,GAAG,CAACqf,QAAQ,CAAC,CAAA;AAEjD;QACA5D,MAAI,CAAC6D,OAAO,CAAC7T,SAAS,CAAC,gBAAgB,EAAG/W,OAAO,IAAI;;UACnD,IAAI;YACF,IAAM8qB,cAAc,GAClB,OAAO9qB,OAAO,CAACf,IAAI,KAAK,QAAQ,GAAGe,OAAO,CAACf,IAAI,GAAG,CAAA,CAAA4nB,EAAA,GAAA7mB,OAAO,CAACf,IAAI,0CAAE1F,OAAO,MAAI,CAAAwxB,EAAA,GAAA/qB,OAAO,CAACf,IAAI,MAAE,IAAA,IAAA8rB,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAAA,EAAA,CAAA/qB,OAAO,CAAA,CAAA;YAClG,IAAMgrB,UAAU,GAAG,CAAA,CAAAC,EAAA,GAAAjrB,OAAO,CAACf,IAAI,MAAA,IAAA,IAAAgsB,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAAA,EAAA,CAAED,UAAU,KAAI,CAAC,CAAC;YACjD,IAAME,UAAU,GACd,CAAA,CAAAC,EAAA,GAAAnrB,OAAO,CAACf,IAAI,0CAAEisB,UAAU,KACxB,CAAA,MAAAlrB,OAAO,CAACf,IAAI,MAAE,IAAA,IAAAmsB,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAAA,EAAA,CAAAC,UAAU,KAAI,aAAa,IACzC,KAAK,CAAA;YACP,IAAMC,WAAW,GAAG,CAAA,CAAAC,EAAA,GAAAvrB,OAAO,CAACf,IAAI,MAAE,IAAA,IAAAssB,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAAA,EAAA,CAAAD,WAAW,KAAI,EAAE,CAAA;YAEnDvB,iBAAiB,CAACe,cAAc,EAAEE,UAAU,EAAEE,UAAU,EAAEI,WAAW,CAAC,CAAA;WACvE,CAAC,OAAOvqB,KAAK,EAAE;AACd;AAAA,WAAA;AAEJ,SAAC,CAAC,CAAA;AAEF,QAAA,MAAMgmB,MAAI,CAAC6D,OAAO,CAACY,MAAM,EAAE,CAAA;AAC7B,OAAA;AAAC,KAAA,CAAA,EAAA,CAAA;AACH,GAAA;EAEA,OAAatB,cAAcA,GAAA;AAAA,IAAA,IAAA7C,MAAA,GAAA,IAAA,CAAA;AAAA,IAAA,OAAA9N,iBAAA,CAAA,aAAA;MACzB,IAAI;AACF;QACA,IAAI8N,MAAI,CAACoE,kBAAkB,EAAE;UAC3BpE,MAAI,CAACoE,kBAAkB,EAAE,CAAA;UACzBpE,MAAI,CAACoE,kBAAkB,GAAG,IAAI,CAAA;AAChC,SAAA;AAEA;QACA,IAAIpE,MAAI,CAACuD,OAAO,EAAE;AAChBvD,UAAAA,MAAI,CAACuD,OAAO,CAAC5V,WAAW,EAAE,CAAA;AAC1B,UAAA,MAAMqS,MAAI,CAACuD,OAAO,CAACc,MAAM,EAAE,CAAA;UAC3BrE,MAAI,CAACuD,OAAO,GAAG,IAAI,CAAA;AACrB,SAAA;AAEA;QACA,IAAIvD,MAAI,CAAC8C,MAAM,EAAE;AACf9C,UAAAA,MAAI,CAAC8C,MAAM,CAAC3Q,KAAK,EAAE,CAAA;UACnB6N,MAAI,CAAC8C,MAAM,GAAG,IAAI,CAAA;AACpB,SAAA;QAEA9C,MAAI,CAAC4C,WAAW,GAAG,KAAK,CAAA;QACxB5C,MAAI,CAACwC,SAAS,GAAG,IAAI,CAAA;OACtB,CAAC,OAAO9oB,KAAK,EAAE;AACd;QACAsmB,MAAI,CAAC4C,WAAW,GAAG,KAAK,CAAA;QACxB5C,MAAI,CAACwC,SAAS,GAAG,IAAI,CAAA;QACrBxC,MAAI,CAAC8C,MAAM,GAAG,IAAI,CAAA;QAClB9C,MAAI,CAACuD,OAAO,GAAG,IAAI,CAAA;QACnBvD,MAAI,CAACoE,kBAAkB,GAAG,IAAI,CAAA;AAChC,OAAA;AAAC,KAAA,CAAA,EAAA,CAAA;AACH,GAAA;EAEA,OAAOE,kBAAkBA,GAAA;;AACvB,IAAA,OAAO,IAAI,CAAC1B,WAAW,IAAI,CAAA,CAAApD,EAAA,GAAA,IAAI,CAACsD,MAAM,0CAAEI,UAAU,CAAC7M,KAAK,MAAK,WAAW,CAAA;AAC1E,GAAA;EAEA,OAAOkO,kBAAkBA,GAAA;;IACvB,OAAO,CAAA,CAAA/E,EAAA,GAAA,IAAI,CAACsD,MAAM,MAAE,IAAA,IAAAtD,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAAA,EAAA,CAAA0D,UAAU,CAAC7M,KAAK,KAAI,cAAc,CAAA;AACxD,GAAA;AAEA;EACA,OAAamO,WAAWA,CAACf,cAAsB,EAAwB;IAAA,IAAAhE,UAAA,GAAA7yB,SAAA;MAAAszB,MAAA,GAAA,IAAA,CAAA;AAAA,IAAA,OAAAhO,iBAAA,CAAA,aAAA;AAAA,MAAA,IAAtByR,oFAAqB,CAAC,CAAA;MACrE,IAAI,CAACzD,MAAI,CAACqD,OAAO,IAAI,CAACrD,MAAI,CAAC0C,WAAW,EAAE;AACtC,QAAA,MAAM,IAAI9sB,KAAK,CAAC,uBAAuB,CAAC,CAAA;AAC1C,OAAA;MAEA,IAAI;AACF,QAAA,MAAMoqB,MAAI,CAACqD,OAAO,CAACkB,OAAO,CAAC,SAAS,EAAE;AACpCC,UAAAA,IAAI,EAAEjB,cAAc;AACpBkB,UAAAA,QAAQ,EAAE;YACRhB,UAAU;AACViB,YAAAA,MAAM,EAAE,IAAI7d,IAAI,EAAE,CAACrL,WAAW,EAAE;AACjC,WAAA;AACF,SAAA,CAAC,CAAA;OACH,CAAC,OAAOhC,KAAK,EAAE;AACd,QAAA,MAAMA,KAAK,CAAA;AACb,OAAA;AAAC,KAAA,CAAA,EAAA,CAAA;AACH,GAAA;;AA1Je4oB,iBAAM,CAAAQ,MAAA,GAAyB,IAAI,CAAA;AACnCR,iBAAO,CAAAiB,OAAA,GAAgC,IAAI,CAAA;AAC3CjB,iBAAW,CAAAM,WAAA,GAAY,KAAK,CAAA;AAC5BN,iBAAS,CAAAE,SAAA,GAAkB,IAAI,CAAA;AAC/BF,iBAAkB,CAAA8B,kBAAA,GAAwB,IAAI;;MCFlDS,YAAY,CAAA;EAGvBz2B,WAAAA,CAAYmqB,OAAe,EAAA;IACzB,IAAI,CAACA,OAAO,GAAGA,OAAO,CAAA;AACxB,GAAA;AAEMsH,EAAAA,QAAQA,GAAA;AAAA,IAAA,IAAA1H,KAAA,GAAA,IAAA,CAAA;AAAA,IAAA,OAAAjG,iBAAA,CAAA,aAAA;MACZ,IAAI;QACF,IAAMnZ,QAAQ,SAAS8Z,KAAK,CAAA,EAAA,CAAA7a,MAAA,CAAImgB,KAAI,CAACI,OAAO,EAAkC,gCAAA,CAAA,EAAA;AAC5E3W,UAAAA,MAAM,EAAE,MAAM;AACdtB,UAAAA,OAAO,EAAE;AACP,YAAA,cAAc,EAAE,kBAAA;AACjB,WAAA;AACF,SAAA,CAAC,CAAA;AAEF,QAAA,IAAI,CAACvH,QAAQ,CAAC+rB,EAAE,EAAE;AAChB,UAAA,MAAM,IAAIhvB,KAAK,CAAC,uBAAuB,CAAC,CAAA;AAC1C,SAAA;AAEA,QAAA,IAAM8B,IAAI,GAASmB,MAAAA,QAAQ,CAACgsB,IAAI,EAAE,CAAA;QAClC,OAAO;UACLvtB,KAAK,EAAEI,IAAI,CAACJ,KAAK;AACjBsoB,UAAAA,SAAS,EAAEloB,IAAI,CAACkoB,SAAS,IAAI,IAAI;SAClC,CAAA;OACF,CAAC,OAAOpmB,KAAK,EAAE;AACd,QAAA,MAAM,IAAI5D,KAAK,CAAC,oCAAoC,CAAC,CAAA;AACvD,OAAA;AAAC,KAAA,CAAA,EAAA,CAAA;AACH,GAAA;AACD;;AChCD,IAAIkvB,gBAAgB,GAA+Ct0B,SAAS,CAAA;AAC5E,IAAI6nB,OAAO,GAAkB,IAAI,CAAA;AAEjC;AACA,IAAM0M,YAAY,GAAG,IAAI7P,GAAG,EAAyD,CAAA;AACrF,IAAM8P,SAAS,GAAG,KAAK,CAAC;AACxB,IAAMC,eAAe,GAAG,IAAI/P,GAAG,EAAwB,CAAA;AAEvC,SAAAgQ,aAAaA,CAACvoB,GAAW,EAAEgjB,QAAsC,EAAA;AAC/EmF,EAAAA,gBAAgB,GAAGnF,QAAQ,CAAA;AAC3BtH,EAAAA,OAAO,GAAG1b,GAAG,CAAA;AACf,CAAA;AAEA,SAAsByiB,aAAaA,GAAA;AAAA,EAAA,OAAA+F,cAAA,CAAA14B,KAAA,CAAA,IAAA,EAAAC,SAAA,CAAA,CAAA;AAAA,CAAA;AA6BnC;AAAA,SAAAy4B,cAAA,GAAA;EAAAA,cAAA,GAAAnT,iBAAA,CA7BO,aAAiD;AAAA,IAAA,IAApByN,YAAY,GAAA/yB,SAAA,CAAAuC,MAAA,GAAA,CAAA,IAAAvC,SAAA,CAAA,CAAA,CAAA,KAAA8D,SAAA,GAAA9D,SAAA,CAAA,CAAA,CAAA,GAAG,KAAK,CAAA;;IACtD,IAAI,CAACo4B,gBAAgB,EAAE;AACrB,MAAA,MAAM,IAAIlvB,KAAK,CAAC,iEAAiE,CAAC,CAAA;AACpF,KAAA;AAEA,IAAA,IAAIwvB,WAAW,GAAGC,YAAY,CAACC,OAAO,CAAC,eAAe,CAAC,CAAA;AACvD,IAAA,IAAIC,YAAY,GAAGF,YAAY,CAACC,OAAO,CAAC,sBAAsB,CAAC,CAAA;AAC/D,IAAA,IAAM5F,WAAW,GAAG3nB,IAAI,CAACkO,KAAK,CAACY,IAAI,CAACD,GAAG,EAAE,GAAG,IAAI,CAAC,CAAA;AAEjD;AACA,IAAA,IAAM4e,UAAU,GAAG,EAAE,CAAC;IACtB,IAAMC,eAAe,GAAGF,YAAY,IAAI7F,WAAW,IAAIrpB,MAAM,CAACkvB,YAAY,CAAC,GAAGC,UAAU,CAAA;IAExF,IAAI,CAACJ,WAAW,IAAI,CAACG,YAAY,IAAIE,eAAe,IAAIhG,YAAY,EAAE;MACpE,IAAI;AACF,QAAA,IAAMiG,aAAa,GAAA,MAASZ,gBAAgB,EAAE,CAAA;QAC9CM,WAAW,GAAGM,aAAa,CAACpuB,KAAK,CAAA;QACjCiuB,YAAY,GAAGpyB,MAAM,CAACusB,WAAW,IAAI,CAAAJ,EAAA,GAAAoG,aAAa,CAAC9F,SAAS,MAAA,IAAA,IAAAN,EAAA,KAAA,KAAA,CAAA,GAAAA,EAAA,GAAI,GAAG,CAAC,CAAC,CAAA;AAErE+F,QAAAA,YAAY,CAACM,OAAO,CAAC,eAAe,EAAEP,WAAW,CAAC,CAAA;AAClDC,QAAAA,YAAY,CAACM,OAAO,CAAC,sBAAsB,EAAEJ,YAAY,CAAC,CAAA;OAC3D,CAAC,OAAO/rB,KAAK,EAAE;AACd,QAAA,MAAMA,KAAK,CAAA;AACb,OAAA;AACF,KAAA;AAEA,IAAA,OAAO4rB,WAAW,CAAA;GACnB,CAAA,CAAA;AAAA,EAAA,OAAAD,cAAA,CAAA14B,KAAA,CAAA,IAAA,EAAAC,SAAA,CAAA,CAAA;AAAA,CAAA;AAAA,SAGck5B,aAAaA,CAAAzU,EAAA,EAAAC,GAAA,EAAA;AAAA,EAAA,OAAAyU,cAAA,CAAAp5B,KAAA,CAAA,IAAA,EAAAC,SAAA,CAAA,CAAA;AAAA,CAqD5B;AAAA,SAAAm5B,cAAA,GAAA;AAAAA,EAAAA,cAAA,GAAA7T,iBAAA,CArDA,WAA6BrV,GAAW,EAAE/B,OAAoB,EAAc;AAAA,IAAA,IAAZkrB,KAAK,GAAAp5B,SAAA,CAAAuC,MAAA,GAAA,CAAA,IAAAvC,SAAA,CAAA,CAAA,CAAA,KAAA8D,SAAA,GAAA9D,SAAA,CAAA,CAAA,CAAA,GAAG,IAAI,CAAA;IAC1E,IAAM0T,OAAO,GAAG,IAAI2lB,OAAO,CAACnrB,OAAO,CAACwF,OAAO,CAAC,CAAA;IAE5C,IAAI;AACF,MAAA,IAAM9I,KAAK,GAAA,MAAS8nB,aAAa,EAAE,CAAA;MACnChf,OAAO,CAACzK,GAAG,CAAC,eAAe,YAAAmC,MAAA,CAAYR,KAAK,CAAE,CAAC,CAAA;AAE/C;AACA8I,MAAAA,OAAO,CAACzK,GAAG,CAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAA;AACzCyK,MAAAA,OAAO,CAACzK,GAAG,CAAC,iBAAiB,EAAE,mBAAmB,CAAC,CAAA;AACnDyK,MAAAA,OAAO,CAACzK,GAAG,CAAC,YAAY,EAAE,YAAY,CAAC,CAAA;MAEvCiF,OAAO,CAACwF,OAAO,GAAGA,OAAO,CAAA;AAEzB;AACA,MAAA,IAAM0P,UAAU,GAAG,IAAIC,eAAe,EAAE,CAAA;AACxC,MAAA,IAAMiW,SAAS,GAAG/tB,UAAU,CAAC,MAAM6X,UAAU,CAACP,KAAK,EAAE,EAAE,KAAK,CAAC,CAAC;MAE9D,IAAI;QACF,IAAM1W,QAAQ,GAAS8Z,MAAAA,KAAK,CAAChW,GAAG,EAAAoC,cAAA,CAAAA,cAAA,CAAA,EAAA,EAC3BnE,OAAO,CAAA,EAAA,EAAA,EAAA;UACV8S,MAAM,EAAEoC,UAAU,CAACpC,MAAM;AACzB;AACAvgB,UAAAA,KAAK,EAAE,UAAU;AACjB84B,UAAAA,IAAI,EAAE,MAAA;AAAM,SAAA,CACb,CAAC,CAAA;QAEFve,YAAY,CAACse,SAAS,CAAC,CAAA;AAEvB;AACA,QAAA,IAAI,CAACntB,QAAQ,CAACE,MAAM,KAAK,GAAG,IAAIF,QAAQ,CAACE,MAAM,KAAK,GAAG,KAAK+sB,KAAK,EAAE;AACjE,UAAA,IAAMI,QAAQ,GAAA,MAAS9G,aAAa,CAAC,IAAI,CAAC,CAAA;UAC1Chf,OAAO,CAACzK,GAAG,CAAC,eAAe,YAAAmC,MAAA,CAAYouB,QAAQ,CAAE,CAAC,CAAA;UAClDtrB,OAAO,CAACwF,OAAO,GAAGA,OAAO,CAAA;AAEzB;AACA,UAAA,OAAOwlB,aAAa,CAACjpB,GAAG,EAAE/B,OAAO,EAAE,KAAK,CAAC,CAAA;AAC3C,SAAA;AAEA,QAAA,OAAO/B,QAAQ,CAAA;OAChB,CAAC,OAAOW,KAAK,EAAE;QACdkO,YAAY,CAACse,SAAS,CAAC,CAAA;QAEvB,IAAIxsB,KAAK,YAAY5D,KAAK,IAAI4D,KAAK,CAACnE,IAAI,KAAK,YAAY,EAAE;AACzD,UAAA,MAAM,IAAIO,KAAK,CAAC,oCAAoC,CAAC,CAAA;AACvD,SAAA;AACA,QAAA,MAAM4D,KAAK,CAAA;AACb,OAAA;KACD,CAAC,OAAOA,KAAK,EAAE;AACd,MAAA,MAAMA,KAAK,CAAA;AACb,KAAA;GACD,CAAA,CAAA;AAAA,EAAA,OAAAqsB,cAAA,CAAAp5B,KAAA,CAAA,IAAA,EAAAC,SAAA,CAAA,CAAA;AAAA,CAAA;AAGD,SAASy5B,iBAAiBA,CAACC,QAAgB,EAAA;AACzC,EAAA,IAAMC,MAAM,GAAGtB,YAAY,CAAChhB,GAAG,CAACqiB,QAAQ,CAAC,CAAA;AACzC,EAAA,IAAIC,MAAM,IAAIxf,IAAI,CAACD,GAAG,EAAE,GAAGyf,MAAM,CAACjf,SAAS,GAAGif,MAAM,CAACC,GAAG,EAAE;IACxD,OAAOD,MAAM,CAAC3uB,IAAI,CAAA;AACpB,GAAA;AAEA,EAAA,IAAI2uB,MAAM,EAAE;AACVtB,IAAAA,YAAY,CAAC7gB,MAAM,CAACkiB,QAAQ,CAAC,CAAA;AAC/B,GAAA;AAEA,EAAA,OAAO,IAAI,CAAA;AACb,CAAA;AAEA,SAASG,iBAAiBA,CAACH,QAAgB,EAAE1uB,IAAS,EAAyB;AAAA,EAAA,IAAvB4uB,0EAActB,SAAS,CAAA;AAC7ED,EAAAA,YAAY,CAACpvB,GAAG,CAACywB,QAAQ,EAAE;IACzB1uB,IAAI;AACJ0P,IAAAA,SAAS,EAAEP,IAAI,CAACD,GAAG,EAAE;AACrB0f,IAAAA,GAAAA;AACD,GAAA,CAAC,CAAA;AACJ,CAAA;AAEA;AACA,SAASE,mBAAmBA,CAACC,UAAkB,EAAA;AAC7C,EAAA,OAAOxB,eAAe,CAAClhB,GAAG,CAAC0iB,UAAU,CAAC,IAAI,IAAI,CAAA;AAChD,CAAA;AAEA,SAASC,iBAAiBA,CAACD,UAAkB,EAAE1N,OAAqB,EAAA;AAClEkM,EAAAA,eAAe,CAACtvB,GAAG,CAAC8wB,UAAU,EAAE1N,OAAO,CAAC,CAAA;AAExC;EACAA,OAAO,CAAC4N,OAAO,CAAC,MAAK;AACnB1B,IAAAA,eAAe,CAAC/gB,MAAM,CAACuiB,UAAU,CAAC,CAAA;AACpC,GAAC,CAAC,CAAA;AACJ,CAAA;AAEsBG,SAAAA,UAAUA,CAAAnV,GAAA,EAAA;AAAA,EAAA,OAAAoV,WAAA,CAAAp6B,KAAA,CAAA,IAAA,EAAAC,SAAA,CAAA,CAAA;AAAA,CAAA;AAiF/B,SAAAm6B,WAAA,GAAA;AAAAA,EAAAA,WAAA,GAAA7U,iBAAA,CAjFM,WACL6N,QAAgB,EAGgD;AAAA,IAAA,IAFhEne,MAAM,GAAAhV,SAAA,CAAAuC,MAAA,GAAA,CAAA,IAAAvC,SAAA,CAAA,CAAA,CAAA,KAAA8D,SAAA,GAAA9D,SAAA,CAAA,CAAA,CAAA,GAAG,KAAK,CAAA;AAAA,IAAA,IACd4mB,IAAY,GAAA5mB,SAAA,CAAAuC,MAAA,GAAA,CAAA,IAAAvC,SAAA,CAAA,CAAA,CAAA,KAAA8D,SAAA,GAAA9D,SAAA,CAAA,CAAA,CAAA,GAAA,IAAI,CAAA;IAAA,IAChBkO,OAAgE,GAAAlO,SAAA,CAAAuC,MAAA,GAAAvC,CAAAA,GAAAA,SAAA,MAAA8D,SAAA,CAAA;IAEhE,IAAI,CAAC6nB,OAAO,EAAE,MAAM,IAAIziB,KAAK,CAAC,qBAAqB,CAAC,CAAA;IAEpD,IAAM+G,GAAG,MAAA7E,MAAA,CAAMugB,OAAO,EAAAvgB,GAAAA,CAAAA,CAAAA,MAAA,CAAI+nB,QAAQ,CAAE,CAAA;AACpC,IAAA,IAAM4G,UAAU,GAAA3uB,EAAAA,CAAAA,MAAA,CAAM4J,MAAM,EAAA,GAAA,CAAA,CAAA5J,MAAA,CAAI+nB,QAAQ,EAAA/nB,GAAAA,CAAAA,CAAAA,MAAA,CAAI4D,IAAI,CAACC,SAAS,CAAC2X,IAAI,CAAC,CAAE,CAAA;AAElE;AACA,IAAA,IAAMwT,gBAAgB,GAAGN,mBAAmB,CAACC,UAAU,CAAC,CAAA;AACxD,IAAA,IAAIK,gBAAgB,EAAE;AACpB,MAAA,OAAOA,gBAAgB,CAAA;AACzB,KAAA;AAEA;AACA,IAAA,IAAIplB,MAAM,KAAK,KAAK,IAAI9G,OAAO,CAACzN,KAAK,KAAK,KAAK,IAAI,CAAC0yB,QAAQ,CAACrT,QAAQ,CAAC,eAAe,CAAC,EAAE;AACtF,MAAA,IAAM6Z,MAAM,GAAGF,iBAAiB,CAACM,UAAU,CAAC,CAAA;AAC5C,MAAA,IAAIJ,MAAM,EAAE;AACV,QAAA,OAAOvZ,OAAO,CAAChH,OAAO,CAACugB,MAAM,CAAC,CAAA;AAChC,OAAA;AACF,KAAA;AAEA,IAAA,IAAMU,cAAc,GAAgB;MAClCrlB,MAAM;AACNtB,MAAAA,OAAO,EAAE;AACP,QAAA,cAAc,EAAE,kBAAkB;AAClC,QAAA,eAAe,EAAEsB,MAAM,KAAK,KAAK,GAAG,YAAY,GAAG,UAAU;QAC7D,iBAAiB,EAAE9G,OAAO,CAACosB,QAAAA;OAC5B;MACD1T,IAAI,EAAEA,IAAI,GAAG5X,IAAI,CAACC,SAAS,CAAC2X,IAAI,CAAC,GAAG,IAAA;KACrC,CAAA;AAED,IAAA,IAAM2T,cAAc,GAAGjV,iBAAA,CAAC,aAAW;MACjC,IAAI;AACF,QAAA,IAAMnZ,QAAQ,GAAS+sB,MAAAA,aAAa,CAACjpB,GAAG,EAAEoqB,cAAc,CAAC,CAAA;AAEzD,QAAA,IAAI,CAACluB,QAAQ,CAAC+rB,EAAE,EAAE;UAChB,IAAIsC,YAAY,GAAG,oBAAoB,CAAA;UAEvC,IAAI;AACF;AACA,YAAA,IAAMC,aAAa,GAAGtuB,QAAQ,CAACuuB,KAAK,EAAE,CAAA;AACtC,YAAA,IAAMC,SAAS,GAASF,MAAAA,aAAa,CAACtC,IAAI,EAAE,CAAA;YAC5CqC,YAAY,GAAGG,SAAS,CAAC5uB,OAAO,IAAI4uB,SAAS,CAAC7tB,KAAK,IAAI0tB,YAAY,CAAA;WACpE,CAAC,OAAOI,UAAU,EAAE;AACnB;YACA,IAAI;AACF,cAAA,IAAMH,cAAa,GAAGtuB,QAAQ,CAACuuB,KAAK,EAAE,CAAA;AACtC,cAAA,IAAMG,SAAS,GAASJ,MAAAA,cAAa,CAAC3C,IAAI,EAAE,CAAA;AAC5C0C,cAAAA,YAAY,GAAGK,SAAS,IAAAzvB,OAAAA,CAAAA,MAAA,CAAYe,QAAQ,CAACE,MAAM,EAAA,IAAA,CAAA,CAAAjB,MAAA,CAAKe,QAAQ,CAACqV,UAAU,CAAE,CAAA;aAC9E,CAAC,OAAAoR,EAAA,EAAM;AACN4H,cAAAA,YAAY,GAAApvB,OAAAA,CAAAA,MAAA,CAAWe,QAAQ,CAACE,MAAM,EAAAjB,IAAAA,CAAAA,CAAAA,MAAA,CAAKe,QAAQ,CAACqV,UAAU,CAAE,CAAA;AAClE,aAAA;AACF,WAAA;AAEA,UAAA,MAAM,IAAItY,KAAK,CAACsxB,YAAY,CAAC,CAAA;AAC/B,SAAA;AAEA;AACA;QACA,IAAIxlB,MAAM,KAAK,KAAK,IAAI9G,OAAO,CAACzN,KAAK,KAAK,KAAK,EAAE;AAC/C,UAAA,IAAM6gB,YAAY,GAAGnV,QAAQ,CAACuuB,KAAK,EAAE,CAAA;AACrC,UAAA,IAAM1vB,IAAI,GAASsW,MAAAA,YAAY,CAAC6W,IAAI,EAAE,CAAA;UACtC0B,iBAAiB,CAACE,UAAU,EAAE;AAAE5B,YAAAA,IAAI,EAAEA,MAAM/X,OAAO,CAAChH,OAAO,CAACpO,IAAI,CAAA;AAAC,WAAE,CAAC,CAAA;AACtE,SAAA;AAEA;AACA;AACA,QAAA,OAAOmB,QAAQ,CAAA;OAChB,CAAC,OAAOW,KAAK,EAAE;AACd,QAAA,MAAMA,KAAK,CAAA;AACb,OAAA;AACF,KAAC,GAAG,CAAA;AAEJ;AACAktB,IAAAA,iBAAiB,CAACD,UAAU,EAAEQ,cAAc,CAAC,CAAA;AAE7C,IAAA,OAAOA,cAAc,CAAA;GACtB,CAAA,CAAA;AAAA,EAAA,OAAAJ,WAAA,CAAAp6B,KAAA,CAAA,IAAA,EAAAC,SAAA,CAAA,CAAA;AAAA;;;;;;;;;"}
|