{"version":3,"file":"web-sockets-5XINcFNa.js","sources":["../../../node_modules/ably/build/ably.js","../../../app/javascript/entrypoints/application/web-sockets.ts"],"sourcesContent":["/*@license Copyright 2015-2022 Ably Real-time Ltd (ably.com)\n\nAbly JavaScript Library v2.6.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 msgpack: () => msgpack_default,\n protocolMessageFromDeserialized: () => fromDeserializedIncludingDependencies\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 arrSubtract: () => arrSubtract,\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 arrSubtract(arr1, arr2) {\n const result = [];\n for (let i = 0; i < arr1.length; i++) {\n const element = arr1[i];\n if (arr2.indexOf(element) == -1)\n result.push(element);\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 throw new Error(\"Expected input of Utils.dataSizeBytes to be a buffer or string, but was: \" + typeof data);\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.6.0\";\n\n// src/common/lib/util/defaults.ts\nvar agent = \"ably-js/\" + version;\nvar Defaults = {\n ENVIRONMENT: \"\",\n REST_HOST: \"rest.ably.io\",\n REALTIME_HOST: \"realtime.ably.io\",\n FALLBACK_HOSTS: [\n \"A.ably-realtime.com\",\n \"B.ably-realtime.com\",\n \"C.ably-realtime.com\",\n \"D.ably-realtime.com\",\n \"E.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: 3,\n agent,\n getHost,\n getPort,\n getHttpScheme,\n environmentFallbackHosts,\n getFallbackHosts,\n getHosts,\n checkHost,\n objectifyOptions,\n normaliseOptions,\n defaultGetHeaders,\n defaultPostHeaders\n};\nfunction getHost(options, host, ws) {\n if (ws)\n host = host == options.restHost && options.realtimeHost || host || options.realtimeHost;\n else\n host = host || options.restHost;\n return host;\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 environmentFallbackHosts(environment) {\n return [\n environment + \"-a-fallback.ably-realtime.com\",\n environment + \"-b-fallback.ably-realtime.com\",\n environment + \"-c-fallback.ably-realtime.com\",\n environment + \"-d-fallback.ably-realtime.com\",\n environment + \"-e-fallback.ably-realtime.com\"\n ];\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, ws) {\n const hosts = [options.restHost].concat(getFallbackHosts(options));\n return ws ? hosts.map((host) => getHost(options, host, true)) : hosts;\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 getRealtimeHost(options, production, environment, logger) {\n if (options.realtimeHost)\n return options.realtimeHost;\n if (options.restHost) {\n logger_default.logAction(\n logger,\n logger_default.LOG_MINOR,\n \"Defaults.normaliseOptions\",\n 'restHost is set to \"' + options.restHost + '\" but realtimeHost is not set, so setting realtimeHost to \"' + options.restHost + '\" too. If this is not what you want, please set realtimeHost explicitly.'\n );\n return options.restHost;\n }\n return production ? Defaults.REALTIME_HOST : environment + \"-\" + Defaults.REALTIME_HOST;\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 normaliseOptions(options, MsgPack, logger) {\n const loggerToUse = logger != null ? logger : logger_default.defaultLogger;\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 environment = options.environment && String(options.environment).toLowerCase() || Defaults.ENVIRONMENT;\n const production = !environment || environment === \"production\";\n if (!options.fallbackHosts && !options.restHost && !options.realtimeHost && !options.port && !options.tlsPort) {\n options.fallbackHosts = production ? Defaults.FALLBACK_HOSTS : environmentFallbackHosts(environment);\n }\n const restHost = options.restHost || (production ? Defaults.REST_HOST : environment + \"-\" + Defaults.REST_HOST);\n const realtimeHost = getRealtimeHost(options, production, environment, loggerToUse);\n (options.fallbackHosts || []).concat(restHost, realtimeHost).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 realtimeHost,\n restHost,\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 /**\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 || this.authOptions.queryTime)) {\n return this.client.time();\n } else {\n return this.getTimestampUsingOffset();\n }\n }\n getTimestampUsingOffset() {\n return Date.now() + (this.client.serverTimeOffset || 0);\n }\n isTimeOffsetSet() {\n return this.client.serverTimeOffset !== null;\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.isTimeOffsetSet() || !token.expires || token.expires >= this.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};\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/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 var _a2, _b, _c, _d, _e, _f, _g, _h;\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 }\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 get 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};\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 const self2 = this;\n if (relParams) {\n if (\"first\" in relParams) {\n this.first = async function() {\n return self2.get(relParams.first);\n };\n }\n if (\"current\" in relParams) {\n this.current = async function() {\n return self2.get(relParams.current);\n };\n }\n this.next = async function() {\n if (\"next\" in relParams) {\n return self2.get(relParams.next);\n } else {\n return null;\n }\n };\n this.hasNext = function() {\n return \"next\" in relParams;\n };\n this.isLast = () => {\n var _a2;\n return !((_a2 = this.hasNext) == null ? void 0 : _a2.call(this));\n };\n }\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/message.ts\nvar MessageActionArray = [\n \"message.unset\",\n \"message.create\",\n \"message.update\",\n \"message.delete\",\n \"annotation.create\",\n \"annotation.delete\",\n \"meta.occupancy\"\n];\nvar MessageActionMap = new Map(MessageActionArray.map((action, index) => [action, index]));\nvar ReverseMessageActionMap = new Map(\n MessageActionArray.map((action, index) => [index, action])\n);\nfunction toMessageActionString(actionNumber) {\n return ReverseMessageActionMap.get(actionNumber);\n}\nfunction toMessageActionNumber(messageAction) {\n return messageAction ? MessageActionMap.get(messageAction) : void 0;\n}\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}\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 fromEncoded(logger, Crypto2, encoded, inputOptions) {\n const msg = fromWireProtocol(encoded);\n const options = normalizeCipherOptions(Crypto2, logger, inputOptions != null ? inputOptions : null);\n try {\n await decode(msg, options);\n } catch (e) {\n logger_default.logAction(logger, logger_default.LOG_ERROR, \"Message.fromEncoded()\", e.toString());\n }\n return msg;\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 const msg = fromWireProtocol(encoded);\n try {\n await decode(msg, channel.channelOptions);\n } catch (e) {\n logger_default.logAction(channel.logger, logger_default.LOG_ERROR, \"Message._fromEncoded()\", e.toString());\n }\n return msg;\n}\nasync function _fromEncodedArray(encodedArray, channel) {\n return Promise.all(\n encodedArray.map(function(encoded) {\n return _fromEncoded(encoded, channel);\n })\n );\n}\nasync function encrypt(msg, options) {\n let data = msg.data, encoding = msg.encoding, cipher = options.channelCipher;\n encoding = encoding ? encoding + \"/\" : \"\";\n if (!Platform.BufferUtils.isBuffer(data)) {\n data = Platform.BufferUtils.utf8Encode(String(data));\n encoding = encoding + \"utf-8/\";\n }\n const ciphertext = await cipher.encrypt(data);\n msg.data = ciphertext;\n msg.encoding = encoding + \"cipher+\" + cipher.algorithm;\n return msg;\n}\nasync function encode(msg, options) {\n const data = msg.data;\n const nativeDataType = typeof data == \"string\" || Platform.BufferUtils.isBuffer(data) || data === null || data === void 0;\n if (!nativeDataType) {\n if (isObject(data) || Array.isArray(data)) {\n msg.data = JSON.stringify(data);\n msg.encoding = msg.encoding ? msg.encoding + \"/json\" : \"json\";\n } else {\n throw new ErrorInfo(\"Data type is unsupported\", 40013, 400);\n }\n }\n if (options != null && options.cipher) {\n return encrypt(msg, options);\n } else {\n return msg;\n }\n}\nasync function encodeArray(messages, options) {\n return Promise.all(messages.map((message) => encode(message, options)));\n}\nvar serialize = encodeBody;\nasync function decode(message, inputContext) {\n const context = normaliseContext(inputContext);\n let lastPayload = message.data;\n const encoding = message.encoding;\n if (encoding) {\n const xforms = encoding.split(\"/\");\n let lastProcessedEncodingIndex, encodingsToProcess = xforms.length, data = message.data;\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 data = Platform.BufferUtils.base64Decode(String(data));\n if (lastProcessedEncodingIndex == xforms.length) {\n lastPayload = data;\n }\n continue;\n case \"utf-8\":\n data = Platform.BufferUtils.utf8Decode(data);\n continue;\n case \"json\":\n data = JSON.parse(data);\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 data = await cipher.decrypt(data);\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 data = Platform.BufferUtils.toBuffer(data);\n data = Platform.BufferUtils.arrayBufferViewToBuffer(context.plugins.vcdiff.decode(data, deltaBaseBuffer));\n lastPayload = data;\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 throw new ErrorInfo(\n \"Error processing the \" + xform + \" encoding, decoder returned \\u2018\" + err.message + \"\\u2019\",\n err.code || 40013,\n 400\n );\n } finally {\n message.encoding = lastProcessedEncodingIndex <= 0 ? null : xforms.slice(0, lastProcessedEncodingIndex).join(\"/\");\n message.data = data;\n }\n }\n context.baseEncodedPreviousPayload = lastPayload;\n}\nfunction fromValues(values) {\n return Object.assign(new Message(), values);\n}\nfunction fromWireProtocol(values) {\n const action = toMessageActionString(values.action) || values.action;\n const res = Object.assign(new Message(), __spreadProps(__spreadValues({}, values), { action }));\n res.expandFields();\n return res;\n}\nfunction fromValuesArray(values) {\n return values.map(fromValues);\n}\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 {\n /**\n * Overload toJSON() to intercept JSON.stringify()\n * @return {*}\n */\n toJSON() {\n let encoding = this.encoding;\n let data = this.data;\n if (data && Platform.BufferUtils.isBuffer(data)) {\n if (arguments.length > 0) {\n encoding = encoding ? encoding + \"/base64\" : \"base64\";\n data = Platform.BufferUtils.base64Encode(data);\n } else {\n data = Platform.BufferUtils.toBuffer(data);\n }\n }\n return {\n name: this.name,\n id: this.id,\n clientId: this.clientId,\n connectionId: this.connectionId,\n connectionKey: this.connectionKey,\n extras: this.extras,\n serial: this.serial,\n action: toMessageActionNumber(this.action) || this.action,\n refSerial: this.refSerial,\n refType: this.refType,\n createdAt: this.createdAt,\n version: this.version,\n operation: this.operation,\n encoding,\n data\n };\n }\n expandFields() {\n if (this.action === \"message.create\") {\n if (this.version && !this.serial) {\n this.serial = this.version;\n }\n if (this.timestamp && !this.createdAt) {\n this.createdAt = this.timestamp;\n }\n }\n }\n toString() {\n let result = \"[Message\";\n if (this.name)\n result += \"; name=\" + this.name;\n if (this.id)\n result += \"; id=\" + this.id;\n if (this.timestamp)\n result += \"; timestamp=\" + this.timestamp;\n if (this.clientId)\n result += \"; clientId=\" + this.clientId;\n if (this.connectionId)\n result += \"; connectionId=\" + this.connectionId;\n if (this.encoding)\n result += \"; encoding=\" + this.encoding;\n if (this.extras)\n result += \"; extras =\" + JSON.stringify(this.extras);\n if (this.data) {\n if (typeof this.data == \"string\")\n result += \"; data=\" + this.data;\n else if (Platform.BufferUtils.isBuffer(this.data))\n result += \"; data (buffer)=\" + Platform.BufferUtils.base64Encode(this.data);\n else\n result += \"; data (json)=\" + JSON.stringify(this.data);\n }\n if (this.extras)\n result += \"; extras=\" + JSON.stringify(this.extras);\n if (this.action)\n result += \"; action=\" + this.action;\n if (this.serial)\n result += \"; serial=\" + this.serial;\n if (this.version)\n result += \"; version=\" + this.version;\n if (this.refSerial)\n result += \"; refSerial=\" + this.refSerial;\n if (this.refType)\n result += \"; refType=\" + this.refType;\n if (this.createdAt)\n result += \"; createdAt=\" + this.createdAt;\n if (this.operation)\n result += \"; operation=\" + JSON.stringify(this.operation);\n result += \"]\";\n return result;\n }\n};\nvar message_default = Message;\n\n// src/common/lib/types/presencemessage.ts\nvar actions = [\"absent\", \"present\", \"enter\", \"leave\", \"update\"];\nfunction toActionValue(actionString) {\n return actions.indexOf(actionString);\n}\nasync function fromEncoded2(logger, Crypto2, encoded, inputOptions) {\n const msg = fromWireProtocol2(encoded);\n const options = normalizeCipherOptions(Crypto2, logger, inputOptions != null ? inputOptions : null);\n try {\n await decode2(msg, options != null ? options : {});\n } catch (e) {\n logger_default.logAction(logger, logger_default.LOG_ERROR, \"PresenceMessage.fromEncoded()\", e.toString());\n }\n return msg;\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 msg = fromWireProtocol2(encoded);\n try {\n await decode2(msg, channel.channelOptions);\n } catch (e) {\n logger_default.logAction(channel.logger, logger_default.LOG_ERROR, \"PresenceMessage._fromEncoded()\", e.toString());\n }\n return msg;\n}\nasync function _fromEncodedArray2(encodedArray, channel) {\n return Promise.all(\n encodedArray.map(function(encoded) {\n return _fromEncoded2(encoded, channel);\n })\n );\n}\nfunction fromValues2(values) {\n return Object.assign(new PresenceMessage(), values);\n}\nfunction fromWireProtocol2(values) {\n const action = actions[values.action];\n return Object.assign(new PresenceMessage(), __spreadProps(__spreadValues({}, values), { action }));\n}\nvar decode2 = decode;\nfunction fromValuesArray2(values) {\n return values.map(fromValues2);\n}\nfunction fromData(data) {\n if (data instanceof PresenceMessage) {\n return data;\n }\n return fromValues2({\n data\n });\n}\nvar PresenceMessage = class {\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 /**\n * Overload toJSON() to intercept JSON.stringify()\n * @return {*}\n */\n toJSON() {\n let data = this.data;\n let encoding = this.encoding;\n if (data && Platform.BufferUtils.isBuffer(data)) {\n if (arguments.length > 0) {\n encoding = encoding ? encoding + \"/base64\" : \"base64\";\n data = Platform.BufferUtils.base64Encode(data);\n } else {\n data = Platform.BufferUtils.toBuffer(data);\n }\n }\n return {\n id: this.id,\n clientId: this.clientId,\n /* Convert presence action back to an int for sending to Ably */\n action: toActionValue(this.action),\n data,\n encoding,\n extras: this.extras\n };\n }\n toString() {\n let result = \"[PresenceMessage\";\n result += \"; action=\" + this.action;\n if (this.id)\n result += \"; id=\" + this.id;\n if (this.timestamp)\n result += \"; timestamp=\" + this.timestamp;\n if (this.clientId)\n result += \"; clientId=\" + this.clientId;\n if (this.connectionId)\n result += \"; connectionId=\" + this.connectionId;\n if (this.encoding)\n result += \"; encoding=\" + this.encoding;\n if (this.data) {\n if (typeof this.data == \"string\")\n result += \"; data=\" + this.data;\n else if (Platform.BufferUtils.isBuffer(this.data))\n result += \"; data (buffer)=\" + Platform.BufferUtils.base64Encode(this.data);\n else\n result += \"; data (json)=\" + JSON.stringify(this.data);\n }\n if (this.extras) {\n result += \"; extras=\" + JSON.stringify(this.extras);\n }\n result += \"]\";\n return result;\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 _fromEncodedArray2(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/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 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 }\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 = [fromValues({ name: first, data: second })];\n params = args[2];\n } else if (isObject(first)) {\n messages = [fromValues(first)];\n params = args[1];\n } else if (Array.isArray(first)) {\n messages = 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 await encodeArray(messages, this.channelOptions);\n const size = getMessagesSize(messages), 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(messages, 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 _fromEncodedArray(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 _fromEncodedArray2(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.DeviceDetails = devicedetails_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 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 // Used by tests\n static fromValues(values) {\n return fromValues(values);\n }\n // Used by tests\n static fromWireProtocol(values) {\n return fromWireProtocol(values);\n }\n // Used by tests\n static async encode(msg, options) {\n return encode(msg, options);\n }\n // Used by tests\n static async decode(message, inputContext) {\n return decode(message, inputContext);\n }\n};\n\n// src/common/lib/types/defaultpresencemessage.ts\nvar DefaultPresenceMessage = class extends presencemessage_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(\n logger_default.defaultLogger,\n Platform.Crypto,\n encodedArray,\n options\n );\n }\n static fromValues(values) {\n return fromValues2(values);\n }\n};\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 }))\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._MsgPack = null;\n// Used by tests\n_DefaultRest._Http = Http;\nvar DefaultRest = _DefaultRest;\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/protocolmessage.ts\nvar actions2 = {\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};\nvar ActionName = [];\nObject.keys(actions2).forEach(function(name) {\n ActionName[actions2[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 /* Channel mode flags */\n PRESENCE: 1 << 16,\n PUBLISH: 1 << 17,\n SUBSCRIBE: 1 << 18,\n PRESENCE_SUBSCRIBE: 1 << 19\n};\nvar flagNames = Object.keys(flags);\nflags.MODE_ALL = flags.PRESENCE | flags.PUBLISH | flags.SUBSCRIBE | flags.PRESENCE_SUBSCRIBE;\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}\nvar channelModes = [\"PRESENCE\", \"PUBLISH\", \"SUBSCRIBE\", \"PRESENCE_SUBSCRIBE\"];\nvar serialize2 = encodeBody;\nfunction deserialize(serialized, MsgPack, presenceMessagePlugin, format) {\n const deserialized = decodeBody(serialized, MsgPack, format);\n return fromDeserialized(deserialized, presenceMessagePlugin);\n}\nfunction fromDeserialized(deserialized, presenceMessagePlugin) {\n const error = deserialized.error;\n if (error) {\n deserialized.error = ErrorInfo.fromValues(error);\n }\n let messages;\n if (deserialized.messages) {\n const dm = deserialized.messages;\n messages = dm.map((m) => fromWireProtocol(m));\n }\n let presence;\n if (presenceMessagePlugin && deserialized.presence) {\n const dp = deserialized.presence;\n presence = dp.map((pm) => presenceMessagePlugin.presenceMessageFromWireProtocol(pm));\n }\n return Object.assign(new ProtocolMessage(), __spreadProps(__spreadValues({}, deserialized), { presence, messages }));\n}\nfunction fromDeserializedIncludingDependencies(deserialized) {\n return fromDeserialized(deserialized, {\n presenceMessageFromValues: fromValues2,\n presenceMessagesFromValuesArray: fromValuesArray2,\n presenceMessageFromWireProtocol: fromWireProtocol2\n });\n}\nfunction fromValues3(values) {\n return Object.assign(new ProtocolMessage(), values);\n}\nfunction stringify(msg, presenceMessagePlugin) {\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(fromValuesArray(msg.messages));\n if (msg.presence && presenceMessagePlugin)\n result += \"; presence=\" + toStringArray(presenceMessagePlugin.presenceMessagesFromValuesArray(msg.presence));\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 && this.flags & 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/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 = action == actions2.MESSAGE || action == actions2.PRESENCE;\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(pendingMessage.message, this.transport.connectionManager.realtime._RealtimePresence)\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 = fromValues3({ action: actions2.CLOSE });\nvar disconnectMessage = fromValues3({ action: actions2.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(message, this.connectionManager.realtime._RealtimePresence) + \"; connectionId = \" + this.connectionManager.connectionId\n );\n }\n this.onActivity();\n switch (message.action) {\n case actions2.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 actions2.CONNECTED:\n this.onConnect(message);\n this.emit(\"connected\", message.error, message.connectionId, message.connectionDetails, message);\n break;\n case actions2.CLOSED:\n this.onClose(message);\n break;\n case actions2.DISCONNECTED:\n this.onDisconnect(message);\n break;\n case actions2.ACK:\n this.emit(\"ack\", message.msgSerial, message.count);\n break;\n case actions2.NACK:\n this.emit(\"nack\", message.msgSerial, message.count, message.error);\n break;\n case actions2.SYNC:\n this.connectionManager.onChannelMessage(message, this);\n break;\n case actions2.ACTIVATE:\n break;\n case actions2.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 actions2.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: actions2.HEARTBEAT };\n if (id)\n msg.id = id;\n this.send(fromValues3(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 noop = 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) !== actions2.PRESENCE && action !== actions2.MESSAGE) {\n return false;\n }\n if (action !== src.action) {\n return false;\n }\n const kind = action === actions2.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.httpHosts = defaults_default.getHosts(options);\n this.wsHosts = defaults_default.getHosts(options, true);\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 hosts = [\" + this.httpHosts + \"]\"\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.httpHosts.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 /*********************\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(noop);\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 = ws ? this.wsHosts.slice() : this.httpHosts.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 = fromValues3({\n action: actions2.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 || noop;\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(msg, this.realtime._RealtimePresence)\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/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 noop2 = 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;\n super(client.logger);\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 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._requestedFlags = null;\n this._mode = 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 }\n get presence() {\n if (!this._presence) {\n throwMissingPluginError(\"RealtimePresence\");\n }\n return this._presence;\n }\n get push() {\n if (!this._push) {\n throwMissingPluginError(\"Push\");\n }\n return this._push;\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 = args[0];\n let argCount = args.length;\n if (!this.connectionManager.activeState()) {\n throw this.connectionManager.getError();\n }\n if (argCount == 1) {\n if (isObject(messages))\n messages = [fromValues(messages)];\n else if (Array.isArray(messages))\n messages = fromValuesArray(messages);\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 } else {\n messages = [fromValues({ name: args[0], data: args[1] })];\n }\n const maxMessageSize = this.client.options.maxMessageSize;\n await encodeArray(messages, this.channelOptions);\n const size = getMessagesSize(messages);\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 return new Promise((resolve, reject) => {\n this._publish(messages, (err) => err ? reject(err) : resolve());\n });\n }\n _publish(messages, callback) {\n logger_default.logAction(this.logger, logger_default.LOG_MICRO, \"RealtimeChannel.publish()\", \"message count = \" + messages.length);\n const state = this.state;\n switch (state) {\n case \"failed\":\n case \"suspended\":\n callback(ErrorInfo.fromValues(this.invalidStateError()));\n break;\n default: {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_MICRO,\n \"RealtimeChannel.publish()\",\n \"sending message; channel state is \" + state\n );\n const msg = new protocolmessage_default();\n msg.action = actions2.MESSAGE;\n msg.channel = this.name;\n msg.messages = messages;\n this.sendMessage(msg, callback);\n break;\n }\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 = fromValues3({\n action: actions2.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._requestedFlags) {\n attachMsg.encodeModesToFlags(this._requestedFlags);\n } else 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, noop2);\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(callback) {\n logger_default.logAction(this.logger, logger_default.LOG_MICRO, \"RealtimeChannel.detach()\", \"sending DETACH message\");\n const msg = fromValues3({ action: actions2.DETACH, channel: this.name });\n this.sendMessage(msg, callback || noop2);\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 return this.attach();\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 = fromValues3({ action: actions2.SYNC, channel: this.name });\n if (this.syncChannelSerial) {\n syncMessage.channelSerial = this.syncChannelSerial;\n }\n connectionManager.send(syncMessage);\n }\n sendMessage(msg, callback) {\n this.connectionManager.send(msg, this.client.options.queueMessages, callback);\n }\n sendPresence(presence, callback) {\n const msg = fromValues3({\n action: actions2.PRESENCE,\n channel: this.name,\n presence: Array.isArray(presence) ? this.client._RealtimePresence.presenceMessagesFromValuesArray(presence) : [this.client._RealtimePresence.presenceMessageFromValues(presence)]\n });\n this.sendMessage(msg, callback);\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 === actions2.ATTACHED || message.action === actions2.MESSAGE || message.action === actions2.PRESENCE) {\n this.setChannelSerial(message.channelSerial);\n }\n let syncChannelSerial, isSync = false;\n switch (message.action) {\n case actions2.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 if (this.state === \"attached\") {\n if (!resumed) {\n if (this._presence) {\n this._presence.onAttached(hasPresence);\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);\n }\n break;\n }\n case actions2.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 actions2.SYNC:\n isSync = true;\n syncChannelSerial = this.syncChannelSerial = message.channelSerial;\n if (!message.presence)\n break;\n case actions2.PRESENCE: {\n const presenceMessages = message.presence;\n if (!presenceMessages) {\n break;\n }\n const options = this.channelOptions;\n await this._decodeAndPrepareMessages(message, presenceMessages, (msg) => decode2(msg, options));\n if (this._presence) {\n this._presence.setPresence(presenceMessages, isSync, syncChannelSerial);\n }\n break;\n }\n case actions2.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 const messages = message.messages, firstMessage = messages[0], lastMessage = messages[messages.length - 1], channelSerial = message.channelSerial;\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 const { unrecoverableError } = await this._decodeAndPrepareMessages(\n message,\n messages,\n (msg) => decode(msg, this._decodingContext),\n (e) => {\n const errorInfo = e;\n switch (errorInfo.code) {\n case 40018:\n this._startDecodeFailureRecovery(errorInfo);\n return { unrecoverableError: true };\n case 40019:\n case 40021:\n this.notifyState(\"failed\", errorInfo);\n return { unrecoverableError: true };\n default:\n return { unrecoverableError: false };\n }\n }\n );\n if (unrecoverableError) {\n return;\n }\n for (let i = 0; i < messages.length; i++) {\n const msg = messages[i];\n if (channelSerial && !msg.version) {\n msg.version = channelSerial + \":\" + i.toString().padStart(3, \"0\");\n msg.expandFields();\n }\n }\n this._lastPayload.messageId = lastMessage.id;\n this._lastPayload.protocolMessageChannelSerial = message.channelSerial;\n this.onEvent(messages);\n break;\n }\n case actions2.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_ERROR,\n \"RealtimeChannel.processMessage()\",\n \"Fatal protocol error: unrecognised action (\" + message.action + \")\"\n );\n this.connectionManager.abort(connectionerrors_default.unknownChannelErr());\n }\n }\n /**\n * Mutates provided messages by adding `connectionId`, `timestamp` and `id` fields, and decoding message data.\n *\n * @returns `unrecoverableError` flag. If `true` indicates that unrecoverable error was encountered during message decoding\n * and any further message processing should be stopped. Always equals to `false` if `decodeErrorRecoveryHandler` was not provided\n */\n async _decodeAndPrepareMessages(protocolMessage, messages, decodeFn, decodeErrorRecoveryHandler) {\n const { id, connectionId, timestamp } = protocolMessage;\n for (let i = 0; i < messages.length; i++) {\n const msg = messages[i];\n try {\n await decodeFn(msg);\n } catch (e) {\n logger_default.logAction(\n this.logger,\n logger_default.LOG_ERROR,\n \"RealtimeChannel.decodeAndPrepareMessages()\",\n e.toString()\n );\n if (decodeErrorRecoveryHandler) {\n const { unrecoverableError } = decodeErrorRecoveryHandler(e);\n if (unrecoverableError) {\n return { unrecoverableError: true };\n }\n }\n }\n if (!msg.connectionId)\n msg.connectionId = connectionId;\n if (!msg.timestamp)\n msg.timestamp = timestamp;\n if (id && !msg.id)\n msg.id = id + \":\" + i;\n }\n return { unrecoverableError: false };\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) {\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 (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/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;\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.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 = fromValues2(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 = fromValues2(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 = fromData(data);\n presence.action = action;\n if (id) {\n presence.id = id;\n }\n if (clientId) {\n presence.clientId = clientId;\n }\n await encode(presence, channel.channelOptions);\n switch (channel.state) {\n case \"attached\":\n return new Promise((resolve, reject) => {\n channel.sendPresence(presence, (err) => err ? reject(err) : resolve());\n });\n case \"initialized\":\n case \"detached\":\n channel.attach();\n case \"attaching\":\n return new Promise((resolve, reject) => {\n this.pendingPresence.push({\n presence,\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 = fromData(data);\n presence.action = \"leave\";\n if (clientId) {\n presence.clientId = clientId;\n }\n return new Promise((resolve, reject) => {\n switch (channel.state) {\n case \"attached\":\n channel.sendPresence(presence, (err) => err ? reject(err) : resolve());\n break;\n case \"attaching\":\n this.pendingPresence.push({\n presence,\n callback: (err) => err ? reject(err) : resolve()\n });\n break;\n case \"initialized\":\n case \"failed\": {\n const err = new PartialErrorInfo(\"Unable to leave presence channel (incompatible state)\", 90001);\n reject(err);\n break;\n }\n default:\n reject(channel.invalidStateError());\n }\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 i = 0; i < presenceSet.length; i++) {\n const presence = fromValues2(presenceSet[i]);\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, multicaster);\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 = fromValues2({\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 await channel.attach();\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.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 presenceMessageFromValues: fromValues2,\n presenceMessagesFromValuesArray: fromValuesArray2,\n presenceMessageFromWireProtocol: fromWireProtocol2\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._MsgPack = null;\n// Used by tests\n_DefaultRealtime._Http = Http;\n_DefaultRealtime._PresenceMap = PresenceMap;\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 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 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 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 } 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.setImmediate !== \"undefined\" ? globalObject4.setImmediate.bind(globalObject4) : function(f) {\n setTimeout(f, 0);\n },\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 [fromValues3({ action: actions2.ERROR, error: err })];\n } else {\n return [fromValues3({ action: actions2.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 = defaults_default.getHost(options, params.host);\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(items[i], this.connectionManager.realtime._RealtimePresence)\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 = function(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 = function(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 = function() {\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 decode3(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: decode3,\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};\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","import config from '@/utils/config';\nimport { Realtime, type ConnectionState, type InboundMessage, type RealtimeChannel } from 'ably';\nimport type { App } from 'vue';\n\n// Channels are automatically detached from by a beforeunload browser event handler. Still we want to detach from user channel on logout\n\n// When doing notification, to consider:\n// - disconnecting during periods of inactivity?\n// - check for notifications on reconnect manually or when network has been down? Can Ably tell us when the network is down?\n// - how to fall back to using API polling?\n\nexport class WebSockets {\n private ably?: Realtime;\n private userChannel?: RealtimeChannel;\n private connectionCount = 0;\n private connectionState: ConnectionState = 'initialized';\n\n async connect(userId: number) {\n this.ably = new Realtime({ authUrl: '/websockets/auth' });\n this.ably.connection.on(x => {\n console.debug(`Ably is ${x.current}`);\n this.connectionState = x.current;\n });\n const x = await Promise.race([this.ably.connection.once('connected'), this.ably.connection.once('disconnected')]);\n if (x.current == 'disconnected') return false;\n this.userChannel = this.ably?.channels.get(`${config.environment}:users:${userId}`);\n return true;\n }\n\n needToConnect() {\n // https://ably.com/docs/connect/states#connection-states\n // disconnected will be automatically recovered from by the client if we don't do an explicit connection\n return ['suspended', 'closing', 'closed', 'disconnected'].includes(this.connectionState);\n }\n\n disconnect() {\n console.debug(`Disconnecting Ably`);\n // Deliberately unawaited so that we never have a detached channel with a non-undefined userChannel\n this.userChannel?.detach();\n this.userChannel = undefined;\n this.ably?.connection.off();\n this.ably?.close();\n this.ably = undefined;\n }\n\n async subscribeForOneMessage(userId: number, name: string, handler: (m: InboundMessage) => Promise) {\n if (!this.ably || this.needToConnect()) await this.connect(userId);\n this.connectionCount += 1;\n await this.userChannel!.subscribe(name, async m => {\n await handler(m);\n if (this.connectionCount == 1) {\n this.disconnect();\n }\n this.connectionCount -= 1;\n });\n }\n}\n\nconst webSockets = new WebSockets();\n\nexport function installWebSocketsPlugin(app: App) {\n app.config.globalProperties.$ws = webSockets;\n}\n\nexport default webSockets;\n"],"names":["g","f","module","this","exports","__defProp","__defProps","__getOwnPropDesc","__getOwnPropDescs","__getOwnPropNames","__getOwnPropSymbols","__hasOwnProp","__propIsEnum","__defNormalProp","obj","key","value","__spreadValues","a","b","prop","__spreadProps","__objRest","source","exclude","target","__export","all","name","__copyProps","to","from","except","desc","__toCommonJS","mod","web_exports","ErrorInfo","DefaultRealtime","DefaultRest","web_default","msgpack_default","fromDeserializedIncludingDependencies","Platform","globalObject","global","pad","timeSegment","three","getHandler","logger","msg","time","getDefaultLoggers","_a2","consoleLogger","errorLogger","args","_Logger","description","level","handler","logHandler","logErrorHandler","action","message","oldName","newName","className","Logger","logger_default","utils_exports","Format","allSame","allToLowerCase","allToUpperCase","arrChooseN","arrDeleteValue","arrEquals","arrIntersect","arrIntersectOb","arrPopRandomElement","arrSubtract","arrWithoutValue","cheapRandStr","containsValue","copy","createMissingPluginError","dataSizeBytes","decodeBody","encodeBody","ensureArray","forInOwnNonNullProperties","getBackoffCoefficient","getGlobalObject","getJitterCoefficient","getRetryTime","inherits","inspectBody","inspectError","intersect","isEmpty","isErrorInfoOrPartialErrorInfo","isNil","isObject","keysArray","matchDerivedChannel","mixin","parseQueryString","prototypicalClone","randomString","shallowClone","shallowEquals","throwMissingPluginError","toBase64","toQueryString","valuesArray","whenPromiseSettles","withTimeoutAsync","toString","err","result","_ErrorInfo","code","statusCode","cause","values","PartialErrorInfo","_PartialErrorInfo","randomPosn","arrOrStr","i","src","ob","arg","ownProperties","F","ctor","superCtor","val","arr","arr1","arr2","member","element","idx","res","newArr","ownOnly","fn","first","item","Format2","params","parts","query","match","search","_b","body","data","numBytes","__async","buffer","n2","numItems","mutableArr","promise","callback","MsgPack","format","count","initialTimeout","retryAttempt","regex","str","bufferUtils","textBuffer","pluginName","timeout","e","_resolve","reject","version","agent","Defaults","getHost","getPort","getHttpScheme","environmentFallbackHosts","getFallbackHosts","getHosts","checkHost","objectifyOptions","normaliseOptions","defaultGetHeaders","defaultPostHeaders","options","host","ws","tls","environment","fallbackHosts","httpMaxRetryCount","hosts","getRealtimeHost","production","getTimeouts","timeouts","getAgentString","agentStr","agent2","allowKeyOrToken","sourceForErrorMessage","modularPluginsToInclude","optionsObj","loggerToUse","restHost","realtimeHost","headers","connectivityCheckParams","connectivityCheckUrl","uri","qs","wsConnectivityCheckUrl","normaliseChannelOptions","Crypto2","channelOptions","cipher","contentTypes","defaultHeadersOptions","protocolVersion","contentType","defaults_default","getDefaults","platformDefaults","Multicaster","_Multicaster","members","resolve","instance","multicaster_default","HttpMethods","HttpMethods2","HttpMethods_default","HttpStatusCodes","HttpStatusCodes2","isSuccessCode","HttpStatusCodes_default","MAX_TOKEN_LENGTH","random","isRealtime","client","normaliseAuthcallbackError","hmac","text","keyBuffer","digest","c14n","capability","c14nCapability","keys","logAndValidateTokenAuthMethod","authOptions","basicAuthForced","useTokenAuth","noWayToRenew","trId","getTokenRequestId","Auth","tokenParams","tokenDetails","tokenDetails2","resolvedAuthOptions","resolvedTokenParams","tokenRequestCallback","cb","authHeaders","usePost","providedQsParams","queryIdx","authParams","authUrlRequestCallback","contentTypeHeaderOrHeaders","json","tokenRequest","signedTokenParams","tokenCb","keyName","path","tokenUri","requestHeaders","tokenRequestCallbackTimeoutExpired","timeoutLength","tokenRequestCallbackTimeout","tokenRequestOrDetails","objectSize","err2","tokenResponse","unpacked","keyParts","keySecret","request","clientId","ttl","nonce","timestamp","signText","queryTime","forceSupersede","token","tokenRequestId","caughtError","multicaster","tokenClientId","error","specifiers","auth_default","paramString","paramPairs","needle","appendingParams","logResult","method","logRequest","Http","connection","connectionHost","uriFromHost","currentFallback","tryAHostStartedAt","tryAHost","candidateHosts","persistOnSuccess","BaseClient","_c","_d","_e","_f","_g","_h","normalOptions","keyMatch","version2","customHeaders","specOrSpecs","channels","logOptions","baseclient_default","DeviceDetails","_DeviceDetails","device","devicedetails_default","withAuthDetails","opCallback","unenvelope","wrappedStatusCode","response","wrappedHeaders","wrappedErr","logResult2","Resource","_Resource","envelope","throwError","doRequest","headers2","params2","decodedBody","decodeErr","httpResult","resource_default","getRelParams","linkUrl","urlMatch","parseRelLinks","linkHeader","relParams","linkMatch","returnErrOnly","useHPR","PaginatedResource","bodyHandler","useHttpPaginatedResponse","items","HttpPaginatedResponse","PaginatedResult","resource","self2","paginatedresource_default","_PushChannelSubscription","PushChannelSubscription","pushchannelsubscription_default","Push","Admin","registerCallback","updateFailedCallback","deregisterCallback","DeviceRegistrations","ChannelSubscriptions","recipient","payload","requestBody","deviceIdOrDetails","deviceId","_ChannelSubscriptions","subscription","parsedBody","push_default","MessageActionArray","MessageActionMap","index","ReverseMessageActionMap","toMessageActionString","actionNumber","toMessageActionNumber","messageAction","normaliseContext","context","normalizeCipherOptions","getMessageSize","size","fromEncoded","encoded","inputOptions","fromWireProtocol","decode","fromEncodedArray","encodedArray","_fromEncoded","channel","_fromEncodedArray","encrypt","encoding","ciphertext","encode","encodeArray","messages","serialize","inputContext","lastPayload","xforms","lastProcessedEncodingIndex","encodingsToProcess","xform","xformAlgorithm","deltaBase","deltaBaseBuffer","fromValues","Message","fromValuesArray","getMessagesSize","total","message_default","actions","toActionValue","actionString","fromEncoded2","fromWireProtocol2","decode2","fromEncodedArray2","_fromEncoded2","_fromEncodedArray2","fromValues2","PresenceMessage","fromValuesArray2","fromData","presencemessage_default","RestPresence","decoded","restpresence_default","MSG_ID_ENTROPY_BYTES","allEmptyIds","RestChannel","second","idempotentRestPublishing","msgIdBase","maxMessageSize","restchannel_default","Stats","_Stats","stats_default","RestChannelMixin","RestPresenceMixin","presence","Rest","Channels","statsValues","timeUri","encoder","decoder","_method","paginatedResource","resbody","requestBodyDTO","singleSpecMode","batchResults","channelsParam","resolvedOptions","specifier","BaseRest","allCommonModularPlugins","DefaultMessage","DefaultPresenceMessage","_DefaultRest","newValue","callListener","eventThis","listener","removeListener","targetListeners","eventFilter","listeners","eventName","targetListenersIndex","EventEmitter","event","firstArg","secondArg","eventsOnceListeners","eventsListeners","argCount","listenerWrapper","innerArgs","targetState","currentState","eventemitter_default","actions2","ActionName","flags","flagNames","toStringArray","array","channelModes","serialize2","deserialize","serialized","presenceMessagePlugin","deserialized","fromDeserialized","m","pm","ProtocolMessage","fromValues3","stringify","simpleAttributes","attribute","attribIndex","stringifiedParams","flag","modes","mode","protocolmessage_default","MessageQueue","serial","startSerial","endSerial","completeMessages","messagequeue_default","PendingMessage","Protocol","transport","messageQueue","pendingMessage","protocol_default","ConnectionStateChange","previous","current","retryIn","reason","connectionstatechange_default","ConnectionErrorCodes","ConnectionErrors","isRetriable","connectionerrors_default","closeMessage","disconnectMessage","Transport","connectionManager","auth","forceJsonProtocol","maxPromisedIdle","id","sinceLast","timeRemaining","transportCtor","transportParams","transportAttemptTimer","errorCb","realtimeRequestTimeout","transport_default","TransportNames","TransportNames2","globalObject2","haveWebStorage","haveSessionStorage","noop","transportPreferenceName","bundleWith","dest","maxSize","kind","proposed","decodeRecoveryKey","recoveryKey","TransportParams","connectionKey","recoveryContext","ConnectionManager","_ConnectionManager","realtime","connectingTimeout","addEventListener","additionalImplementations","storage","implementations","transportName","modeCb","recoverFn","lastSessionData","sessionRecoveryName","shouldRecover","candidate","state","connectionId","connectionDetails","existingState","connectedState","existingActiveProtocol","connectedErr","_connectionId","connectionDetails2","currentProtocol","wasActive","wasPending","noTransportsScheduledForActivation","newConnectionState","hasConnectionError","prevConnId","newError","stateChange","newState","transitionState","interval","connectivity","indicated","retryImmediately","retryDelay","change","autoReconnect","connectCount","connect","authCb","transportPreference","shouldContinue","giveUp","hostAttemptCb","fatal","tryFallbackHosts","activeTransport","authMsg","successListener","failureListener","queueEvent","lastQueued","pendingMessages","numQueued","pendingChannelMessage","pingStart","onHeartbeat","responseId","connectionStateTtl","finished","connectionmanager_default","Connection","ably","connection_default","ChannelStateChange","resumed","hasBacklog","channelstatechange_default","noop2","validateChannelOptions","currentMode","RealtimeChannel","_RealtimeChannel","restMixin","previousChannelOptions","prevOptions","requestedParams","omitAgent","existingParams","subscriptions","forceReattach","attachReason","attachMsg","l","syncMessage","syncChannelSerial","isSync","modesFromFlags","hasPresence","detachErr","presenceMessages","firstMessage","lastMessage","channelSerial","unrecoverableError","errorInfo","protocolMessage","decodeFn","decodeErrorRecoveryHandler","stateTimer","s","channelParams","_","realtimechannel_default","_BaseRealtime","Channels2","plugins","transports","BaseRealtime","serials","channelSerials","channelName","connectionState","connectionStateToChannelState","fromChannelStates","toChannelState","channelId","deriveOptions","filter","releaseErr","baserealtime_default","newerThan","existing","itemOrderings","existingOrderings","PresenceMap","memberKey","newer","map","existingItem","syncInProgress","inProgress","getClientId","realtimePresence","isAnonymousOrWildcard","waitAttached","RealtimePresence","waitForSync","returnMembers","presenceSet","syncCursor","myMembers","broadcastMessages","connId","pendingPresence","pendingPresCount","presenceArray","entry","_args","realtimepresence_default","shortName","isNodeWebSocket","WebSocketTransport","connectParams","wsUri","paramStr","param","wsConnection","ev","wasClean","websockettransport_default","FilteredSubscriptions","filteredListener","mapping","realListener","realListenerMap","filterMaps","listenerMaps","prev","cur","listeners2","_DefaultRealtime","uint8Array","uint32Array","pow","DEFAULT_STATE","ROUND_CONSTANTS","M","getFractionalBits","n","nPrime","isPrime","factor","LittleEndian","convertEndian","word","rightRotate","bits","sha256","STATE","legth","bitLength","newBitLength","bytes","words","round","block","workingState","MRound","gamma0x","gamma1x","t1","t2","hmac2","tmp","innerKey","outerKey","BufferUtils","base64","encodings","byteLength","byteRemainder","mainLength","c","d","chunk","binary_string","len","ascii","accum","byte","hexEncodedBytes","uint8Array2","string","encodedByteArray","buffer1","buffer2","arrayBuffer1","arrayBuffer2","bytes1","bytes2","arrayBufferView","hash","bufferutils_default","createCryptoClass","config","DEFAULT_ALGORITHM","DEFAULT_KEYLENGTH","DEFAULT_MODE","DEFAULT_BLOCKLENGTH","validateCipherParams","normaliseBase64","isCipherParams","CipherParams","algorithm","keyLength","cipherParams","CBCCipher","iv","output","outputView","buffer1View","buffer2View","plaintext","cryptoKey","ciphertextArrayBuffer","ciphertextBody","randomBlock","XHRStates","XHRStates2","XHRStates_default","createMissingImplementationError","_a","Http2","connectivityUrlIsDefault","requestImplementations","xhrRequestImplementation","fetchRequestImplementation","hasImplementation","_a3","req","body2","requestResult","http_default","test","globalObject3","Webstorage","session","wrappedValue","rawItem","webstorage_default","globalObject4","isVercelEdgeRuntime","allowComet","loc","isWebWorkerContext","userAgent","currentUrl","Config","byteArray","config_default","shouldBeErrorAction","UNRESOLVABLE_ERROR_CODES","protocolMessageFromRawError","CometTransport","port","cometScheme","connectUri","preconnected","connectRequest","closing","closeOrDisconnectUri","connectionStr","baseConnectionUri","pendingItems","sendRequest","recvRequest","responseData","requestItems","comettransport_default","isAblyError","responseBody","getAblyError","noop3","idCounter","pendingRequests","getHeader","xhr","header","isEncodingChunked","getHeadersAsObject","headerPairs","x","XHRRequest","_XHRRequest","requestMode","_timeouts","timer","accept","responseType","h","errorHandler","errorEvent","statusCode2","errorMessage","streaming","successResponse","streamPos","onResponse","onEnd","parsedResponse","jsonResponseBody","onProgress","responseText","bodyEnd","onChunk","onStreamEnd","readyState","xhrrequest_default","shortName2","XHRPollingTransport","xhrpollingtransport_default","order","defaultTransports","transport_default2","Defaults2","defaults_default2","inspect","view","type","byte_","utf8Write","offset","codePoint","utf8Read","length","end","utf8ByteCount","encode2","sparse","sizeof","_encode","SH_L_32","SH_R_32","getInt64","getUint64","setInt64","setUint64","Decoder","decode3","encodeableKeys","isArray","isAblyError2","getAblyError2","convertHeaders","fetchRequest","fetchHeaders","controller","timeoutPromise","requestInit","resultPromise","urlParams","preparedURI","defaultBundledRequestImplementations","Crypto","clientClass","__cp","WebSockets","__publicField","userId","Realtime","webSockets","installWebSocketsPlugin","app"],"mappings":"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","x_google_ignoreList":[0]}