{"version":3,"file":"@ably-2d7baa90.js","sources":["../../../node_modules/ably/build/ably-commonjs.js","../../../node_modules/ably/promises.js","../../../src/config/ably-client.ts"],"sourcesContent":["/*!\n * @license Copyright 2015-2022 Ably Real-time Ltd (ably.com)\n * \n * Ably JavaScript Library v1.2.42\n * https://github.com/ably/ably-js\n * \n * Released under the Apache Licence v2.0\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Ably\"] = factory();\n\telse\n\t\troot[\"Ably\"] = factory();\n})(window, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 42);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__extends\", function() { return __extends; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__assign\", function() { return __assign; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__rest\", function() { return __rest; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__decorate\", function() { return __decorate; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__param\", function() { return __param; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__metadata\", function() { return __metadata; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__awaiter\", function() { return __awaiter; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__generator\", function() { return __generator; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__createBinding\", function() { return __createBinding; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__exportStar\", function() { return __exportStar; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__values\", function() { return __values; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__read\", function() { return __read; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__spread\", function() { return __spread; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__spreadArrays\", function() { return __spreadArrays; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__spreadArray\", function() { return __spreadArray; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__await\", function() { return __await; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__asyncGenerator\", function() { return __asyncGenerator; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__asyncDelegator\", function() { return __asyncDelegator; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__asyncValues\", function() { return __asyncValues; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__makeTemplateObject\", function() { return __makeTemplateObject; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__importStar\", function() { return __importStar; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__importDefault\", function() { return __importDefault; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__classPrivateFieldGet\", function() { return __classPrivateFieldGet; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__classPrivateFieldSet\", function() { return __classPrivateFieldSet; });\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nfunction __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nvar __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nfunction __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nfunction __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nfunction __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nfunction __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nfunction __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nfunction __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nvar __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nfunction __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nfunction __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nfunction __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nfunction __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nfunction __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nfunction __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nfunction __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nfunction __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nfunction __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nfunction __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nfunction __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nfunction __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nfunction __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nfunction __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nfunction __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(global) {\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.allToUpperCase = exports.allToLowerCase = exports.encodeBody = exports.decodeBody = exports.Format = exports.promisify = exports.trim = exports.arrChooseN = exports.randomHexString = exports.randomString = exports.cheapRandStr = exports.dataSizeBytes = exports.inspectBody = exports.inspectError = exports.isErrorInfoOrPartialErrorInfo = exports.now = exports.parseQueryString = exports.toQueryString = exports.arrPopRandomElement = exports.defaultPostHeaders = exports.defaultGetHeaders = exports.allSame = exports.arrEvery = exports.arrFilter = exports.arrMap = exports.safeArrForEach = exports.arrForEach = exports.forInOwnNonNullProperties = exports.valuesArray = exports.keysArray = exports.arrWithoutValue = exports.arrDeleteValue = exports.arrIn = exports.arrIndexOf = exports.arrSubtract = exports.arrIntersectOb = exports.arrIntersect = exports.intersect = exports.containsValue = exports.inherits = exports.prototypicalClone = exports.shallowClone = exports.isEmptyArg = exports.isOnlyPropIn = exports.isEmpty = exports.isObject = exports.ensureArray = exports.isArray = exports.copy = exports.mixin = void 0;\nexports.toBase64 = exports.matchDerivedChannel = exports.shallowEquals = exports.getGlobalObject = exports.getRetryTime = exports.getJitterCoefficient = exports.getBackoffCoefficient = void 0;\nvar tslib_1 = __webpack_require__(0);\nvar platform_1 = tslib_1.__importDefault(__webpack_require__(3));\nvar defaults_1 = tslib_1.__importStar(__webpack_require__(8));\nvar errorinfo_1 = tslib_1.__importDefault(__webpack_require__(4));\nvar enc_base64_1 = __webpack_require__(11);\nvar enc_utf8_1 = __webpack_require__(31);\nfunction randomPosn(arrOrStr) {\n return Math.floor(Math.random() * arrOrStr.length);\n}\n/*\n * Add a set of properties to a target object\n * target: the target object\n * props: an object whose enumerable properties are\n * added, by reference only\n */\nfunction mixin(target) {\n var args = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n for (var i = 0; i < args.length; i++) {\n var source = args[i];\n if (!source) {\n break;\n }\n var hasOwnProperty = Object.prototype.hasOwnProperty;\n for (var key in source) {\n if (!hasOwnProperty || hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n}\nexports.mixin = mixin;\n/*\n * Add a set of properties to a target object\n * target: the target object\n * props: an object whose enumerable properties are\n * added, by reference only\n */\nfunction copy(src) {\n return mixin({}, src);\n}\nexports.copy = copy;\n/*\n * Determine whether or not a given object is\n * an array.\n */\nexports.isArray = Array.isArray ||\n function (value) {\n return Object.prototype.toString.call(value) == '[object Array]';\n };\n/*\n * Ensures that an Array object is always returned\n * returning the original Array of obj is an Array\n * else wrapping the obj in a single element Array\n */\nfunction ensureArray(obj) {\n if (isEmptyArg(obj)) {\n return [];\n }\n if ((0, exports.isArray)(obj)) {\n return obj;\n }\n return [obj];\n}\nexports.ensureArray = ensureArray;\nfunction isObject(ob) {\n return Object.prototype.toString.call(ob) == '[object Object]';\n}\nexports.isObject = isObject;\n/*\n * Determine whether or not an object contains\n * any enumerable properties.\n * ob: the object\n */\nfunction isEmpty(ob) {\n for (var prop in ob)\n return false;\n return true;\n}\nexports.isEmpty = isEmpty;\nfunction isOnlyPropIn(ob, property) {\n for (var prop in ob) {\n if (prop !== property) {\n return false;\n }\n }\n return true;\n}\nexports.isOnlyPropIn = isOnlyPropIn;\n/*\n * Determine whether or not an argument to an overloaded function is\n * undefined (missing) or null.\n * This method is useful when constructing functions such as (WebIDL terminology):\n * off([TreatUndefinedAs=Null] DOMString? event)\n * as you can then confirm the argument using:\n * Utils.isEmptyArg(event)\n */\nfunction isEmptyArg(arg) {\n return arg === null || arg === undefined;\n}\nexports.isEmptyArg = isEmptyArg;\n/*\n * Perform a simple shallow clone of an object.\n * Result is an object irrespective of whether\n * the input is an object or array. All\n * enumerable properties are copied.\n * ob: the object\n */\nfunction shallowClone(ob) {\n var result = new Object();\n for (var prop in ob)\n result[prop] = ob[prop];\n return result;\n}\nexports.shallowClone = shallowClone;\n/*\n * Clone an object by creating a new object with the\n * given object as its prototype. Optionally\n * a set of additional own properties can be\n * supplied to be added to the newly created clone.\n * ob: the object to be cloned\n * ownProperties: optional object with additional\n * properties to add\n */\nfunction prototypicalClone(ob, ownProperties) {\n var F = /** @class */ (function () {\n function F() {\n }\n return F;\n }());\n F.prototype = ob;\n var result = new F();\n if (ownProperties)\n mixin(result, ownProperties);\n return result;\n}\nexports.prototypicalClone = prototypicalClone;\n/*\n * Declare a constructor to represent a subclass\n * of another constructor\n * If platform has a built-in version we use that from Platform, else we\n * define here (so can make use of other Utils fns)\n * See node.js util.inherits\n */\nvar inherits = function (ctor, superCtor) {\n if (platform_1.default.Config.inherits) {\n platform_1.default.Config.inherits(ctor, superCtor);\n return;\n }\n ctor.super_ = superCtor;\n ctor.prototype = prototypicalClone(superCtor.prototype, { constructor: ctor });\n};\nexports.inherits = inherits;\n/*\n * Determine whether or not an object has an enumerable\n * property whose value equals a given value.\n * ob: the object\n * val: the value to find\n */\nfunction containsValue(ob, val) {\n for (var i in ob) {\n if (ob[i] == val)\n return true;\n }\n return false;\n}\nexports.containsValue = containsValue;\nfunction intersect(arr, ob) {\n return (0, exports.isArray)(ob) ? arrIntersect(arr, ob) : arrIntersectOb(arr, ob);\n}\nexports.intersect = intersect;\nfunction arrIntersect(arr1, arr2) {\n var result = [];\n for (var i = 0; i < arr1.length; i++) {\n var member = arr1[i];\n if ((0, exports.arrIndexOf)(arr2, member) != -1)\n result.push(member);\n }\n return result;\n}\nexports.arrIntersect = arrIntersect;\nfunction arrIntersectOb(arr, ob) {\n var result = [];\n for (var i = 0; i < arr.length; i++) {\n var member = arr[i];\n if (member in ob)\n result.push(member);\n }\n return result;\n}\nexports.arrIntersectOb = arrIntersectOb;\nfunction arrSubtract(arr1, arr2) {\n var result = [];\n for (var i = 0; i < arr1.length; i++) {\n var element = arr1[i];\n if ((0, exports.arrIndexOf)(arr2, element) == -1)\n result.push(element);\n }\n return result;\n}\nexports.arrSubtract = arrSubtract;\nexports.arrIndexOf = Array.prototype.indexOf\n ? function (arr, elem, fromIndex) {\n return arr.indexOf(elem, fromIndex);\n }\n : function (arr, elem, fromIndex) {\n fromIndex = fromIndex || 0;\n var len = arr.length;\n for (; fromIndex < len; fromIndex++) {\n if (arr[fromIndex] === elem) {\n return fromIndex;\n }\n }\n return -1;\n };\nfunction arrIn(arr, val) {\n return (0, exports.arrIndexOf)(arr, val) !== -1;\n}\nexports.arrIn = arrIn;\nfunction arrDeleteValue(arr, val) {\n var idx = (0, exports.arrIndexOf)(arr, val);\n var res = idx != -1;\n if (res)\n arr.splice(idx, 1);\n return res;\n}\nexports.arrDeleteValue = arrDeleteValue;\nfunction arrWithoutValue(arr, val) {\n var newArr = arr.slice();\n arrDeleteValue(newArr, val);\n return newArr;\n}\nexports.arrWithoutValue = arrWithoutValue;\n/*\n * Construct an array of the keys of the enumerable\n * properties of a given object, optionally limited\n * to only the own properties.\n * ob: the object\n * ownOnly: boolean, get own properties only\n */\nfunction keysArray(ob, ownOnly) {\n var result = [];\n for (var prop in ob) {\n if (ownOnly && !Object.prototype.hasOwnProperty.call(ob, prop))\n continue;\n result.push(prop);\n }\n return result;\n}\nexports.keysArray = keysArray;\n/*\n * Construct an array of the values of the enumerable\n * properties of a given object, optionally limited\n * to only the own properties.\n * ob: the object\n * ownOnly: boolean, get own properties only\n */\nfunction valuesArray(ob, ownOnly) {\n var result = [];\n for (var prop in ob) {\n if (ownOnly && !Object.prototype.hasOwnProperty.call(ob, prop))\n continue;\n result.push(ob[prop]);\n }\n return result;\n}\nexports.valuesArray = valuesArray;\nfunction forInOwnNonNullProperties(ob, fn) {\n for (var prop in ob) {\n if (Object.prototype.hasOwnProperty.call(ob, prop) && ob[prop]) {\n fn(prop);\n }\n }\n}\nexports.forInOwnNonNullProperties = forInOwnNonNullProperties;\nexports.arrForEach = Array.prototype.forEach\n ? function (arr, fn) {\n arr.forEach(fn);\n }\n : function (arr, fn) {\n var len = arr.length;\n for (var i = 0; i < len; i++) {\n fn(arr[i], i, arr);\n }\n };\n/* Useful when the function may mutate the array */\nfunction safeArrForEach(arr, fn) {\n return (0, exports.arrForEach)(arr.slice(), fn);\n}\nexports.safeArrForEach = safeArrForEach;\nexports.arrMap = Array.prototype.map\n ? function (arr, fn) {\n return arr.map(fn);\n }\n : function (arr, fn) {\n var result = [];\n var len = arr.length;\n for (var i = 0; i < len; i++) {\n result.push(fn(arr[i], i, arr));\n }\n return result;\n };\nexports.arrFilter = Array.prototype.filter\n ? function (arr, fn) {\n return arr.filter(fn);\n }\n : function (arr, fn) {\n var result = [], len = arr.length;\n for (var i = 0; i < len; i++) {\n if (fn(arr[i])) {\n result.push(arr[i]);\n }\n }\n return result;\n };\nexports.arrEvery = Array.prototype.every\n ? function (arr, fn) {\n return arr.every(fn);\n }\n : function (arr, fn) {\n var len = arr.length;\n for (var i = 0; i < len; i++) {\n if (!fn(arr[i], i, arr)) {\n return false;\n }\n }\n return true;\n };\nfunction allSame(arr, prop) {\n if (arr.length === 0) {\n return true;\n }\n var first = arr[0][prop];\n return (0, exports.arrEvery)(arr, function (item) {\n return item[prop] === first;\n });\n}\nexports.allSame = allSame;\nvar contentTypes = {\n json: 'application/json',\n jsonp: 'application/javascript',\n xml: 'application/xml',\n html: 'text/html',\n msgpack: 'application/x-msgpack',\n};\nfunction defaultGetHeaders(options, format) {\n var accept = contentTypes[format || Format.json];\n return {\n accept: accept,\n 'X-Ably-Version': defaults_1.default.protocolVersion.toString(),\n 'Ably-Agent': (0, defaults_1.getAgentString)(options),\n };\n}\nexports.defaultGetHeaders = defaultGetHeaders;\nfunction defaultPostHeaders(options, format) {\n var contentType;\n var accept = (contentType = contentTypes[format || Format.json]);\n return {\n accept: accept,\n 'content-type': contentType,\n 'X-Ably-Version': defaults_1.default.protocolVersion.toString(),\n 'Ably-Agent': (0, defaults_1.getAgentString)(options),\n };\n}\nexports.defaultPostHeaders = defaultPostHeaders;\nfunction arrPopRandomElement(arr) {\n return arr.splice(randomPosn(arr), 1)[0];\n}\nexports.arrPopRandomElement = arrPopRandomElement;\nfunction toQueryString(params) {\n var parts = [];\n if (params) {\n for (var key in params)\n parts.push(encodeURIComponent(key) + '=' + encodeURIComponent(params[key]));\n }\n return parts.length ? '?' + parts.join('&') : '';\n}\nexports.toQueryString = toQueryString;\nfunction parseQueryString(query) {\n var match;\n var search = /([^?&=]+)=?([^&]*)/g;\n var result = {};\n while ((match = search.exec(query)))\n result[decodeURIComponent(match[1])] = decodeURIComponent(match[2]);\n return result;\n}\nexports.parseQueryString = parseQueryString;\nexports.now = Date.now ||\n function () {\n /* IE 8 */\n return new Date().getTime();\n };\nfunction isErrorInfoOrPartialErrorInfo(err) {\n return (typeof err == 'object' &&\n err !== null &&\n (err.constructor.name == 'ErrorInfo' || err.constructor.name == 'PartialErrorInfo'));\n}\nexports.isErrorInfoOrPartialErrorInfo = isErrorInfoOrPartialErrorInfo;\nfunction inspectError(err) {\n var _a, _b;\n if (err instanceof Error ||\n ((_a = err === null || err === void 0 ? void 0 : err.constructor) === null || _a === void 0 ? void 0 : _a.name) === 'ErrorInfo' ||\n ((_b = err === null || err === void 0 ? void 0 : err.constructor) === null || _b === void 0 ? void 0 : _b.name) === 'PartialErrorInfo')\n return err.toString();\n return platform_1.default.Config.inspect(err);\n}\nexports.inspectError = inspectError;\nfunction inspectBody(body) {\n if (platform_1.default.BufferUtils.isBuffer(body)) {\n return body.toString();\n }\n else if (typeof body === 'string') {\n return body;\n }\n else {\n return platform_1.default.Config.inspect(body);\n }\n}\nexports.inspectBody = inspectBody;\n/* Data is assumed to be either a string or a buffer. */\nfunction dataSizeBytes(data) {\n if (platform_1.default.BufferUtils.isBuffer(data)) {\n return platform_1.default.BufferUtils.byteLength(data);\n }\n if (typeof data === 'string') {\n return platform_1.default.Config.stringByteSize(data);\n }\n throw new Error('Expected input of Utils.dataSizeBytes to be a buffer or string, but was: ' + typeof data);\n}\nexports.dataSizeBytes = dataSizeBytes;\nfunction cheapRandStr() {\n return String(Math.random()).substr(2);\n}\nexports.cheapRandStr = cheapRandStr;\n/* Takes param the minimum number of bytes of entropy the string must\n * include, not the length of the string. String length produced is not\n * guaranteed. */\nvar randomString = function (numBytes) {\n if (platform_1.default.Config.getRandomValues && typeof Uint8Array !== 'undefined') {\n var uIntArr = new Uint8Array(numBytes);\n platform_1.default.Config.getRandomValues(uIntArr);\n return platform_1.default.BufferUtils.base64Encode(uIntArr);\n }\n /* Old browser; fall back to Math.random. Could just use a\n * CryptoJS version of the above, but want this to still work in nocrypto\n * versions of the library */\n var charset = platform_1.default.BufferUtils.base64CharSet;\n /* base64 has 33% overhead; round length up */\n var length = Math.round((numBytes * 4) / 3);\n var result = '';\n for (var i = 0; i < length; i++) {\n result += charset[randomPosn(charset)];\n }\n return result;\n};\nexports.randomString = randomString;\nvar randomHexString = function (numBytes) {\n if (platform_1.default.Config.getRandomValues && typeof Uint8Array !== 'undefined') {\n var uIntArr = new Uint8Array(numBytes);\n platform_1.default.Config.getRandomValues(uIntArr);\n return platform_1.default.BufferUtils.hexEncode(uIntArr);\n }\n var charset = platform_1.default.BufferUtils.hexCharSet;\n var length = numBytes * 2;\n var result = '';\n for (var i = 0; i < length; i++) {\n result += charset[randomPosn(charset)];\n }\n return result;\n};\nexports.randomHexString = randomHexString;\n/* Pick n elements at random without replacement from an array */\nfunction arrChooseN(arr, n) {\n var numItems = Math.min(n, arr.length), mutableArr = arr.slice(), result = [];\n for (var i = 0; i < numItems; i++) {\n result.push(arrPopRandomElement(mutableArr));\n }\n return result;\n}\nexports.arrChooseN = arrChooseN;\nexports.trim = String.prototype.trim\n ? function (str) {\n return str.trim();\n }\n : function (str) {\n return str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n };\nfunction promisify(ob, fnName, args) {\n return new Promise(function (resolve, reject) {\n ob[fnName].apply(ob, tslib_1.__spreadArray(tslib_1.__spreadArray([], args, false), [function (err, res) {\n err ? reject(err) : resolve(res);\n }], false));\n });\n}\nexports.promisify = promisify;\nvar Format;\n(function (Format) {\n Format[\"msgpack\"] = \"msgpack\";\n Format[\"json\"] = \"json\";\n})(Format = exports.Format || (exports.Format = {}));\nfunction decodeBody(body, format) {\n return format == 'msgpack' ? platform_1.default.Config.msgpack.decode(body) : JSON.parse(String(body));\n}\nexports.decodeBody = decodeBody;\nfunction encodeBody(body, format) {\n return format == 'msgpack' ? platform_1.default.Config.msgpack.encode(body, true) : JSON.stringify(body);\n}\nexports.encodeBody = encodeBody;\nfunction allToLowerCase(arr) {\n return arr.map(function (element) {\n return element && element.toLowerCase();\n });\n}\nexports.allToLowerCase = allToLowerCase;\nfunction allToUpperCase(arr) {\n return arr.map(function (element) {\n return element && element.toUpperCase();\n });\n}\nexports.allToUpperCase = allToUpperCase;\nfunction getBackoffCoefficient(count) {\n return Math.min((count + 2) / 3, 2);\n}\nexports.getBackoffCoefficient = getBackoffCoefficient;\nfunction getJitterCoefficient() {\n return 1 - Math.random() * 0.2;\n}\nexports.getJitterCoefficient = getJitterCoefficient;\n/**\n *\n * @param initialTimeout initial timeout value\n * @param retryAttempt integer indicating retryAttempt\n * @returns RetryTimeout value for given timeout and retryAttempt.\n * If x is the value generated then,\n * Upper bound = min((retryAttempt + 2) / 3, 2) * initialTimeout,\n * Lower bound = 0.8 * Upper bound,\n * Lower bound < x < Upper bound\n */\nfunction getRetryTime(initialTimeout, retryAttempt) {\n return initialTimeout * getBackoffCoefficient(retryAttempt) * getJitterCoefficient();\n}\nexports.getRetryTime = getRetryTime;\nfunction getGlobalObject() {\n if (global) {\n return global;\n }\n if (typeof window !== 'undefined') {\n return window;\n }\n return self;\n}\nexports.getGlobalObject = getGlobalObject;\nfunction shallowEquals(source, target) {\n return (Object.keys(source).every(function (key) { return source[key] === target[key]; }) &&\n Object.keys(target).every(function (key) { return target[key] === source[key]; }));\n}\nexports.shallowEquals = shallowEquals;\nfunction matchDerivedChannel(name) {\n /**\n * This regex check is to retain existing channel params if any e.g [?rewind=1]foo to\n * [filter=xyz?rewind=1]foo. This is to keep channel compatibility around use of\n * channel params that work with derived channels.\n *\n * This eslint unsafe regex warning is triggered because the RegExp uses nested quantifiers,\n * but it does not create any situation where the regex engine has to\n * explore a large number of possible matches so it’s safe to ignore\n */\n var regex = /^(\\[([^?]*)(?:(.*))\\])?(.+)$/; // eslint-disable-line\n var match = name.match(regex);\n if (!match || !match.length || match.length < 5) {\n throw new errorinfo_1.default('regex match failed', 400, 40010);\n }\n // Fail if there is already a channel qualifier, eg [meta]foo should fail instead of just overriding with [filter=xyz]foo\n if (match[2]) {\n throw new errorinfo_1.default(\"cannot use a derived option with a \".concat(match[2], \" channel\"), 400, 40010);\n }\n // Return match values to be added to derive channel quantifier.\n return {\n qualifierParam: match[3] || '',\n channelName: match[4],\n };\n}\nexports.matchDerivedChannel = matchDerivedChannel;\nfunction toBase64(str) {\n if (platform_1.default.Config.createHmac) {\n return Buffer.from(str, 'ascii').toString('base64');\n }\n return (0, enc_base64_1.stringify)((0, enc_utf8_1.parse)(str));\n}\nexports.toBase64 = toBase64;\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(13)))\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(global) {\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = __webpack_require__(0);\nvar platform_1 = tslib_1.__importDefault(__webpack_require__(3));\n// Workaround for salesforce lightning locker compatibility\n// This is a shorthand version of Utils.getGlobalObject (which we can't use here without creating a circular import)\nvar globalObject = global || (typeof window !== 'undefined' ? window : self);\nvar LogLevels;\n(function (LogLevels) {\n LogLevels[LogLevels[\"None\"] = 0] = \"None\";\n LogLevels[LogLevels[\"Error\"] = 1] = \"Error\";\n LogLevels[LogLevels[\"Major\"] = 2] = \"Major\";\n LogLevels[LogLevels[\"Minor\"] = 3] = \"Minor\";\n LogLevels[LogLevels[\"Micro\"] = 4] = \"Micro\";\n})(LogLevels || (LogLevels = {}));\nfunction pad(timeSegment, three) {\n return \"\".concat(timeSegment).padStart(three ? 3 : 2, '0');\n}\nfunction getHandler(logger) {\n return platform_1.default.Config.logTimestamps\n ? function (msg) {\n var time = new Date();\n logger(pad(time.getHours()) +\n ':' +\n pad(time.getMinutes()) +\n ':' +\n pad(time.getSeconds()) +\n '.' +\n pad(time.getMilliseconds(), 1) +\n ' ' +\n msg);\n }\n : logger;\n}\nvar getDefaultLoggers = function () {\n var _a, _b;\n var consoleLogger;\n var errorLogger;\n /* Can't just check for console && console.log; fails in IE <=9 */\n if ((typeof Window === 'undefined' && typeof WorkerGlobalScope === 'undefined') /* node */ ||\n typeof ((_b = (_a = globalObject === null || globalObject === void 0 ? void 0 : globalObject.console) === null || _a === void 0 ? void 0 : _a.log) === null || _b === void 0 ? void 0 : _b.apply) === 'function' /* sensible browsers */) {\n consoleLogger = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n console.log.apply(console, args);\n };\n errorLogger = console.warn\n ? function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n console.warn.apply(console, args);\n }\n : consoleLogger;\n }\n else if (globalObject === null || globalObject === void 0 ? void 0 : globalObject.console.log) {\n /* IE <= 9 with the console open -- console.log does not\n * inherit from Function, so has no apply method */\n consoleLogger = errorLogger = function () {\n Function.prototype.apply.call(console.log, console, arguments);\n };\n }\n else {\n /* IE <= 9 when dev tools are closed - window.console not even defined */\n consoleLogger = errorLogger = function () { };\n }\n return [consoleLogger, errorLogger].map(getHandler);\n};\nvar Logger = /** @class */ (function () {\n function Logger() {\n Logger.logLevel = Logger.LOG_DEFAULT;\n }\n Logger.initLogHandlers = function () {\n var _a = getDefaultLoggers(), logHandler = _a[0], logErrorHandler = _a[1];\n this.logHandler = logHandler;\n this.logErrorHandler = logErrorHandler;\n };\n Logger.logLevel = LogLevels.Error; // default logLevel\n // public constants\n Logger.LOG_NONE = LogLevels.None;\n Logger.LOG_ERROR = LogLevels.Error;\n Logger.LOG_MAJOR = LogLevels.Major;\n Logger.LOG_MINOR = LogLevels.Minor;\n Logger.LOG_MICRO = LogLevels.Micro;\n // aliases\n Logger.LOG_DEFAULT = LogLevels.Error;\n Logger.LOG_DEBUG = LogLevels.Micro;\n /* public static functions */\n Logger.logAction = function (level, action, message) {\n if (Logger.shouldLog(level)) {\n (level === LogLevels.Error ? Logger.logErrorHandler : Logger.logHandler)('Ably: ' + action + ': ' + message);\n }\n };\n Logger.deprecated = function (original, replacement) {\n Logger.deprecatedWithMsg(original, \"Please use '\" + replacement + \"' instead.\");\n };\n Logger.deprecatedWithMsg = function (funcName, msg) {\n if (Logger.shouldLog(LogLevels.Error)) {\n Logger.logErrorHandler(\"Ably: Deprecation warning - '\" + funcName + \"' is deprecated and will be removed from a future version. \" + msg);\n }\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 Logger.shouldLog = function (level) {\n return level <= Logger.logLevel;\n };\n Logger.setLog = function (level, handler) {\n if (level !== undefined)\n Logger.logLevel = level;\n if (handler !== undefined)\n Logger.logHandler = Logger.logErrorHandler = handler;\n };\n return Logger;\n}());\nexports.default = Logger;\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(13)))\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Platform = /** @class */ (function () {\n function Platform() {\n }\n return Platform;\n}());\nexports.default = Platform;\n\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.PartialErrorInfo = void 0;\nvar tslib_1 = __webpack_require__(0);\nvar platform_1 = tslib_1.__importDefault(__webpack_require__(3));\nvar Utils = tslib_1.__importStar(__webpack_require__(1));\nfunction toString(err) {\n var 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=' + Utils.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 */ (function (_super) {\n tslib_1.__extends(ErrorInfo, _super);\n function ErrorInfo(message, code, statusCode, cause) {\n var _this = _super.call(this, message) || this;\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 return _this;\n }\n ErrorInfo.prototype.toString = function () {\n return toString(this);\n };\n ErrorInfo.fromValues = function (values) {\n var _a = values, message = _a.message, code = _a.code, statusCode = _a.statusCode;\n if (typeof message !== 'string' || typeof code !== 'number' || typeof statusCode !== 'number') {\n throw new Error('ErrorInfo.fromValues(): invalid values: ' + platform_1.default.Config.inspect(values));\n }\n var 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 return ErrorInfo;\n}(Error));\nexports.default = ErrorInfo;\nvar PartialErrorInfo = /** @class */ (function (_super) {\n tslib_1.__extends(PartialErrorInfo, _super);\n function PartialErrorInfo(message, code, statusCode, cause) {\n var _this = _super.call(this, message) || this;\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 return _this;\n }\n PartialErrorInfo.prototype.toString = function () {\n return toString(this);\n };\n return PartialErrorInfo;\n}(Error));\nexports.PartialErrorInfo = PartialErrorInfo;\n\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n;(function (root, factory) {\n\tif (true) {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(__webpack_require__(6));\n\t}\n\telse {}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Check if typed arrays are supported\n\t if (typeof ArrayBuffer != 'function') {\n\t return;\n\t }\n\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\n\t // Reference original init\n\t var superInit = WordArray.init;\n\n\t // Augment WordArray.init to handle typed arrays\n\t var subInit = WordArray.init = function (typedArray) {\n\t // Convert buffers to uint8\n\t if (typedArray instanceof ArrayBuffer) {\n\t typedArray = new Uint8Array(typedArray);\n\t }\n\n\t // Convert other array views to uint8\n\t if (\n\t typedArray instanceof Int8Array ||\n\t (typeof Uint8ClampedArray !== \"undefined\" && typedArray instanceof Uint8ClampedArray) ||\n\t typedArray instanceof Int16Array ||\n\t typedArray instanceof Uint16Array ||\n\t typedArray instanceof Int32Array ||\n\t typedArray instanceof Uint32Array ||\n\t typedArray instanceof Float32Array ||\n\t typedArray instanceof Float64Array\n\t ) {\n\t typedArray = new Uint8Array(typedArray.buffer, typedArray.byteOffset, typedArray.byteLength);\n\t }\n\n\t // Handle Uint8Array\n\t if (typedArray instanceof Uint8Array) {\n\t // Shortcut\n\t var typedArrayByteLength = typedArray.byteLength;\n\n\t // Extract bytes\n\t var words = [];\n\t for (var i = 0; i < typedArrayByteLength; i++) {\n\t words[i >>> 2] |= typedArray[i] << (24 - (i % 4) * 8);\n\t }\n\n\t // Initialize this word array\n\t superInit.call(this, words, typedArrayByteLength);\n\t } else {\n\t // Else call normal init\n\t superInit.apply(this, arguments);\n\t }\n\t };\n\n\t subInit.prototype = WordArray;\n\t}());\n\n\n\treturn CryptoJS.lib.WordArray;\n\n}));\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function(global) {;(function (root, factory) {\n\tif (true) {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory();\n\t}\n\telse {}\n}(this, function () {\n\n\t/*globals window, global, require*/\n\n\t/**\n\t * CryptoJS core components.\n\t */\n\tvar CryptoJS = CryptoJS || (function (Math, undefined) {\n\n\t var crypto;\n\n\t // Native crypto from window (Browser)\n\t if (typeof window !== 'undefined' && window.crypto) {\n\t crypto = window.crypto;\n\t }\n\n\t // Native (experimental IE 11) crypto from window (Browser)\n\t if (!crypto && typeof window !== 'undefined' && window.msCrypto) {\n\t crypto = window.msCrypto;\n\t }\n\n\t // Native crypto from global (NodeJS)\n\t if (!crypto && typeof global !== 'undefined' && global.crypto) {\n\t crypto = global.crypto;\n\t }\n\n\t // Native crypto import via require (NodeJS)\n\t if (!crypto && \"function\" === 'function') {\n\t try {\n\t crypto = __webpack_require__(44);\n\t } catch (err) {}\n\t }\n\n\t /*\n\t * Cryptographically secure pseudorandom number generator\n\t *\n\t * As Math.random() is cryptographically not safe to use\n\t */\n\t var cryptoSecureRandomInt = function () {\n\t if (crypto) {\n\t // Use getRandomValues method (Browser)\n\t if (typeof crypto.getRandomValues === 'function') {\n\t try {\n\t return crypto.getRandomValues(new Uint32Array(1))[0];\n\t } catch (err) {}\n\t }\n\n\t // Use randomBytes method (NodeJS)\n\t if (typeof crypto.randomBytes === 'function') {\n\t try {\n\t return crypto.randomBytes(4).readInt32LE();\n\t } catch (err) {}\n\t }\n\t }\n\n\t throw new Error('Native crypto module could not be used to get secure random number.');\n\t };\n\n\t /*\n\t * Local polyfill of Object.create\n\n\t */\n\t var create = Object.create || (function () {\n\t function F() {}\n\n\t return function (obj) {\n\t var subtype;\n\n\t F.prototype = obj;\n\n\t subtype = new F();\n\n\t F.prototype = null;\n\n\t return subtype;\n\t };\n\t }())\n\n\t /**\n\t * CryptoJS namespace.\n\t */\n\t var C = {};\n\n\t /**\n\t * Library namespace.\n\t */\n\t var C_lib = C.lib = {};\n\n\t /**\n\t * Base object for prototypal inheritance.\n\t */\n\t var Base = C_lib.Base = (function () {\n\n\n\t return {\n\t /**\n\t * Creates a new object that inherits from this object.\n\t *\n\t * @param {Object} overrides Properties to copy into the new object.\n\t *\n\t * @return {Object} The new object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var MyType = CryptoJS.lib.Base.extend({\n\t * field: 'value',\n\t *\n\t * method: function () {\n\t * }\n\t * });\n\t */\n\t extend: function (overrides) {\n\t // Spawn\n\t var subtype = create(this);\n\n\t // Augment\n\t if (overrides) {\n\t subtype.mixIn(overrides);\n\t }\n\n\t // Create default initializer\n\t if (!subtype.hasOwnProperty('init') || this.init === subtype.init) {\n\t subtype.init = function () {\n\t subtype.$super.init.apply(this, arguments);\n\t };\n\t }\n\n\t // Initializer's prototype is the subtype object\n\t subtype.init.prototype = subtype;\n\n\t // Reference supertype\n\t subtype.$super = this;\n\n\t return subtype;\n\t },\n\n\t /**\n\t * Extends this object and runs the init method.\n\t * Arguments to create() will be passed to init().\n\t *\n\t * @return {Object} The new object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var instance = MyType.create();\n\t */\n\t create: function () {\n\t var instance = this.extend();\n\t instance.init.apply(instance, arguments);\n\n\t return instance;\n\t },\n\n\t /**\n\t * Initializes a newly created object.\n\t * Override this method to add some logic when your objects are created.\n\t *\n\t * @example\n\t *\n\t * var MyType = CryptoJS.lib.Base.extend({\n\t * init: function () {\n\t * // ...\n\t * }\n\t * });\n\t */\n\t init: function () {\n\t },\n\n\t /**\n\t * Copies properties into this object.\n\t *\n\t * @param {Object} properties The properties to mix in.\n\t *\n\t * @example\n\t *\n\t * MyType.mixIn({\n\t * field: 'value'\n\t * });\n\t */\n\t mixIn: function (properties) {\n\t for (var propertyName in properties) {\n\t if (properties.hasOwnProperty(propertyName)) {\n\t this[propertyName] = properties[propertyName];\n\t }\n\t }\n\n\t // IE won't copy toString using the loop above\n\t if (properties.hasOwnProperty('toString')) {\n\t this.toString = properties.toString;\n\t }\n\t },\n\n\t /**\n\t * Creates a copy of this object.\n\t *\n\t * @return {Object} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = instance.clone();\n\t */\n\t clone: function () {\n\t return this.init.prototype.extend(this);\n\t }\n\t };\n\t }());\n\n\t /**\n\t * An array of 32-bit words.\n\t *\n\t * @property {Array} words The array of 32-bit words.\n\t * @property {number} sigBytes The number of significant bytes in this word array.\n\t */\n\t var WordArray = C_lib.WordArray = Base.extend({\n\t /**\n\t * Initializes a newly created word array.\n\t *\n\t * @param {Array} words (Optional) An array of 32-bit words.\n\t * @param {number} sigBytes (Optional) The number of significant bytes in the words.\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.lib.WordArray.create();\n\t * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]);\n\t * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6);\n\t */\n\t init: function (words, sigBytes) {\n\t words = this.words = words || [];\n\n\t if (sigBytes != undefined) {\n\t this.sigBytes = sigBytes;\n\t } else {\n\t this.sigBytes = words.length * 4;\n\t }\n\t },\n\n\t /**\n\t * Converts this word array to a string.\n\t *\n\t * @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex\n\t *\n\t * @return {string} The stringified word array.\n\t *\n\t * @example\n\t *\n\t * var string = wordArray + '';\n\t * var string = wordArray.toString();\n\t * var string = wordArray.toString(CryptoJS.enc.Utf8);\n\t */\n\t toString: function (encoder) {\n\t return (encoder || Hex).stringify(this);\n\t },\n\n\t /**\n\t * Concatenates a word array to this word array.\n\t *\n\t * @param {WordArray} wordArray The word array to append.\n\t *\n\t * @return {WordArray} This word array.\n\t *\n\t * @example\n\t *\n\t * wordArray1.concat(wordArray2);\n\t */\n\t concat: function (wordArray) {\n\t // Shortcuts\n\t var thisWords = this.words;\n\t var thatWords = wordArray.words;\n\t var thisSigBytes = this.sigBytes;\n\t var thatSigBytes = wordArray.sigBytes;\n\n\t // Clamp excess bits\n\t this.clamp();\n\n\t // Concat\n\t if (thisSigBytes % 4) {\n\t // Copy one byte at a time\n\t for (var i = 0; i < thatSigBytes; i++) {\n\t var thatByte = (thatWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t thisWords[(thisSigBytes + i) >>> 2] |= thatByte << (24 - ((thisSigBytes + i) % 4) * 8);\n\t }\n\t } else {\n\t // Copy one word at a time\n\t for (var i = 0; i < thatSigBytes; i += 4) {\n\t thisWords[(thisSigBytes + i) >>> 2] = thatWords[i >>> 2];\n\t }\n\t }\n\t this.sigBytes += thatSigBytes;\n\n\t // Chainable\n\t return this;\n\t },\n\n\t /**\n\t * Removes insignificant bits.\n\t *\n\t * @example\n\t *\n\t * wordArray.clamp();\n\t */\n\t clamp: function () {\n\t // Shortcuts\n\t var words = this.words;\n\t var sigBytes = this.sigBytes;\n\n\t // Clamp\n\t words[sigBytes >>> 2] &= 0xffffffff << (32 - (sigBytes % 4) * 8);\n\t words.length = Math.ceil(sigBytes / 4);\n\t },\n\n\t /**\n\t * Creates a copy of this word array.\n\t *\n\t * @return {WordArray} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = wordArray.clone();\n\t */\n\t clone: function () {\n\t var clone = Base.clone.call(this);\n\t clone.words = this.words.slice(0);\n\n\t return clone;\n\t },\n\n\t /**\n\t * Creates a word array filled with random bytes.\n\t *\n\t * @param {number} nBytes The number of random bytes to generate.\n\t *\n\t * @return {WordArray} The random word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.lib.WordArray.random(16);\n\t */\n\t random: function (nBytes) {\n\t var words = [];\n\n\t for (var i = 0; i < nBytes; i += 4) {\n\t words.push(cryptoSecureRandomInt());\n\t }\n\n\t return new WordArray.init(words, nBytes);\n\t }\n\t });\n\n\t /**\n\t * Encoder namespace.\n\t */\n\t var C_enc = C.enc = {};\n\n\t /**\n\t * Hex encoding strategy.\n\t */\n\t var Hex = C_enc.Hex = {\n\t /**\n\t * Converts a word array to a hex string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The hex string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hexString = CryptoJS.enc.Hex.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\n\t // Convert\n\t var hexChars = [];\n\t for (var i = 0; i < sigBytes; i++) {\n\t var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t hexChars.push((bite >>> 4).toString(16));\n\t hexChars.push((bite & 0x0f).toString(16));\n\t }\n\n\t return hexChars.join('');\n\t },\n\n\t /**\n\t * Converts a hex string to a word array.\n\t *\n\t * @param {string} hexStr The hex string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Hex.parse(hexString);\n\t */\n\t parse: function (hexStr) {\n\t // Shortcut\n\t var hexStrLength = hexStr.length;\n\n\t // Convert\n\t var words = [];\n\t for (var i = 0; i < hexStrLength; i += 2) {\n\t words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << (24 - (i % 8) * 4);\n\t }\n\n\t return new WordArray.init(words, hexStrLength / 2);\n\t }\n\t };\n\n\t /**\n\t * Latin1 encoding strategy.\n\t */\n\t var Latin1 = C_enc.Latin1 = {\n\t /**\n\t * Converts a word array to a Latin1 string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The Latin1 string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var latin1String = CryptoJS.enc.Latin1.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\n\t // Convert\n\t var latin1Chars = [];\n\t for (var i = 0; i < sigBytes; i++) {\n\t var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t latin1Chars.push(String.fromCharCode(bite));\n\t }\n\n\t return latin1Chars.join('');\n\t },\n\n\t /**\n\t * Converts a Latin1 string to a word array.\n\t *\n\t * @param {string} latin1Str The Latin1 string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Latin1.parse(latin1String);\n\t */\n\t parse: function (latin1Str) {\n\t // Shortcut\n\t var latin1StrLength = latin1Str.length;\n\n\t // Convert\n\t var words = [];\n\t for (var i = 0; i < latin1StrLength; i++) {\n\t words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8);\n\t }\n\n\t return new WordArray.init(words, latin1StrLength);\n\t }\n\t };\n\n\t /**\n\t * UTF-8 encoding strategy.\n\t */\n\t var Utf8 = C_enc.Utf8 = {\n\t /**\n\t * Converts a word array to a UTF-8 string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The UTF-8 string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var utf8String = CryptoJS.enc.Utf8.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t try {\n\t return decodeURIComponent(escape(Latin1.stringify(wordArray)));\n\t } catch (e) {\n\t throw new Error('Malformed UTF-8 data');\n\t }\n\t },\n\n\t /**\n\t * Converts a UTF-8 string to a word array.\n\t *\n\t * @param {string} utf8Str The UTF-8 string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Utf8.parse(utf8String);\n\t */\n\t parse: function (utf8Str) {\n\t return Latin1.parse(unescape(encodeURIComponent(utf8Str)));\n\t }\n\t };\n\n\t /**\n\t * Abstract buffered block algorithm template.\n\t *\n\t * The property blockSize must be implemented in a concrete subtype.\n\t *\n\t * @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0\n\t */\n\t var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({\n\t /**\n\t * Resets this block algorithm's data buffer to its initial state.\n\t *\n\t * @example\n\t *\n\t * bufferedBlockAlgorithm.reset();\n\t */\n\t reset: function () {\n\t // Initial values\n\t this._data = new WordArray.init();\n\t this._nDataBytes = 0;\n\t },\n\n\t /**\n\t * Adds new data to this block algorithm's buffer.\n\t *\n\t * @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8.\n\t *\n\t * @example\n\t *\n\t * bufferedBlockAlgorithm._append('data');\n\t * bufferedBlockAlgorithm._append(wordArray);\n\t */\n\t _append: function (data) {\n\t // Convert string to WordArray, else assume WordArray already\n\t if (typeof data == 'string') {\n\t data = Utf8.parse(data);\n\t }\n\n\t // Append\n\t this._data.concat(data);\n\t this._nDataBytes += data.sigBytes;\n\t },\n\n\t /**\n\t * Processes available data blocks.\n\t *\n\t * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype.\n\t *\n\t * @param {boolean} doFlush Whether all blocks and partial blocks should be processed.\n\t *\n\t * @return {WordArray} The processed data.\n\t *\n\t * @example\n\t *\n\t * var processedData = bufferedBlockAlgorithm._process();\n\t * var processedData = bufferedBlockAlgorithm._process(!!'flush');\n\t */\n\t _process: function (doFlush) {\n\t var processedWords;\n\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\t var dataSigBytes = data.sigBytes;\n\t var blockSize = this.blockSize;\n\t var blockSizeBytes = blockSize * 4;\n\n\t // Count blocks ready\n\t var nBlocksReady = dataSigBytes / blockSizeBytes;\n\t if (doFlush) {\n\t // Round up to include partial blocks\n\t nBlocksReady = Math.ceil(nBlocksReady);\n\t } else {\n\t // Round down to include only full blocks,\n\t // less the number of blocks that must remain in the buffer\n\t nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0);\n\t }\n\n\t // Count words ready\n\t var nWordsReady = nBlocksReady * blockSize;\n\n\t // Count bytes ready\n\t var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes);\n\n\t // Process blocks\n\t if (nWordsReady) {\n\t for (var offset = 0; offset < nWordsReady; offset += blockSize) {\n\t // Perform concrete-algorithm logic\n\t this._doProcessBlock(dataWords, offset);\n\t }\n\n\t // Remove processed words\n\t processedWords = dataWords.splice(0, nWordsReady);\n\t data.sigBytes -= nBytesReady;\n\t }\n\n\t // Return processed words\n\t return new WordArray.init(processedWords, nBytesReady);\n\t },\n\n\t /**\n\t * Creates a copy of this object.\n\t *\n\t * @return {Object} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = bufferedBlockAlgorithm.clone();\n\t */\n\t clone: function () {\n\t var clone = Base.clone.call(this);\n\t clone._data = this._data.clone();\n\n\t return clone;\n\t },\n\n\t _minBufferSize: 0\n\t });\n\n\t /**\n\t * Abstract hasher template.\n\t *\n\t * @property {number} blockSize The number of 32-bit words this hasher operates on. Default: 16 (512 bits)\n\t */\n\t var Hasher = C_lib.Hasher = BufferedBlockAlgorithm.extend({\n\t /**\n\t * Configuration options.\n\t */\n\t cfg: Base.extend(),\n\n\t /**\n\t * Initializes a newly created hasher.\n\t *\n\t * @param {Object} cfg (Optional) The configuration options to use for this hash computation.\n\t *\n\t * @example\n\t *\n\t * var hasher = CryptoJS.algo.SHA256.create();\n\t */\n\t init: function (cfg) {\n\t // Apply config defaults\n\t this.cfg = this.cfg.extend(cfg);\n\n\t // Set initial values\n\t this.reset();\n\t },\n\n\t /**\n\t * Resets this hasher to its initial state.\n\t *\n\t * @example\n\t *\n\t * hasher.reset();\n\t */\n\t reset: function () {\n\t // Reset data buffer\n\t BufferedBlockAlgorithm.reset.call(this);\n\n\t // Perform concrete-hasher logic\n\t this._doReset();\n\t },\n\n\t /**\n\t * Updates this hasher with a message.\n\t *\n\t * @param {WordArray|string} messageUpdate The message to append.\n\t *\n\t * @return {Hasher} This hasher.\n\t *\n\t * @example\n\t *\n\t * hasher.update('message');\n\t * hasher.update(wordArray);\n\t */\n\t update: function (messageUpdate) {\n\t // Append\n\t this._append(messageUpdate);\n\n\t // Update the hash\n\t this._process();\n\n\t // Chainable\n\t return this;\n\t },\n\n\t /**\n\t * Finalizes the hash computation.\n\t * Note that the finalize operation is effectively a destructive, read-once operation.\n\t *\n\t * @param {WordArray|string} messageUpdate (Optional) A final message update.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @example\n\t *\n\t * var hash = hasher.finalize();\n\t * var hash = hasher.finalize('message');\n\t * var hash = hasher.finalize(wordArray);\n\t */\n\t finalize: function (messageUpdate) {\n\t // Final message update\n\t if (messageUpdate) {\n\t this._append(messageUpdate);\n\t }\n\n\t // Perform concrete-hasher logic\n\t var hash = this._doFinalize();\n\n\t return hash;\n\t },\n\n\t blockSize: 512/32,\n\n\t /**\n\t * Creates a shortcut function to a hasher's object interface.\n\t *\n\t * @param {Hasher} hasher The hasher to create a helper for.\n\t *\n\t * @return {Function} The shortcut function.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256);\n\t */\n\t _createHelper: function (hasher) {\n\t return function (message, cfg) {\n\t return new hasher.init(cfg).finalize(message);\n\t };\n\t },\n\n\t /**\n\t * Creates a shortcut function to the HMAC's object interface.\n\t *\n\t * @param {Hasher} hasher The hasher to use in this HMAC helper.\n\t *\n\t * @return {Function} The shortcut function.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256);\n\t */\n\t _createHmacHelper: function (hasher) {\n\t return function (message, key) {\n\t return new C_algo.HMAC.init(hasher, key).finalize(message);\n\t };\n\t }\n\t });\n\n\t /**\n\t * Algorithm namespace.\n\t */\n\t var C_algo = C.algo = {};\n\n\t return C;\n\t}(Math));\n\n\n\treturn CryptoJS;\n\n}));\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(13)))\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = __webpack_require__(0);\nvar Utils = tslib_1.__importStar(__webpack_require__(1));\nvar logger_1 = tslib_1.__importDefault(__webpack_require__(2));\nvar platform_1 = tslib_1.__importDefault(__webpack_require__(3));\n/* Call the listener, catch any exceptions and log, but continue operation*/\nfunction callListener(eventThis, listener, args) {\n try {\n listener.apply(eventThis, args);\n }\n catch (e) {\n logger_1.default.logAction(logger_1.default.LOG_ERROR, 'EventEmitter.emit()', 'Unexpected listener exception: ' + e + '; stack = ' + (e && e.stack));\n }\n}\n/**\n * Remove listeners that match listener\n * @param targetListeners is an array of listener arrays or event objects with arrays of listeners\n * @param listener the listener callback to remove\n * @param eventFilter (optional) event name instructing the function to only remove listeners for the specified event\n */\nfunction removeListener(targetListeners, listener, eventFilter) {\n var listeners;\n var index;\n var eventName;\n for (var targetListenersIndex = 0; targetListenersIndex < targetListeners.length; targetListenersIndex++) {\n listeners = targetListeners[targetListenersIndex];\n if (eventFilter) {\n listeners = listeners[eventFilter];\n }\n if (Utils.isArray(listeners)) {\n while ((index = Utils.arrIndexOf(listeners, listener)) !== -1) {\n listeners.splice(index, 1);\n }\n /* If events object has an event name key with no listeners then\n remove the key to stop the list growing indefinitely */\n if (eventFilter && listeners.length === 0) {\n delete targetListeners[targetListenersIndex][eventFilter];\n }\n }\n else if (Utils.isObject(listeners)) {\n /* events */\n for (eventName in listeners) {\n if (Object.prototype.hasOwnProperty.call(listeners, eventName) && Utils.isArray(listeners[eventName])) {\n removeListener([listeners], listener, eventName);\n }\n }\n }\n }\n}\nvar EventEmitter = /** @class */ (function () {\n function EventEmitter() {\n this.any = [];\n this.events = Object.create(null);\n this.anyOnce = [];\n this.eventsOnce = Object.create(null);\n }\n EventEmitter.prototype.on = function () {\n var _this = this;\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (args.length === 1) {\n var listener = args[0];\n if (typeof listener === 'function') {\n this.any.push(listener);\n }\n else {\n throw new Error('EventListener.on(): Invalid arguments: ' + platform_1.default.Config.inspect(args));\n }\n }\n if (args.length === 2) {\n var event_1 = args[0], listener_1 = args[1];\n if (typeof listener_1 !== 'function') {\n throw new Error('EventListener.on(): Invalid arguments: ' + platform_1.default.Config.inspect(args));\n }\n if (Utils.isEmptyArg(event_1)) {\n this.any.push(listener_1);\n }\n else if (Utils.isArray(event_1)) {\n event_1.forEach(function (eventName) {\n _this.on(eventName, listener_1);\n });\n }\n else {\n if (typeof event_1 !== 'string') {\n throw new Error('EventListener.on(): Invalid arguments: ' + platform_1.default.Config.inspect(args));\n }\n var listeners = this.events[event_1] || (this.events[event_1] = []);\n listeners.push(listener_1);\n }\n }\n };\n EventEmitter.prototype.off = function () {\n var _a;\n var _this = this;\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (args.length == 0 || (Utils.isEmptyArg(args[0]) && Utils.isEmptyArg(args[1]))) {\n this.any = [];\n this.events = Object.create(null);\n this.anyOnce = [];\n this.eventsOnce = Object.create(null);\n return;\n }\n var firstArg = args[0], secondArg = args[1];\n var listener = null;\n var event = null;\n if (args.length === 1 || !secondArg) {\n if (typeof firstArg === 'function') {\n /* we take this to be the listener and treat the event as \"any\" .. */\n listener = firstArg;\n }\n else {\n event = firstArg;\n }\n /* ... or we take event to be the actual event name and listener to be all */\n }\n else {\n if (typeof secondArg !== 'function') {\n throw new Error('EventEmitter.off(): invalid arguments:' + platform_1.default.Config.inspect(args));\n }\n _a = [firstArg, secondArg], event = _a[0], listener = _a[1];\n }\n if (listener && Utils.isEmptyArg(event)) {\n removeListener([this.any, this.events, this.anyOnce, this.eventsOnce], listener);\n return;\n }\n if (Utils.isArray(event)) {\n event.forEach(function (eventName) {\n _this.off(eventName, listener);\n });\n return;\n }\n /* \"normal\" case where event is an actual event */\n if (typeof event !== 'string') {\n throw new Error('EventEmitter.off(): invalid arguments:' + platform_1.default.Config.inspect(args));\n }\n if (listener) {\n removeListener([this.events, this.eventsOnce], listener, event);\n }\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 EventEmitter.prototype.listeners = function (event) {\n if (event) {\n var 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 EventEmitter.prototype.emit = function (event) {\n var args = []; /* , args... */\n for (var _i = 1 /* , args... */; _i < arguments.length /* , args... */; _i++ /* , args... */) {\n args[_i - 1] = arguments[_i]; /* , args... */\n }\n var eventThis = { event: event };\n var 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 var eventsOnceListeners = this.eventsOnce[event];\n if (eventsOnceListeners) {\n Array.prototype.push.apply(listeners, eventsOnceListeners);\n delete this.eventsOnce[event];\n }\n var eventsListeners = this.events[event];\n if (eventsListeners) {\n Array.prototype.push.apply(listeners, eventsListeners);\n }\n Utils.arrForEach(listeners, function (listener) {\n callListener(eventThis, listener, args);\n });\n };\n EventEmitter.prototype.once = function () {\n var _this = this;\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var argCount = args.length;\n if ((argCount === 0 || (argCount === 1 && typeof args[0] !== 'function')) && platform_1.default.Config.Promise) {\n var event_2 = args[0];\n return new platform_1.default.Config.Promise(function (resolve) {\n _this.once(event_2, resolve);\n });\n }\n var firstArg = args[0], secondArg = args[1];\n if (args.length === 1 && typeof firstArg === 'function') {\n this.anyOnce.push(firstArg);\n }\n else if (Utils.isEmptyArg(firstArg)) {\n if (typeof secondArg !== 'function') {\n throw new Error('EventEmitter.once(): Invalid arguments:' + platform_1.default.Config.inspect(args));\n }\n this.anyOnce.push(secondArg);\n }\n else if (Utils.isArray(firstArg)) {\n var self_1 = this;\n var listenerWrapper_1 = function () {\n var innerArgs = Array.prototype.slice.call(arguments);\n Utils.arrForEach(firstArg, function (eventName) {\n self_1.off(eventName, listenerWrapper_1);\n });\n if (typeof secondArg !== 'function') {\n throw new Error('EventEmitter.once(): Invalid arguments:' + platform_1.default.Config.inspect(args));\n }\n secondArg.apply(this, innerArgs);\n };\n Utils.arrForEach(firstArg, function (eventName) {\n self_1.on(eventName, listenerWrapper_1);\n });\n }\n else {\n if (typeof firstArg !== 'string') {\n throw new Error('EventEmitter.once(): Invalid arguments:' + platform_1.default.Config.inspect(args));\n }\n var listeners = this.eventsOnce[firstArg] || (this.eventsOnce[firstArg] = []);\n if (secondArg) {\n if (typeof secondArg !== 'function') {\n throw new Error('EventEmitter.once(): Invalid arguments:' + platform_1.default.Config.inspect(args));\n }\n listeners.push(secondArg);\n }\n }\n };\n /**\n * Private API\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 * @param listener the listener to be called\n * @param listenerArgs\n */\n EventEmitter.prototype.whenState = function (targetState, currentState, listener) {\n var _this = this;\n var listenerArgs = [];\n for (var _i = 3; _i < arguments.length; _i++) {\n listenerArgs[_i - 3] = arguments[_i];\n }\n var eventThis = { event: targetState };\n if (typeof targetState !== 'string' || typeof currentState !== 'string') {\n throw 'whenState requires a valid event String argument';\n }\n if (typeof listener !== 'function' && platform_1.default.Config.Promise) {\n return new platform_1.default.Config.Promise(function (resolve) {\n EventEmitter.prototype.whenState.apply(_this, [targetState, currentState, resolve].concat(listenerArgs));\n });\n }\n if (targetState === currentState) {\n callListener(eventThis, listener, listenerArgs);\n }\n else {\n this.once(targetState, listener);\n }\n };\n return EventEmitter;\n}());\nexports.default = EventEmitter;\n\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getDefaults = exports.normaliseOptions = exports.objectifyOptions = exports.getAgentString = exports.getHosts = exports.getFallbackHosts = exports.environmentFallbackHosts = exports.getHttpScheme = exports.getPort = exports.getHost = void 0;\nvar tslib_1 = __webpack_require__(0);\nvar platform_1 = tslib_1.__importDefault(__webpack_require__(3));\nvar Utils = tslib_1.__importStar(__webpack_require__(1));\nvar logger_1 = tslib_1.__importDefault(__webpack_require__(2));\nvar errorinfo_1 = tslib_1.__importDefault(__webpack_require__(4));\nvar package_json_1 = __webpack_require__(43);\nvar agent = 'ably-js/' + package_json_1.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: 15000,\n suspendedRetryTimeout: 30000,\n /* Undocumented, but part of the api and can be used by customers: */\n httpRequestTimeout: 15000,\n channelRetryTimeout: 15000,\n fallbackRetryTimeout: 600000,\n /* For internal / test use only: */\n connectionStateTtl: 120000,\n realtimeRequestTimeout: 10000,\n recvTimeout: 90000,\n preferenceConnectTimeout: 6000,\n parallelUpgradeDelay: 6000,\n },\n httpMaxRetryCount: 3,\n maxMessageSize: 65536,\n version: package_json_1.version,\n protocolVersion: 2,\n agent: agent,\n getHost: getHost,\n getPort: getPort,\n getHttpScheme: getHttpScheme,\n environmentFallbackHosts: environmentFallbackHosts,\n getFallbackHosts: getFallbackHosts,\n getHosts: getHosts,\n checkHost: checkHost,\n objectifyOptions: objectifyOptions,\n normaliseOptions: normaliseOptions,\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}\nexports.getHost = getHost;\nfunction getPort(options, tls) {\n return tls || options.tls ? options.tlsPort : options.port;\n}\nexports.getPort = getPort;\nfunction getHttpScheme(options) {\n return options.tls ? 'https://' : 'http://';\n}\nexports.getHttpScheme = getHttpScheme;\n// construct environment fallback hosts as per RSC15i\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}\nexports.environmentFallbackHosts = environmentFallbackHosts;\nfunction getFallbackHosts(options) {\n var fallbackHosts = options.fallbackHosts, httpMaxRetryCount = typeof options.httpMaxRetryCount !== 'undefined' ? options.httpMaxRetryCount : Defaults.httpMaxRetryCount;\n return fallbackHosts ? Utils.arrChooseN(fallbackHosts, httpMaxRetryCount) : [];\n}\nexports.getFallbackHosts = getFallbackHosts;\nfunction getHosts(options) {\n return [options.restHost].concat(getFallbackHosts(options));\n}\nexports.getHosts = getHosts;\nfunction checkHost(host) {\n if (typeof host !== 'string') {\n throw new errorinfo_1.default('host must be a string; was a ' + typeof host, 40000, 400);\n }\n if (!host.length) {\n throw new errorinfo_1.default('host must not be zero-length', 40000, 400);\n }\n}\nfunction getRealtimeHost(options, production, environment) {\n if (options.realtimeHost)\n return options.realtimeHost;\n /* prefer setting realtimeHost to restHost as a custom restHost typically indicates\n * a development environment is being used that can't be inferred by the library */\n if (options.restHost) {\n logger_1.default.logAction(logger_1.default.LOG_MINOR, 'Defaults.normaliseOptions', 'restHost is set to \"' +\n options.restHost +\n '\" but realtimeHost is not set, so setting realtimeHost to \"' +\n options.restHost +\n '\" too. If this is not what you want, please set realtimeHost explicitly.');\n return options.restHost;\n }\n return production ? Defaults.REALTIME_HOST : environment + '-' + Defaults.REALTIME_HOST;\n}\nfunction getTimeouts(options) {\n /* Allow values passed in options to override default timeouts */\n var timeouts = {};\n for (var prop in Defaults.TIMEOUTS) {\n timeouts[prop] = options[prop] || Defaults.TIMEOUTS[prop];\n }\n return timeouts;\n}\nfunction getAgentString(options) {\n var agentStr = Defaults.agent;\n if (options.agents) {\n for (var agent in options.agents) {\n agentStr += ' ' + agent + '/' + options.agents[agent];\n }\n }\n return agentStr;\n}\nexports.getAgentString = getAgentString;\nfunction objectifyOptions(options) {\n if (typeof options == 'string') {\n return options.indexOf(':') == -1 ? { token: options } : { key: options };\n }\n return options;\n}\nexports.objectifyOptions = objectifyOptions;\nfunction normaliseOptions(options) {\n /* Deprecated options */\n if (options.host) {\n logger_1.default.deprecated('host', 'restHost');\n options.restHost = options.host;\n }\n if (options.wsHost) {\n logger_1.default.deprecated('wsHost', 'realtimeHost');\n options.realtimeHost = options.wsHost;\n }\n if (options.queueEvents) {\n logger_1.default.deprecated('queueEvents', 'queueMessages');\n options.queueMessages = options.queueEvents;\n }\n if (options.fallbackHostsUseDefault) {\n /* fallbackHostsUseDefault and fallbackHosts are mutually exclusive as per TO3k7 */\n if (options.fallbackHosts) {\n var msg = 'fallbackHosts and fallbackHostsUseDefault cannot both be set';\n logger_1.default.logAction(logger_1.default.LOG_ERROR, 'Defaults.normaliseOptions', msg);\n throw new errorinfo_1.default(msg, 40000, 400);\n }\n /* default fallbacks can't be used with custom ports */\n if (options.port || options.tlsPort) {\n var msg = 'fallbackHostsUseDefault cannot be set when port or tlsPort are set';\n logger_1.default.logAction(logger_1.default.LOG_ERROR, 'Defaults.normaliseOptions', msg);\n throw new errorinfo_1.default(msg, 40000, 400);\n }\n /* emit an appropriate deprecation warning */\n if (options.environment) {\n logger_1.default.deprecatedWithMsg('fallbackHostsUseDefault', 'There is no longer a need to set this when the environment option is also set since the library will now generate the correct fallback hosts using the environment option.');\n }\n else {\n logger_1.default.deprecated('fallbackHostsUseDefault', 'fallbackHosts: Ably.Defaults.FALLBACK_HOSTS');\n }\n /* use the default fallback hosts as requested */\n options.fallbackHosts = Defaults.FALLBACK_HOSTS;\n }\n /* options.recover as a boolean is deprecated, and therefore is not part of the public typing */\n if (options.recover === true) {\n logger_1.default.deprecated('{recover: true}', '{recover: function(lastConnectionDetails, cb) { cb(true); }}');\n options.recover = function (lastConnectionDetails, cb) {\n cb(true);\n };\n }\n if (typeof options.recover === 'function' && options.closeOnUnload === true) {\n logger_1.default.logAction(logger_1.default.LOG_ERROR, 'Defaults.normaliseOptions', 'closeOnUnload was true and a session recovery function was set - these are mutually exclusive, so unsetting the latter');\n options.recover = undefined;\n }\n if (!('closeOnUnload' in options)) {\n /* Have closeOnUnload default to true unless we have any indication that\n * the user may want to recover the connection */\n options.closeOnUnload = !options.recover;\n }\n if (options.transports && Utils.arrIn(options.transports, 'xhr')) {\n logger_1.default.deprecated('transports: [\"xhr\"]', 'transports: [\"xhr_streaming\"]');\n Utils.arrDeleteValue(options.transports, 'xhr');\n options.transports.push('xhr_streaming');\n }\n if (!('queueMessages' in options))\n options.queueMessages = true;\n /* infer hosts and fallbacks based on the configured environment */\n var environment = (options.environment && String(options.environment).toLowerCase()) || Defaults.ENVIRONMENT;\n var 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 var restHost = options.restHost || (production ? Defaults.REST_HOST : environment + '-' + Defaults.REST_HOST);\n var realtimeHost = getRealtimeHost(options, production, environment);\n Utils.arrForEach((options.fallbackHosts || []).concat(restHost, realtimeHost), 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 var timeouts = getTimeouts(options);\n if ('useBinaryProtocol' in options) {\n options.useBinaryProtocol = platform_1.default.Config.supportsBinary && options.useBinaryProtocol;\n }\n else {\n options.useBinaryProtocol = platform_1.default.Config.preferBinary;\n }\n if (options.clientId) {\n var headers = (options.headers = options.headers || {});\n headers['X-Ably-ClientId'] = platform_1.default.BufferUtils.base64Encode(platform_1.default.BufferUtils.utf8Encode(options.clientId));\n }\n if (!('idempotentRestPublishing' in options)) {\n options.idempotentRestPublishing = true;\n }\n if (options.promises && !platform_1.default.Config.Promise) {\n logger_1.default.logAction(logger_1.default.LOG_ERROR, 'Defaults.normaliseOptions', '{promises: true} was specified, but no Promise constructor found; disabling promises');\n options.promises = false;\n }\n var connectivityCheckParams = null;\n var connectivityCheckUrl = options.connectivityCheckUrl;\n if (options.connectivityCheckUrl) {\n var _a = options.connectivityCheckUrl.split('?'), uri = _a[0], qs = _a[1];\n connectivityCheckParams = qs ? Utils.parseQueryString(qs) : {};\n if (uri.indexOf('://') === -1) {\n uri = 'https://' + uri;\n }\n connectivityCheckUrl = uri;\n }\n return tslib_1.__assign(tslib_1.__assign({}, options), { useBinaryProtocol: 'useBinaryProtocol' in options\n ? platform_1.default.Config.supportsBinary && options.useBinaryProtocol\n : platform_1.default.Config.preferBinary, realtimeHost: realtimeHost, restHost: restHost, maxMessageSize: options.maxMessageSize || Defaults.maxMessageSize, timeouts: timeouts, connectivityCheckParams: connectivityCheckParams, connectivityCheckUrl: connectivityCheckUrl });\n}\nexports.normaliseOptions = normaliseOptions;\nexports.default = Defaults;\nfunction getDefaults(platformDefaults) {\n return Object.assign(Defaults, platformDefaults);\n}\nexports.getDefaults = getDefaults;\n\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = __webpack_require__(0);\nvar platform_1 = tslib_1.__importDefault(__webpack_require__(3));\nvar logger_1 = tslib_1.__importDefault(__webpack_require__(2));\nvar errorinfo_1 = tslib_1.__importDefault(__webpack_require__(4));\nvar Utils = tslib_1.__importStar(__webpack_require__(1));\nfunction normaliseContext(context) {\n if (!context || !context.channelOptions) {\n return {\n channelOptions: context,\n plugins: {},\n baseEncodedPreviousPayload: undefined,\n };\n }\n return context;\n}\nfunction normalizeCipherOptions(options) {\n if (options && options.cipher) {\n if (!platform_1.default.Crypto)\n throw new Error('Encryption not enabled; use ably.encryption.js instead');\n var cipher = platform_1.default.Crypto.getCipher(options.cipher);\n return {\n cipher: cipher.cipherParams,\n channelCipher: cipher.cipher,\n };\n }\n return options !== null && options !== void 0 ? options : {};\n}\nfunction getMessageSize(msg) {\n var 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 += Utils.dataSizeBytes(msg.data);\n }\n return size;\n}\nvar Message = /** @class */ (function () {\n function Message() {\n }\n /**\n * Overload toJSON() to intercept JSON.stringify()\n * @return {*}\n */\n Message.prototype.toJSON = function () {\n /* encode data to base64 if present and we're returning real JSON;\n * although msgpack calls toJSON(), we know it is a stringify()\n * call if it has a non-empty arguments list */\n var encoding = this.encoding;\n var data = this.data;\n if (data && platform_1.default.BufferUtils.isBuffer(data)) {\n if (arguments.length > 0) {\n /* stringify call */\n encoding = encoding ? encoding + '/base64' : 'base64';\n data = platform_1.default.BufferUtils.base64Encode(data);\n }\n else {\n /* Called by msgpack. toBuffer returns a datatype understandable by\n * that platform's msgpack implementation (Buffer in node, Uint8Array\n * in browsers) */\n data = platform_1.default.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 encoding: encoding,\n data: data,\n };\n };\n Message.prototype.toString = function () {\n var 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_1.default.BufferUtils.isBuffer(this.data))\n result += '; data (buffer)=' + platform_1.default.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 result += ']';\n return result;\n };\n Message.encrypt = function (msg, options, callback) {\n var data = msg.data, encoding = msg.encoding, cipher = options.channelCipher;\n encoding = encoding ? encoding + '/' : '';\n if (!platform_1.default.BufferUtils.isBuffer(data)) {\n data = platform_1.default.BufferUtils.utf8Encode(String(data));\n encoding = encoding + 'utf-8/';\n }\n cipher.encrypt(data, function (err, data) {\n if (err) {\n callback(err);\n return;\n }\n msg.data = data;\n msg.encoding = encoding + 'cipher+' + cipher.algorithm;\n callback(null, msg);\n });\n };\n Message.encode = function (msg, options, callback) {\n var data = msg.data;\n var nativeDataType = typeof data == 'string' || platform_1.default.BufferUtils.isBuffer(data) || data === null || data === undefined;\n if (!nativeDataType) {\n if (Utils.isObject(data) || Utils.isArray(data)) {\n msg.data = JSON.stringify(data);\n msg.encoding = msg.encoding ? msg.encoding + '/json' : 'json';\n }\n else {\n throw new errorinfo_1.default('Data type is unsupported', 40013, 400);\n }\n }\n if (options != null && options.cipher) {\n Message.encrypt(msg, options, callback);\n }\n else {\n callback(null, msg);\n }\n };\n Message.encodeArray = function (messages, options, callback) {\n var processed = 0;\n for (var i = 0; i < messages.length; i++) {\n Message.encode(messages[i], options, function (err) {\n if (err) {\n callback(err);\n return;\n }\n processed++;\n if (processed == messages.length) {\n callback(null, messages);\n }\n });\n }\n };\n Message.decode = function (message, inputContext) {\n var context = normaliseContext(inputContext);\n var lastPayload = message.data;\n var encoding = message.encoding;\n if (encoding) {\n var xforms = encoding.split('/');\n var lastProcessedEncodingIndex = void 0, encodingsToProcess = xforms.length, data = message.data;\n var xform = '';\n try {\n while ((lastProcessedEncodingIndex = encodingsToProcess) > 0) {\n // eslint-disable-next-line security/detect-unsafe-regex\n var match = xforms[--encodingsToProcess].match(/([-\\w]+)(\\+([\\w-]+))?/);\n if (!match)\n break;\n xform = match[1];\n switch (xform) {\n case 'base64':\n data = platform_1.default.BufferUtils.base64Decode(String(data));\n if (lastProcessedEncodingIndex == xforms.length) {\n lastPayload = data;\n }\n continue;\n case 'utf-8':\n data = platform_1.default.BufferUtils.utf8Decode(data);\n continue;\n case 'json':\n data = JSON.parse(data);\n continue;\n case 'cipher':\n if (context.channelOptions != null &&\n context.channelOptions.cipher &&\n context.channelOptions.channelCipher) {\n var xformAlgorithm = match[3], cipher = context.channelOptions.channelCipher;\n /* don't attempt to decrypt unless the cipher params are compatible */\n if (xformAlgorithm != cipher.algorithm) {\n throw new Error('Unable to decrypt message with given cipher; incompatible cipher params');\n }\n data = cipher.decrypt(data);\n continue;\n }\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_1.default('Missing Vcdiff decoder (https://github.com/ably-forks/vcdiff-decoder)', 40019, 400);\n }\n if (typeof Uint8Array === 'undefined') {\n throw new errorinfo_1.default('Delta decoding not supported on this browser (need ArrayBuffer & Uint8Array)', 40020, 400);\n }\n try {\n var deltaBase = context.baseEncodedPreviousPayload;\n if (typeof deltaBase === 'string') {\n deltaBase = platform_1.default.BufferUtils.utf8Encode(deltaBase);\n }\n /* vcdiff expects Uint8Arrays, can't copy with ArrayBuffers. (also, if we\n * don't have a TextDecoder, deltaBase might be a WordArray here, so need\n * to process it into a buffer anyway) */\n deltaBase = platform_1.default.BufferUtils.toBuffer(deltaBase);\n data = platform_1.default.BufferUtils.toBuffer(data);\n data = platform_1.default.BufferUtils.typedArrayToBuffer(context.plugins.vcdiff.decode(data, deltaBase));\n lastPayload = data;\n }\n catch (e) {\n throw new errorinfo_1.default('Vcdiff delta decode failed with ' + e, 40018, 400);\n }\n continue;\n default:\n throw new Error('Unknown encoding');\n }\n }\n }\n catch (e) {\n var err = e;\n throw new errorinfo_1.default('Error processing the ' + xform + ' encoding, decoder returned ‘' + err.message + '’', err.code || 40013, 400);\n }\n finally {\n message.encoding =\n lastProcessedEncodingIndex <= 0 ? null : xforms.slice(0, lastProcessedEncodingIndex).join('/');\n message.data = data;\n }\n }\n context.baseEncodedPreviousPayload = lastPayload;\n };\n Message.fromResponseBody = function (body, options, format) {\n if (format) {\n body = Utils.decodeBody(body, format);\n }\n for (var i = 0; i < body.length; i++) {\n var msg = (body[i] = Message.fromValues(body[i]));\n try {\n Message.decode(msg, options);\n }\n catch (e) {\n logger_1.default.logAction(logger_1.default.LOG_ERROR, 'Message.fromResponseBody()', e.toString());\n }\n }\n return body;\n };\n Message.fromValues = function (values) {\n return Object.assign(new Message(), values);\n };\n Message.fromValuesArray = function (values) {\n var count = values.length, result = new Array(count);\n for (var i = 0; i < count; i++)\n result[i] = Message.fromValues(values[i]);\n return result;\n };\n Message.fromEncoded = function (encoded, inputOptions) {\n var msg = Message.fromValues(encoded);\n var options = normalizeCipherOptions(inputOptions !== null && inputOptions !== void 0 ? inputOptions : null);\n /* if decoding fails at any point, catch and return the message decoded to\n * the fullest extent possible */\n try {\n Message.decode(msg, options);\n }\n catch (e) {\n logger_1.default.logAction(logger_1.default.LOG_ERROR, 'Message.fromEncoded()', e.toString());\n }\n return msg;\n };\n Message.fromEncodedArray = function (encodedArray, options) {\n return encodedArray.map(function (encoded) {\n return Message.fromEncoded(encoded, options);\n });\n };\n /* This should be called on encode()d (and encrypt()d) Messages (as it\n * assumes the data is a string or buffer) */\n Message.getMessagesSize = function (messages) {\n var msg, total = 0;\n for (var i = 0; i < messages.length; i++) {\n msg = messages[i];\n total += msg.size || (msg.size = getMessageSize(msg));\n }\n return total;\n };\n Message.serialize = Utils.encodeBody;\n return Message;\n}());\nexports.default = Message;\n\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = __webpack_require__(0);\nvar Utils = tslib_1.__importStar(__webpack_require__(1));\nvar errorinfo_1 = tslib_1.__importDefault(__webpack_require__(4));\nvar message_1 = tslib_1.__importDefault(__webpack_require__(9));\nvar presencemessage_1 = tslib_1.__importDefault(__webpack_require__(14));\nvar actions = {\n HEARTBEAT: 0,\n ACK: 1,\n NACK: 2,\n CONNECT: 3,\n CONNECTED: 4,\n DISCONNECT: 5,\n DISCONNECTED: 6,\n CLOSE: 7,\n CLOSED: 8,\n ERROR: 9,\n ATTACH: 10,\n ATTACHED: 11,\n DETACH: 12,\n DETACHED: 13,\n PRESENCE: 14,\n MESSAGE: 15,\n SYNC: 16,\n AUTH: 17,\n ACTIVATE: 18,\n};\nvar ActionName = [];\nObject.keys(actions).forEach(function (name) {\n ActionName[actions[name]] = name;\n});\nvar flags = {\n /* Channel attach state flags */\n HAS_PRESENCE: 1 << 0,\n HAS_BACKLOG: 1 << 1,\n RESUMED: 1 << 2,\n TRANSIENT: 1 << 4,\n ATTACH_RESUME: 1 << 5,\n /* 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 var result = [];\n if (array) {\n for (var i = 0; i < array.length; i++) {\n result.push(array[i].toString());\n }\n }\n return '[ ' + result.join(', ') + ' ]';\n}\nvar simpleAttributes = 'id channel channelSerial connectionId count msgSerial timestamp'.split(' ');\nvar ProtocolMessage = /** @class */ (function () {\n function ProtocolMessage() {\n var _this = this;\n this.hasFlag = function (flag) {\n return (_this.flags & flags[flag]) > 0;\n };\n }\n ProtocolMessage.prototype.setFlag = function (flag) {\n return (this.flags = this.flags | flags[flag]);\n };\n ProtocolMessage.prototype.getMode = function () {\n return this.flags && this.flags & flags.MODE_ALL;\n };\n ProtocolMessage.prototype.encodeModesToFlags = function (modes) {\n var _this = this;\n modes.forEach(function (mode) { return _this.setFlag(mode); });\n };\n ProtocolMessage.prototype.decodeModesFromFlags = function () {\n var _this = this;\n var modes = [];\n ProtocolMessage.channelModes.forEach(function (mode) {\n if (_this.hasFlag(mode)) {\n modes.push(mode);\n }\n });\n return modes.length > 0 ? modes : undefined;\n };\n ProtocolMessage.fromValues = function (values) {\n return Object.assign(new ProtocolMessage(), values);\n };\n ProtocolMessage.Action = actions;\n ProtocolMessage.channelModes = ['PRESENCE', 'PUBLISH', 'SUBSCRIBE', 'PRESENCE_SUBSCRIBE'];\n ProtocolMessage.ActionName = ActionName;\n ProtocolMessage.serialize = Utils.encodeBody;\n ProtocolMessage.deserialize = function (serialized, format) {\n var deserialized = Utils.decodeBody(serialized, format);\n return ProtocolMessage.fromDeserialized(deserialized);\n };\n ProtocolMessage.fromDeserialized = function (deserialized) {\n var error = deserialized.error;\n if (error)\n deserialized.error = errorinfo_1.default.fromValues(error);\n var messages = deserialized.messages;\n if (messages)\n for (var i = 0; i < messages.length; i++)\n messages[i] = message_1.default.fromValues(messages[i]);\n var presence = deserialized.presence;\n if (presence)\n for (var i = 0; i < presence.length; i++)\n presence[i] = presencemessage_1.default.fromValues(presence[i], true);\n return Object.assign(new ProtocolMessage(), deserialized);\n };\n ProtocolMessage.stringify = function (msg) {\n var result = '[ProtocolMessage';\n if (msg.action !== undefined)\n result += '; action=' + ProtocolMessage.ActionName[msg.action] || false;\n var attribute;\n for (var attribIndex = 0; attribIndex < simpleAttributes.length; attribIndex++) {\n attribute = simpleAttributes[attribIndex];\n if (msg[attribute] !== undefined)\n result += '; ' + attribute + '=' + msg[attribute];\n }\n if (msg.messages)\n result += '; messages=' + toStringArray(message_1.default.fromValuesArray(msg.messages));\n if (msg.presence)\n result += '; presence=' + toStringArray(presencemessage_1.default.fromValuesArray(msg.presence));\n if (msg.error)\n result += '; error=' + errorinfo_1.default.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 var stringifiedParams_1 = '';\n Utils.forInOwnNonNullProperties(msg.params, function (prop) {\n if (stringifiedParams_1.length > 0) {\n stringifiedParams_1 += '; ';\n }\n stringifiedParams_1 += prop + '=' + msg.params[prop];\n });\n if (stringifiedParams_1.length > 0) {\n result += '; params=[' + stringifiedParams_1 + ']';\n }\n }\n result += ']';\n return result;\n };\n return ProtocolMessage;\n}());\nexports.default = ProtocolMessage;\n\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports, __webpack_require__) {\n\n;(function (root, factory) {\n\tif (true) {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(__webpack_require__(6));\n\t}\n\telse {}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var C_enc = C.enc;\n\n\t /**\n\t * Base64 encoding strategy.\n\t */\n\t var Base64 = C_enc.Base64 = {\n\t /**\n\t * Converts a word array to a Base64 string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The Base64 string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var base64String = CryptoJS.enc.Base64.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\t var map = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n\n\t // Clamp excess bits\n\t wordArray.clamp();\n\n\t // Convert\n\t var base64Chars = [];\n\t for (var i = 0; i < sigBytes; i += 3) {\n\t var byte1 = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t var byte2 = (words[(i + 1) >>> 2] >>> (24 - ((i + 1) % 4) * 8)) & 0xff;\n\t var byte3 = (words[(i + 2) >>> 2] >>> (24 - ((i + 2) % 4) * 8)) & 0xff;\n\n\t var triplet = (byte1 << 16) | (byte2 << 8) | byte3;\n\n\t for (var j = 0; (j < 4) && (i + j * 0.75 < sigBytes); j++) {\n\t base64Chars.push(map.charAt((triplet >>> (6 * (3 - j))) & 0x3f));\n\t }\n\t }\n\n\t // Add padding\n\t var paddingChar = map.charAt(64);\n\t if (paddingChar) {\n\t while (base64Chars.length % 4) {\n\t base64Chars.push(paddingChar);\n\t }\n\t }\n\n\t return base64Chars.join('');\n\t },\n\n\t /**\n\t * Converts a Base64 string to a word array.\n\t *\n\t * @param {string} base64Str The Base64 string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Base64.parse(base64String);\n\t */\n\t parse: function (base64Str) {\n\t // Shortcuts\n\t var base64StrLength = base64Str.length;\n\t var map = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n\t var reverseMap = this._reverseMap;\n\n\t if (!reverseMap) {\n\t reverseMap = this._reverseMap = [];\n\t for (var j = 0; j < map.length; j++) {\n\t reverseMap[map.charCodeAt(j)] = j;\n\t }\n\t }\n\n\t // Ignore padding\n\t var paddingChar = map.charAt(64);\n\t if (paddingChar) {\n\t var paddingIndex = base64Str.indexOf(paddingChar);\n\t if (paddingIndex !== -1) {\n\t base64StrLength = paddingIndex;\n\t }\n\t }\n\n\t // Convert\n\t return parseLoop(base64Str, base64StrLength, reverseMap);\n\n\t }\n\t };\n\n\t function parseLoop(base64Str, base64StrLength, reverseMap) {\n\t var words = [];\n\t var nBytes = 0;\n\t for (var i = 0; i < base64StrLength; i++) {\n\t if (i % 4) {\n\t var bits1 = reverseMap[base64Str.charCodeAt(i - 1)] << ((i % 4) * 2);\n\t var bits2 = reverseMap[base64Str.charCodeAt(i)] >>> (6 - (i % 4) * 2);\n\t var bitsCombined = bits1 | bits2;\n\t words[nBytes >>> 2] |= bitsCombined << (24 - (nBytes % 4) * 8);\n\t nBytes++;\n\t }\n\t }\n\t return WordArray.create(words, nBytes);\n\t }\n\t}());\n\n\n\treturn CryptoJS.enc.Base64;\n\n}));\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = __webpack_require__(0);\nvar Utils = tslib_1.__importStar(__webpack_require__(1));\nvar protocolmessage_1 = tslib_1.__importDefault(__webpack_require__(10));\nvar transport_1 = tslib_1.__importDefault(__webpack_require__(26));\nvar logger_1 = tslib_1.__importDefault(__webpack_require__(2));\nvar defaults_1 = tslib_1.__importDefault(__webpack_require__(8));\nvar connectionerrors_1 = tslib_1.__importDefault(__webpack_require__(19));\nvar auth_1 = tslib_1.__importDefault(__webpack_require__(16));\nvar errorinfo_1 = tslib_1.__importDefault(__webpack_require__(4));\nvar XHRStates_1 = tslib_1.__importDefault(__webpack_require__(20));\nvar platform_1 = tslib_1.__importDefault(__webpack_require__(3));\n/* TODO: can remove once realtime sends protocol message responses for comet errors */\nfunction shouldBeErrorAction(err) {\n var UNRESOLVABLE_ERROR_CODES = [80015, 80017, 80030];\n if (err.code) {\n if (auth_1.default.isTokenErr(err))\n return false;\n if (Utils.arrIn(UNRESOLVABLE_ERROR_CODES, err.code))\n return true;\n return err.code >= 40000 && err.code < 50000;\n }\n else {\n /* Likely a network or transport error of some kind. Certainly not fatal to the connection */\n return false;\n }\n}\nfunction protocolMessageFromRawError(err) {\n /* err will be either a legacy (non-protocolmessage) comet error response\n * (which will have an err.code), or a xhr/network error (which won't). */\n if (shouldBeErrorAction(err)) {\n return [protocolmessage_1.default.fromValues({ action: protocolmessage_1.default.Action.ERROR, error: err })];\n }\n else {\n return [protocolmessage_1.default.fromValues({ action: protocolmessage_1.default.Action.DISCONNECTED, error: err })];\n }\n}\n/*\n * A base comet transport class\n */\nvar CometTransport = /** @class */ (function (_super) {\n tslib_1.__extends(CometTransport, _super);\n function CometTransport(connectionManager, auth, params) {\n var _this = _super.call(this, connectionManager, auth, params, /* binary not supported for comet so force JSON protocol */ true) || this;\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 _this.onAuthUpdated = function (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 return _this;\n }\n CometTransport.prototype.connect = function () {\n var _this = this;\n logger_1.default.logAction(logger_1.default.LOG_MINOR, 'CometTransport.connect()', 'starting');\n transport_1.default.prototype.connect.call(this);\n var params = this.params;\n var options = params.options;\n var host = defaults_1.default.getHost(options, params.host);\n var port = defaults_1.default.getPort(options);\n var cometScheme = options.tls ? 'https://' : 'http://';\n this.baseUri = cometScheme + host + ':' + port + '/comet/';\n var connectUri = this.baseUri + 'connect';\n logger_1.default.logAction(logger_1.default.LOG_MINOR, 'CometTransport.connect()', 'uri: ' + connectUri);\n this.auth.getAuthParams(function (err, authParams) {\n if (err) {\n _this.disconnect(err);\n return;\n }\n if (_this.isDisposed) {\n return;\n }\n _this.authParams = authParams;\n var connectParams = _this.params.getConnectParams(authParams);\n if ('stream' in connectParams)\n _this.stream = connectParams.stream;\n logger_1.default.logAction(logger_1.default.LOG_MINOR, 'CometTransport.connect()', 'connectParams:' + Utils.toQueryString(connectParams));\n /* this will be the 'recvRequest' so this connection can stream messages */\n var preconnected = false;\n var connectRequest = (_this.recvRequest = _this.createRequest(connectUri, null, connectParams, null, _this.stream ? XHRStates_1.default.REQ_RECV_STREAM : XHRStates_1.default.REQ_RECV));\n connectRequest.on('data', function (data) {\n if (!_this.recvRequest) {\n /* the transport was disposed before we connected */\n return;\n }\n if (!preconnected) {\n preconnected = true;\n _this.emit('preconnect');\n }\n _this.onData(data);\n });\n connectRequest.on('complete', function (err) {\n if (!_this.recvRequest) {\n /* the transport was disposed before we connected */\n err = err || new errorinfo_1.default('Request cancelled', 80003, 400);\n }\n _this.recvRequest = null;\n /* Connect request may complete without a emitting 'data' event since that is not\n * emitted for e.g. a non-streamed error response. Still implies preconnect. */\n if (!preconnected && !err) {\n preconnected = true;\n _this.emit('preconnect');\n }\n _this.onActivity();\n if (err) {\n if (err.code) {\n /* A protocol error received from realtime. TODO: once realtime\n * consistendly sends errors wrapped in protocol messages, should be\n * able to remove this */\n _this.onData(protocolMessageFromRawError(err));\n }\n else {\n /* A network/xhr error. Don't bother wrapping in a protocol message,\n * just disconnect the transport */\n _this.disconnect(err);\n }\n return;\n }\n platform_1.default.Config.nextTick(function () {\n _this.recv();\n });\n });\n connectRequest.exec();\n });\n };\n CometTransport.prototype.requestClose = function () {\n logger_1.default.logAction(logger_1.default.LOG_MINOR, 'CometTransport.requestClose()');\n this._requestCloseOrDisconnect(true);\n };\n CometTransport.prototype.requestDisconnect = function () {\n logger_1.default.logAction(logger_1.default.LOG_MINOR, 'CometTransport.requestDisconnect()');\n this._requestCloseOrDisconnect(false);\n };\n CometTransport.prototype._requestCloseOrDisconnect = function (closing) {\n var _this = this;\n var closeOrDisconnectUri = closing ? this.closeUri : this.disconnectUri;\n if (closeOrDisconnectUri) {\n var request = this.createRequest(closeOrDisconnectUri, null, this.authParams, null, XHRStates_1.default.REQ_SEND);\n request.on('complete', function (err) {\n if (err) {\n logger_1.default.logAction(logger_1.default.LOG_ERROR, 'CometTransport.request' + (closing ? 'Close()' : 'Disconnect()'), 'request returned err = ' + Utils.inspectError(err));\n _this.finish('disconnected', err);\n }\n });\n request.exec();\n }\n };\n CometTransport.prototype.dispose = function () {\n var _this = this;\n logger_1.default.logAction(logger_1.default.LOG_MINOR, 'CometTransport.dispose()', '');\n if (!this.isDisposed) {\n this.isDisposed = true;\n if (this.recvRequest) {\n logger_1.default.logAction(logger_1.default.LOG_MINOR, 'CometTransport.dispose()', 'aborting recv request');\n this.recvRequest.abort();\n this.recvRequest = null;\n }\n /* In almost all cases the transport will be finished before it's\n * disposed. Finish here just to make sure. */\n this.finish('disconnected', connectionerrors_1.default.disconnected());\n platform_1.default.Config.nextTick(function () {\n _this.emit('disposed');\n });\n }\n };\n CometTransport.prototype.onConnect = function (message) {\n var _a;\n /* if this transport has been disposed whilst awaiting connection, do nothing */\n if (this.isDisposed) {\n return;\n }\n /* the connectionKey in a comet connected response is really\n * - */\n var connectionStr = (_a = message.connectionDetails) === null || _a === void 0 ? void 0 : _a.connectionKey;\n transport_1.default.prototype.onConnect.call(this, message);\n var baseConnectionUri = this.baseUri + connectionStr;\n logger_1.default.logAction(logger_1.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 CometTransport.prototype.send = function (message) {\n if (this.sendRequest) {\n /* there is a pending send, so queue this message */\n this.pendingItems = this.pendingItems || [];\n this.pendingItems.push(message);\n return;\n }\n /* send this, plus any pending, now */\n var pendingItems = this.pendingItems || [];\n pendingItems.push(message);\n this.pendingItems = null;\n this.sendItems(pendingItems);\n };\n CometTransport.prototype.sendAnyPending = function () {\n var pendingItems = this.pendingItems;\n if (!pendingItems) {\n return;\n }\n this.pendingItems = null;\n this.sendItems(pendingItems);\n };\n CometTransport.prototype.sendItems = function (items) {\n var _this = this;\n var sendRequest = (this.sendRequest = this.createRequest(this.sendUri, null, this.authParams, this.encodeRequest(items), XHRStates_1.default.REQ_SEND));\n sendRequest.on('complete', function (err, data) {\n if (err)\n logger_1.default.logAction(logger_1.default.LOG_ERROR, 'CometTransport.sendItems()', 'on complete: err = ' + Utils.inspectError(err));\n _this.sendRequest = null;\n /* the result of the request, even if a nack, is usually a protocol response\n * contained in the data. An err is anomolous, and indicates some issue with the\n * network,transport, or connection */\n if (err) {\n if (err.code) {\n /* A protocol error received from realtime. TODO: once realtime\n * consistendly sends errors wrapped in protocol messages, should be\n * able to remove this */\n _this.onData(protocolMessageFromRawError(err));\n }\n else {\n /* A network/xhr error. Don't bother wrapping in a protocol message,\n * just disconnect the transport */\n _this.disconnect(err);\n }\n return;\n }\n if (data) {\n _this.onData(data);\n }\n if (_this.pendingItems) {\n platform_1.default.Config.nextTick(function () {\n /* If there's a new send request by now, any pending items will have\n * been picked up by that; any new ones added since then will be\n * picked up after that one completes */\n if (!_this.sendRequest) {\n _this.sendAnyPending();\n }\n });\n }\n });\n sendRequest.exec();\n };\n CometTransport.prototype.recv = function () {\n var _this = this;\n /* do nothing if there is an active request, which might be streaming */\n if (this.recvRequest)\n return;\n /* If we're no longer connected, do nothing */\n if (!this.isConnected)\n return;\n var recvRequest = (this.recvRequest = this.createRequest(this.recvUri, null, this.authParams, null, this.stream ? XHRStates_1.default.REQ_RECV_STREAM : XHRStates_1.default.REQ_RECV_POLL));\n recvRequest.on('data', function (data) {\n _this.onData(data);\n });\n recvRequest.on('complete', function (err) {\n _this.recvRequest = null;\n /* A request completing must be considered activity, as realtime sends\n * heartbeats every 15s since a request began, not every 15s absolutely */\n _this.onActivity();\n if (err) {\n if (err.code) {\n /* A protocol error received from realtime. TODO: once realtime\n * consistently sends errors wrapped in protocol messages, should be\n * able to remove this */\n _this.onData(protocolMessageFromRawError(err));\n }\n else {\n /* A network/xhr error. Don't bother wrapping in a protocol message,\n * just disconnect the transport */\n _this.disconnect(err);\n }\n return;\n }\n platform_1.default.Config.nextTick(function () {\n _this.recv();\n });\n });\n recvRequest.exec();\n };\n CometTransport.prototype.onData = function (responseData) {\n try {\n var items = this.decodeResponse(responseData);\n if (items && items.length)\n for (var i = 0; i < items.length; i++)\n this.onProtocolMessage(protocolmessage_1.default.fromDeserialized(items[i]));\n }\n catch (e) {\n logger_1.default.logAction(logger_1.default.LOG_ERROR, 'CometTransport.onData()', 'Unexpected exception handing channel event: ' + e.stack);\n }\n };\n CometTransport.prototype.encodeRequest = function (requestItems) {\n return JSON.stringify(requestItems);\n };\n CometTransport.prototype.decodeResponse = function (responseData) {\n if (typeof responseData == 'string')\n return JSON.parse(responseData);\n return responseData;\n };\n return CometTransport;\n}(transport_1.default));\nexports.default = CometTransport;\n\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports) {\n\nvar g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = __webpack_require__(0);\nvar logger_1 = tslib_1.__importDefault(__webpack_require__(2));\nvar platform_1 = tslib_1.__importDefault(__webpack_require__(3));\nvar message_1 = tslib_1.__importDefault(__webpack_require__(9));\nvar Utils = tslib_1.__importStar(__webpack_require__(1));\nfunction toActionValue(actionString) {\n return PresenceMessage.Actions.indexOf(actionString);\n}\nvar PresenceMessage = /** @class */ (function () {\n function PresenceMessage() {\n }\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 PresenceMessage.prototype.isSynthesized = function () {\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 PresenceMessage.prototype.parseId = function () {\n if (!this.id)\n throw new Error('parseId(): Presence message does not contain an id');\n var 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 PresenceMessage.prototype.toJSON = function () {\n /* encode data to base64 if present and we're returning real JSON;\n * although msgpack calls toJSON(), we know it is a stringify()\n * call if it has a non-empty arguments list */\n var data = this.data;\n var encoding = this.encoding;\n if (data && platform_1.default.BufferUtils.isBuffer(data)) {\n if (arguments.length > 0) {\n /* stringify call */\n encoding = encoding ? encoding + '/base64' : 'base64';\n data = platform_1.default.BufferUtils.base64Encode(data);\n }\n else {\n /* Called by msgpack. toBuffer returns a datatype understandable by\n * that platform's msgpack implementation (Buffer in node, Uint8Array\n * in browsers) */\n data = platform_1.default.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: data,\n encoding: encoding,\n };\n };\n PresenceMessage.prototype.toString = function () {\n var 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_1.default.BufferUtils.isBuffer(this.data))\n result += '; data (buffer)=' + platform_1.default.BufferUtils.base64Encode(this.data);\n else\n result += '; data (json)=' + JSON.stringify(this.data);\n }\n result += ']';\n return result;\n };\n PresenceMessage.fromResponseBody = function (body, options, format) {\n var messages = [];\n if (format) {\n body = Utils.decodeBody(body, format);\n }\n for (var i = 0; i < body.length; i++) {\n var msg = (messages[i] = PresenceMessage.fromValues(body[i], true));\n try {\n PresenceMessage.decode(msg, options);\n }\n catch (e) {\n logger_1.default.logAction(logger_1.default.LOG_ERROR, 'PresenceMessage.fromResponseBody()', e.toString());\n }\n }\n return messages;\n };\n PresenceMessage.fromValues = function (values, stringifyAction) {\n if (stringifyAction) {\n values.action = PresenceMessage.Actions[values.action];\n }\n return Object.assign(new PresenceMessage(), values);\n };\n PresenceMessage.fromValuesArray = function (values) {\n var count = values.length, result = new Array(count);\n for (var i = 0; i < count; i++)\n result[i] = PresenceMessage.fromValues(values[i]);\n return result;\n };\n PresenceMessage.fromEncoded = function (encoded, options) {\n var msg = PresenceMessage.fromValues(encoded, true);\n /* if decoding fails at any point, catch and return the message decoded to\n * the fullest extent possible */\n try {\n PresenceMessage.decode(msg, options !== null && options !== void 0 ? options : {});\n }\n catch (e) {\n logger_1.default.logAction(logger_1.default.LOG_ERROR, 'PresenceMessage.fromEncoded()', e.toString());\n }\n return msg;\n };\n PresenceMessage.fromEncodedArray = function (encodedArray, options) {\n return encodedArray.map(function (encoded) {\n return PresenceMessage.fromEncoded(encoded, options);\n });\n };\n PresenceMessage.Actions = ['absent', 'present', 'enter', 'leave', 'update'];\n PresenceMessage.encode = message_1.default.encode;\n PresenceMessage.decode = message_1.default.decode;\n PresenceMessage.getMessagesSize = message_1.default.getMessagesSize;\n return PresenceMessage;\n}());\nexports.default = PresenceMessage;\n\n\n/***/ }),\n/* 15 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(global) {\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = __webpack_require__(0);\nvar Utils = tslib_1.__importStar(__webpack_require__(1));\nvar eventemitter_1 = tslib_1.__importDefault(__webpack_require__(7));\nvar errorinfo_1 = tslib_1.__importStar(__webpack_require__(4));\nvar logger_1 = tslib_1.__importDefault(__webpack_require__(2));\nvar defaults_1 = tslib_1.__importDefault(__webpack_require__(8));\nvar XHRStates_1 = tslib_1.__importDefault(__webpack_require__(20));\nvar platform_1 = tslib_1.__importDefault(__webpack_require__(3));\nfunction isAblyError(responseBody, headers) {\n return Utils.arrIn(Utils.allToLowerCase(Utils.keysArray(headers)), 'x-ably-errorcode');\n}\nfunction getAblyError(responseBody, headers) {\n if (isAblyError(responseBody, headers)) {\n return responseBody.error && errorinfo_1.default.fromValues(responseBody.error);\n }\n}\nvar noop = function () { };\nvar idCounter = 0;\nvar pendingRequests = {};\nvar isIE = typeof global !== 'undefined' && global.XDomainRequest;\nfunction ieVersion() {\n var match = navigator.userAgent.toString().match(/MSIE\\s([\\d.]+)/);\n return match && Number(match[1]);\n}\nfunction needJsonEnvelope() {\n /* IE 10 xhr bug: http://stackoverflow.com/a/16320339 */\n var version;\n return isIE && (version = ieVersion()) && version === 10;\n}\nfunction getHeader(xhr, header) {\n return xhr.getResponseHeader && xhr.getResponseHeader(header);\n}\n/* Safari mysteriously returns 'Identity' for transfer-encoding when in fact\n * it is 'chunked'. So instead, decide that it is chunked when\n * transfer-encoding is present or content-length is absent. ('or' because\n * when using http2 streaming, there's no transfer-encoding header, but can\n * still deduce streaming from lack of content-length) */\nfunction isEncodingChunked(xhr) {\n return (xhr.getResponseHeader && (xhr.getResponseHeader('transfer-encoding') || !xhr.getResponseHeader('content-length')));\n}\nfunction getHeadersAsObject(xhr) {\n var headerPairs = Utils.trim(xhr.getAllResponseHeaders()).split('\\r\\n');\n var headers = {};\n for (var i = 0; i < headerPairs.length; i++) {\n var parts = headerPairs[i].split(':').map(Utils.trim);\n headers[parts[0].toLowerCase()] = parts[1];\n }\n return headers;\n}\nvar XHRRequest = /** @class */ (function (_super) {\n tslib_1.__extends(XHRRequest, _super);\n function XHRRequest(uri, headers, params, body, requestMode, timeouts, method) {\n var _this = _super.call(this) || this;\n params = params || {};\n params.rnd = Utils.cheapRandStr();\n if (needJsonEnvelope() && !params.envelope)\n params.envelope = 'json';\n _this.uri = uri + Utils.toQueryString(params);\n _this.headers = headers || {};\n _this.body = body;\n _this.method = method ? method.toUpperCase() : Utils.isEmptyArg(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 return _this;\n }\n XHRRequest.createRequest = function (uri, headers, params, body, requestMode, timeouts, method) {\n /* XHR requests are used either with the context being a realtime\n * transport, or with timeouts passed in (for when used by a rest client),\n * or completely standalone. Use the appropriate timeouts in each case */\n var _timeouts = timeouts || defaults_1.default.TIMEOUTS;\n return new XHRRequest(uri, headers, Utils.copy(params), body, requestMode, _timeouts, method);\n };\n XHRRequest.prototype.complete = function (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 XHRRequest.prototype.abort = function () {\n this.dispose();\n };\n XHRRequest.prototype.exec = function () {\n var _this = this;\n var headers = this.headers;\n var timeout = this.requestMode == XHRStates_1.default.REQ_SEND ? this.timeouts.httpRequestTimeout : this.timeouts.recvTimeout, timer = (this.timer = setTimeout(function () {\n _this.timedOut = true;\n xhr.abort();\n }, timeout)), method = this.method, xhr = (this.xhr = new XMLHttpRequest()), accept = headers['accept'];\n var body = this.body;\n var responseType = 'text';\n if (!accept) {\n // Default to JSON\n headers['accept'] = 'application/json';\n }\n else if (accept.indexOf('application/x-msgpack') === 0) {\n // Msgpack responses will be typed as ArrayBuffer\n responseType = 'arraybuffer';\n }\n if (body) {\n var 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 // Can probably remove this directive if https://github.com/nodesecurity/eslint-plugin-security/issues/26 is resolved\n // eslint-disable-next-line security/detect-non-literal-fs-filename\n xhr.open(method, this.uri, true);\n xhr.responseType = responseType;\n if ('authorization' in headers) {\n xhr.withCredentials = true;\n }\n for (var h in headers)\n xhr.setRequestHeader(h, headers[h]);\n var errorHandler = function (errorEvent, message, code, statusCode) {\n var _a;\n var errorMessage = message + ' (event type: ' + errorEvent.type + ')';\n if ((_a = _this === null || _this === void 0 ? void 0 : _this.xhr) === null || _a === void 0 ? void 0 : _a.statusText)\n errorMessage += ', current statusText is ' + _this.xhr.statusText;\n logger_1.default.logAction(logger_1.default.LOG_ERROR, 'Request.on' + errorEvent.type + '()', errorMessage);\n _this.complete(new errorinfo_1.PartialErrorInfo(errorMessage, code, statusCode));\n };\n xhr.onerror = function (errorEvent) {\n errorHandler(errorEvent, 'XHR error occurred', null, 400);\n };\n xhr.onabort = function (errorEvent) {\n if (_this.timedOut) {\n errorHandler(errorEvent, 'Request aborted due to request timeout expiring', null, 408);\n }\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 var streaming;\n var statusCode;\n var successResponse;\n var streamPos = 0;\n var unpacked = false;\n var onResponse = function () {\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_1.default.REQ_RECV_STREAM && successResponse && isEncodingChunked(xhr);\n };\n var onEnd = function () {\n var parsedResponse;\n try {\n var contentType = getHeader(xhr, 'content-type');\n /* Be liberal in what we accept; buggy auth servers may respond\n * without the correct contenttype, but assume they're still\n * responding with json */\n var json = contentType ? contentType.indexOf('application/json') >= 0 : xhr.responseType == 'text';\n if (json) {\n /* If we requested msgpack but server responded with json, then since\n * we set the responseType expecting msgpack, the response will be\n * an ArrayBuffer containing json */\n var jsonResponseBody = xhr.responseType === 'arraybuffer'\n ? platform_1.default.BufferUtils.utf8Decode(xhr.response)\n : String(xhr.responseText);\n if (jsonResponseBody.length) {\n parsedResponse = JSON.parse(jsonResponseBody);\n }\n else {\n parsedResponse = jsonResponseBody;\n }\n unpacked = true;\n }\n else {\n parsedResponse = xhr.response;\n }\n if (parsedResponse.response !== undefined) {\n /* unwrap JSON envelope */\n statusCode = parsedResponse.statusCode;\n successResponse = statusCode < 400;\n headers = parsedResponse.headers;\n parsedResponse = parsedResponse.response;\n }\n else {\n headers = getHeadersAsObject(xhr);\n }\n }\n catch (e) {\n _this.complete(new errorinfo_1.PartialErrorInfo('Malformed response body from server: ' + e.message, null, 400));\n return;\n }\n /* If response is an array, it's an array of protocol messages -- even if\n * is contains an error action (hence the nonsuccess statuscode), we can\n * consider the request to have succeeded, just pass it on to\n * onProtocolMessage to decide what to do */\n if (successResponse || Utils.isArray(parsedResponse)) {\n _this.complete(null, parsedResponse, headers, unpacked, statusCode);\n return;\n }\n var err = getAblyError(parsedResponse, headers);\n if (!err) {\n err = new errorinfo_1.PartialErrorInfo('Error response received from server: ' +\n statusCode +\n ' body was: ' +\n platform_1.default.Config.inspect(parsedResponse), null, statusCode);\n }\n _this.complete(err, parsedResponse, headers, unpacked, statusCode);\n };\n function onProgress() {\n var responseText = xhr.responseText;\n var bodyEnd = responseText.length - 1;\n var 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 var onChunk = function (chunk) {\n try {\n chunk = JSON.parse(chunk);\n }\n catch (e) {\n _this.complete(new errorinfo_1.PartialErrorInfo('Malformed response body from server: ' + e.message, null, 400));\n return;\n }\n _this.emit('data', chunk);\n };\n var onStreamEnd = function () {\n onProgress();\n _this.streamComplete = true;\n platform_1.default.Config.nextTick(function () {\n _this.complete();\n });\n };\n xhr.onreadystatechange = function () {\n var readyState = xhr.readyState;\n if (readyState < 3)\n return;\n if (xhr.status !== 0) {\n if (statusCode === undefined) {\n statusCode = xhr.status;\n /* IE returns 1223 for 204: http://bugs.jquery.com/ticket/1450 */\n if (statusCode === 1223)\n statusCode = 204;\n onResponse();\n }\n if (readyState == 3 && streaming) {\n onProgress();\n }\n else if (readyState == 4) {\n if (streaming)\n onStreamEnd();\n else\n onEnd();\n }\n }\n };\n xhr.send(body);\n };\n XHRRequest.prototype.dispose = function () {\n var xhr = this.xhr;\n if (xhr) {\n xhr.onreadystatechange = xhr.onerror = xhr.onabort = xhr.ontimeout = noop;\n this.xhr = null;\n var 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 return XHRRequest;\n}(eventemitter_1.default));\nexports.default = XHRRequest;\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(13)))\n\n/***/ }),\n/* 16 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = __webpack_require__(0);\nvar logger_1 = tslib_1.__importDefault(__webpack_require__(2));\nvar Utils = tslib_1.__importStar(__webpack_require__(1));\nvar multicaster_1 = tslib_1.__importDefault(__webpack_require__(22));\nvar errorinfo_1 = tslib_1.__importDefault(__webpack_require__(4));\nvar hmac_sha256_1 = tslib_1.__importDefault(__webpack_require__(45));\nvar enc_base64_1 = __webpack_require__(11);\nvar HttpMethods_1 = tslib_1.__importDefault(__webpack_require__(17));\nvar HttpStatusCodes_1 = tslib_1.__importDefault(__webpack_require__(24));\nvar platform_1 = tslib_1.__importDefault(__webpack_require__(3));\nvar MAX_TOKEN_LENGTH = Math.pow(2, 17);\nfunction noop() { }\nfunction random() {\n return ('000000' + Math.floor(Math.random() * 1e16)).slice(-16);\n}\nfunction isRealtime(client) {\n return !!client.connection;\n}\n/* A client auth callback may give errors in any number of formats; normalise to an ErrorInfo or PartialErrorInfo */\nfunction normaliseAuthcallbackError(err) {\n if (!Utils.isErrorInfoOrPartialErrorInfo(err)) {\n return new errorinfo_1.default(Utils.inspectError(err), err.code || 40170, err.statusCode || 401);\n }\n /* network errors will not have an inherent error code */\n if (!err.code) {\n if (err.statusCode === 403) {\n err.code = 40300;\n }\n else {\n err.code = 40170;\n /* normalise statusCode to 401 per RSA4e */\n err.statusCode = 401;\n }\n }\n return err;\n}\nvar hmac = function (text, key) {\n if (platform_1.default.Config.createHmac) {\n var inst = platform_1.default.Config.createHmac('SHA256', key);\n inst.update(text);\n return inst.digest('base64');\n }\n return (0, enc_base64_1.stringify)((0, hmac_sha256_1.default)(text, key));\n};\nfunction c14n(capability) {\n if (!capability)\n return '';\n if (typeof capability == 'string')\n capability = JSON.parse(capability);\n var c14nCapability = Object.create(null);\n var keys = Utils.keysArray(capability, true);\n if (!keys)\n return '';\n keys.sort();\n for (var i = 0; i < keys.length; i++) {\n c14nCapability[keys[i]] = capability[keys[i]].sort();\n }\n return JSON.stringify(c14nCapability);\n}\nfunction logAndValidateTokenAuthMethod(authOptions) {\n if (authOptions.authCallback) {\n logger_1.default.logAction(logger_1.default.LOG_MINOR, 'Auth()', 'using token auth with authCallback');\n }\n else if (authOptions.authUrl) {\n logger_1.default.logAction(logger_1.default.LOG_MINOR, 'Auth()', 'using token auth with authUrl');\n }\n else if (authOptions.key) {\n logger_1.default.logAction(logger_1.default.LOG_MINOR, 'Auth()', 'using token auth with client-side signing');\n }\n else if (authOptions.tokenDetails) {\n logger_1.default.logAction(logger_1.default.LOG_MINOR, 'Auth()', 'using token auth with supplied token only');\n }\n else {\n var msg = 'authOptions must include valid authentication parameters';\n logger_1.default.logAction(logger_1.default.LOG_ERROR, 'Auth()', msg);\n throw new Error(msg);\n }\n}\nfunction basicAuthForced(options) {\n return 'useTokenAuth' in options && !options.useTokenAuth;\n}\n/* RSA4 */\nfunction useTokenAuth(options) {\n return (options.useTokenAuth ||\n (!basicAuthForced(options) && (options.authCallback || options.authUrl || options.token || options.tokenDetails)));\n}\n/* RSA4a */\nfunction noWayToRenew(options) {\n return !options.key && !options.authCallback && !options.authUrl;\n}\nvar trId = 0;\nfunction getTokenRequestId() {\n return trId++;\n}\nvar Auth = /** @class */ (function () {\n function Auth(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 /* The id of the current token request if one is in progress, else null */\n this.currentTokenRequestId = null;\n this.waitingForTokenRequest = null;\n if (useTokenAuth(options)) {\n /* Token auth */\n if (options.key && !hmac) {\n var msg = 'client-side token request signing not supported';\n logger_1.default.logAction(logger_1.default.LOG_ERROR, 'Auth()', msg);\n throw new Error(msg);\n }\n if (noWayToRenew(options)) {\n logger_1.default.logAction(logger_1.default.LOG_ERROR, 'Auth()', '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 this._saveTokenOptions(options.defaultTokenParams, options);\n logAndValidateTokenAuthMethod(this.authOptions);\n }\n else {\n /* Basic auth */\n if (!options.key) {\n var msg = 'No authentication options provided; need one of: key, authUrl, or authCallback (or for testing only, token or tokenDetails)';\n logger_1.default.logAction(logger_1.default.LOG_ERROR, 'Auth()', msg);\n throw new errorinfo_1.default(msg, 40160, 401);\n }\n logger_1.default.logAction(logger_1.default.LOG_MINOR, 'Auth()', 'anonymous, using basic auth');\n this._saveBasicOptions(options);\n }\n }\n Auth.prototype.authorize = function (tokenParams, authOptions, callback) {\n var _this = this;\n var _authOptions;\n /* shuffle and normalise arguments as necessary */\n if (typeof tokenParams == 'function' && !callback) {\n callback = tokenParams;\n _authOptions = tokenParams = null;\n }\n else if (typeof authOptions == 'function' && !callback) {\n callback = authOptions;\n _authOptions = null;\n }\n else {\n _authOptions = authOptions;\n }\n if (!callback) {\n if (this.client.options.promises) {\n return Utils.promisify(this, 'authorize', arguments);\n }\n }\n /* RSA10a: authorize() call implies token auth. If a key is passed it, we\n * just check if it doesn't clash and assume we're generating a token from it */\n if (_authOptions && _authOptions.key && this.authOptions.key !== _authOptions.key) {\n throw new errorinfo_1.default('Unable to update auth options with incompatible key', 40102, 401);\n }\n if (_authOptions && 'force' in _authOptions) {\n logger_1.default.logAction(logger_1.default.LOG_ERROR, 'Auth.authorize', 'Deprecation warning: specifying {force: true} in authOptions is no longer necessary, authorize() now always gets a new token. Please remove this, as in version 1.0 and later, having a non-null authOptions will overwrite stored library authOptions, which may not be what you want');\n /* Emulate the old behaviour: if 'force' was the only member of authOptions,\n * set it to null so it doesn't overwrite stored. TODO: remove in version 1.0 */\n if (Utils.isOnlyPropIn(_authOptions, 'force')) {\n _authOptions = null;\n }\n }\n this._forceNewToken(tokenParams, _authOptions, function (err, tokenDetails) {\n if (err) {\n if (_this.client.connection && err.statusCode === HttpStatusCodes_1.default.Forbidden) {\n /* Per RSA4d & RSA4d1, if the auth server explicitly repudiates our right to\n * stay connecticed by returning a 403, we actively disconnect the connection\n * even though we may well still have time left in the old token. */\n _this.client.connection.connectionManager.actOnErrorFromAuthorize(err);\n }\n callback === null || callback === void 0 ? void 0 : callback(err);\n return;\n }\n /* RTC8\n * - When authorize called by an end user and have a realtime connection,\n * don't call back till new token has taken effect.\n * - Use this.client.connection as a proxy for (this.client instanceof Realtime),\n * which doesn't work in node as Realtime isn't part of the vm context for Rest clients */\n if (isRealtime(_this.client)) {\n _this.client.connection.connectionManager.onAuthUpdated(tokenDetails, callback || noop);\n }\n else {\n callback === null || callback === void 0 ? void 0 : callback(null, tokenDetails);\n }\n });\n };\n Auth.prototype.authorise = function (tokenParams, authOptions, callback) {\n logger_1.default.deprecated('Auth.authorise', 'Auth.authorize');\n this.authorize(tokenParams, authOptions, callback);\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 Auth.prototype._forceNewToken = function (tokenParams, authOptions, callback) {\n var _this = this;\n /* get rid of current token even if still valid */\n this.tokenDetails = null;\n /* _save normalises the tokenParams and authOptions and updates the auth\n * object. All subsequent operations should use the values on `this`,\n * not the passed in ones. */\n this._saveTokenOptions(tokenParams, authOptions);\n logAndValidateTokenAuthMethod(this.authOptions);\n this._ensureValidAuthCredentials(true, function (err, tokenDetails) {\n /* RSA10g */\n delete _this.tokenParams.timestamp;\n delete _this.authOptions.queryTime;\n callback(err, tokenDetails);\n });\n };\n Auth.prototype.requestToken = function (tokenParams, authOptions, callback) {\n var _this = this;\n /* shuffle and normalise arguments as necessary */\n if (typeof tokenParams == 'function' && !callback) {\n callback = tokenParams;\n authOptions = tokenParams = null;\n }\n else if (typeof authOptions == 'function' && !callback) {\n callback = authOptions;\n authOptions = null;\n }\n if (!callback && this.client.options.promises) {\n return Utils.promisify(this, 'requestToken', arguments);\n }\n /* RSA8e: if authOptions passed in, they're used instead of stored, don't merge them */\n authOptions = authOptions || this.authOptions;\n tokenParams = tokenParams || Utils.copy(this.tokenParams);\n var _callback = callback || noop;\n /* first set up whatever callback will be used to get signed\n * token requests */\n var tokenRequestCallback, client = this.client;\n if (authOptions.authCallback) {\n logger_1.default.logAction(logger_1.default.LOG_MINOR, 'Auth.requestToken()', 'using token auth with authCallback');\n tokenRequestCallback = authOptions.authCallback;\n }\n else if (authOptions.authUrl) {\n logger_1.default.logAction(logger_1.default.LOG_MINOR, 'Auth.requestToken()', 'using token auth with authUrl');\n tokenRequestCallback = function (params, cb) {\n var authHeaders = Utils.mixin({ accept: 'application/json, text/plain' }, authOptions.authHeaders);\n var usePost = authOptions.authMethod && authOptions.authMethod.toLowerCase() === 'post';\n var providedQsParams;\n /* Combine authParams with any qs params given in the authUrl */\n var queryIdx = authOptions.authUrl.indexOf('?');\n if (queryIdx > -1) {\n providedQsParams = Utils.parseQueryString(authOptions.authUrl.slice(queryIdx));\n authOptions.authUrl = authOptions.authUrl.slice(0, queryIdx);\n if (!usePost) {\n /* In case of conflict, authParams take precedence over qs params in the authUrl */\n authOptions.authParams = Utils.mixin(providedQsParams, authOptions.authParams);\n }\n }\n /* RSA8c2 */\n var authParams = Utils.mixin({}, authOptions.authParams || {}, params);\n var authUrlRequestCallback = function (err, body, headers, unpacked) {\n var contentType;\n if (err) {\n logger_1.default.logAction(logger_1.default.LOG_MICRO, 'Auth.requestToken().tokenRequestCallback', 'Received Error: ' + Utils.inspectError(err));\n }\n else {\n contentType = headers['content-type'];\n logger_1.default.logAction(logger_1.default.LOG_MICRO, 'Auth.requestToken().tokenRequestCallback', 'Received; content-type: ' + contentType + '; body: ' + Utils.inspectBody(body));\n }\n if (err || unpacked)\n return cb(err, body);\n if (platform_1.default.BufferUtils.isBuffer(body))\n body = body.toString();\n if (!contentType) {\n cb(new errorinfo_1.default('authUrl response is missing a content-type header', 40170, 401));\n return;\n }\n var json = contentType.indexOf('application/json') > -1, text = contentType.indexOf('text/plain') > -1 || contentType.indexOf('application/jwt') > -1;\n if (!json && !text) {\n cb(new errorinfo_1.default('authUrl responded with unacceptable content-type ' +\n contentType +\n ', should be either text/plain, application/jwt or application/json', 40170, 401));\n return;\n }\n if (json) {\n if (body.length > MAX_TOKEN_LENGTH) {\n cb(new errorinfo_1.default('authUrl response exceeded max permitted length', 40170, 401));\n return;\n }\n try {\n body = JSON.parse(body);\n }\n catch (e) {\n cb(new errorinfo_1.default('Unexpected error processing authURL response; err = ' + e.message, 40170, 401));\n return;\n }\n }\n cb(null, body, contentType);\n };\n logger_1.default.logAction(logger_1.default.LOG_MICRO, 'Auth.requestToken().tokenRequestCallback', 'Requesting token from ' +\n authOptions.authUrl +\n '; Params: ' +\n JSON.stringify(authParams) +\n '; method: ' +\n (usePost ? 'POST' : 'GET'));\n if (usePost) {\n /* send body form-encoded */\n var headers = authHeaders || {};\n headers['content-type'] = 'application/x-www-form-urlencoded';\n var body = Utils.toQueryString(authParams).slice(1); /* slice is to remove the initial '?' */\n _this.client.http.doUri(HttpMethods_1.default.Post, client, authOptions.authUrl, headers, body, providedQsParams, authUrlRequestCallback);\n }\n else {\n _this.client.http.doUri(HttpMethods_1.default.Get, client, authOptions.authUrl, authHeaders || {}, null, authParams, authUrlRequestCallback);\n }\n };\n }\n else if (authOptions.key) {\n logger_1.default.logAction(logger_1.default.LOG_MINOR, 'Auth.requestToken()', 'using token auth with client-side signing');\n tokenRequestCallback = function (params, cb) {\n _this.createTokenRequest(params, authOptions, cb);\n };\n }\n else {\n var msg = 'Need a new token, but authOptions does not include any way to request one (no authUrl, authCallback, or key)';\n logger_1.default.logAction(logger_1.default.LOG_ERROR, 'Auth()', '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 _callback(new errorinfo_1.default(msg, 40171, 403));\n return;\n }\n /* normalise token params */\n if ('capability' in tokenParams)\n tokenParams.capability = c14n(tokenParams.capability);\n var tokenRequest = function (signedTokenParams, tokenCb) {\n var keyName = signedTokenParams.keyName, path = '/keys/' + keyName + '/requestToken', tokenUri = function (host) {\n return client.baseUri(host) + path;\n };\n var requestHeaders = Utils.defaultPostHeaders(_this.client.options);\n if (authOptions.requestHeaders)\n Utils.mixin(requestHeaders, authOptions.requestHeaders);\n logger_1.default.logAction(logger_1.default.LOG_MICRO, 'Auth.requestToken().requestToken', 'Sending POST to ' + path + '; Token params: ' + JSON.stringify(signedTokenParams));\n _this.client.http.do(HttpMethods_1.default.Post, client, tokenUri, requestHeaders, JSON.stringify(signedTokenParams), null, tokenCb);\n };\n var tokenRequestCallbackTimeoutExpired = false, timeoutLength = this.client.options.timeouts.realtimeRequestTimeout, tokenRequestCallbackTimeout = setTimeout(function () {\n tokenRequestCallbackTimeoutExpired = true;\n var msg = 'Token request callback timed out after ' + timeoutLength / 1000 + ' seconds';\n logger_1.default.logAction(logger_1.default.LOG_ERROR, 'Auth.requestToken()', msg);\n _callback(new errorinfo_1.default(msg, 40170, 401));\n }, timeoutLength);\n tokenRequestCallback(tokenParams, function (err, tokenRequestOrDetails, contentType) {\n if (tokenRequestCallbackTimeoutExpired)\n return;\n clearTimeout(tokenRequestCallbackTimeout);\n if (err) {\n logger_1.default.logAction(logger_1.default.LOG_ERROR, 'Auth.requestToken()', 'token request signing call returned error; err = ' + Utils.inspectError(err));\n _callback(normaliseAuthcallbackError(err));\n return;\n }\n /* the response from the callback might be a token string, a signed request or a token details */\n if (typeof tokenRequestOrDetails === 'string') {\n if (tokenRequestOrDetails.length === 0) {\n _callback(new errorinfo_1.default('Token string is empty', 40170, 401));\n }\n else if (tokenRequestOrDetails.length > MAX_TOKEN_LENGTH) {\n _callback(new errorinfo_1.default('Token string exceeded max permitted length (was ' + tokenRequestOrDetails.length + ' bytes)', 40170, 401));\n }\n else if (tokenRequestOrDetails === 'undefined' || tokenRequestOrDetails === 'null') {\n /* common failure mode with poorly-implemented authCallbacks */\n _callback(new errorinfo_1.default('Token string was literal null/undefined', 40170, 401));\n }\n else if (tokenRequestOrDetails[0] === '{' && !(contentType && contentType.indexOf('application/jwt') > -1)) {\n _callback(new errorinfo_1.default(\"Token was double-encoded; make sure you're not JSON-encoding an already encoded token request or details\", 40170, 401));\n }\n else {\n _callback(null, { token: tokenRequestOrDetails });\n }\n return;\n }\n if (typeof tokenRequestOrDetails !== 'object') {\n var msg = 'Expected token request callback to call back with a token string or token request/details object, but got a ' +\n typeof tokenRequestOrDetails;\n logger_1.default.logAction(logger_1.default.LOG_ERROR, 'Auth.requestToken()', msg);\n _callback(new errorinfo_1.default(msg, 40170, 401));\n return;\n }\n var objectSize = JSON.stringify(tokenRequestOrDetails).length;\n if (objectSize > MAX_TOKEN_LENGTH && !authOptions.suppressMaxLengthCheck) {\n _callback(new errorinfo_1.default('Token request/details object exceeded max permitted stringified size (was ' + objectSize + ' bytes)', 40170, 401));\n return;\n }\n if ('issued' in tokenRequestOrDetails) {\n /* a tokenDetails object */\n _callback(null, tokenRequestOrDetails);\n return;\n }\n if (!('keyName' in tokenRequestOrDetails)) {\n var msg = 'Expected token request callback to call back with a token string, token request object, or token details object';\n logger_1.default.logAction(logger_1.default.LOG_ERROR, 'Auth.requestToken()', msg);\n _callback(new errorinfo_1.default(msg, 40170, 401));\n return;\n }\n /* it's a token request, so make the request */\n tokenRequest(tokenRequestOrDetails, function (err, tokenResponse, headers, unpacked) {\n if (err) {\n logger_1.default.logAction(logger_1.default.LOG_ERROR, 'Auth.requestToken()', 'token request API call returned error; err = ' + Utils.inspectError(err));\n _callback(normaliseAuthcallbackError(err));\n return;\n }\n if (!unpacked)\n tokenResponse = JSON.parse(tokenResponse);\n logger_1.default.logAction(logger_1.default.LOG_MINOR, 'Auth.getToken()', 'token received');\n _callback(null, tokenResponse);\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 * @param callback\n */\n Auth.prototype.createTokenRequest = function (tokenParams, authOptions, callback) {\n var _this = this;\n /* shuffle and normalise arguments as necessary */\n if (typeof tokenParams == 'function' && !callback) {\n callback = tokenParams;\n authOptions = tokenParams = null;\n }\n else if (typeof authOptions == 'function' && !callback) {\n callback = authOptions;\n authOptions = null;\n }\n if (!callback && this.client.options.promises) {\n return Utils.promisify(this, 'createTokenRequest', arguments);\n }\n /* RSA9h: if authOptions passed in, they're used instead of stored, don't merge them */\n authOptions = authOptions || this.authOptions;\n tokenParams = tokenParams || Utils.copy(this.tokenParams);\n var key = authOptions.key;\n if (!key) {\n callback(new errorinfo_1.default('No key specified', 40101, 403));\n return;\n }\n var keyParts = key.split(':'), keyName = keyParts[0], keySecret = keyParts[1];\n if (!keySecret) {\n callback(new errorinfo_1.default('Invalid key specified', 40101, 403));\n return;\n }\n if (tokenParams.clientId === '') {\n callback(new errorinfo_1.default('clientId can’t be an empty string', 40012, 400));\n return;\n }\n if ('capability' in tokenParams) {\n tokenParams.capability = c14n(tokenParams.capability);\n }\n var request = Utils.mixin({ keyName: keyName }, tokenParams), clientId = tokenParams.clientId || '', ttl = tokenParams.ttl || '', capability = tokenParams.capability || '';\n (function (authoriseCb) {\n if (request.timestamp) {\n authoriseCb();\n return;\n }\n _this.getTimestamp(authOptions && authOptions.queryTime, function (err, time) {\n if (err) {\n callback(err);\n return;\n }\n request.timestamp = time;\n authoriseCb();\n });\n })(function () {\n /* nonce */\n /* NOTE: there is no expectation that the client\n * specifies the nonce; this is done by the library\n * However, this can be overridden by the client\n * simply for testing purposes. */\n var nonce = request.nonce || (request.nonce = random()), timestamp = request.timestamp;\n var signText = request.keyName + '\\n' + ttl + '\\n' + capability + '\\n' + clientId + '\\n' + timestamp + '\\n' + nonce + '\\n';\n /* mac */\n /* NOTE: there is no expectation that the client\n * specifies the mac; this is done by the library\n * However, this can be overridden by the client\n * simply for testing purposes. */\n request.mac = request.mac || hmac(signText, keySecret);\n logger_1.default.logAction(logger_1.default.LOG_MINOR, 'Auth.getTokenRequest()', 'generated signed request');\n callback(null, request);\n });\n };\n /**\n * Get the auth query params to use for a websocket connection,\n * based on the current auth parameters\n */\n Auth.prototype.getAuthParams = function (callback) {\n if (this.method == 'basic')\n callback(null, { key: this.key });\n else\n this._ensureValidAuthCredentials(false, function (err, tokenDetails) {\n if (err) {\n callback(err);\n return;\n }\n if (!tokenDetails) {\n throw new Error('Auth.getAuthParams(): _ensureValidAuthCredentials returned no error or tokenDetails');\n }\n callback(null, { 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 Auth.prototype.getAuthHeaders = function (callback) {\n if (this.method == 'basic') {\n callback(null, { authorization: 'Basic ' + this.basicKey });\n }\n else {\n this._ensureValidAuthCredentials(false, function (err, tokenDetails) {\n if (err) {\n callback(err);\n return;\n }\n if (!tokenDetails) {\n throw new Error('Auth.getAuthParams(): _ensureValidAuthCredentials returned no error or tokenDetails');\n }\n callback(null, { authorization: 'Bearer ' + Utils.toBase64(tokenDetails.token) });\n });\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 Auth.prototype.getTimestamp = function (queryTime, callback) {\n if (!this.isTimeOffsetSet() && (queryTime || this.authOptions.queryTime)) {\n this.client.time(callback);\n }\n else {\n callback(null, this.getTimestampUsingOffset());\n }\n };\n Auth.prototype.getTimestampUsingOffset = function () {\n return Utils.now() + (this.client.serverTimeOffset || 0);\n };\n Auth.prototype.isTimeOffsetSet = function () {\n return this.client.serverTimeOffset !== null;\n };\n Auth.prototype._saveBasicOptions = function (authOptions) {\n this.method = 'basic';\n this.key = authOptions.key;\n this.basicKey = Utils.toBase64(authOptions.key);\n this.authOptions = authOptions || {};\n if ('clientId' in authOptions) {\n this._userSetClientId(authOptions.clientId);\n }\n };\n Auth.prototype._saveTokenOptions = function (tokenParams, authOptions) {\n this.method = 'token';\n if (tokenParams) {\n /* We temporarily persist tokenParams.timestamp in case a new token needs\n * to be requested, then null it out in the callback of\n * _ensureValidAuthCredentials for RSA10g compliance */\n this.tokenParams = tokenParams;\n }\n if (authOptions) {\n /* normalise */\n if (authOptions.token) {\n /* options.token may contain a token string or, for convenience, a TokenDetails */\n authOptions.tokenDetails =\n typeof authOptions.token === 'string'\n ? { token: authOptions.token }\n : 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 Auth.prototype._ensureValidAuthCredentials = function (forceSupersede, callback) {\n var _this = this;\n var token = this.tokenDetails;\n if (token) {\n if (this._tokenClientIdMismatch(token.clientId)) {\n /* 403 to trigger a permanently failed client - RSA15c */\n callback(new errorinfo_1.default('Mismatch between clientId in token (' + token.clientId + ') and current clientId (' + this.clientId + ')', 40102, 403));\n return;\n }\n /* RSA4b1 -- if we have a server time offset set already, we can\n * automatically remove expired tokens. Else just use the cached token. If it is\n * expired Ably will tell us and we'll discard it then. */\n if (!this.isTimeOffsetSet() || !token.expires || token.expires >= this.getTimestampUsingOffset()) {\n logger_1.default.logAction(logger_1.default.LOG_MINOR, 'Auth.getToken()', 'using cached token; expires = ' + token.expires);\n callback(null, token);\n return;\n }\n /* expired, so remove and fallthrough to getting a new one */\n logger_1.default.logAction(logger_1.default.LOG_MINOR, 'Auth.getToken()', 'deleting expired token');\n this.tokenDetails = null;\n }\n (this.waitingForTokenRequest || (this.waitingForTokenRequest = multicaster_1.default.create())).push(callback);\n if (this.currentTokenRequestId !== null && !forceSupersede) {\n return;\n }\n /* Request a new token */\n var tokenRequestId = (this.currentTokenRequestId = getTokenRequestId());\n this.requestToken(this.tokenParams, this.authOptions, function (err, tokenResponse) {\n if (_this.currentTokenRequestId > tokenRequestId) {\n logger_1.default.logAction(logger_1.default.LOG_MINOR, 'Auth._ensureValidAuthCredentials()', 'Discarding token request response; overtaken by newer one');\n return;\n }\n _this.currentTokenRequestId = null;\n var callbacks = _this.waitingForTokenRequest || noop;\n _this.waitingForTokenRequest = null;\n if (err) {\n callbacks(err);\n return;\n }\n callbacks(null, (_this.tokenDetails = tokenResponse));\n });\n };\n /* User-set: check types, '*' is disallowed, throw any errors */\n Auth.prototype._userSetClientId = function (clientId) {\n if (!(typeof clientId === 'string' || clientId === null)) {\n throw new errorinfo_1.default('clientId must be either a string or null', 40012, 400);\n }\n else if (clientId === '*') {\n throw new errorinfo_1.default('Can’t 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)', 40012, 400);\n }\n else {\n var 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 Auth.prototype._uncheckedSetClientId = function (clientId) {\n if (this._tokenClientIdMismatch(clientId)) {\n /* Should never happen in normal circumstances as realtime should\n * recognise mismatch and return an error */\n var msg = 'Unexpected clientId mismatch: client has ' + this.clientId + ', requested ' + clientId;\n var err = new errorinfo_1.default(msg, 40102, 401);\n logger_1.default.logAction(logger_1.default.LOG_ERROR, 'Auth._uncheckedSetClientId()', msg);\n return err;\n }\n else {\n /* RSA7a4: if options.clientId is provided and is not\n * null, it overrides defaultTokenParams.clientId */\n this.clientId = this.tokenParams.clientId = clientId;\n return null;\n }\n };\n Auth.prototype._tokenClientIdMismatch = function (tokenClientId) {\n return !!(this.clientId &&\n this.clientId !== '*' &&\n tokenClientId &&\n tokenClientId !== '*' &&\n this.clientId !== tokenClientId);\n };\n Auth.isTokenErr = function (error) {\n return error.code && error.code >= 40140 && error.code < 40150;\n };\n return Auth;\n}());\nexports.default = Auth;\n\n\n/***/ }),\n/* 17 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar HttpMethods;\n(function (HttpMethods) {\n HttpMethods[\"Get\"] = \"get\";\n HttpMethods[\"Delete\"] = \"delete\";\n HttpMethods[\"Post\"] = \"post\";\n HttpMethods[\"Put\"] = \"put\";\n HttpMethods[\"Patch\"] = \"patch\";\n})(HttpMethods || (HttpMethods = {}));\nexports.default = HttpMethods;\n\n\n/***/ }),\n/* 18 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.HttpPaginatedResponse = exports.PaginatedResult = void 0;\nvar tslib_1 = __webpack_require__(0);\nvar Utils = tslib_1.__importStar(__webpack_require__(1));\nvar logger_1 = tslib_1.__importDefault(__webpack_require__(2));\nvar resource_1 = tslib_1.__importDefault(__webpack_require__(25));\nfunction getRelParams(linkUrl) {\n var urlMatch = linkUrl.match(/^\\.\\/(\\w+)\\?(.*)$/);\n return urlMatch && urlMatch[2] && Utils.parseQueryString(urlMatch[2]);\n}\nfunction parseRelLinks(linkHeader) {\n if (typeof linkHeader == 'string')\n linkHeader = linkHeader.split(',');\n var relParams = {};\n for (var i = 0; i < linkHeader.length; i++) {\n var linkMatch = linkHeader[i].match(/^\\s*<(.+)>;\\s*rel=\"(\\w+)\"$/);\n if (linkMatch) {\n var params = getRelParams(linkMatch[1]);\n if (params)\n relParams[linkMatch[2]] = params;\n }\n }\n return relParams;\n}\nfunction returnErrOnly(err, body, useHPR) {\n /* If using httpPaginatedResponse, errors from Ably are returned as part of\n * the HPR, only do callback(err) for network errors etc. which don't\n * return a body and/or have no ably-originated error code (non-numeric\n * error codes originate from node) */\n return !(useHPR && (body || typeof err.code === 'number'));\n}\nvar PaginatedResource = /** @class */ (function () {\n function PaginatedResource(rest, path, headers, envelope, bodyHandler, useHttpPaginatedResponse) {\n this.rest = rest;\n this.path = path;\n this.headers = headers;\n this.envelope = envelope !== null && envelope !== void 0 ? envelope : null;\n this.bodyHandler = bodyHandler;\n this.useHttpPaginatedResponse = useHttpPaginatedResponse || false;\n }\n PaginatedResource.prototype.get = function (params, callback) {\n var _this = this;\n resource_1.default.get(this.rest, this.path, this.headers, params, this.envelope, function (err, body, headers, unpacked, statusCode) {\n _this.handlePage(err, body, headers, unpacked, statusCode, callback);\n });\n };\n PaginatedResource.prototype.delete = function (params, callback) {\n var _this = this;\n resource_1.default.delete(this.rest, this.path, this.headers, params, this.envelope, function (err, body, headers, unpacked, statusCode) {\n _this.handlePage(err, body, headers, unpacked, statusCode, callback);\n });\n };\n PaginatedResource.prototype.post = function (params, body, callback) {\n var _this = this;\n resource_1.default.post(this.rest, this.path, body, this.headers, params, this.envelope, function (err, responseBody, headers, unpacked, statusCode) {\n if (callback) {\n _this.handlePage(err, responseBody, headers, unpacked, statusCode, callback);\n }\n });\n };\n PaginatedResource.prototype.put = function (params, body, callback) {\n var _this = this;\n resource_1.default.put(this.rest, this.path, body, this.headers, params, this.envelope, function (err, responseBody, headers, unpacked, statusCode) {\n if (callback) {\n _this.handlePage(err, responseBody, headers, unpacked, statusCode, callback);\n }\n });\n };\n PaginatedResource.prototype.patch = function (params, body, callback) {\n var _this = this;\n resource_1.default.patch(this.rest, this.path, body, this.headers, params, this.envelope, function (err, responseBody, headers, unpacked, statusCode) {\n if (callback) {\n _this.handlePage(err, responseBody, headers, unpacked, statusCode, callback);\n }\n });\n };\n PaginatedResource.prototype.handlePage = function (err, body, headers, unpacked, statusCode, callback) {\n if (err && returnErrOnly(err, body, this.useHttpPaginatedResponse)) {\n logger_1.default.logAction(logger_1.default.LOG_ERROR, 'PaginatedResource.handlePage()', 'Unexpected error getting resource: err = ' + Utils.inspectError(err));\n callback === null || callback === void 0 ? void 0 : callback(err);\n return;\n }\n var items, linkHeader, relParams;\n try {\n items = this.bodyHandler(body, headers || {}, unpacked);\n }\n catch (e) {\n /* If we got an error, the failure to parse the body is almost certainly\n * due to that, so callback with that in preference over the parse error */\n callback === null || callback === void 0 ? void 0 : callback(err || e);\n return;\n }\n if (headers && (linkHeader = headers['Link'] || headers['link'])) {\n relParams = parseRelLinks(linkHeader);\n }\n if (this.useHttpPaginatedResponse) {\n callback(null, new HttpPaginatedResponse(this, items, headers || {}, statusCode, relParams, err));\n }\n else {\n callback(null, new PaginatedResult(this, items, relParams));\n }\n };\n return PaginatedResource;\n}());\nvar PaginatedResult = /** @class */ (function () {\n function PaginatedResult(resource, items, relParams) {\n var _this = this;\n this.resource = resource;\n this.items = items;\n var self = this;\n if (relParams) {\n if ('first' in relParams) {\n this.first = function (callback) {\n if (!callback && self.resource.rest.options.promises) {\n return Utils.promisify(self, 'first', []);\n }\n self.get(relParams.first, callback);\n };\n }\n if ('current' in relParams) {\n this.current = function (callback) {\n if (!callback && self.resource.rest.options.promises) {\n return Utils.promisify(self, 'current', []);\n }\n self.get(relParams.current, callback);\n };\n }\n this.next = function (callback) {\n if (!callback && self.resource.rest.options.promises) {\n return Utils.promisify(self, 'next', []);\n }\n if ('next' in relParams) {\n self.get(relParams.next, callback);\n }\n else {\n callback(null);\n }\n };\n this.hasNext = function () {\n return 'next' in relParams;\n };\n this.isLast = function () {\n var _a;\n return !((_a = _this.hasNext) === null || _a === void 0 ? void 0 : _a.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 PaginatedResult.prototype.get = function (params, callback) {\n var res = this.resource;\n resource_1.default.get(res.rest, res.path, res.headers, params, res.envelope, function (err, body, headers, unpacked, statusCode) {\n res.handlePage(err, body, headers, unpacked, statusCode, callback);\n });\n };\n return PaginatedResult;\n}());\nexports.PaginatedResult = PaginatedResult;\nvar HttpPaginatedResponse = /** @class */ (function (_super) {\n tslib_1.__extends(HttpPaginatedResponse, _super);\n function HttpPaginatedResponse(resource, items, headers, statusCode, relParams, err) {\n var _this = _super.call(this, resource, items, relParams) || this;\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 return _this;\n }\n HttpPaginatedResponse.prototype.toJSON = function () {\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 return HttpPaginatedResponse;\n}(PaginatedResult));\nexports.HttpPaginatedResponse = HttpPaginatedResponse;\nexports.default = PaginatedResource;\n\n\n/***/ }),\n/* 19 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isRetriable = void 0;\nvar tslib_1 = __webpack_require__(0);\nvar errorinfo_1 = tslib_1.__importDefault(__webpack_require__(4));\nvar ConnectionErrorCodes = {\n DISCONNECTED: 80003,\n SUSPENDED: 80002,\n FAILED: 80000,\n CLOSING: 80017,\n CLOSED: 80017,\n UNKNOWN_CONNECTION_ERR: 50002,\n UNKNOWN_CHANNEL_ERR: 50001,\n};\nvar ConnectionErrors = {\n disconnected: function () {\n return errorinfo_1.default.fromValues({\n statusCode: 400,\n code: ConnectionErrorCodes.DISCONNECTED,\n message: 'Connection to server temporarily unavailable',\n });\n },\n suspended: function () {\n return errorinfo_1.default.fromValues({\n statusCode: 400,\n code: ConnectionErrorCodes.SUSPENDED,\n message: 'Connection to server unavailable',\n });\n },\n failed: function () {\n return errorinfo_1.default.fromValues({\n statusCode: 400,\n code: ConnectionErrorCodes.FAILED,\n message: 'Connection failed or disconnected by server',\n });\n },\n closing: function () {\n return errorinfo_1.default.fromValues({\n statusCode: 400,\n code: ConnectionErrorCodes.CLOSING,\n message: 'Connection closing',\n });\n },\n closed: function () {\n return errorinfo_1.default.fromValues({\n statusCode: 400,\n code: ConnectionErrorCodes.CLOSED,\n message: 'Connection closed',\n });\n },\n unknownConnectionErr: function () {\n return errorinfo_1.default.fromValues({\n statusCode: 500,\n code: ConnectionErrorCodes.UNKNOWN_CONNECTION_ERR,\n message: 'Internal connection error',\n });\n },\n unknownChannelErr: function () {\n return errorinfo_1.default.fromValues({\n statusCode: 500,\n code: ConnectionErrorCodes.UNKNOWN_CONNECTION_ERR,\n message: 'Internal channel error',\n });\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}\nexports.isRetriable = isRetriable;\nexports.default = ConnectionErrors;\n\n\n/***/ }),\n/* 20 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar XHRStates;\n(function (XHRStates) {\n XHRStates[XHRStates[\"REQ_SEND\"] = 0] = \"REQ_SEND\";\n XHRStates[XHRStates[\"REQ_RECV\"] = 1] = \"REQ_RECV\";\n XHRStates[XHRStates[\"REQ_RECV_POLL\"] = 2] = \"REQ_RECV_POLL\";\n XHRStates[XHRStates[\"REQ_RECV_STREAM\"] = 3] = \"REQ_RECV_STREAM\";\n})(XHRStates || (XHRStates = {}));\nexports.default = XHRStates;\n\n\n/***/ }),\n/* 21 */\n/***/ (function(module, exports, __webpack_require__) {\n\n;(function (root, factory) {\n\tif (true) {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(__webpack_require__(6), __webpack_require__(5), __webpack_require__(58), __webpack_require__(11), __webpack_require__(40), __webpack_require__(32), __webpack_require__(23), __webpack_require__(27), __webpack_require__(28), __webpack_require__(59), __webpack_require__(60));\n\t}\n\telse {}\n}(this, function (CryptoJS) {\n\n\treturn CryptoJS;\n\n}));\n\n/***/ }),\n/* 22 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = __webpack_require__(0);\nvar logger_1 = tslib_1.__importDefault(__webpack_require__(2));\nvar Multicaster = /** @class */ (function () {\n // Private constructor; use static Multicaster.create instead\n function Multicaster(members) {\n this.members = members || [];\n }\n Multicaster.prototype.call = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n for (var _a = 0, _b = this.members; _a < _b.length; _a++) {\n var member = _b[_a];\n if (member) {\n try {\n member.apply(void 0, args);\n }\n catch (e) {\n logger_1.default.logAction(logger_1.default.LOG_ERROR, 'Multicaster multiple callback handler', 'Unexpected exception: ' + e + '; stack = ' + e.stack);\n }\n }\n }\n };\n Multicaster.prototype.push = function () {\n var _a;\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n (_a = this.members).push.apply(_a, args);\n };\n Multicaster.create = function (members) {\n var instance = new Multicaster(members);\n return Object.assign(function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return instance.call.apply(instance, args);\n }, {\n push: function (fn) { return instance.push(fn); },\n });\n };\n return Multicaster;\n}());\nexports.default = Multicaster;\n\n\n/***/ }),\n/* 23 */\n/***/ (function(module, exports, __webpack_require__) {\n\n;(function (root, factory) {\n\tif (true) {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(__webpack_require__(6));\n\t}\n\telse {}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Base = C_lib.Base;\n\t var C_enc = C.enc;\n\t var Utf8 = C_enc.Utf8;\n\t var C_algo = C.algo;\n\n\t /**\n\t * HMAC algorithm.\n\t */\n\t var HMAC = C_algo.HMAC = Base.extend({\n\t /**\n\t * Initializes a newly created HMAC.\n\t *\n\t * @param {Hasher} hasher The hash algorithm to use.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @example\n\t *\n\t * var hmacHasher = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, key);\n\t */\n\t init: function (hasher, key) {\n\t // Init hasher\n\t hasher = this._hasher = new hasher.init();\n\n\t // Convert string to WordArray, else assume WordArray already\n\t if (typeof key == 'string') {\n\t key = Utf8.parse(key);\n\t }\n\n\t // Shortcuts\n\t var hasherBlockSize = hasher.blockSize;\n\t var hasherBlockSizeBytes = hasherBlockSize * 4;\n\n\t // Allow arbitrary length keys\n\t if (key.sigBytes > hasherBlockSizeBytes) {\n\t key = hasher.finalize(key);\n\t }\n\n\t // Clamp excess bits\n\t key.clamp();\n\n\t // Clone key for inner and outer pads\n\t var oKey = this._oKey = key.clone();\n\t var iKey = this._iKey = key.clone();\n\n\t // Shortcuts\n\t var oKeyWords = oKey.words;\n\t var iKeyWords = iKey.words;\n\n\t // XOR keys with pad constants\n\t for (var i = 0; i < hasherBlockSize; i++) {\n\t oKeyWords[i] ^= 0x5c5c5c5c;\n\t iKeyWords[i] ^= 0x36363636;\n\t }\n\t oKey.sigBytes = iKey.sigBytes = hasherBlockSizeBytes;\n\n\t // Set initial values\n\t this.reset();\n\t },\n\n\t /**\n\t * Resets this HMAC to its initial state.\n\t *\n\t * @example\n\t *\n\t * hmacHasher.reset();\n\t */\n\t reset: function () {\n\t // Shortcut\n\t var hasher = this._hasher;\n\n\t // Reset\n\t hasher.reset();\n\t hasher.update(this._iKey);\n\t },\n\n\t /**\n\t * Updates this HMAC with a message.\n\t *\n\t * @param {WordArray|string} messageUpdate The message to append.\n\t *\n\t * @return {HMAC} This HMAC instance.\n\t *\n\t * @example\n\t *\n\t * hmacHasher.update('message');\n\t * hmacHasher.update(wordArray);\n\t */\n\t update: function (messageUpdate) {\n\t this._hasher.update(messageUpdate);\n\n\t // Chainable\n\t return this;\n\t },\n\n\t /**\n\t * Finalizes the HMAC computation.\n\t * Note that the finalize operation is effectively a destructive, read-once operation.\n\t *\n\t * @param {WordArray|string} messageUpdate (Optional) A final message update.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @example\n\t *\n\t * var hmac = hmacHasher.finalize();\n\t * var hmac = hmacHasher.finalize('message');\n\t * var hmac = hmacHasher.finalize(wordArray);\n\t */\n\t finalize: function (messageUpdate) {\n\t // Shortcut\n\t var hasher = this._hasher;\n\n\t // Compute HMAC\n\t var innerHash = hasher.finalize(messageUpdate);\n\t hasher.reset();\n\t var hmac = hasher.finalize(this._oKey.clone().concat(innerHash));\n\n\t return hmac;\n\t }\n\t });\n\t}());\n\n\n}));\n\n/***/ }),\n/* 24 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isSuccessCode = void 0;\nvar HttpStatusCodes;\n(function (HttpStatusCodes) {\n HttpStatusCodes[HttpStatusCodes[\"Success\"] = 200] = \"Success\";\n HttpStatusCodes[HttpStatusCodes[\"NoContent\"] = 204] = \"NoContent\";\n HttpStatusCodes[HttpStatusCodes[\"BadRequest\"] = 400] = \"BadRequest\";\n HttpStatusCodes[HttpStatusCodes[\"Unauthorized\"] = 401] = \"Unauthorized\";\n HttpStatusCodes[HttpStatusCodes[\"Forbidden\"] = 403] = \"Forbidden\";\n HttpStatusCodes[HttpStatusCodes[\"RequestTimeout\"] = 408] = \"RequestTimeout\";\n HttpStatusCodes[HttpStatusCodes[\"InternalServerError\"] = 500] = \"InternalServerError\";\n})(HttpStatusCodes || (HttpStatusCodes = {}));\nfunction isSuccessCode(statusCode) {\n return statusCode >= HttpStatusCodes.Success && statusCode < HttpStatusCodes.BadRequest;\n}\nexports.isSuccessCode = isSuccessCode;\nexports.default = HttpStatusCodes;\n\n\n/***/ }),\n/* 25 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = __webpack_require__(0);\nvar platform_1 = tslib_1.__importDefault(__webpack_require__(3));\nvar Utils = tslib_1.__importStar(__webpack_require__(1));\nvar logger_1 = tslib_1.__importDefault(__webpack_require__(2));\nvar auth_1 = tslib_1.__importDefault(__webpack_require__(16));\nvar HttpMethods_1 = tslib_1.__importDefault(__webpack_require__(17));\nvar errorinfo_1 = __webpack_require__(4);\nfunction withAuthDetails(rest, headers, params, errCallback, opCallback) {\n if (rest.http.supportsAuthHeaders) {\n rest.auth.getAuthHeaders(function (err, authHeaders) {\n if (err)\n errCallback(err);\n else\n opCallback(Utils.mixin(authHeaders, headers), params);\n });\n }\n else {\n rest.auth.getAuthParams(function (err, authParams) {\n if (err)\n errCallback(err);\n else\n opCallback(headers, Utils.mixin(authParams, params));\n });\n }\n}\nfunction unenvelope(callback, format) {\n return function (err, body, outerHeaders, unpacked, outerStatusCode) {\n if (err && !body) {\n callback(err);\n return;\n }\n if (!unpacked) {\n try {\n body = Utils.decodeBody(body, format);\n }\n catch (e) {\n if (Utils.isErrorInfoOrPartialErrorInfo(e)) {\n callback(e);\n }\n else {\n callback(new errorinfo_1.PartialErrorInfo(Utils.inspectError(e), null));\n }\n return;\n }\n }\n if (!body) {\n callback(new errorinfo_1.PartialErrorInfo('unenvelope(): Response body is missing', null));\n return;\n }\n var _a = body, wrappedStatusCode = _a.statusCode, response = _a.response, wrappedHeaders = _a.headers;\n if (wrappedStatusCode === undefined) {\n /* Envelope already unwrapped by the transport */\n callback(err, body, outerHeaders, true, outerStatusCode);\n return;\n }\n if (wrappedStatusCode < 200 || wrappedStatusCode >= 300) {\n /* handle wrapped errors */\n var wrappedErr = (response && response.error) || err;\n if (!wrappedErr) {\n wrappedErr = new Error('Error in unenveloping ' + body);\n wrappedErr.statusCode = wrappedStatusCode;\n }\n callback(wrappedErr, response, wrappedHeaders, true, wrappedStatusCode);\n return;\n }\n callback(err, response, wrappedHeaders, true, wrappedStatusCode);\n };\n}\nfunction paramString(params) {\n var paramPairs = [];\n if (params) {\n for (var needle in params) {\n paramPairs.push(needle + '=' + params[needle]);\n }\n }\n return paramPairs.join('&');\n}\nfunction urlFromPathAndParams(path, params) {\n return path + (params ? '?' : '') + paramString(params);\n}\nfunction logResponseHandler(callback, method, path, params) {\n return function (err, body, headers, unpacked, statusCode) {\n if (err) {\n logger_1.default.logAction(logger_1.default.LOG_MICRO, 'Resource.' + method + '()', 'Received Error; ' + urlFromPathAndParams(path, params) + '; Error: ' + Utils.inspectError(err));\n }\n else {\n logger_1.default.logAction(logger_1.default.LOG_MICRO, 'Resource.' + method + '()', 'Received; ' +\n urlFromPathAndParams(path, params) +\n '; Headers: ' +\n paramString(headers) +\n '; StatusCode: ' +\n statusCode +\n '; Body: ' +\n (platform_1.default.BufferUtils.isBuffer(body) ? body.toString() : body));\n }\n if (callback) {\n callback(err, body, headers, unpacked, statusCode);\n }\n };\n}\nvar Resource = /** @class */ (function () {\n function Resource() {\n }\n Resource.get = function (rest, path, headers, params, envelope, callback) {\n Resource.do(HttpMethods_1.default.Get, rest, path, null, headers, params, envelope, callback);\n };\n Resource.delete = function (rest, path, headers, params, envelope, callback) {\n Resource.do(HttpMethods_1.default.Delete, rest, path, null, headers, params, envelope, callback);\n };\n Resource.post = function (rest, path, body, headers, params, envelope, callback) {\n Resource.do(HttpMethods_1.default.Post, rest, path, body, headers, params, envelope, callback);\n };\n Resource.patch = function (rest, path, body, headers, params, envelope, callback) {\n Resource.do(HttpMethods_1.default.Patch, rest, path, body, headers, params, envelope, callback);\n };\n Resource.put = function (rest, path, body, headers, params, envelope, callback) {\n Resource.do(HttpMethods_1.default.Put, rest, path, body, headers, params, envelope, callback);\n };\n Resource.do = function (method, rest, path, body, headers, params, envelope, callback) {\n if (logger_1.default.shouldLog(logger_1.default.LOG_MICRO)) {\n callback = logResponseHandler(callback, method, path, params);\n }\n if (envelope) {\n callback = callback && unenvelope(callback, envelope);\n (params = params || {})['envelope'] = envelope;\n }\n function doRequest(headers, params) {\n var _a;\n if (logger_1.default.shouldLog(logger_1.default.LOG_MICRO)) {\n logger_1.default.logAction(logger_1.default.LOG_MICRO, 'Resource.' + method + '()', 'Sending; ' + urlFromPathAndParams(path, params));\n }\n if (logger_1.default.shouldLog(logger_1.default.LOG_MICRO)) {\n var decodedBody = body;\n if (((_a = headers['content-type']) === null || _a === void 0 ? void 0 : _a.indexOf('msgpack')) > 0) {\n try {\n decodedBody = platform_1.default.Config.msgpack.decode(body);\n }\n catch (decodeErr) {\n logger_1.default.logAction(logger_1.default.LOG_MICRO, 'Resource.' + method + '()', 'Sending MsgPack Decoding Error: ' + Utils.inspectError(decodeErr));\n }\n }\n logger_1.default.logAction(logger_1.default.LOG_MICRO, 'Resource.' + method + '()', 'Sending; ' + urlFromPathAndParams(path, params) + '; Body: ' + decodedBody);\n }\n rest.http.do(method, rest, path, headers, body, params, function (err, res, headers, unpacked, statusCode) {\n if (err && auth_1.default.isTokenErr(err)) {\n /* token has expired, so get a new one */\n rest.auth.authorize(null, null, function (err) {\n if (err) {\n callback(err);\n return;\n }\n /* retry ... */\n withAuthDetails(rest, headers, params, callback, doRequest);\n });\n return;\n }\n callback(err, res, headers, unpacked, statusCode);\n });\n }\n withAuthDetails(rest, headers, params, callback, doRequest);\n };\n return Resource;\n}());\nexports.default = Resource;\n\n\n/***/ }),\n/* 26 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = __webpack_require__(0);\nvar protocolmessage_1 = tslib_1.__importDefault(__webpack_require__(10));\nvar Utils = tslib_1.__importStar(__webpack_require__(1));\nvar eventemitter_1 = tslib_1.__importDefault(__webpack_require__(7));\nvar logger_1 = tslib_1.__importDefault(__webpack_require__(2));\nvar connectionerrors_1 = tslib_1.__importDefault(__webpack_require__(19));\nvar errorinfo_1 = tslib_1.__importDefault(__webpack_require__(4));\nvar platform_1 = tslib_1.__importDefault(__webpack_require__(3));\nvar actions = protocolmessage_1.default.Action;\nvar closeMessage = protocolmessage_1.default.fromValues({ action: actions.CLOSE });\nvar disconnectMessage = protocolmessage_1.default.fromValues({ action: actions.DISCONNECT });\n/*\n * Transport instances inherit from EventEmitter and emit the following events:\n *\n * event name data\n * closed error\n * failed error\n * disposed\n * connected null error, connectionSerial, connectionId, connectionDetails\n * event channel message object\n */\nvar Transport = /** @class */ (function (_super) {\n tslib_1.__extends(Transport, _super);\n function Transport(connectionManager, auth, params, forceJsonProtocol) {\n var _this = _super.call(this) || this;\n if (forceJsonProtocol) {\n params.format = undefined;\n params.heartbeats = true;\n }\n _this.connectionManager = connectionManager;\n connectionManager.registerProposedTransport(_this);\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 return _this;\n }\n Transport.prototype.connect = function () { };\n Transport.prototype.close = function () {\n if (this.isConnected) {\n this.requestClose();\n }\n this.finish('closed', connectionerrors_1.default.closed());\n };\n Transport.prototype.disconnect = function (err) {\n /* Used for network/transport issues that need to result in the transport\n * being disconnected, but should not transition the connection to 'failed' */\n if (this.isConnected) {\n this.requestDisconnect();\n }\n this.finish('disconnected', err || connectionerrors_1.default.disconnected());\n };\n Transport.prototype.fail = function (err) {\n /* Used for client-side-detected fatal connection issues */\n if (this.isConnected) {\n this.requestDisconnect();\n }\n this.finish('failed', err || connectionerrors_1.default.failed());\n };\n Transport.prototype.finish = function (event, err) {\n var _a;\n if (this.isFinished) {\n return;\n }\n this.isFinished = true;\n this.isConnected = false;\n this.maxIdleInterval = null;\n clearTimeout((_a = this.idleTimer) !== null && _a !== void 0 ? _a : undefined);\n this.idleTimer = null;\n this.emit(event, err);\n this.dispose();\n };\n Transport.prototype.onProtocolMessage = function (message) {\n if (logger_1.default.shouldLog(logger_1.default.LOG_MICRO)) {\n logger_1.default.logAction(logger_1.default.LOG_MICRO, 'Transport.onProtocolMessage()', 'received on ' +\n this.shortName +\n ': ' +\n protocolmessage_1.default.stringify(message) +\n '; connectionId = ' +\n this.connectionManager.connectionId);\n }\n this.onActivity();\n switch (message.action) {\n case actions.HEARTBEAT:\n logger_1.default.logAction(logger_1.default.LOG_MICRO, 'Transport.onProtocolMessage()', this.shortName + ' heartbeat; connectionId = ' + this.connectionManager.connectionId);\n this.emit('heartbeat', message.id);\n break;\n case actions.CONNECTED:\n this.onConnect(message);\n this.emit('connected', message.error, message.connectionId, message.connectionDetails, message);\n break;\n case actions.CLOSED:\n this.onClose(message);\n break;\n case actions.DISCONNECTED:\n this.onDisconnect(message);\n break;\n case actions.ACK:\n this.emit('ack', message.msgSerial, message.count);\n break;\n case actions.NACK:\n this.emit('nack', message.msgSerial, message.count, message.error);\n break;\n case actions.SYNC:\n this.connectionManager.onChannelMessage(message, this);\n break;\n case actions.ACTIVATE:\n // Ignored.\n break;\n case actions.AUTH:\n this.auth.authorize(function (err) {\n if (err) {\n logger_1.default.logAction(logger_1.default.LOG_ERROR, 'Transport.onProtocolMessage()', 'Ably requested re-authentication, but unable to obtain a new token: ' + Utils.inspectError(err));\n }\n });\n break;\n case actions.ERROR:\n logger_1.default.logAction(logger_1.default.LOG_MINOR, 'Transport.onProtocolMessage()', 'received error action; connectionId = ' +\n this.connectionManager.connectionId +\n '; err = ' +\n platform_1.default.Config.inspect(message.error) +\n (message.channel ? ', channel: ' + message.channel : ''));\n if (message.channel === undefined) {\n this.onFatalError(message);\n break;\n }\n /* otherwise it's a channel-specific error, so handle it in the channel */\n this.connectionManager.onChannelMessage(message, this);\n break;\n default:\n /* all other actions are channel-specific */\n this.connectionManager.onChannelMessage(message, this);\n }\n };\n Transport.prototype.onConnect = function (message) {\n this.isConnected = true;\n if (!message.connectionDetails) {\n throw new Error('Transport.onConnect(): Connect message recieved without connectionDetails');\n }\n var maxPromisedIdle = message.connectionDetails.maxIdleInterval;\n if (maxPromisedIdle) {\n this.maxIdleInterval = maxPromisedIdle + this.timeouts.realtimeRequestTimeout;\n this.onActivity();\n }\n /* else Realtime declines to guarantee any maximum idle interval - CD2h */\n };\n Transport.prototype.onDisconnect = function (message) {\n /* Used for when the server has disconnected the client (usually with a\n * DISCONNECTED action) */\n var err = message && message.error;\n logger_1.default.logAction(logger_1.default.LOG_MINOR, 'Transport.onDisconnect()', 'err = ' + Utils.inspectError(err));\n this.finish('disconnected', err);\n };\n Transport.prototype.onFatalError = function (message) {\n /* On receipt of a fatal connection error, we can assume that the server\n * will close the connection and the transport, and do not need to request\n * a disconnection - RTN15i */\n var err = message && message.error;\n logger_1.default.logAction(logger_1.default.LOG_MINOR, 'Transport.onFatalError()', 'err = ' + Utils.inspectError(err));\n this.finish('failed', err);\n };\n Transport.prototype.onClose = function (message) {\n var err = message && message.error;\n logger_1.default.logAction(logger_1.default.LOG_MINOR, 'Transport.onClose()', 'err = ' + Utils.inspectError(err));\n this.finish('closed', err);\n };\n Transport.prototype.requestClose = function () {\n logger_1.default.logAction(logger_1.default.LOG_MINOR, 'Transport.requestClose()', '');\n this.send(closeMessage);\n };\n Transport.prototype.requestDisconnect = function () {\n logger_1.default.logAction(logger_1.default.LOG_MINOR, 'Transport.requestDisconnect()', '');\n this.send(disconnectMessage);\n };\n Transport.prototype.ping = function (id) {\n var msg = { action: protocolmessage_1.default.Action.HEARTBEAT };\n if (id)\n msg.id = id;\n this.send(protocolmessage_1.default.fromValues(msg));\n };\n Transport.prototype.dispose = function () {\n logger_1.default.logAction(logger_1.default.LOG_MINOR, 'Transport.dispose()', '');\n this.isDisposed = true;\n this.off();\n };\n Transport.prototype.onActivity = function () {\n if (!this.maxIdleInterval) {\n return;\n }\n this.lastActivity = this.connectionManager.lastActivity = Utils.now();\n this.setIdleTimer(this.maxIdleInterval + 100);\n };\n Transport.prototype.setIdleTimer = function (timeout) {\n var _this = this;\n if (!this.idleTimer) {\n this.idleTimer = setTimeout(function () {\n _this.onIdleTimerExpire();\n }, timeout);\n }\n };\n Transport.prototype.onIdleTimerExpire = function () {\n if (!this.lastActivity || !this.maxIdleInterval) {\n throw new Error('Transport.onIdleTimerExpire(): lastActivity/maxIdleInterval not set');\n }\n this.idleTimer = null;\n var sinceLast = Utils.now() - this.lastActivity;\n var timeRemaining = this.maxIdleInterval - sinceLast;\n if (timeRemaining <= 0) {\n var msg = 'No activity seen from realtime in ' + sinceLast + 'ms; assuming connection has dropped';\n logger_1.default.logAction(logger_1.default.LOG_ERROR, 'Transport.onIdleTimerExpire()', msg);\n this.disconnect(new errorinfo_1.default(msg, 80003, 408));\n }\n else {\n this.setIdleTimer(timeRemaining + 100);\n }\n };\n Transport.tryConnect = function (transportCtor, connectionManager, auth, transportParams, callback) {\n var transport = new transportCtor(connectionManager, auth, transportParams);\n var transportAttemptTimer;\n var errorCb = function (err) {\n clearTimeout(transportAttemptTimer);\n callback({ event: this.event, error: err });\n };\n var realtimeRequestTimeout = connectionManager.options.timeouts.realtimeRequestTimeout;\n transportAttemptTimer = setTimeout(function () {\n transport.off(['preconnect', 'disconnected', 'failed']);\n transport.dispose();\n errorCb.call({ event: 'disconnected' }, new errorinfo_1.default('Timeout waiting for transport to indicate itself viable', 50000, 500));\n }, realtimeRequestTimeout);\n transport.on(['failed', 'disconnected'], errorCb);\n transport.on('preconnect', function () {\n logger_1.default.logAction(logger_1.default.LOG_MINOR, 'Transport.tryConnect()', 'viable transport ' + transport);\n clearTimeout(transportAttemptTimer);\n transport.off(['failed', 'disconnected'], errorCb);\n callback(null, transport);\n });\n transport.connect();\n };\n return Transport;\n}(eventemitter_1.default));\nexports.default = Transport;\n\n\n/***/ }),\n/* 27 */\n/***/ (function(module, exports, __webpack_require__) {\n\n;(function (root, factory) {\n\tif (true) {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(__webpack_require__(6), __webpack_require__(40), __webpack_require__(23));\n\t}\n\telse {}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Base = C_lib.Base;\n\t var WordArray = C_lib.WordArray;\n\t var C_algo = C.algo;\n\t var MD5 = C_algo.MD5;\n\n\t /**\n\t * This key derivation function is meant to conform with EVP_BytesToKey.\n\t * www.openssl.org/docs/crypto/EVP_BytesToKey.html\n\t */\n\t var EvpKDF = C_algo.EvpKDF = Base.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {number} keySize The key size in words to generate. Default: 4 (128 bits)\n\t * @property {Hasher} hasher The hash algorithm to use. Default: MD5\n\t * @property {number} iterations The number of iterations to perform. Default: 1\n\t */\n\t cfg: Base.extend({\n\t keySize: 128/32,\n\t hasher: MD5,\n\t iterations: 1\n\t }),\n\n\t /**\n\t * Initializes a newly created key derivation function.\n\t *\n\t * @param {Object} cfg (Optional) The configuration options to use for the derivation.\n\t *\n\t * @example\n\t *\n\t * var kdf = CryptoJS.algo.EvpKDF.create();\n\t * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8 });\n\t * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8, iterations: 1000 });\n\t */\n\t init: function (cfg) {\n\t this.cfg = this.cfg.extend(cfg);\n\t },\n\n\t /**\n\t * Derives a key from a password.\n\t *\n\t * @param {WordArray|string} password The password.\n\t * @param {WordArray|string} salt A salt.\n\t *\n\t * @return {WordArray} The derived key.\n\t *\n\t * @example\n\t *\n\t * var key = kdf.compute(password, salt);\n\t */\n\t compute: function (password, salt) {\n\t var block;\n\n\t // Shortcut\n\t var cfg = this.cfg;\n\n\t // Init hasher\n\t var hasher = cfg.hasher.create();\n\n\t // Initial values\n\t var derivedKey = WordArray.create();\n\n\t // Shortcuts\n\t var derivedKeyWords = derivedKey.words;\n\t var keySize = cfg.keySize;\n\t var iterations = cfg.iterations;\n\n\t // Generate key\n\t while (derivedKeyWords.length < keySize) {\n\t if (block) {\n\t hasher.update(block);\n\t }\n\t block = hasher.update(password).finalize(salt);\n\t hasher.reset();\n\n\t // Iterations\n\t for (var i = 1; i < iterations; i++) {\n\t block = hasher.finalize(block);\n\t hasher.reset();\n\t }\n\n\t derivedKey.concat(block);\n\t }\n\t derivedKey.sigBytes = keySize * 4;\n\n\t return derivedKey;\n\t }\n\t });\n\n\t /**\n\t * Derives a key from a password.\n\t *\n\t * @param {WordArray|string} password The password.\n\t * @param {WordArray|string} salt A salt.\n\t * @param {Object} cfg (Optional) The configuration options to use for this computation.\n\t *\n\t * @return {WordArray} The derived key.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var key = CryptoJS.EvpKDF(password, salt);\n\t * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8 });\n\t * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8, iterations: 1000 });\n\t */\n\t C.EvpKDF = function (password, salt, cfg) {\n\t return EvpKDF.create(cfg).compute(password, salt);\n\t };\n\t}());\n\n\n\treturn CryptoJS.EvpKDF;\n\n}));\n\n/***/ }),\n/* 28 */\n/***/ (function(module, exports, __webpack_require__) {\n\n;(function (root, factory) {\n\tif (true) {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(__webpack_require__(6), __webpack_require__(27));\n\t}\n\telse {}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * Cipher core components.\n\t */\n\tCryptoJS.lib.Cipher || (function (undefined) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Base = C_lib.Base;\n\t var WordArray = C_lib.WordArray;\n\t var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm;\n\t var C_enc = C.enc;\n\t var Utf8 = C_enc.Utf8;\n\t var Base64 = C_enc.Base64;\n\t var C_algo = C.algo;\n\t var EvpKDF = C_algo.EvpKDF;\n\n\t /**\n\t * Abstract base cipher template.\n\t *\n\t * @property {number} keySize This cipher's key size. Default: 4 (128 bits)\n\t * @property {number} ivSize This cipher's IV size. Default: 4 (128 bits)\n\t * @property {number} _ENC_XFORM_MODE A constant representing encryption mode.\n\t * @property {number} _DEC_XFORM_MODE A constant representing decryption mode.\n\t */\n\t var Cipher = C_lib.Cipher = BufferedBlockAlgorithm.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {WordArray} iv The IV to use for this operation.\n\t */\n\t cfg: Base.extend(),\n\n\t /**\n\t * Creates this cipher in encryption mode.\n\t *\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {Cipher} A cipher instance.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var cipher = CryptoJS.algo.AES.createEncryptor(keyWordArray, { iv: ivWordArray });\n\t */\n\t createEncryptor: function (key, cfg) {\n\t return this.create(this._ENC_XFORM_MODE, key, cfg);\n\t },\n\n\t /**\n\t * Creates this cipher in decryption mode.\n\t *\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {Cipher} A cipher instance.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var cipher = CryptoJS.algo.AES.createDecryptor(keyWordArray, { iv: ivWordArray });\n\t */\n\t createDecryptor: function (key, cfg) {\n\t return this.create(this._DEC_XFORM_MODE, key, cfg);\n\t },\n\n\t /**\n\t * Initializes a newly created cipher.\n\t *\n\t * @param {number} xformMode Either the encryption or decryption transormation mode constant.\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @example\n\t *\n\t * var cipher = CryptoJS.algo.AES.create(CryptoJS.algo.AES._ENC_XFORM_MODE, keyWordArray, { iv: ivWordArray });\n\t */\n\t init: function (xformMode, key, cfg) {\n\t // Apply config defaults\n\t this.cfg = this.cfg.extend(cfg);\n\n\t // Store transform mode and key\n\t this._xformMode = xformMode;\n\t this._key = key;\n\n\t // Set initial values\n\t this.reset();\n\t },\n\n\t /**\n\t * Resets this cipher to its initial state.\n\t *\n\t * @example\n\t *\n\t * cipher.reset();\n\t */\n\t reset: function () {\n\t // Reset data buffer\n\t BufferedBlockAlgorithm.reset.call(this);\n\n\t // Perform concrete-cipher logic\n\t this._doReset();\n\t },\n\n\t /**\n\t * Adds data to be encrypted or decrypted.\n\t *\n\t * @param {WordArray|string} dataUpdate The data to encrypt or decrypt.\n\t *\n\t * @return {WordArray} The data after processing.\n\t *\n\t * @example\n\t *\n\t * var encrypted = cipher.process('data');\n\t * var encrypted = cipher.process(wordArray);\n\t */\n\t process: function (dataUpdate) {\n\t // Append\n\t this._append(dataUpdate);\n\n\t // Process available blocks\n\t return this._process();\n\t },\n\n\t /**\n\t * Finalizes the encryption or decryption process.\n\t * Note that the finalize operation is effectively a destructive, read-once operation.\n\t *\n\t * @param {WordArray|string} dataUpdate The final data to encrypt or decrypt.\n\t *\n\t * @return {WordArray} The data after final processing.\n\t *\n\t * @example\n\t *\n\t * var encrypted = cipher.finalize();\n\t * var encrypted = cipher.finalize('data');\n\t * var encrypted = cipher.finalize(wordArray);\n\t */\n\t finalize: function (dataUpdate) {\n\t // Final data update\n\t if (dataUpdate) {\n\t this._append(dataUpdate);\n\t }\n\n\t // Perform concrete-cipher logic\n\t var finalProcessedData = this._doFinalize();\n\n\t return finalProcessedData;\n\t },\n\n\t keySize: 128/32,\n\n\t ivSize: 128/32,\n\n\t _ENC_XFORM_MODE: 1,\n\n\t _DEC_XFORM_MODE: 2,\n\n\t /**\n\t * Creates shortcut functions to a cipher's object interface.\n\t *\n\t * @param {Cipher} cipher The cipher to create a helper for.\n\t *\n\t * @return {Object} An object with encrypt and decrypt shortcut functions.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var AES = CryptoJS.lib.Cipher._createHelper(CryptoJS.algo.AES);\n\t */\n\t _createHelper: (function () {\n\t function selectCipherStrategy(key) {\n\t if (typeof key == 'string') {\n\t return PasswordBasedCipher;\n\t } else {\n\t return SerializableCipher;\n\t }\n\t }\n\n\t return function (cipher) {\n\t return {\n\t encrypt: function (message, key, cfg) {\n\t return selectCipherStrategy(key).encrypt(cipher, message, key, cfg);\n\t },\n\n\t decrypt: function (ciphertext, key, cfg) {\n\t return selectCipherStrategy(key).decrypt(cipher, ciphertext, key, cfg);\n\t }\n\t };\n\t };\n\t }())\n\t });\n\n\t /**\n\t * Abstract base stream cipher template.\n\t *\n\t * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 1 (32 bits)\n\t */\n\t var StreamCipher = C_lib.StreamCipher = Cipher.extend({\n\t _doFinalize: function () {\n\t // Process partial blocks\n\t var finalProcessedBlocks = this._process(!!'flush');\n\n\t return finalProcessedBlocks;\n\t },\n\n\t blockSize: 1\n\t });\n\n\t /**\n\t * Mode namespace.\n\t */\n\t var C_mode = C.mode = {};\n\n\t /**\n\t * Abstract base block cipher mode template.\n\t */\n\t var BlockCipherMode = C_lib.BlockCipherMode = Base.extend({\n\t /**\n\t * Creates this mode for encryption.\n\t *\n\t * @param {Cipher} cipher A block cipher instance.\n\t * @param {Array} iv The IV words.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var mode = CryptoJS.mode.CBC.createEncryptor(cipher, iv.words);\n\t */\n\t createEncryptor: function (cipher, iv) {\n\t return this.Encryptor.create(cipher, iv);\n\t },\n\n\t /**\n\t * Creates this mode for decryption.\n\t *\n\t * @param {Cipher} cipher A block cipher instance.\n\t * @param {Array} iv The IV words.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var mode = CryptoJS.mode.CBC.createDecryptor(cipher, iv.words);\n\t */\n\t createDecryptor: function (cipher, iv) {\n\t return this.Decryptor.create(cipher, iv);\n\t },\n\n\t /**\n\t * Initializes a newly created mode.\n\t *\n\t * @param {Cipher} cipher A block cipher instance.\n\t * @param {Array} iv The IV words.\n\t *\n\t * @example\n\t *\n\t * var mode = CryptoJS.mode.CBC.Encryptor.create(cipher, iv.words);\n\t */\n\t init: function (cipher, iv) {\n\t this._cipher = cipher;\n\t this._iv = iv;\n\t }\n\t });\n\n\t /**\n\t * Cipher Block Chaining mode.\n\t */\n\t var CBC = C_mode.CBC = (function () {\n\t /**\n\t * Abstract base CBC mode.\n\t */\n\t var CBC = BlockCipherMode.extend();\n\n\t /**\n\t * CBC encryptor.\n\t */\n\t CBC.Encryptor = CBC.extend({\n\t /**\n\t * Processes the data block at offset.\n\t *\n\t * @param {Array} words The data words to operate on.\n\t * @param {number} offset The offset where the block starts.\n\t *\n\t * @example\n\t *\n\t * mode.processBlock(data.words, offset);\n\t */\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher;\n\t var blockSize = cipher.blockSize;\n\n\t // XOR and encrypt\n\t xorBlock.call(this, words, offset, blockSize);\n\t cipher.encryptBlock(words, offset);\n\n\t // Remember this block to use with next block\n\t this._prevBlock = words.slice(offset, offset + blockSize);\n\t }\n\t });\n\n\t /**\n\t * CBC decryptor.\n\t */\n\t CBC.Decryptor = CBC.extend({\n\t /**\n\t * Processes the data block at offset.\n\t *\n\t * @param {Array} words The data words to operate on.\n\t * @param {number} offset The offset where the block starts.\n\t *\n\t * @example\n\t *\n\t * mode.processBlock(data.words, offset);\n\t */\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher;\n\t var blockSize = cipher.blockSize;\n\n\t // Remember this block to use with next block\n\t var thisBlock = words.slice(offset, offset + blockSize);\n\n\t // Decrypt and XOR\n\t cipher.decryptBlock(words, offset);\n\t xorBlock.call(this, words, offset, blockSize);\n\n\t // This block becomes the previous block\n\t this._prevBlock = thisBlock;\n\t }\n\t });\n\n\t function xorBlock(words, offset, blockSize) {\n\t var block;\n\n\t // Shortcut\n\t var iv = this._iv;\n\n\t // Choose mixing block\n\t if (iv) {\n\t block = iv;\n\n\t // Remove IV for subsequent blocks\n\t this._iv = undefined;\n\t } else {\n\t block = this._prevBlock;\n\t }\n\n\t // XOR blocks\n\t for (var i = 0; i < blockSize; i++) {\n\t words[offset + i] ^= block[i];\n\t }\n\t }\n\n\t return CBC;\n\t }());\n\n\t /**\n\t * Padding namespace.\n\t */\n\t var C_pad = C.pad = {};\n\n\t /**\n\t * PKCS #5/7 padding strategy.\n\t */\n\t var Pkcs7 = C_pad.Pkcs7 = {\n\t /**\n\t * Pads data using the algorithm defined in PKCS #5/7.\n\t *\n\t * @param {WordArray} data The data to pad.\n\t * @param {number} blockSize The multiple that the data should be padded to.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * CryptoJS.pad.Pkcs7.pad(wordArray, 4);\n\t */\n\t pad: function (data, blockSize) {\n\t // Shortcut\n\t var blockSizeBytes = blockSize * 4;\n\n\t // Count padding bytes\n\t var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes;\n\n\t // Create padding word\n\t var paddingWord = (nPaddingBytes << 24) | (nPaddingBytes << 16) | (nPaddingBytes << 8) | nPaddingBytes;\n\n\t // Create padding\n\t var paddingWords = [];\n\t for (var i = 0; i < nPaddingBytes; i += 4) {\n\t paddingWords.push(paddingWord);\n\t }\n\t var padding = WordArray.create(paddingWords, nPaddingBytes);\n\n\t // Add padding\n\t data.concat(padding);\n\t },\n\n\t /**\n\t * Unpads data that had been padded using the algorithm defined in PKCS #5/7.\n\t *\n\t * @param {WordArray} data The data to unpad.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * CryptoJS.pad.Pkcs7.unpad(wordArray);\n\t */\n\t unpad: function (data) {\n\t // Get number of padding bytes from last byte\n\t var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff;\n\n\t // Remove padding\n\t data.sigBytes -= nPaddingBytes;\n\t }\n\t };\n\n\t /**\n\t * Abstract base block cipher template.\n\t *\n\t * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 4 (128 bits)\n\t */\n\t var BlockCipher = C_lib.BlockCipher = Cipher.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {Mode} mode The block mode to use. Default: CBC\n\t * @property {Padding} padding The padding strategy to use. Default: Pkcs7\n\t */\n\t cfg: Cipher.cfg.extend({\n\t mode: CBC,\n\t padding: Pkcs7\n\t }),\n\n\t reset: function () {\n\t var modeCreator;\n\n\t // Reset cipher\n\t Cipher.reset.call(this);\n\n\t // Shortcuts\n\t var cfg = this.cfg;\n\t var iv = cfg.iv;\n\t var mode = cfg.mode;\n\n\t // Reset block mode\n\t if (this._xformMode == this._ENC_XFORM_MODE) {\n\t modeCreator = mode.createEncryptor;\n\t } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ {\n\t modeCreator = mode.createDecryptor;\n\t // Keep at least one block in the buffer for unpadding\n\t this._minBufferSize = 1;\n\t }\n\n\t if (this._mode && this._mode.__creator == modeCreator) {\n\t this._mode.init(this, iv && iv.words);\n\t } else {\n\t this._mode = modeCreator.call(mode, this, iv && iv.words);\n\t this._mode.__creator = modeCreator;\n\t }\n\t },\n\n\t _doProcessBlock: function (words, offset) {\n\t this._mode.processBlock(words, offset);\n\t },\n\n\t _doFinalize: function () {\n\t var finalProcessedBlocks;\n\n\t // Shortcut\n\t var padding = this.cfg.padding;\n\n\t // Finalize\n\t if (this._xformMode == this._ENC_XFORM_MODE) {\n\t // Pad data\n\t padding.pad(this._data, this.blockSize);\n\n\t // Process final blocks\n\t finalProcessedBlocks = this._process(!!'flush');\n\t } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ {\n\t // Process final blocks\n\t finalProcessedBlocks = this._process(!!'flush');\n\n\t // Unpad data\n\t padding.unpad(finalProcessedBlocks);\n\t }\n\n\t return finalProcessedBlocks;\n\t },\n\n\t blockSize: 128/32\n\t });\n\n\t /**\n\t * A collection of cipher parameters.\n\t *\n\t * @property {WordArray} ciphertext The raw ciphertext.\n\t * @property {WordArray} key The key to this ciphertext.\n\t * @property {WordArray} iv The IV used in the ciphering operation.\n\t * @property {WordArray} salt The salt used with a key derivation function.\n\t * @property {Cipher} algorithm The cipher algorithm.\n\t * @property {Mode} mode The block mode used in the ciphering operation.\n\t * @property {Padding} padding The padding scheme used in the ciphering operation.\n\t * @property {number} blockSize The block size of the cipher.\n\t * @property {Format} formatter The default formatting strategy to convert this cipher params object to a string.\n\t */\n\t var CipherParams = C_lib.CipherParams = Base.extend({\n\t /**\n\t * Initializes a newly created cipher params object.\n\t *\n\t * @param {Object} cipherParams An object with any of the possible cipher parameters.\n\t *\n\t * @example\n\t *\n\t * var cipherParams = CryptoJS.lib.CipherParams.create({\n\t * ciphertext: ciphertextWordArray,\n\t * key: keyWordArray,\n\t * iv: ivWordArray,\n\t * salt: saltWordArray,\n\t * algorithm: CryptoJS.algo.AES,\n\t * mode: CryptoJS.mode.CBC,\n\t * padding: CryptoJS.pad.PKCS7,\n\t * blockSize: 4,\n\t * formatter: CryptoJS.format.OpenSSL\n\t * });\n\t */\n\t init: function (cipherParams) {\n\t this.mixIn(cipherParams);\n\t },\n\n\t /**\n\t * Converts this cipher params object to a string.\n\t *\n\t * @param {Format} formatter (Optional) The formatting strategy to use.\n\t *\n\t * @return {string} The stringified cipher params.\n\t *\n\t * @throws Error If neither the formatter nor the default formatter is set.\n\t *\n\t * @example\n\t *\n\t * var string = cipherParams + '';\n\t * var string = cipherParams.toString();\n\t * var string = cipherParams.toString(CryptoJS.format.OpenSSL);\n\t */\n\t toString: function (formatter) {\n\t return (formatter || this.formatter).stringify(this);\n\t }\n\t });\n\n\t /**\n\t * Format namespace.\n\t */\n\t var C_format = C.format = {};\n\n\t /**\n\t * OpenSSL formatting strategy.\n\t */\n\t var OpenSSLFormatter = C_format.OpenSSL = {\n\t /**\n\t * Converts a cipher params object to an OpenSSL-compatible string.\n\t *\n\t * @param {CipherParams} cipherParams The cipher params object.\n\t *\n\t * @return {string} The OpenSSL-compatible string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var openSSLString = CryptoJS.format.OpenSSL.stringify(cipherParams);\n\t */\n\t stringify: function (cipherParams) {\n\t var wordArray;\n\n\t // Shortcuts\n\t var ciphertext = cipherParams.ciphertext;\n\t var salt = cipherParams.salt;\n\n\t // Format\n\t if (salt) {\n\t wordArray = WordArray.create([0x53616c74, 0x65645f5f]).concat(salt).concat(ciphertext);\n\t } else {\n\t wordArray = ciphertext;\n\t }\n\n\t return wordArray.toString(Base64);\n\t },\n\n\t /**\n\t * Converts an OpenSSL-compatible string to a cipher params object.\n\t *\n\t * @param {string} openSSLStr The OpenSSL-compatible string.\n\t *\n\t * @return {CipherParams} The cipher params object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var cipherParams = CryptoJS.format.OpenSSL.parse(openSSLString);\n\t */\n\t parse: function (openSSLStr) {\n\t var salt;\n\n\t // Parse base64\n\t var ciphertext = Base64.parse(openSSLStr);\n\n\t // Shortcut\n\t var ciphertextWords = ciphertext.words;\n\n\t // Test for salt\n\t if (ciphertextWords[0] == 0x53616c74 && ciphertextWords[1] == 0x65645f5f) {\n\t // Extract salt\n\t salt = WordArray.create(ciphertextWords.slice(2, 4));\n\n\t // Remove salt from ciphertext\n\t ciphertextWords.splice(0, 4);\n\t ciphertext.sigBytes -= 16;\n\t }\n\n\t return CipherParams.create({ ciphertext: ciphertext, salt: salt });\n\t }\n\t };\n\n\t /**\n\t * A cipher wrapper that returns ciphertext as a serializable cipher params object.\n\t */\n\t var SerializableCipher = C_lib.SerializableCipher = Base.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {Formatter} format The formatting strategy to convert cipher param objects to and from a string. Default: OpenSSL\n\t */\n\t cfg: Base.extend({\n\t format: OpenSSLFormatter\n\t }),\n\n\t /**\n\t * Encrypts a message.\n\t *\n\t * @param {Cipher} cipher The cipher algorithm to use.\n\t * @param {WordArray|string} message The message to encrypt.\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {CipherParams} A cipher params object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key);\n\t * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv });\n\t * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv, format: CryptoJS.format.OpenSSL });\n\t */\n\t encrypt: function (cipher, message, key, cfg) {\n\t // Apply config defaults\n\t cfg = this.cfg.extend(cfg);\n\n\t // Encrypt\n\t var encryptor = cipher.createEncryptor(key, cfg);\n\t var ciphertext = encryptor.finalize(message);\n\n\t // Shortcut\n\t var cipherCfg = encryptor.cfg;\n\n\t // Create and return serializable cipher params\n\t return CipherParams.create({\n\t ciphertext: ciphertext,\n\t key: key,\n\t iv: cipherCfg.iv,\n\t algorithm: cipher,\n\t mode: cipherCfg.mode,\n\t padding: cipherCfg.padding,\n\t blockSize: cipher.blockSize,\n\t formatter: cfg.format\n\t });\n\t },\n\n\t /**\n\t * Decrypts serialized ciphertext.\n\t *\n\t * @param {Cipher} cipher The cipher algorithm to use.\n\t * @param {CipherParams|string} ciphertext The ciphertext to decrypt.\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {WordArray} The plaintext.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, key, { iv: iv, format: CryptoJS.format.OpenSSL });\n\t * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, key, { iv: iv, format: CryptoJS.format.OpenSSL });\n\t */\n\t decrypt: function (cipher, ciphertext, key, cfg) {\n\t // Apply config defaults\n\t cfg = this.cfg.extend(cfg);\n\n\t // Convert string to CipherParams\n\t ciphertext = this._parse(ciphertext, cfg.format);\n\n\t // Decrypt\n\t var plaintext = cipher.createDecryptor(key, cfg).finalize(ciphertext.ciphertext);\n\n\t return plaintext;\n\t },\n\n\t /**\n\t * Converts serialized ciphertext to CipherParams,\n\t * else assumed CipherParams already and returns ciphertext unchanged.\n\t *\n\t * @param {CipherParams|string} ciphertext The ciphertext.\n\t * @param {Formatter} format The formatting strategy to use to parse serialized ciphertext.\n\t *\n\t * @return {CipherParams} The unserialized ciphertext.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var ciphertextParams = CryptoJS.lib.SerializableCipher._parse(ciphertextStringOrParams, format);\n\t */\n\t _parse: function (ciphertext, format) {\n\t if (typeof ciphertext == 'string') {\n\t return format.parse(ciphertext, this);\n\t } else {\n\t return ciphertext;\n\t }\n\t }\n\t });\n\n\t /**\n\t * Key derivation function namespace.\n\t */\n\t var C_kdf = C.kdf = {};\n\n\t /**\n\t * OpenSSL key derivation function.\n\t */\n\t var OpenSSLKdf = C_kdf.OpenSSL = {\n\t /**\n\t * Derives a key and IV from a password.\n\t *\n\t * @param {string} password The password to derive from.\n\t * @param {number} keySize The size in words of the key to generate.\n\t * @param {number} ivSize The size in words of the IV to generate.\n\t * @param {WordArray|string} salt (Optional) A 64-bit salt to use. If omitted, a salt will be generated randomly.\n\t *\n\t * @return {CipherParams} A cipher params object with the key, IV, and salt.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32);\n\t * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32, 'saltsalt');\n\t */\n\t execute: function (password, keySize, ivSize, salt) {\n\t // Generate random salt\n\t if (!salt) {\n\t salt = WordArray.random(64/8);\n\t }\n\n\t // Derive key and IV\n\t var key = EvpKDF.create({ keySize: keySize + ivSize }).compute(password, salt);\n\n\t // Separate key and IV\n\t var iv = WordArray.create(key.words.slice(keySize), ivSize * 4);\n\t key.sigBytes = keySize * 4;\n\n\t // Return params\n\t return CipherParams.create({ key: key, iv: iv, salt: salt });\n\t }\n\t };\n\n\t /**\n\t * A serializable cipher wrapper that derives the key from a password,\n\t * and returns ciphertext as a serializable cipher params object.\n\t */\n\t var PasswordBasedCipher = C_lib.PasswordBasedCipher = SerializableCipher.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {KDF} kdf The key derivation function to use to generate a key and IV from a password. Default: OpenSSL\n\t */\n\t cfg: SerializableCipher.cfg.extend({\n\t kdf: OpenSSLKdf\n\t }),\n\n\t /**\n\t * Encrypts a message using a password.\n\t *\n\t * @param {Cipher} cipher The cipher algorithm to use.\n\t * @param {WordArray|string} message The message to encrypt.\n\t * @param {string} password The password.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {CipherParams} A cipher params object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password');\n\t * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password', { format: CryptoJS.format.OpenSSL });\n\t */\n\t encrypt: function (cipher, message, password, cfg) {\n\t // Apply config defaults\n\t cfg = this.cfg.extend(cfg);\n\n\t // Derive key and other params\n\t var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize);\n\n\t // Add IV to config\n\t cfg.iv = derivedParams.iv;\n\n\t // Encrypt\n\t var ciphertext = SerializableCipher.encrypt.call(this, cipher, message, derivedParams.key, cfg);\n\n\t // Mix in derived params\n\t ciphertext.mixIn(derivedParams);\n\n\t return ciphertext;\n\t },\n\n\t /**\n\t * Decrypts serialized ciphertext using a password.\n\t *\n\t * @param {Cipher} cipher The cipher algorithm to use.\n\t * @param {CipherParams|string} ciphertext The ciphertext to decrypt.\n\t * @param {string} password The password.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {WordArray} The plaintext.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, 'password', { format: CryptoJS.format.OpenSSL });\n\t * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, 'password', { format: CryptoJS.format.OpenSSL });\n\t */\n\t decrypt: function (cipher, ciphertext, password, cfg) {\n\t // Apply config defaults\n\t cfg = this.cfg.extend(cfg);\n\n\t // Convert string to CipherParams\n\t ciphertext = this._parse(ciphertext, cfg.format);\n\n\t // Derive key and other params\n\t var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize, ciphertext.salt);\n\n\t // Add IV to config\n\t cfg.iv = derivedParams.iv;\n\n\t // Decrypt\n\t var plaintext = SerializableCipher.decrypt.call(this, cipher, ciphertext, derivedParams.key, cfg);\n\n\t return plaintext;\n\t }\n\t });\n\t}());\n\n\n}));\n\n/***/ }),\n/* 29 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Request = exports.createRequest = void 0;\nvar tslib_1 = __webpack_require__(0);\nvar Utils = tslib_1.__importStar(__webpack_require__(1));\nvar comettransport_1 = tslib_1.__importDefault(__webpack_require__(12));\nvar platform_1 = tslib_1.__importDefault(__webpack_require__(3));\nvar eventemitter_1 = tslib_1.__importDefault(__webpack_require__(7));\nvar errorinfo_1 = __webpack_require__(4);\nvar defaults_1 = tslib_1.__importDefault(__webpack_require__(8));\nvar logger_1 = tslib_1.__importDefault(__webpack_require__(2));\nvar XHRStates_1 = tslib_1.__importDefault(__webpack_require__(20));\n// Workaround for salesforce lightning locker compatibility\nvar globalObject = Utils.getGlobalObject();\nvar noop = function () { };\n/* Can't just use window.Ably, as that won't exist if using the commonjs version. */\nvar _ = (globalObject._ablyjs_jsonp = {});\n/* express strips out parantheses from the callback!\n * Kludge to still alow its responses to work, while not keeping the\n * function form for normal use and not cluttering window.Ably\n * https://github.com/expressjs/express/blob/5b4d4b4ab1324743534fbcd4709f4e75bb4b4e9d/lib/response.js#L305\n */\n_._ = function (id) {\n return _['_' + id] || noop;\n};\nvar idCounter = 1;\nvar shortName = 'jsonp';\nfunction createRequest(uri, headers, params, body, requestMode, timeouts, method) {\n /* JSONP requests are used either with the context being a realtime\n * transport, or with timeouts passed in (for when used by a rest client),\n * or completely standalone. Use the appropriate timeouts in each case */\n timeouts = timeouts || defaults_1.default.TIMEOUTS;\n return new Request(undefined, uri, headers, Utils.copy(params), body, requestMode, timeouts, method);\n}\nexports.createRequest = createRequest;\nvar JSONPTransport = /** @class */ (function (_super) {\n tslib_1.__extends(JSONPTransport, _super);\n function JSONPTransport(connectionManager, auth, params) {\n var _this = _super.call(this, connectionManager, auth, params) || this;\n _this.shortName = shortName;\n params.stream = false;\n return _this;\n }\n JSONPTransport.isAvailable = function () {\n return platform_1.default.Config.jsonpSupported && platform_1.default.Config.allowComet;\n };\n JSONPTransport.prototype.toString = function () {\n return 'JSONPTransport; uri=' + this.baseUri + '; isConnected=' + this.isConnected;\n };\n JSONPTransport.prototype.createRequest = function (uri, headers, params, body, requestMode, timeouts, method) {\n /* JSONP requests are used either with the context being a realtime\n * transport, or with timeouts passed in (for when used by a rest client),\n * or completely standalone. Use the appropriate timeouts in each case */\n timeouts = (this === null || this === void 0 ? void 0 : this.timeouts) || timeouts || defaults_1.default.TIMEOUTS;\n return createRequest(uri, headers, params, body, requestMode, timeouts, method);\n };\n return JSONPTransport;\n}(comettransport_1.default));\nvar Request = /** @class */ (function (_super) {\n tslib_1.__extends(Request, _super);\n function Request(id, uri, headers, params, body, requestMode, timeouts, method) {\n var _this = _super.call(this) || this;\n if (id === undefined)\n id = idCounter++;\n _this.id = id;\n _this.uri = uri;\n _this.params = params || {};\n _this.params.rnd = Utils.cheapRandStr();\n if (headers) {\n /* JSONP doesn't allow headers. Cherry-pick a couple to turn into qs params */\n if (headers['X-Ably-Version'])\n _this.params.v = headers['X-Ably-Version'];\n if (headers['X-Ably-Lib'])\n _this.params.lib = headers['X-Ably-Lib'];\n }\n _this.body = body;\n _this.method = method;\n _this.requestMode = requestMode;\n _this.timeouts = timeouts;\n _this.requestComplete = false;\n return _this;\n }\n Request.prototype.exec = function () {\n var _this = this;\n var id = this.id, body = this.body, method = this.method, uri = this.uri, params = this.params;\n params.callback = '_ablyjs_jsonp._(' + id + ')';\n params.envelope = 'jsonp';\n if (body) {\n params.body = body;\n }\n if (method && method !== 'get') {\n params.method = method;\n }\n var script = (this.script = document.createElement('script'));\n var src = uri + Utils.toQueryString(params);\n script.src = src;\n if (script.src.split('/').slice(-1)[0] !== src.split('/').slice(-1)[0]) {\n /* The src has been truncated. Can't abort, but can at least emit an\n * error so the user knows what's gone wrong. (Can't compare strings\n * directly as src may have a port, script.src won't) */\n logger_1.default.logAction(logger_1.default.LOG_ERROR, 'JSONP Request.exec()', 'Warning: the browser appears to have truncated the script URI. This will likely result in the request failing due to an unparseable body param');\n }\n script.async = true;\n script.type = 'text/javascript';\n script.charset = 'UTF-8';\n script.onerror = function (err) {\n _this.complete(new errorinfo_1.PartialErrorInfo('JSONP script error (event: ' + platform_1.default.Config.inspect(err) + ')', null, 400));\n };\n _['_' + id] = function (message) {\n if (message.statusCode) {\n /* Handle as enveloped jsonp, as all jsonp transport uses should be */\n var response = message.response;\n if (message.statusCode == 204) {\n _this.complete(null, null, null, message.statusCode);\n }\n else if (!response) {\n _this.complete(new errorinfo_1.PartialErrorInfo('Invalid server response: no envelope detected', null, 500));\n }\n else if (message.statusCode < 400 || Utils.isArray(response)) {\n /* If response is an array, it's an array of protocol messages -- even if\n * it contains an error action (hence the nonsuccess statuscode), we can\n * consider the request to have succeeded, just pass it on to\n * onProtocolMessage to decide what to do */\n _this.complete(null, response, message.headers, message.statusCode);\n }\n else {\n var err = response.error || new errorinfo_1.PartialErrorInfo('Error response received from server', null, message.statusCode);\n _this.complete(err);\n }\n }\n else {\n /* Handle as non-enveloped -- as will be eg from a customer's authUrl server */\n _this.complete(null, message);\n }\n };\n var timeout = this.requestMode == XHRStates_1.default.REQ_SEND ? this.timeouts.httpRequestTimeout : this.timeouts.recvTimeout;\n this.timer = setTimeout(this.abort.bind(this), timeout);\n var head = document.getElementsByTagName('head')[0];\n head.insertBefore(script, head.firstChild);\n };\n Request.prototype.complete = function (err, body, headers, statusCode) {\n headers = headers || {};\n if (!this.requestComplete) {\n this.requestComplete = true;\n var contentType = void 0;\n if (body) {\n contentType = typeof body == 'string' ? 'text/plain' : 'application/json';\n headers['content-type'] = contentType;\n this.emit('data', body);\n }\n this.emit('complete', err, body, headers, /* unpacked: */ true, statusCode);\n this.dispose();\n }\n };\n Request.prototype.abort = function () {\n this.dispose();\n };\n Request.prototype.dispose = function () {\n var timer = this.timer;\n if (timer) {\n clearTimeout(timer);\n this.timer = null;\n }\n var script = this.script;\n if (script.parentNode)\n script.parentNode.removeChild(script);\n delete _[this.id];\n this.emit('disposed');\n };\n return Request;\n}(eventemitter_1.default));\nexports.Request = Request;\nfunction default_1(connectionManager) {\n globalObject.JSONPTransport = JSONPTransport;\n if (JSONPTransport.isAvailable()) {\n connectionManager.supportedTransports[shortName] = JSONPTransport;\n }\n return JSONPTransport;\n}\nexports.default = default_1;\n\n\n/***/ }),\n/* 30 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = __webpack_require__(0);\nvar Utils = tslib_1.__importStar(__webpack_require__(1));\nvar logger_1 = tslib_1.__importDefault(__webpack_require__(2));\nvar defaults_1 = tslib_1.__importDefault(__webpack_require__(8));\nvar auth_1 = tslib_1.__importDefault(__webpack_require__(16));\nvar push_1 = tslib_1.__importDefault(__webpack_require__(46));\nvar paginatedresource_1 = tslib_1.__importDefault(__webpack_require__(18));\nvar channel_1 = tslib_1.__importDefault(__webpack_require__(33));\nvar errorinfo_1 = tslib_1.__importDefault(__webpack_require__(4));\nvar stats_1 = tslib_1.__importDefault(__webpack_require__(49));\nvar HttpMethods_1 = tslib_1.__importDefault(__webpack_require__(17));\nvar platform_1 = tslib_1.__importDefault(__webpack_require__(3));\nvar message_1 = tslib_1.__importDefault(__webpack_require__(9));\nvar presencemessage_1 = tslib_1.__importDefault(__webpack_require__(14));\nvar noop = function () { };\nvar Rest = /** @class */ (function () {\n function Rest(options) {\n if (!options) {\n var msg = 'no options provided';\n logger_1.default.logAction(logger_1.default.LOG_ERROR, 'Rest()', msg);\n throw new Error(msg);\n }\n var optionsObj = defaults_1.default.objectifyOptions(options);\n if (optionsObj.log) {\n logger_1.default.setLog(optionsObj.log.level, optionsObj.log.handler);\n }\n logger_1.default.logAction(logger_1.default.LOG_MICRO, 'Rest()', 'initialized with clientOptions ' + platform_1.default.Config.inspect(options));\n var normalOptions = (this.options = defaults_1.default.normaliseOptions(optionsObj));\n /* process options */\n if (normalOptions.key) {\n var keyMatch = normalOptions.key.match(/^([^:\\s]+):([^:.\\s]+)$/);\n if (!keyMatch) {\n var msg = 'invalid key parameter';\n logger_1.default.logAction(logger_1.default.LOG_ERROR, 'Rest()', msg);\n throw new errorinfo_1.default(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_1.default('clientId must be either a string or null', 40012, 400);\n else if (normalOptions.clientId === '*')\n throw new errorinfo_1.default('Can’t use \"*\" as a clientId as that string is reserved. (To change the default token request behaviour to use a wildcard clientId, use {defaultTokenParams: {clientId: \"*\"}})', 40012, 400);\n }\n logger_1.default.logAction(logger_1.default.LOG_MINOR, 'Rest()', 'started; version = ' + defaults_1.default.version);\n this.baseUri = this.authority = function (host) {\n return defaults_1.default.getHttpScheme(normalOptions) + host + ':' + defaults_1.default.getPort(normalOptions, false);\n };\n this._currentFallback = null;\n this.serverTimeOffset = null;\n this.http = new platform_1.default.Http(normalOptions);\n this.auth = new auth_1.default(this, normalOptions);\n this.channels = new Channels(this);\n this.push = new push_1.default(this);\n }\n Rest.prototype.stats = function (params, callback) {\n /* params and callback are optional; see if params contains the callback */\n if (callback === undefined) {\n if (typeof params == 'function') {\n callback = params;\n params = null;\n }\n else {\n if (this.options.promises) {\n return Utils.promisify(this, 'stats', [params]);\n }\n callback = noop;\n }\n }\n var headers = Utils.defaultGetHeaders(this.options), format = this.options.useBinaryProtocol ? Utils.Format.msgpack : Utils.Format.json, envelope = this.http.supportsLinkHeaders ? undefined : format;\n if (this.options.headers)\n Utils.mixin(headers, this.options.headers);\n new paginatedresource_1.default(this, '/stats', headers, envelope, function (body, headers, unpacked) {\n var statsValues = unpacked ? body : JSON.parse(body);\n for (var i = 0; i < statsValues.length; i++)\n statsValues[i] = stats_1.default.fromValues(statsValues[i]);\n return statsValues;\n }).get(params, callback);\n };\n Rest.prototype.time = function (params, callback) {\n var _this = this;\n /* params and callback are optional; see if params contains the callback */\n if (callback === undefined) {\n if (typeof params == 'function') {\n callback = params;\n params = null;\n }\n else {\n if (this.options.promises) {\n return Utils.promisify(this, 'time', [params]);\n }\n }\n }\n var _callback = callback || noop;\n var headers = Utils.defaultGetHeaders(this.options);\n if (this.options.headers)\n Utils.mixin(headers, this.options.headers);\n var timeUri = function (host) {\n return _this.authority(host) + '/time';\n };\n this.http.do(HttpMethods_1.default.Get, this, timeUri, headers, null, params, function (err, res, headers, unpacked) {\n if (err) {\n _callback(err);\n return;\n }\n if (!unpacked)\n res = JSON.parse(res);\n var time = res[0];\n if (!time) {\n _callback(new errorinfo_1.default('Internal error (unexpected result type from GET /time)', 50000, 500));\n return;\n }\n /* calculate time offset only once for this device by adding to the prototype */\n _this.serverTimeOffset = time - Utils.now();\n _callback(null, time);\n });\n };\n Rest.prototype.request = function (method, path, params, body, customHeaders, callback) {\n var useBinary = this.options.useBinaryProtocol, encoder = useBinary ? platform_1.default.Config.msgpack.encode : JSON.stringify, decoder = useBinary ? platform_1.default.Config.msgpack.decode : JSON.parse, format = useBinary ? Utils.Format.msgpack : Utils.Format.json, envelope = this.http.supportsLinkHeaders ? undefined : format;\n params = params || {};\n var _method = method.toLowerCase();\n var headers = _method == 'get' ? Utils.defaultGetHeaders(this.options, format) : Utils.defaultPostHeaders(this.options, format);\n if (callback === undefined) {\n if (this.options.promises) {\n return Utils.promisify(this, 'request', [method, path, params, body, customHeaders]);\n }\n callback = noop;\n }\n if (typeof body !== 'string') {\n body = encoder(body);\n }\n if (this.options.headers) {\n Utils.mixin(headers, this.options.headers);\n }\n if (customHeaders) {\n Utils.mixin(headers, customHeaders);\n }\n var paginatedResource = new paginatedresource_1.default(this, path, headers, envelope, function (resbody, headers, unpacked) {\n return Utils.ensureArray(unpacked ? resbody : decoder(resbody));\n }, \n /* useHttpPaginatedResponse: */ true);\n if (!Utils.arrIn(platform_1.default.Http.methods, _method)) {\n throw new errorinfo_1.default('Unsupported method ' + _method, 40500, 405);\n }\n if (Utils.arrIn(platform_1.default.Http.methodsWithBody, _method)) {\n paginatedResource[_method](params, body, callback);\n }\n else {\n paginatedResource[_method](params, callback);\n }\n };\n Rest.prototype.setLog = function (logOptions) {\n logger_1.default.setLog(logOptions.level, logOptions.handler);\n };\n Rest.Promise = function (options) {\n options = defaults_1.default.objectifyOptions(options);\n options.promises = true;\n return new Rest(options);\n };\n Rest.Callbacks = Rest;\n Rest.Platform = platform_1.default;\n Rest.Message = message_1.default;\n Rest.PresenceMessage = presencemessage_1.default;\n return Rest;\n}());\nvar Channels = /** @class */ (function () {\n function Channels(rest) {\n this.rest = rest;\n this.all = Object.create(null);\n }\n Channels.prototype.get = function (name, channelOptions) {\n name = String(name);\n var channel = this.all[name];\n if (!channel) {\n this.all[name] = channel = new channel_1.default(this.rest, name, channelOptions);\n }\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 Channels.prototype.release = function (name) {\n delete this.all[String(name)];\n };\n return Channels;\n}());\nexports.default = Rest;\n\n\n/***/ }),\n/* 31 */\n/***/ (function(module, exports, __webpack_require__) {\n\n;(function (root, factory) {\n\tif (true) {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(__webpack_require__(6));\n\t}\n\telse {}\n}(this, function (CryptoJS) {\n\n\treturn CryptoJS.enc.Utf8;\n\n}));\n\n/***/ }),\n/* 32 */\n/***/ (function(module, exports, __webpack_require__) {\n\n;(function (root, factory) {\n\tif (true) {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(__webpack_require__(6));\n\t}\n\telse {}\n}(this, function (CryptoJS) {\n\n\t(function (Math) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var Hasher = C_lib.Hasher;\n\t var C_algo = C.algo;\n\n\t // Initialization and round constants tables\n\t var H = [];\n\t var K = [];\n\n\t // Compute constants\n\t (function () {\n\t function isPrime(n) {\n\t var sqrtN = Math.sqrt(n);\n\t for (var factor = 2; factor <= sqrtN; factor++) {\n\t if (!(n % factor)) {\n\t return false;\n\t }\n\t }\n\n\t return true;\n\t }\n\n\t function getFractionalBits(n) {\n\t return ((n - (n | 0)) * 0x100000000) | 0;\n\t }\n\n\t var n = 2;\n\t var nPrime = 0;\n\t while (nPrime < 64) {\n\t if (isPrime(n)) {\n\t if (nPrime < 8) {\n\t H[nPrime] = getFractionalBits(Math.pow(n, 1 / 2));\n\t }\n\t K[nPrime] = getFractionalBits(Math.pow(n, 1 / 3));\n\n\t nPrime++;\n\t }\n\n\t n++;\n\t }\n\t }());\n\n\t // Reusable object\n\t var W = [];\n\n\t /**\n\t * SHA-256 hash algorithm.\n\t */\n\t var SHA256 = C_algo.SHA256 = Hasher.extend({\n\t _doReset: function () {\n\t this._hash = new WordArray.init(H.slice(0));\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcut\n\t var H = this._hash.words;\n\n\t // Working variables\n\t var a = H[0];\n\t var b = H[1];\n\t var c = H[2];\n\t var d = H[3];\n\t var e = H[4];\n\t var f = H[5];\n\t var g = H[6];\n\t var h = H[7];\n\n\t // Computation\n\t for (var i = 0; i < 64; i++) {\n\t if (i < 16) {\n\t W[i] = M[offset + i] | 0;\n\t } else {\n\t var gamma0x = W[i - 15];\n\t var gamma0 = ((gamma0x << 25) | (gamma0x >>> 7)) ^\n\t ((gamma0x << 14) | (gamma0x >>> 18)) ^\n\t (gamma0x >>> 3);\n\n\t var gamma1x = W[i - 2];\n\t var gamma1 = ((gamma1x << 15) | (gamma1x >>> 17)) ^\n\t ((gamma1x << 13) | (gamma1x >>> 19)) ^\n\t (gamma1x >>> 10);\n\n\t W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16];\n\t }\n\n\t var ch = (e & f) ^ (~e & g);\n\t var maj = (a & b) ^ (a & c) ^ (b & c);\n\n\t var sigma0 = ((a << 30) | (a >>> 2)) ^ ((a << 19) | (a >>> 13)) ^ ((a << 10) | (a >>> 22));\n\t var sigma1 = ((e << 26) | (e >>> 6)) ^ ((e << 21) | (e >>> 11)) ^ ((e << 7) | (e >>> 25));\n\n\t var t1 = h + sigma1 + ch + K[i] + W[i];\n\t var t2 = sigma0 + maj;\n\n\t h = g;\n\t g = f;\n\t f = e;\n\t e = (d + t1) | 0;\n\t d = c;\n\t c = b;\n\t b = a;\n\t a = (t1 + t2) | 0;\n\t }\n\n\t // Intermediate hash value\n\t H[0] = (H[0] + a) | 0;\n\t H[1] = (H[1] + b) | 0;\n\t H[2] = (H[2] + c) | 0;\n\t H[3] = (H[3] + d) | 0;\n\t H[4] = (H[4] + e) | 0;\n\t H[5] = (H[5] + f) | 0;\n\t H[6] = (H[6] + g) | 0;\n\t H[7] = (H[7] + h) | 0;\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal;\n\t data.sigBytes = dataWords.length * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Return final computed hash\n\t return this._hash;\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\t clone._hash = this._hash.clone();\n\n\t return clone;\n\t }\n\t });\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.SHA256('message');\n\t * var hash = CryptoJS.SHA256(wordArray);\n\t */\n\t C.SHA256 = Hasher._createHelper(SHA256);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacSHA256(message, key);\n\t */\n\t C.HmacSHA256 = Hasher._createHmacHelper(SHA256);\n\t}(Math));\n\n\n\treturn CryptoJS.SHA256;\n\n}));\n\n/***/ }),\n/* 33 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = __webpack_require__(0);\nvar Utils = tslib_1.__importStar(__webpack_require__(1));\nvar eventemitter_1 = tslib_1.__importDefault(__webpack_require__(7));\nvar logger_1 = tslib_1.__importDefault(__webpack_require__(2));\nvar presence_1 = tslib_1.__importDefault(__webpack_require__(34));\nvar message_1 = tslib_1.__importDefault(__webpack_require__(9));\nvar errorinfo_1 = tslib_1.__importDefault(__webpack_require__(4));\nvar paginatedresource_1 = tslib_1.__importDefault(__webpack_require__(18));\nvar resource_1 = tslib_1.__importDefault(__webpack_require__(25));\nvar platform_1 = tslib_1.__importDefault(__webpack_require__(3));\nfunction noop() { }\nvar MSG_ID_ENTROPY_BYTES = 9;\nfunction allEmptyIds(messages) {\n return Utils.arrEvery(messages, function (message) {\n return !message.id;\n });\n}\nfunction normaliseChannelOptions(options) {\n var channelOptions = options || {};\n if (channelOptions.cipher) {\n if (!platform_1.default.Crypto)\n throw new Error('Encryption not enabled; use ably.encryption.js instead');\n var cipher = platform_1.default.Crypto.getCipher(channelOptions.cipher);\n channelOptions.cipher = cipher.cipherParams;\n channelOptions.channelCipher = cipher.cipher;\n }\n else if ('cipher' in channelOptions) {\n /* Don't deactivate an existing cipher unless options\n * has a 'cipher' key that's falsey */\n channelOptions.cipher = undefined;\n channelOptions.channelCipher = null;\n }\n return channelOptions;\n}\nvar Channel = /** @class */ (function (_super) {\n tslib_1.__extends(Channel, _super);\n function Channel(rest, name, channelOptions) {\n var _this = _super.call(this) || this;\n logger_1.default.logAction(logger_1.default.LOG_MINOR, 'Channel()', 'started; name = ' + name);\n _this.rest = rest;\n _this.name = name;\n _this.basePath = '/channels/' + encodeURIComponent(name);\n _this.presence = new presence_1.default(_this);\n _this.channelOptions = normaliseChannelOptions(channelOptions);\n return _this;\n }\n Channel.prototype.setOptions = function (options) {\n this.channelOptions = normaliseChannelOptions(options);\n };\n Channel.prototype.history = function (params, callback) {\n logger_1.default.logAction(logger_1.default.LOG_MICRO, 'Channel.history()', 'channel = ' + this.name);\n /* params and callback are optional; see if params contains the callback */\n if (callback === undefined) {\n if (typeof params == 'function') {\n callback = params;\n params = null;\n }\n else {\n if (this.rest.options.promises) {\n return Utils.promisify(this, 'history', arguments);\n }\n callback = noop;\n }\n }\n this._history(params, callback);\n };\n Channel.prototype._history = function (params, callback) {\n var rest = this.rest, format = rest.options.useBinaryProtocol ? Utils.Format.msgpack : Utils.Format.json, envelope = this.rest.http.supportsLinkHeaders ? undefined : format, headers = Utils.defaultGetHeaders(rest.options, format);\n if (rest.options.headers)\n Utils.mixin(headers, rest.options.headers);\n var options = this.channelOptions;\n new paginatedresource_1.default(rest, this.basePath + '/messages', headers, envelope, function (body, headers, unpacked) {\n return message_1.default.fromResponseBody(body, options, unpacked ? undefined : format);\n }).get(params, callback);\n };\n Channel.prototype.publish = function () {\n var _this = this;\n var argCount = arguments.length, first = arguments[0], second = arguments[1];\n var callback = arguments[argCount - 1];\n var messages;\n var params;\n if (typeof callback !== 'function') {\n if (this.rest.options.promises) {\n return Utils.promisify(this, 'publish', arguments);\n }\n callback = noop;\n }\n if (typeof first === 'string' || first === null) {\n /* (name, data, ...) */\n messages = [message_1.default.fromValues({ name: first, data: second })];\n params = arguments[2];\n }\n else if (Utils.isObject(first)) {\n messages = [message_1.default.fromValues(first)];\n params = arguments[1];\n }\n else if (Utils.isArray(first)) {\n messages = message_1.default.fromValuesArray(first);\n params = arguments[1];\n }\n else {\n throw new errorinfo_1.default('The single-argument form of publish() expects a message object or an array of message objects', 40013, 400);\n }\n if (typeof params !== 'object' || !params) {\n /* No params supplied (so after-message argument is just the callback or undefined) */\n params = {};\n }\n var rest = this.rest, options = rest.options, format = options.useBinaryProtocol ? Utils.Format.msgpack : Utils.Format.json, idempotentRestPublishing = rest.options.idempotentRestPublishing, headers = Utils.defaultPostHeaders(rest.options, format);\n if (options.headers)\n Utils.mixin(headers, options.headers);\n if (idempotentRestPublishing && allEmptyIds(messages)) {\n var msgIdBase_1 = Utils.randomString(MSG_ID_ENTROPY_BYTES);\n Utils.arrForEach(messages, function (message, index) {\n message.id = msgIdBase_1 + ':' + index.toString();\n });\n }\n message_1.default.encodeArray(messages, this.channelOptions, function (err) {\n if (err) {\n callback(err);\n return;\n }\n /* RSL1i */\n var size = message_1.default.getMessagesSize(messages), maxMessageSize = options.maxMessageSize;\n if (size > maxMessageSize) {\n callback(new errorinfo_1.default('Maximum size of messages that can be published at once exceeded ( was ' +\n size +\n ' bytes; limit is ' +\n maxMessageSize +\n ' bytes)', 40009, 400));\n return;\n }\n _this._publish(message_1.default.serialize(messages, format), headers, params, callback);\n });\n };\n Channel.prototype._publish = function (requestBody, headers, params, callback) {\n resource_1.default.post(this.rest, this.basePath + '/messages', requestBody, headers, params, null, callback);\n };\n Channel.prototype.status = function (callback) {\n if (typeof callback !== 'function' && this.rest.options.promises) {\n return Utils.promisify(this, 'status', []);\n }\n var format = this.rest.options.useBinaryProtocol ? Utils.Format.msgpack : Utils.Format.json;\n var headers = Utils.defaultPostHeaders(this.rest.options, format);\n resource_1.default.get(this.rest, this.basePath, headers, {}, format, callback || noop);\n };\n return Channel;\n}(eventemitter_1.default));\nexports.default = Channel;\n\n\n/***/ }),\n/* 34 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = __webpack_require__(0);\nvar Utils = tslib_1.__importStar(__webpack_require__(1));\nvar eventemitter_1 = tslib_1.__importDefault(__webpack_require__(7));\nvar logger_1 = tslib_1.__importDefault(__webpack_require__(2));\nvar paginatedresource_1 = tslib_1.__importDefault(__webpack_require__(18));\nvar presencemessage_1 = tslib_1.__importDefault(__webpack_require__(14));\nfunction noop() { }\nvar Presence = /** @class */ (function (_super) {\n tslib_1.__extends(Presence, _super);\n function Presence(channel) {\n var _this = _super.call(this) || this;\n _this.channel = channel;\n _this.basePath = channel.basePath + '/presence';\n return _this;\n }\n Presence.prototype.get = function (params, callback) {\n logger_1.default.logAction(logger_1.default.LOG_MICRO, 'Presence.get()', 'channel = ' + this.channel.name);\n /* params and callback are optional; see if params contains the callback */\n if (callback === undefined) {\n if (typeof params == 'function') {\n callback = params;\n params = null;\n }\n else {\n if (this.channel.rest.options.promises) {\n return Utils.promisify(this, 'get', arguments);\n }\n callback = noop;\n }\n }\n var rest = this.channel.rest, format = rest.options.useBinaryProtocol ? Utils.Format.msgpack : Utils.Format.json, envelope = this.channel.rest.http.supportsLinkHeaders ? undefined : format, headers = Utils.defaultGetHeaders(rest.options, format);\n if (rest.options.headers)\n Utils.mixin(headers, rest.options.headers);\n var options = this.channel.channelOptions;\n new paginatedresource_1.default(rest, this.basePath, headers, envelope, function (body, headers, unpacked) {\n return presencemessage_1.default.fromResponseBody(body, options, unpacked ? undefined : format);\n }).get(params, callback);\n };\n Presence.prototype.history = function (params, callback) {\n logger_1.default.logAction(logger_1.default.LOG_MICRO, 'Presence.history()', 'channel = ' + this.channel.name);\n return this._history(params, callback);\n };\n Presence.prototype._history = function (params, callback) {\n /* params and callback are optional; see if params contains the callback */\n if (callback === undefined) {\n if (typeof params == 'function') {\n callback = params;\n params = null;\n }\n else {\n if (this.channel.rest.options.promises) {\n return Utils.promisify(this, '_history', [params]);\n }\n callback = noop;\n }\n }\n var rest = this.channel.rest, format = rest.options.useBinaryProtocol ? Utils.Format.msgpack : Utils.Format.json, envelope = this.channel.rest.http.supportsLinkHeaders ? undefined : format, headers = Utils.defaultGetHeaders(rest.options, format);\n if (rest.options.headers)\n Utils.mixin(headers, rest.options.headers);\n var options = this.channel.channelOptions;\n new paginatedresource_1.default(rest, this.basePath + '/history', headers, envelope, function (body, headers, unpacked) {\n return presencemessage_1.default.fromResponseBody(body, options, unpacked ? undefined : format);\n }).get(params, callback);\n };\n return Presence;\n}(eventemitter_1.default));\nexports.default = Presence;\n\n\n/***/ }),\n/* 35 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(global) {\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.TransportParams = void 0;\nvar tslib_1 = __webpack_require__(0);\nvar protocolmessage_1 = tslib_1.__importDefault(__webpack_require__(10));\nvar Utils = tslib_1.__importStar(__webpack_require__(1));\nvar protocol_1 = tslib_1.__importStar(__webpack_require__(52));\nvar defaults_1 = tslib_1.__importStar(__webpack_require__(8));\nvar platform_1 = tslib_1.__importDefault(__webpack_require__(3));\nvar eventemitter_1 = tslib_1.__importDefault(__webpack_require__(7));\nvar messagequeue_1 = tslib_1.__importDefault(__webpack_require__(36));\nvar logger_1 = tslib_1.__importDefault(__webpack_require__(2));\nvar connectionstatechange_1 = tslib_1.__importDefault(__webpack_require__(37));\nvar connectionerrors_1 = tslib_1.__importStar(__webpack_require__(19));\nvar errorinfo_1 = tslib_1.__importStar(__webpack_require__(4));\nvar auth_1 = tslib_1.__importDefault(__webpack_require__(16));\nvar message_1 = tslib_1.__importDefault(__webpack_require__(9));\nvar multicaster_1 = tslib_1.__importDefault(__webpack_require__(22));\nvar websockettransport_1 = tslib_1.__importDefault(__webpack_require__(53));\nvar transport_1 = tslib_1.__importDefault(__webpack_require__(26));\nvar HttpStatusCodes_1 = tslib_1.__importDefault(__webpack_require__(24));\nvar haveWebStorage = function () { var _a; return typeof platform_1.default.WebStorage !== 'undefined' && ((_a = platform_1.default.WebStorage) === null || _a === void 0 ? void 0 : _a.localSupported); };\nvar haveSessionStorage = function () { var _a; return typeof platform_1.default.WebStorage !== 'undefined' && ((_a = platform_1.default.WebStorage) === null || _a === void 0 ? void 0 : _a.sessionSupported); };\nvar actions = protocolmessage_1.default.Action;\nvar noop = function () { };\nvar transportPreferenceName = 'ably-transport-preference';\nvar sessionRecoveryName = 'ably-connection-recovery';\nfunction getSessionRecoverData() {\n var _a, _b;\n return haveSessionStorage() && ((_b = (_a = platform_1.default.WebStorage) === null || _a === void 0 ? void 0 : _a.getSession) === null || _b === void 0 ? void 0 : _b.call(_a, sessionRecoveryName));\n}\nfunction setSessionRecoverData(value) {\n var _a, _b;\n return haveSessionStorage() && ((_b = (_a = platform_1.default.WebStorage) === null || _a === void 0 ? void 0 : _a.setSession) === null || _b === void 0 ? void 0 : _b.call(_a, sessionRecoveryName, value));\n}\nfunction clearSessionRecoverData() {\n var _a, _b;\n return haveSessionStorage() && ((_b = (_a = platform_1.default.WebStorage) === null || _a === void 0 ? void 0 : _a.removeSession) === null || _b === void 0 ? void 0 : _b.call(_a, sessionRecoveryName));\n}\nfunction betterTransportThan(a, b) {\n return (Utils.arrIndexOf(platform_1.default.Defaults.transportPreferenceOrder, a.shortName) >\n Utils.arrIndexOf(platform_1.default.Defaults.transportPreferenceOrder, b.shortName));\n}\nfunction bundleWith(dest, src, maxSize) {\n var action;\n if (dest.channel !== src.channel) {\n /* RTL6d3 */\n return false;\n }\n if ((action = dest.action) !== actions.PRESENCE && action !== actions.MESSAGE) {\n /* RTL6d - can only bundle messages or presence */\n return false;\n }\n if (action !== src.action) {\n /* RTL6d4 */\n return false;\n }\n var kind = action === actions.PRESENCE ? 'presence' : 'messages', proposed = dest[kind].concat(src[kind]), size = message_1.default.getMessagesSize(proposed);\n if (size > maxSize) {\n /* RTL6d1 */\n return false;\n }\n if (!Utils.allSame(proposed, 'clientId')) {\n /* RTL6d2 */\n return false;\n }\n if (!Utils.arrEvery(proposed, function (msg) {\n return !msg.id;\n })) {\n /* RTL6d7 */\n return false;\n }\n /* we're good to go! */\n dest[kind] = proposed;\n return true;\n}\nfunction decodeRecoveryKey(recoveryKey) {\n try {\n return JSON.parse(recoveryKey);\n }\n catch (e) {\n return null;\n }\n}\nvar TransportParams = /** @class */ (function () {\n function TransportParams(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 ? Utils.Format.msgpack : Utils.Format.json;\n }\n TransportParams.prototype.getConnectParams = function (authParams) {\n var params = authParams ? Utils.copy(authParams) : {};\n var options = this.options;\n switch (this.mode) {\n case 'upgrade':\n params.upgrade = this.connectionKey;\n break;\n case 'resume':\n params.resume = this.connectionKey;\n break;\n case 'recover': {\n var recoveryContext = decodeRecoveryKey(options.recover);\n if (recoveryContext) {\n params.recover = recoveryContext.connectionKey;\n }\n break;\n }\n default:\n }\n if (options.clientId !== undefined) {\n params.clientId = options.clientId;\n }\n if (options.echoMessages === false) {\n params.echo = 'false';\n }\n if (this.format !== undefined) {\n params.format = this.format;\n }\n if (this.stream !== undefined) {\n params.stream = this.stream;\n }\n if (this.heartbeats !== undefined) {\n params.heartbeats = this.heartbeats;\n }\n params.v = defaults_1.default.protocolVersion;\n params.agent = encodeURIComponent((0, defaults_1.getAgentString)(this.options));\n if (options.transportParams !== undefined) {\n Utils.mixin(params, options.transportParams);\n }\n return params;\n };\n TransportParams.prototype.toString = function () {\n var 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 return TransportParams;\n}());\nexports.TransportParams = TransportParams;\nvar ConnectionManager = /** @class */ (function (_super) {\n tslib_1.__extends(ConnectionManager, _super);\n function ConnectionManager(realtime, options) {\n var _this = _super.call(this) || this;\n _this.disconnectedRetryCount = 0;\n ConnectionManager.initTransports();\n _this.realtime = realtime;\n _this.options = options;\n var timeouts = options.timeouts;\n /* connectingTimeout: leave preferenceConnectTimeout (~6s) to try the\n * preference transport, then realtimeRequestTimeout (~10s) to establish\n * the base transport in case that fails */\n var connectingTimeout = timeouts.preferenceConnectTimeout + 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 synchronizing: {\n state: 'connected',\n terminal: false,\n queueEvents: true,\n sendEvents: false,\n forceQueueEvents: 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_1.default();\n _this.msgSerial = 0;\n _this.connectionDetails = undefined;\n _this.connectionId = undefined;\n _this.connectionKey = undefined;\n _this.connectionStateTtl = timeouts.connectionStateTtl;\n _this.maxIdleInterval = null;\n _this.transports = Utils.intersect(options.transports || defaults_1.default.defaultTransports, ConnectionManager.supportedTransports);\n /* baseTransports selects the leftmost transport in the Defaults.baseTransportOrder list\n * that's both requested and supported. Normally this will be xhr_polling;\n * if xhr isn't supported it will be jsonp. If the user has forced a\n * transport, it'll just be that one. */\n _this.baseTransport = Utils.intersect(defaults_1.default.baseTransportOrder, _this.transports)[0];\n _this.upgradeTransports = Utils.intersect(_this.transports, defaults_1.default.upgradeTransports);\n _this.transportPreference = null;\n _this.httpHosts = defaults_1.default.getHosts(options);\n _this.activeProtocol = null;\n _this.proposedTransports = [];\n _this.pendingTransports = [];\n _this.host = null;\n _this.lastAutoReconnectAttempt = null;\n _this.lastActivity = null;\n _this.forceFallbackHost = false;\n _this.connectCounter = 0;\n logger_1.default.logAction(logger_1.default.LOG_MINOR, 'Realtime.ConnectionManager()', 'started');\n logger_1.default.logAction(logger_1.default.LOG_MICRO, 'Realtime.ConnectionManager()', 'requested transports = [' + (options.transports || defaults_1.default.defaultTransports) + ']');\n logger_1.default.logAction(logger_1.default.LOG_MICRO, 'Realtime.ConnectionManager()', 'available transports = [' + _this.transports + ']');\n logger_1.default.logAction(logger_1.default.LOG_MICRO, 'Realtime.ConnectionManager()', 'http hosts = [' + _this.httpHosts + ']');\n if (!_this.transports.length) {\n var msg = 'no requested transports available';\n logger_1.default.logAction(logger_1.default.LOG_ERROR, 'realtime.ConnectionManager()', msg);\n throw new Error(msg);\n }\n var addEventListener = platform_1.default.Config.addEventListener;\n if (addEventListener) {\n /* intercept close event in browser to persist connection id if requested */\n if (haveSessionStorage() && typeof options.recover === 'function') {\n /* Usually can't use bind as not supported in IE8, but IE doesn't support sessionStorage, so... */\n addEventListener('beforeunload', _this.persistConnection.bind(_this));\n }\n if (options.closeOnUnload === true) {\n addEventListener('beforeunload', function () {\n logger_1.default.logAction(logger_1.default.LOG_MAJOR, 'Realtime.ConnectionManager()', 'beforeunload event has triggered the connection to close as closeOnUnload is true');\n _this.requestState({ state: 'closing' });\n });\n }\n /* Listen for online and offline events */\n addEventListener('online', function () {\n if (_this.state == _this.states.disconnected || _this.state == _this.states.suspended) {\n logger_1.default.logAction(logger_1.default.LOG_MINOR, 'ConnectionManager caught browser ‘online’ event', 'reattempting connection');\n _this.requestState({ state: 'connecting' });\n }\n else if (_this.state == _this.states.connecting) {\n // RTN20c: if 'online' event recieved while CONNECTING, abandon connection attempt and retry\n _this.pendingTransports.forEach(function (transport) {\n // Detach transport listeners to avoid connection state side effects from calling dispose\n transport.off();\n });\n _this.disconnectAllTransports();\n _this.startConnect();\n }\n });\n addEventListener('offline', function () {\n if (_this.state == _this.states.connected) {\n logger_1.default.logAction(logger_1.default.LOG_MINOR, 'ConnectionManager caught browser ‘offline’ event', 'disconnecting active transport');\n // Not sufficient to just go to the 'disconnected' state, want to\n // force all transports to reattempt the connection. Will immediately\n // retry.\n _this.disconnectAllTransports();\n }\n });\n }\n return _this;\n }\n ConnectionManager.initTransports = function () {\n (0, websockettransport_1.default)(ConnectionManager);\n Utils.arrForEach(platform_1.default.Transports, function (initFn) {\n initFn(ConnectionManager);\n });\n };\n ConnectionManager.prototype.createTransportParams = function (host, mode) {\n return new TransportParams(this.options, host, mode, this.connectionKey);\n };\n ConnectionManager.prototype.getTransportParams = function (callback) {\n var _this = this;\n var decideMode = function (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 var recoverFn = _this.options.recover, lastSessionData = getSessionRecoverData();\n if (lastSessionData && typeof recoverFn === 'function') {\n logger_1.default.logAction(logger_1.default.LOG_MINOR, 'ConnectionManager.getTransportParams()', 'Calling clientOptions-provided recover function with last session data');\n recoverFn(lastSessionData, function (shouldRecover) {\n if (shouldRecover) {\n _this.options.recover = lastSessionData.recoveryKey;\n modeCb('recover');\n }\n else {\n modeCb('clean');\n }\n });\n return;\n }\n modeCb('clean');\n };\n decideMode(function (mode) {\n var transportParams = _this.createTransportParams(null, mode);\n if (mode === 'recover') {\n logger_1.default.logAction(logger_1.default.LOG_MINOR, 'ConnectionManager.getTransportParams()', 'Transport recovery mode = recover; recoveryKey = ' + _this.options.recover);\n var recoveryContext = decodeRecoveryKey(_this.options.recover);\n if (recoveryContext) {\n _this.msgSerial = recoveryContext.msgSerial;\n }\n }\n else {\n logger_1.default.logAction(logger_1.default.LOG_MINOR, 'ConnectionManager.getTransportParams()', 'Transport params = ' + transportParams.toString());\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 ConnectionManager.prototype.tryATransport = function (transportParams, candidate, callback) {\n var _this = this;\n logger_1.default.logAction(logger_1.default.LOG_MICRO, 'ConnectionManager.tryATransport()', 'trying ' + candidate);\n transport_1.default.tryConnect(ConnectionManager.supportedTransports[candidate], this, this.realtime.auth, transportParams, function (wrappedErr, transport) {\n var state = _this.state;\n if (state == _this.states.closing || state == _this.states.closed || state == _this.states.failed) {\n if (transport) {\n logger_1.default.logAction(logger_1.default.LOG_MINOR, 'ConnectionManager.tryATransport()', 'connection ' + state.state + ' while we were attempting the transport; closing ' + transport);\n transport.close();\n }\n callback(true);\n return;\n }\n if (wrappedErr) {\n logger_1.default.logAction(logger_1.default.LOG_MINOR, 'ConnectionManager.tryATransport()', 'transport ' + candidate + ' ' + wrappedErr.event + ', err: ' + wrappedErr.error.toString());\n /* Comet transport onconnect token errors can be dealt with here.\n * Websocket ones only happen after the transport claims to be viable,\n * so are dealt with as non-onconnect token errors */\n if (auth_1.default.isTokenErr(wrappedErr.error) &&\n !(_this.errorReason && auth_1.default.isTokenErr(_this.errorReason))) {\n _this.errorReason = wrappedErr.error;\n /* re-get a token and try again */\n _this.realtime.auth._forceNewToken(null, null, function (err) {\n if (err) {\n _this.actOnErrorFromAuthorize(err);\n return;\n }\n _this.tryATransport(transportParams, candidate, callback);\n });\n }\n else if (wrappedErr.event === 'failed') {\n /* Error that's fatal to the connection */\n _this.notifyState({ state: 'failed', error: wrappedErr.error });\n callback(true);\n }\n else if (wrappedErr.event === 'disconnected') {\n if (!(0, connectionerrors_1.isRetriable)(wrappedErr.error)) {\n /* Error received from the server that does not call for trying a fallback host, eg a rate limit */\n _this.notifyState({ state: _this.states.connecting.failState, error: wrappedErr.error });\n callback(true);\n }\n else {\n /* Error with that transport only; continue trying other fallback hosts */\n callback(false);\n }\n }\n return;\n }\n logger_1.default.logAction(logger_1.default.LOG_MICRO, 'ConnectionManager.tryATransport()', 'viable transport ' + candidate + '; setting pending');\n _this.setTransportPending(transport, transportParams);\n callback(null, transport);\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 ConnectionManager.prototype.setTransportPending = function (transport, transportParams) {\n var _this = this;\n var mode = transportParams.mode;\n logger_1.default.logAction(logger_1.default.LOG_MINOR, 'ConnectionManager.setTransportPending()', 'transport = ' + transport + '; mode = ' + mode);\n Utils.arrDeleteValue(this.proposedTransports, transport);\n this.pendingTransports.push(transport);\n var optimalTransport = platform_1.default.Defaults.transportPreferenceOrder[platform_1.default.Defaults.transportPreferenceOrder.length - 1];\n transport.once('connected', function (error, connectionId, connectionDetails) {\n if (mode == 'upgrade' && _this.activeProtocol) {\n /* if ws and xhrs are connecting in parallel, delay xhrs activation to let ws go ahead */\n if (transport.shortName !== optimalTransport &&\n Utils.arrIn(_this.getUpgradePossibilities(), optimalTransport) &&\n _this.activeProtocol) {\n setTimeout(function () {\n _this.scheduleTransportActivation(error, transport, connectionId, connectionDetails);\n }, _this.options.timeouts.parallelUpgradeDelay);\n }\n else {\n _this.scheduleTransportActivation(error, transport, connectionId, connectionDetails);\n }\n }\n else {\n _this.activateTransport(error, transport, connectionId, connectionDetails);\n /* allow connectImpl to start the upgrade process if needed, but allow\n * other event handlers, including activating the transport, to run first */\n platform_1.default.Config.nextTick(function () {\n _this.connectImpl(transportParams);\n });\n }\n if (mode === 'recover' && _this.options.recover) {\n /* After a successful recovery, we unpersist, as a recovery key cannot\n * be used more than once */\n _this.options.recover = null;\n _this.unpersistConnection();\n }\n });\n var self = this;\n transport.on(['disconnected', 'closed', 'failed'], function (error) {\n self.deactivateTransport(transport, this.event, error);\n });\n this.emit('transport.pending', transport);\n };\n /**\n * Called when an upgrade transport is connected,\n * to schedule the activation of that transport.\n * @param error\n * @param transport\n * @param connectionId\n * @param connectionDetails\n */\n ConnectionManager.prototype.scheduleTransportActivation = function (error, transport, connectionId, connectionDetails) {\n var _this = this;\n var currentTransport = this.activeProtocol && this.activeProtocol.getTransport(), abandon = function () {\n transport.disconnect();\n Utils.arrDeleteValue(_this.pendingTransports, transport);\n };\n if (this.state !== this.states.connected && this.state !== this.states.connecting) {\n /* This is most likely to happen for the delayed XHRs, when XHRs and ws are scheduled in parallel*/\n logger_1.default.logAction(logger_1.default.LOG_MINOR, 'ConnectionManager.scheduleTransportActivation()', 'Current connection state (' +\n this.state.state +\n (this.state === this.states.synchronizing ? ', but with an upgrade already in progress' : '') +\n ') is not valid to upgrade in; abandoning upgrade to ' +\n transport.shortName);\n abandon();\n return;\n }\n if (currentTransport && !betterTransportThan(transport, currentTransport)) {\n logger_1.default.logAction(logger_1.default.LOG_MINOR, 'ConnectionManager.scheduleTransportActivation()', 'Proposed transport ' +\n transport.shortName +\n ' is no better than current active transport ' +\n currentTransport.shortName +\n ' - abandoning upgrade');\n abandon();\n return;\n }\n logger_1.default.logAction(logger_1.default.LOG_MINOR, 'ConnectionManager.scheduleTransportActivation()', 'Scheduling transport upgrade; transport = ' + transport);\n var oldProtocol = null;\n if (!transport.isConnected) {\n /* This is only possible if the xhr streaming transport was disconnected during the parallelUpgradeDelay */\n logger_1.default.logAction(logger_1.default.LOG_MINOR, 'ConnectionManager.scheduleTransportActivation()', 'Proposed transport ' + transport.shortName + 'is no longer connected; abandoning upgrade');\n abandon();\n return;\n }\n if (this.state === this.states.connected) {\n logger_1.default.logAction(logger_1.default.LOG_MICRO, 'ConnectionManager.scheduleTransportActivation()', 'Currently connected, so temporarily pausing events until the upgrade is complete');\n this.state = this.states.synchronizing;\n oldProtocol = this.activeProtocol;\n }\n else if (this.state !== this.states.connecting) {\n /* Note: upgrading from the connecting state is valid if the old active\n * transport was deactivated after the upgrade transport first connected;\n * see logic in deactivateTransport */\n logger_1.default.logAction(logger_1.default.LOG_MINOR, 'ConnectionManager.scheduleTransportActivation()', 'Current connection state (' +\n this.state.state +\n (this.state === this.states.synchronizing ? ', but with an upgrade already in progress' : '') +\n ') is not valid to upgrade in; abandoning upgrade to ' +\n transport.shortName);\n abandon();\n return;\n }\n logger_1.default.logAction(logger_1.default.LOG_MINOR, 'ConnectionManager.scheduleTransportActivation()', 'Syncing transport; transport = ' + transport);\n var finishUpgrade = function () {\n logger_1.default.logAction(logger_1.default.LOG_MINOR, 'ConnectionManager.scheduleTransportActivation()', 'Activating transport; transport = ' + transport);\n // Send ACTIVATE to tell the server to make this transport the\n // active transport, which suspends channels until we re-attach.\n transport.send(protocolmessage_1.default.fromValues({\n action: actions.ACTIVATE,\n }));\n _this.activateTransport(error, transport, connectionId, connectionDetails);\n /* Restore pre-sync state. If state has changed in the meantime,\n * don't touch it -- since the websocket transport waits a tick before\n * disposing itself, it's possible for it to have happily synced\n * without err while, unknown to it, the connection has closed in the\n * meantime and the ws transport is scheduled for death */\n if (_this.state === _this.states.synchronizing) {\n logger_1.default.logAction(logger_1.default.LOG_MICRO, 'ConnectionManager.scheduleTransportActivation()', 'Pre-upgrade protocol idle, sending queued messages on upgraded transport; transport = ' + transport);\n _this.state = _this.states.connected;\n }\n else {\n logger_1.default.logAction(logger_1.default.LOG_MINOR, 'ConnectionManager.scheduleTransportActivation()', 'Pre-upgrade protocol idle, but state is now ' + _this.state.state + ', so leaving unchanged');\n }\n if (_this.state.sendEvents) {\n _this.sendQueuedMessages();\n }\n };\n /* Wait until sync is done and old transport is idle before activating new transport. This\n * guarantees that messages arrive at realtime in the same order they are sent.\n *\n * If a message times out on the old transport, since it's still the active transport the\n * message will be requeued. deactivateTransport will see the pending transport and notify\n * the `connecting` state without starting a new connection, so the new transport can take\n * over once deactivateTransport clears the old protocol's queue.\n *\n * If there is no old protocol, that meant that we weren't in the connected state at the\n * beginning of the sync - likely the base transport died just before the sync. So can just\n * finish the upgrade. If we're actually in closing/failed rather than connecting, that's\n * fine, activatetransport will deal with that. */\n if (oldProtocol) {\n /* Most of the time this will be already true: the new-transport sync will have given\n * enough time for in-flight messages on the old transport to complete. */\n oldProtocol.onceIdle(finishUpgrade);\n }\n else {\n finishUpgrade();\n }\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 ConnectionManager.prototype.activateTransport = function (error, transport, connectionId, connectionDetails) {\n var _this = this;\n logger_1.default.logAction(logger_1.default.LOG_MINOR, 'ConnectionManager.activateTransport()', 'transport = ' + transport);\n if (error) {\n logger_1.default.logAction(logger_1.default.LOG_ERROR, 'ConnectionManager.activateTransport()', 'error = ' + error);\n }\n if (connectionId) {\n logger_1.default.logAction(logger_1.default.LOG_MICRO, 'ConnectionManager.activateTransport()', 'connectionId = ' + connectionId);\n }\n if (connectionDetails) {\n logger_1.default.logAction(logger_1.default.LOG_MICRO, 'ConnectionManager.activateTransport()', 'connectionDetails = ' + JSON.stringify(connectionDetails));\n }\n this.persistTransportPreference(transport);\n /* if the connectionmanager moved to the closing/closed state before this\n * connection event, then we won't activate this transport */\n var existingState = this.state, connectedState = this.states.connected.state;\n logger_1.default.logAction(logger_1.default.LOG_MINOR, 'ConnectionManager.activateTransport()', 'current state = ' + existingState.state);\n if (existingState.state == this.states.closing.state ||\n existingState.state == this.states.closed.state ||\n existingState.state == this.states.failed.state) {\n logger_1.default.logAction(logger_1.default.LOG_MINOR, 'ConnectionManager.activateTransport()', 'Disconnecting transport and abandoning');\n transport.disconnect();\n return false;\n }\n /* remove this transport from pending transports */\n Utils.arrDeleteValue(this.pendingTransports, transport);\n /* if the transport is not connected then don't activate it */\n if (!transport.isConnected) {\n logger_1.default.logAction(logger_1.default.LOG_MINOR, 'ConnectionManager.activateTransport()', 'Declining to activate transport ' + transport + ' since it appears to no longer be connected');\n return false;\n }\n /* the given transport is connected; this will immediately\n * take over as the active transport */\n var existingActiveProtocol = this.activeProtocol;\n this.activeProtocol = new protocol_1.default(transport);\n this.host = transport.params.host;\n var connectionKey = connectionDetails.connectionKey;\n if (connectionKey && this.connectionKey != connectionKey) {\n this.setConnection(connectionId, connectionDetails, !!error);\n }\n /* Rebroadcast any new connectionDetails from the active transport, which\n * can come at any time (eg following a reauth), and emit an RTN24 UPDATE\n * event. (Listener added on nextTick because we're in a transport.on('connected')\n * callback at the moment; if we add it now we'll be adding it to the end\n * of the listeners array and it'll be called immediately) */\n this.onConnectionDetailsUpdate(connectionDetails, transport);\n platform_1.default.Config.nextTick(function () {\n transport.on('connected', function (connectedErr, _connectionId, connectionDetails) {\n _this.onConnectionDetailsUpdate(connectionDetails, transport);\n _this.emit('update', new connectionstatechange_1.default(connectedState, connectedState, null, connectedErr));\n });\n });\n /* If previously not connected, notify the state change (including any\n * error). */\n if (existingState.state === this.states.connected.state) {\n if (error) {\n /* if upgrading without error, leave any existing errorReason alone */\n this.errorReason = this.realtime.connection.errorReason = error;\n /* Only bother emitting an upgrade if there's an error; otherwise it's\n * just a transport upgrade, so auth details won't have changed */\n this.emit('update', new connectionstatechange_1.default(connectedState, connectedState, null, error));\n }\n }\n else {\n this.notifyState({ state: 'connected', error: error });\n this.errorReason = this.realtime.connection.errorReason = error || null;\n }\n /* Send after the connection state update, as Channels hooks into this to\n * resend attaches on a new transport if necessary */\n this.emit('transport.active', transport);\n /* Gracefully terminate existing protocol */\n if (existingActiveProtocol) {\n if (existingActiveProtocol.messageQueue.count() > 0) {\n /* We could just requeue pending messages on the new transport, but\n * actually this should never happen: transports should only take over\n * from other active transports when upgrading, and upgrading waits for\n * the old transport to be idle. So log an error. */\n logger_1.default.logAction(logger_1.default.LOG_ERROR, 'ConnectionManager.activateTransport()', 'Previous active protocol (for transport ' +\n existingActiveProtocol.transport.shortName +\n ', new one is ' +\n transport.shortName +\n ') finishing with ' +\n existingActiveProtocol.messageQueue.count() +\n ' messages still pending');\n }\n if (existingActiveProtocol.transport === transport) {\n var msg = 'Assumption violated: activating a transport that was also the transport for the previous active protocol; transport = ' +\n transport.shortName +\n '; stack = ' +\n new Error().stack;\n logger_1.default.logAction(logger_1.default.LOG_ERROR, 'ConnectionManager.activateTransport()', msg);\n }\n else {\n existingActiveProtocol.finish();\n }\n }\n /* Terminate any other pending transport(s), and\n * abort any not-yet-pending transport attempts */\n Utils.safeArrForEach(this.pendingTransports, function (pendingTransport) {\n if (pendingTransport === transport) {\n var msg = 'Assumption violated: activating a transport that is still marked as a pending transport; transport = ' +\n transport.shortName +\n '; stack = ' +\n new Error().stack;\n logger_1.default.logAction(logger_1.default.LOG_ERROR, 'ConnectionManager.activateTransport()', msg);\n Utils.arrDeleteValue(_this.pendingTransports, transport);\n }\n else {\n pendingTransport.disconnect();\n }\n });\n Utils.safeArrForEach(this.proposedTransports, function (proposedTransport) {\n if (proposedTransport === transport) {\n logger_1.default.logAction(logger_1.default.LOG_ERROR, 'ConnectionManager.activateTransport()', 'Assumption violated: activating a transport that is still marked as a proposed transport; transport = ' +\n transport.shortName +\n '; stack = ' +\n new Error().stack);\n Utils.arrDeleteValue(_this.proposedTransports, transport);\n }\n else {\n proposedTransport.dispose();\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 ConnectionManager.prototype.deactivateTransport = function (transport, state, error) {\n var currentProtocol = this.activeProtocol, wasActive = currentProtocol && currentProtocol.getTransport() === transport, wasPending = Utils.arrDeleteValue(this.pendingTransports, transport), wasProposed = Utils.arrDeleteValue(this.proposedTransports, transport), noTransportsScheduledForActivation = this.noTransportsScheduledForActivation();\n logger_1.default.logAction(logger_1.default.LOG_MINOR, 'ConnectionManager.deactivateTransport()', 'transport = ' + transport);\n logger_1.default.logAction(logger_1.default.LOG_MINOR, 'ConnectionManager.deactivateTransport()', 'state = ' +\n state +\n (wasActive ? '; was active' : wasPending ? '; was pending' : wasProposed ? '; was proposed' : '') +\n (noTransportsScheduledForActivation ? '' : '; another transport is scheduled for activation'));\n if (error && error.message)\n logger_1.default.logAction(logger_1.default.LOG_MICRO, 'ConnectionManager.deactivateTransport()', 'reason = ' + error.message);\n if (wasActive) {\n logger_1.default.logAction(logger_1.default.LOG_MICRO, 'ConnectionManager.deactivateTransport()', 'Getting, clearing, and requeuing ' +\n this.activeProtocol.messageQueue.count() +\n ' pending messages');\n this.queuePendingMessages(currentProtocol.getPendingMessages());\n /* Clear any messages we requeue to allow the protocol to become idle.\n * In case of an upgrade, this will trigger an immediate activation of\n * the upgrade transport, so delay a tick so this transport can finish\n * deactivating */\n platform_1.default.Config.nextTick(function () {\n currentProtocol.clearPendingMessages();\n });\n this.activeProtocol = this.host = null;\n }\n this.emit('transport.inactive', transport);\n /* this transport state change is a state change for the connectionmanager if\n * - the transport was the active transport and there are no transports\n * which are connected and scheduled for activation, just waiting for the\n * active transport to finish what its doing; or\n * - the transport was the active transport and the error was fatal (so\n * unhealable by another transport); or\n * - there is no active transport, and this is the last remaining\n * pending transport (so we were in the connecting state)\n */\n if ((wasActive && noTransportsScheduledForActivation) ||\n (wasActive && state === 'failed') ||\n state === 'closed' ||\n (currentProtocol === null && wasPending && this.pendingTransports.length === 0)) {\n /* If we're disconnected with a 5xx we need to try fallback hosts\n * (RTN14d), but (a) due to how the upgrade sequence works, the\n * host/transport selection sequence only cares about getting to\n * `preconnect` (eg establishing a websocket) getting a `disconnected`\n * protocol message afterwards is too late; and (b) host retry only\n * applies to connectBase unless the stored preference transport doesn't\n * work. We solve this by unpersisting the transport preference and\n * setting an instance variable to force fallback hosts to be used (if\n * any) here. Bit of a kludge, but no real better alternatives without\n * rewriting the entire thing */\n if (state === 'disconnected' && error && error.statusCode > 500 && this.httpHosts.length > 1) {\n this.unpersistTransportPreference();\n this.forceFallbackHost = true;\n /* and try to connect again to try a fallback host without waiting for the usual 15s disconnectedRetryTimeout */\n this.notifyState({ state: state, error: error, retryImmediately: true });\n return;\n }\n /* TODO remove below line once realtime sends token errors as DISCONNECTEDs */\n var newConnectionState = state === 'failed' && auth_1.default.isTokenErr(error) ? 'disconnected' : state;\n this.notifyState({ state: newConnectionState, error: error });\n return;\n }\n if (wasActive && state === 'disconnected' && this.state !== this.states.synchronizing) {\n /* If we were active but there is another transport scheduled for\n * activation, go into to the connecting state until that transport\n * activates and sets us back to connected. (manually starting the\n * transition timers in case that never happens). (If we were in the\n * synchronizing state, then that's fine, the old transport just got its\n * disconnected before the new one got the sync -- ignore it and keep\n * waiting for the sync. If it fails we have a separate sync timer that\n * will expire). */\n logger_1.default.logAction(logger_1.default.LOG_MICRO, 'ConnectionManager.deactivateTransport()', 'wasActive but another transport is connected and scheduled for activation, so going into the connecting state until it activates');\n this.startSuspendTimer();\n this.startTransitionTimer(this.states.connecting);\n this.notifyState({ state: 'connecting', error: error });\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 ConnectionManager.prototype.noTransportsScheduledForActivation = function () {\n return (Utils.isEmpty(this.pendingTransports) ||\n this.pendingTransports.every(function (transport) {\n return !transport.isConnected;\n }));\n };\n ConnectionManager.prototype.setConnection = function (connectionId, connectionDetails, hasConnectionError) {\n /* if connectionKey changes but connectionId stays the same, then just a\n * transport change on the same connection. If connectionId changes, we're\n * on a new connection, with implications for msgSerial and channel state */\n /* If no previous connectionId, don't reset the msgSerial as it may have\n * been set by recover data (unless the recover failed) */\n var prevConnId = this.connectionId, connIdChanged = prevConnId && prevConnId !== connectionId, recoverFailure = !prevConnId && hasConnectionError;\n if (connIdChanged || recoverFailure) {\n logger_1.default.logAction(logger_1.default.LOG_MINOR, 'ConnectionManager.setConnection()', 'Resetting msgSerial');\n this.msgSerial = 0;\n // RTN19a2: In the event of a new connectionId, previous msgSerials are\n // meaningless.\n this.queuedMessages.resetSendAttempted();\n }\n if (this.connectionId !== connectionId) {\n logger_1.default.logAction(logger_1.default.LOG_MINOR, 'ConnectionManager.setConnection()', 'New connectionId; reattaching any attached channels');\n }\n this.realtime.connection.id = this.connectionId = connectionId;\n this.realtime.connection.key = this.connectionKey = connectionDetails.connectionKey;\n };\n ConnectionManager.prototype.clearConnection = function () {\n this.realtime.connection.id = this.connectionId = undefined;\n this.realtime.connection.key = this.connectionKey = undefined;\n this.msgSerial = 0;\n this.unpersistConnection();\n };\n ConnectionManager.prototype.createRecoveryKey = function () {\n // RTN16g2.\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 ConnectionManager.prototype.checkConnectionStateFreshness = function () {\n if (!this.lastActivity || !this.connectionId) {\n return;\n }\n var sinceLast = Utils.now() - this.lastActivity;\n if (sinceLast > this.connectionStateTtl + this.maxIdleInterval) {\n logger_1.default.logAction(logger_1.default.LOG_MINOR, 'ConnectionManager.checkConnectionStateFreshness()', 'Last known activity from realtime was ' + sinceLast + 'ms ago; discarding connection state');\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 ConnectionManager.prototype.persistConnection = function () {\n if (haveSessionStorage()) {\n var recoveryKey = this.createRecoveryKey();\n if (recoveryKey) {\n setSessionRecoverData({\n recoveryKey: recoveryKey,\n disconnectedAt: Utils.now(),\n location: global.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 ConnectionManager.prototype.unpersistConnection = function () {\n clearSessionRecoverData();\n };\n /*********************\n * state management\n *********************/\n ConnectionManager.prototype.getError = function () {\n return this.errorReason || this.getStateError();\n };\n ConnectionManager.prototype.getStateError = function () {\n var _a, _b;\n return (_b = (_a = connectionerrors_1.default)[this.state.state]) === null || _b === void 0 ? void 0 : _b.call(_a);\n };\n ConnectionManager.prototype.activeState = function () {\n return this.state.queueEvents || this.state.sendEvents;\n };\n ConnectionManager.prototype.enactStateChange = function (stateChange) {\n var logLevel = stateChange.current === 'failed' ? logger_1.default.LOG_ERROR : logger_1.default.LOG_MAJOR;\n logger_1.default.logAction(logLevel, 'Connection state', stateChange.current + (stateChange.reason ? '; reason: ' + stateChange.reason : ''));\n logger_1.default.logAction(logger_1.default.LOG_MINOR, 'ConnectionManager.enactStateChange', 'setting new state: ' +\n stateChange.current +\n '; reason = ' +\n (stateChange.reason && stateChange.reason.message));\n var 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 /* suspended is nonterminal, but once in the suspended state, realtime\n * will have discarded our connection state, so futher connection\n * attempts should start from scratch */\n this.clearConnection();\n }\n this.emit('connectionstate', stateChange);\n };\n /****************************************\n * ConnectionManager connection lifecycle\n ****************************************/\n ConnectionManager.prototype.startTransitionTimer = function (transitionState) {\n var _this = this;\n logger_1.default.logAction(logger_1.default.LOG_MINOR, 'ConnectionManager.startTransitionTimer()', 'transitionState: ' + transitionState.state);\n if (this.transitionTimer) {\n logger_1.default.logAction(logger_1.default.LOG_MINOR, 'ConnectionManager.startTransitionTimer()', 'clearing already-running timer');\n clearTimeout(this.transitionTimer);\n }\n this.transitionTimer = setTimeout(function () {\n if (_this.transitionTimer) {\n _this.transitionTimer = null;\n logger_1.default.logAction(logger_1.default.LOG_MINOR, 'ConnectionManager ' + transitionState.state + ' timer expired', 'requesting new state: ' + transitionState.failState);\n _this.notifyState({ state: transitionState.failState });\n }\n }, transitionState.retryDelay);\n };\n ConnectionManager.prototype.cancelTransitionTimer = function () {\n logger_1.default.logAction(logger_1.default.LOG_MINOR, 'ConnectionManager.cancelTransitionTimer()', '');\n if (this.transitionTimer) {\n clearTimeout(this.transitionTimer);\n this.transitionTimer = null;\n }\n };\n ConnectionManager.prototype.startSuspendTimer = function () {\n var _this = this;\n if (this.suspendTimer)\n return;\n this.suspendTimer = setTimeout(function () {\n if (_this.suspendTimer) {\n _this.suspendTimer = null;\n logger_1.default.logAction(logger_1.default.LOG_MINOR, 'ConnectionManager suspend timer expired', 'requesting new state: suspended');\n _this.states.connecting.failState = 'suspended';\n _this.notifyState({ state: 'suspended' });\n }\n }, this.connectionStateTtl);\n };\n ConnectionManager.prototype.checkSuspendTimer = function (state) {\n if (state !== 'disconnected' && state !== 'suspended' && state !== 'connecting')\n this.cancelSuspendTimer();\n };\n ConnectionManager.prototype.cancelSuspendTimer = function () {\n this.states.connecting.failState = 'disconnected';\n if (this.suspendTimer) {\n clearTimeout(this.suspendTimer);\n this.suspendTimer = null;\n }\n };\n ConnectionManager.prototype.startRetryTimer = function (interval) {\n var _this = this;\n this.retryTimer = setTimeout(function () {\n logger_1.default.logAction(logger_1.default.LOG_MINOR, 'ConnectionManager retry timer expired', 'retrying');\n _this.retryTimer = null;\n _this.requestState({ state: 'connecting' });\n }, interval);\n };\n ConnectionManager.prototype.cancelRetryTimer = function () {\n if (this.retryTimer) {\n clearTimeout(this.retryTimer);\n this.retryTimer = null;\n }\n };\n ConnectionManager.prototype.notifyState = function (indicated) {\n var _this = this;\n var _a, _b;\n var state = indicated.state;\n /* We retry immediately if:\n * - something disconnects us while we're connected, or\n * - a viable (but not yet active) transport fails due to a token error (so\n * this.errorReason will be set, and startConnect will do a forced\n * authorize). If this.errorReason is already set (to a token error),\n * then there has been at least one previous attempt to connect that also\n * failed for a token error, so by RTN14b we go to DISCONNECTED and wait\n * before trying again */\n var retryImmediately = state === 'disconnected' &&\n (this.state === this.states.connected ||\n this.state === this.states.synchronizing ||\n indicated.retryImmediately ||\n (this.state === this.states.connecting &&\n indicated.error &&\n auth_1.default.isTokenErr(indicated.error) &&\n !(this.errorReason && auth_1.default.isTokenErr(this.errorReason))));\n logger_1.default.logAction(logger_1.default.LOG_MINOR, 'ConnectionManager.notifyState()', 'new state: ' + state + (retryImmediately ? '; will retry connection immediately' : ''));\n /* do nothing if we're already in the indicated state */\n if (state == this.state.state)\n return;\n /* kill timers (possibly excepting suspend timer depending on the notified\n * state), as these are superseded by this notification */\n this.cancelTransitionTimer();\n this.cancelRetryTimer();\n this.checkSuspendTimer(indicated.state);\n if (state === 'suspended' || state === 'connected') {\n this.disconnectedRetryCount = 0;\n }\n /* do nothing if we're unable to move from the current state */\n if (this.state.terminal)\n return;\n /* process new state */\n var newState = this.states[indicated.state];\n var retryDelay = newState.retryDelay;\n if (newState.state === 'disconnected') {\n this.disconnectedRetryCount++;\n retryDelay = Utils.getRetryTime(newState.retryDelay, this.disconnectedRetryCount);\n }\n var change = new connectionstatechange_1.default(this.state.state, newState.state, retryDelay, indicated.error || ((_b = (_a = connectionerrors_1.default)[newState.state]) === null || _b === void 0 ? void 0 : _b.call(_a)));\n if (retryImmediately) {\n var autoReconnect = function () {\n if (_this.state === _this.states.disconnected) {\n _this.lastAutoReconnectAttempt = Utils.now();\n _this.requestState({ state: 'connecting' });\n }\n };\n var sinceLast = this.lastAutoReconnectAttempt && Utils.now() - this.lastAutoReconnectAttempt + 1;\n if (sinceLast && sinceLast < 1000) {\n logger_1.default.logAction(logger_1.default.LOG_MICRO, 'ConnectionManager.notifyState()', 'Last reconnect attempt was only ' +\n sinceLast +\n 'ms ago, waiting another ' +\n (1000 - sinceLast) +\n 'ms before trying again');\n setTimeout(autoReconnect, 1000 - sinceLast);\n }\n else {\n platform_1.default.Config.nextTick(autoReconnect);\n }\n }\n else if (state === 'disconnected' || state === 'suspended') {\n this.startRetryTimer(retryDelay);\n }\n /* If going into disconnect/suspended (and not retrying immediately), or a\n * terminal state, ensure there are no orphaned transports hanging around. */\n if ((state === 'disconnected' && !retryImmediately) || state === 'suspended' || newState.terminal) {\n /* Wait till the next tick so the connection state change is enacted,\n * so aborting transports doesn't trigger redundant state changes */\n platform_1.default.Config.nextTick(function () {\n _this.disconnectAllTransports();\n });\n }\n if (state == 'connected' && !this.activeProtocol) {\n logger_1.default.logAction(logger_1.default.LOG_ERROR, 'ConnectionManager.notifyState()', 'Broken invariant: attempted to go into connected state, but there is no active protocol');\n }\n /* implement the change and notify */\n this.enactStateChange(change);\n if (this.state.sendEvents) {\n this.sendQueuedMessages();\n }\n else if (!this.state.queueEvents) {\n this.realtime.channels.propogateConnectionInterruption(state, change.reason);\n this.failQueuedMessages(change.reason); // RTN7c\n }\n };\n ConnectionManager.prototype.requestState = function (request) {\n var _this = this;\n var _a, _b;\n var state = request.state;\n logger_1.default.logAction(logger_1.default.LOG_MINOR, 'ConnectionManager.requestState()', 'requested state: ' + state + '; current state: ' + this.state.state);\n if (state == this.state.state)\n return; /* silently do nothing */\n /* kill running timers, as this request supersedes them */\n this.cancelTransitionTimer();\n this.cancelRetryTimer();\n /* for suspend timer check rather than cancel -- eg requesting a connecting\n * state should not reset the suspend timer */\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 var newState = this.states[state], change = new connectionstatechange_1.default(this.state.state, newState.state, null, request.error || ((_b = (_a = connectionerrors_1.default)[newState.state]) === null || _b === void 0 ? void 0 : _b.call(_a)));\n this.enactStateChange(change);\n if (state == 'connecting') {\n platform_1.default.Config.nextTick(function () {\n _this.startConnect();\n });\n }\n if (state == 'closing') {\n this.closeImpl();\n }\n };\n ConnectionManager.prototype.startConnect = function () {\n var _this = this;\n if (this.state !== this.states.connecting) {\n logger_1.default.logAction(logger_1.default.LOG_MINOR, 'ConnectionManager.startConnect()', 'Must be in connecting state to connect, but was ' + this.state.state);\n return;\n }\n var auth = this.realtime.auth;\n /* The point of the connectCounter mechanism is to ensure that the\n * connection procedure can be cancelled. We want disconnectAllTransports\n * to be able to stop any in-progress connection, even before it gets to\n * the stage of having a pending (or even a proposed) transport that it can\n * dispose() of. So we check that it's still current after any async stage,\n * up until the stage that is synchronous with instantiating a transport */\n var connectCount = ++this.connectCounter;\n var connect = function () {\n _this.checkConnectionStateFreshness();\n _this.getTransportParams(function (transportParams) {\n if (transportParams.mode === 'recover' && transportParams.options.recover) {\n var 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_1.default.logAction(logger_1.default.LOG_MINOR, 'ConnectionManager.startConnect()', 'starting connection');\n this.startSuspendTimer();\n this.startTransitionTimer(this.states.connecting);\n if (auth.method === 'basic') {\n connect();\n }\n else {\n var authCb = function (err) {\n if (connectCount !== _this.connectCounter) {\n return;\n }\n if (err) {\n _this.actOnErrorFromAuthorize(err);\n }\n else {\n connect();\n }\n };\n if (this.errorReason && auth_1.default.isTokenErr(this.errorReason)) {\n /* Force a refetch of a new token */\n auth._forceNewToken(null, null, authCb);\n }\n else {\n auth._ensureValidAuthCredentials(false, authCb);\n }\n }\n };\n /**\n * There are three stages in connecting:\n * - preference: if there is a cached transport preference, we try to connect\n * on that. If that fails or times out we abort the attempt, remove the\n * preference and fall back to base. If it succeeds, we try upgrading it if\n * needed (will only be in the case where the preference is xhrs and the\n * browser supports ws).\n * - base: we try to connect with the best transport that we think will\n * never fail for this browser (usually this is xhr_polling; for very old\n * browsers will be jsonp, for node will be comet). If it doesn't work, we\n * try fallback hosts.\n * - upgrade: given a connected transport, we see if there are any better\n * ones, and if so, try to upgrade to them.\n *\n * connectImpl works out what stage you're at (which is purely a function of\n * the current connection state and whether there are any stored preferences),\n * and dispatches accordingly. After a transport has been set pending,\n * tryATransport calls connectImpl to see if there's another stage to be done.\n * */\n ConnectionManager.prototype.connectImpl = function (transportParams, connectCount) {\n var state = this.state.state;\n if (state !== this.states.connecting.state && state !== this.states.connected.state) {\n /* Only keep trying as long as in the 'connecting' state (or 'connected'\n * for upgrading). Any operation can put us into 'disconnected' to cancel\n * connection attempts and wait before retrying, or 'failed' to fail. */\n logger_1.default.logAction(logger_1.default.LOG_MINOR, 'ConnectionManager.connectImpl()', 'Must be in connecting state to connect (or connected to upgrade), but was ' + state);\n }\n else if (this.pendingTransports.length) {\n logger_1.default.logAction(logger_1.default.LOG_MINOR, 'ConnectionManager.connectImpl()', 'Transports ' + this.pendingTransports[0].toString() + ' currently pending; taking no action');\n }\n else if (state == this.states.connected.state) {\n this.upgradeIfNeeded(transportParams);\n }\n else if (this.transports.length > 1 && this.getTransportPreference()) {\n this.connectPreference(transportParams, connectCount);\n }\n else {\n this.connectBase(transportParams, connectCount);\n }\n };\n ConnectionManager.prototype.connectPreference = function (transportParams, connectCount) {\n var _this = this;\n var preference = this.getTransportPreference();\n var preferenceTimeoutExpired = false;\n if (!Utils.arrIn(this.transports, preference)) {\n this.unpersistTransportPreference();\n this.connectImpl(transportParams, connectCount);\n }\n logger_1.default.logAction(logger_1.default.LOG_MINOR, 'ConnectionManager.connectPreference()', 'Trying to connect with stored transport preference ' + preference);\n var preferenceTimeout = setTimeout(function () {\n preferenceTimeoutExpired = true;\n if (!(_this.state.state === _this.states.connected.state)) {\n logger_1.default.logAction(logger_1.default.LOG_MINOR, 'ConnectionManager.connectPreference()', 'Shortcircuit connection attempt with ' + preference + ' failed; clearing preference and trying from scratch');\n /* Abort all connection attempts. (This also disconnects the active\n * protocol, but none exists if we're not in the connected state) */\n _this.disconnectAllTransports();\n /* Be quite agressive about clearing the stored preference if ever it doesn't work */\n _this.unpersistTransportPreference();\n }\n _this.connectImpl(transportParams, connectCount);\n }, this.options.timeouts.preferenceConnectTimeout);\n /* For connectPreference, just use the main host. If host fallback is needed, do it in connectBase.\n * The wstransport it will substitute the httphost for an appropriate wshost */\n transportParams.host = this.httpHosts[0];\n this.tryATransport(transportParams, preference, function (fatal, transport) {\n clearTimeout(preferenceTimeout);\n if (preferenceTimeoutExpired && transport) {\n /* Viable, but too late - connectImpl() will already be trying\n * connectBase, and we weren't in upgrade mode. Just remove the\n * onconnected listener and get rid of it */\n transport.off();\n transport.disconnect();\n Utils.arrDeleteValue(_this.pendingTransports, transport);\n }\n else if (!transport && !fatal) {\n /* Preference failed in a transport-specific way. Try more */\n _this.unpersistTransportPreference();\n _this.connectImpl(transportParams, connectCount);\n }\n /* If suceeded, or failed fatally, nothing to do */\n });\n };\n /**\n * Try to establish a transport on the base transport (the best transport\n * such that if it doesn't work, nothing will work) as determined through\n * static feature detection, checking for network connectivity and trying\n * fallback hosts if applicable.\n * @param transportParams\n */\n ConnectionManager.prototype.connectBase = function (transportParams, connectCount) {\n var _this = this;\n var giveUp = function (err) {\n _this.notifyState({ state: _this.states.connecting.failState, error: err });\n };\n var candidateHosts = this.httpHosts.slice();\n var hostAttemptCb = function (fatal, transport) {\n if (connectCount !== _this.connectCounter) {\n return;\n }\n if (!transport && !fatal) {\n tryFallbackHosts();\n }\n };\n logger_1.default.logAction(logger_1.default.LOG_MINOR, 'ConnectionManager.connectBase()', 'Trying to connect with base transport ' + this.baseTransport);\n /* first try to establish a connection with the priority host with http transport */\n var host = candidateHosts.shift();\n if (!host) {\n giveUp(new errorinfo_1.default('Unable to connect (no available host)', 80003, 404));\n return;\n }\n transportParams.host = host;\n /* this is what we'll be doing if the attempt for the main host fails */\n var tryFallbackHosts = function () {\n /* if there aren't any fallback hosts, fail */\n if (!candidateHosts.length) {\n giveUp(new errorinfo_1.default('Unable to connect (and no more fallback hosts to try)', 80003, 404));\n return;\n }\n /* before trying any fallback (or any remaining fallback) we decide if\n * there is a problem with the ably host, or there is a general connectivity\n * problem */\n if (!_this.realtime.http.checkConnectivity) {\n giveUp(new errorinfo_1.PartialErrorInfo('Internal error: Http.checkConnectivity not set', null, 500));\n return;\n }\n _this.realtime.http.checkConnectivity(function (err, connectivity) {\n if (connectCount !== _this.connectCounter) {\n return;\n }\n /* we know err won't happen but handle it here anyway */\n if (err) {\n giveUp(err);\n return;\n }\n if (!connectivity) {\n /* the internet isn't reachable, so don't try the fallback hosts */\n giveUp(new errorinfo_1.default('Unable to connect (network unreachable)', 80003, 404));\n return;\n }\n /* the network is there, so there's a problem with the main host, or\n * its dns. Try the fallback hosts. We could try them simultaneously but\n * that would potentially cause a huge spike in load on the load balancer */\n transportParams.host = Utils.arrPopRandomElement(candidateHosts);\n _this.tryATransport(transportParams, _this.baseTransport, hostAttemptCb);\n });\n };\n if (this.forceFallbackHost && candidateHosts.length) {\n this.forceFallbackHost = false;\n tryFallbackHosts();\n return;\n }\n this.tryATransport(transportParams, this.baseTransport, hostAttemptCb);\n };\n ConnectionManager.prototype.getUpgradePossibilities = function () {\n /* returns the subset of upgradeTransports to the right of the current\n * transport in upgradeTransports (if it's in there - if not, currentSerial\n * will be -1, so return upgradeTransports.slice(0) == upgradeTransports */\n var current = this.activeProtocol.getTransport().shortName;\n var currentSerial = Utils.arrIndexOf(this.upgradeTransports, current);\n return this.upgradeTransports.slice(currentSerial + 1);\n };\n ConnectionManager.prototype.upgradeIfNeeded = function (transportParams) {\n var _this = this;\n var upgradePossibilities = this.getUpgradePossibilities();\n logger_1.default.logAction(logger_1.default.LOG_MINOR, 'ConnectionManager.upgradeIfNeeded()', 'upgrade possibilities: ' + platform_1.default.Config.inspect(upgradePossibilities));\n if (!upgradePossibilities.length) {\n return;\n }\n Utils.arrForEach(upgradePossibilities, function (upgradeTransport) {\n /* Note: the transport may mutate the params, so give each transport a fresh one */\n var upgradeTransportParams = _this.createTransportParams(transportParams.host, 'upgrade');\n _this.tryATransport(upgradeTransportParams, upgradeTransport, noop);\n });\n };\n ConnectionManager.prototype.closeImpl = function () {\n logger_1.default.logAction(logger_1.default.LOG_MINOR, 'ConnectionManager.closeImpl()', 'closing connection');\n this.cancelSuspendTimer();\n this.startTransitionTimer(this.states.closing);\n Utils.safeArrForEach(this.pendingTransports, function (transport) {\n logger_1.default.logAction(logger_1.default.LOG_MICRO, 'ConnectionManager.closeImpl()', 'Closing pending transport: ' + transport);\n if (transport)\n transport.close();\n });\n Utils.safeArrForEach(this.proposedTransports, function (transport) {\n logger_1.default.logAction(logger_1.default.LOG_MICRO, 'ConnectionManager.closeImpl()', 'Disposing of proposed transport: ' + transport);\n if (transport)\n transport.dispose();\n });\n if (this.activeProtocol) {\n logger_1.default.logAction(logger_1.default.LOG_MICRO, 'ConnectionManager.closeImpl()', 'Closing active transport: ' + this.activeProtocol.getTransport());\n this.activeProtocol.getTransport().close();\n }\n /* If there was an active transport, this will probably be\n * preempted by the notifyState call in deactivateTransport */\n this.notifyState({ state: 'closed' });\n };\n ConnectionManager.prototype.onAuthUpdated = function (tokenDetails, callback) {\n var _this = this;\n var _a;\n switch (this.state.state) {\n case 'connected': {\n logger_1.default.logAction(logger_1.default.LOG_MICRO, 'ConnectionManager.onAuthUpdated()', 'Sending AUTH message on active transport');\n /* If there are any proposed/pending transports (eg an upgrade that\n * isn't yet scheduled for activation) that hasn't yet started syncing,\n * just to get rid of them & restart the upgrade with the new token, to\n * avoid a race condition. (If it has started syncing, the AUTH will be\n * queued until the upgrade is complete, so everything's fine) */\n if ((this.pendingTransports.length || this.proposedTransports.length) &&\n this.state !== this.states.synchronizing) {\n this.disconnectAllTransports(/* exceptActive: */ true);\n var transportParams_1 = this.activeProtocol.getTransport().params;\n platform_1.default.Config.nextTick(function () {\n if (_this.state.state === 'connected') {\n _this.upgradeIfNeeded(transportParams_1);\n }\n });\n }\n /* Do any transport-specific new-token action */\n var activeTransport = (_a = this.activeProtocol) === null || _a === void 0 ? void 0 : _a.getTransport();\n if (activeTransport && activeTransport.onAuthUpdated) {\n activeTransport.onAuthUpdated(tokenDetails);\n }\n var authMsg = protocolmessage_1.default.fromValues({\n action: actions.AUTH,\n auth: {\n accessToken: tokenDetails.token,\n },\n });\n this.send(authMsg);\n /* The answer will come back as either a connectiondetails event\n * (realtime sends a CONNECTED to acknowledge the reauth) or a\n * statechange to failed */\n var successListener_1 = function () {\n _this.off(failureListener_1);\n callback(null, tokenDetails);\n };\n var failureListener_1 = function (stateChange) {\n if (stateChange.current === 'failed') {\n _this.off(successListener_1);\n _this.off(failureListener_1);\n callback(stateChange.reason || _this.getStateError());\n }\n };\n this.once('connectiondetails', successListener_1);\n this.on('connectionstate', failureListener_1);\n break;\n }\n case 'connecting':\n logger_1.default.logAction(logger_1.default.LOG_MICRO, 'ConnectionManager.onAuthUpdated()', 'Aborting current connection attempts in order to start again with the new auth details');\n this.disconnectAllTransports();\n /* fallthrough to add statechange listener */\n default: {\n logger_1.default.logAction(logger_1.default.LOG_MICRO, 'ConnectionManager.onAuthUpdated()', 'Connection state is ' + this.state.state + '; waiting until either connected or failed');\n var listener_1 = function (stateChange) {\n switch (stateChange.current) {\n case 'connected':\n _this.off(listener_1);\n callback(null, tokenDetails);\n break;\n case 'failed':\n case 'closed':\n case 'suspended':\n _this.off(listener_1);\n callback(stateChange.reason || _this.getStateError());\n break;\n default:\n /* ignore till we get either connected or failed */\n break;\n }\n };\n this.on('connectionstate', listener_1);\n if (this.state.state === 'connecting') {\n /* can happen if in the connecting state but no transport was pending\n * yet, so disconnectAllTransports did not trigger a disconnected state */\n this.startConnect();\n }\n else {\n this.requestState({ state: 'connecting' });\n }\n }\n }\n };\n ConnectionManager.prototype.disconnectAllTransports = function (exceptActive) {\n logger_1.default.logAction(logger_1.default.LOG_MINOR, 'ConnectionManager.disconnectAllTransports()', 'Disconnecting all transports' + (exceptActive ? ' except the active transport' : ''));\n /* This will prevent any connection procedure in an async part of one of its early stages from continuing */\n this.connectCounter++;\n Utils.safeArrForEach(this.pendingTransports, function (transport) {\n logger_1.default.logAction(logger_1.default.LOG_MICRO, 'ConnectionManager.disconnectAllTransports()', 'Disconnecting pending transport: ' + transport);\n if (transport)\n transport.disconnect();\n });\n this.pendingTransports = [];\n Utils.safeArrForEach(this.proposedTransports, function (transport) {\n logger_1.default.logAction(logger_1.default.LOG_MICRO, 'ConnectionManager.disconnectAllTransports()', 'Disposing of proposed transport: ' + transport);\n if (transport)\n transport.dispose();\n });\n this.proposedTransports = [];\n if (this.activeProtocol && !exceptActive) {\n logger_1.default.logAction(logger_1.default.LOG_MICRO, 'ConnectionManager.disconnectAllTransports()', 'Disconnecting active transport: ' + this.activeProtocol.getTransport());\n this.activeProtocol.getTransport().disconnect();\n }\n /* No need to notify state disconnected; disconnecting the active transport\n * will have that effect */\n };\n /******************\n * event queueing\n ******************/\n ConnectionManager.prototype.send = function (msg, queueEvent, callback) {\n callback = callback || noop;\n var state = this.state;\n if (state.sendEvents) {\n logger_1.default.logAction(logger_1.default.LOG_MICRO, 'ConnectionManager.send()', 'sending event');\n this.sendImpl(new protocol_1.PendingMessage(msg, callback));\n return;\n }\n var shouldQueue = (queueEvent && state.queueEvents) || state.forceQueueEvents;\n if (!shouldQueue) {\n var err = 'rejecting event, queueEvent was ' + queueEvent + ', state was ' + state.state;\n logger_1.default.logAction(logger_1.default.LOG_MICRO, 'ConnectionManager.send()', err);\n callback(this.errorReason || new errorinfo_1.default(err, 90000, 400));\n return;\n }\n if (logger_1.default.shouldLog(logger_1.default.LOG_MICRO)) {\n logger_1.default.logAction(logger_1.default.LOG_MICRO, 'ConnectionManager.send()', 'queueing msg; ' + protocolmessage_1.default.stringify(msg));\n }\n this.queue(msg, callback);\n };\n ConnectionManager.prototype.sendImpl = function (pendingMessage) {\n var msg = pendingMessage.message;\n /* If have already attempted to send this, resend with the same msgSerial,\n * so Ably can dedup if the previous send succeeded */\n if (pendingMessage.ackRequired && !pendingMessage.sendAttempted) {\n msg.msgSerial = this.msgSerial++;\n }\n try {\n this.activeProtocol.send(pendingMessage);\n }\n catch (e) {\n logger_1.default.logAction(logger_1.default.LOG_ERROR, 'ConnectionManager.sendImpl()', 'Unexpected exception in transport.send(): ' + e.stack);\n }\n };\n ConnectionManager.prototype.queue = function (msg, callback) {\n logger_1.default.logAction(logger_1.default.LOG_MICRO, 'ConnectionManager.queue()', 'queueing event');\n var lastQueued = this.queuedMessages.last();\n var maxSize = this.options.maxMessageSize;\n /* If have already attempted to send a message, don't merge more messages\n * into it, as if the previous send actually succeeded and realtime ignores\n * the dup, they'll be lost */\n if (lastQueued && !lastQueued.sendAttempted && bundleWith(lastQueued.message, msg, maxSize)) {\n if (!lastQueued.merged) {\n lastQueued.callback = multicaster_1.default.create([lastQueued.callback]);\n lastQueued.merged = true;\n }\n lastQueued.callback.push(callback);\n }\n else {\n this.queuedMessages.push(new protocol_1.PendingMessage(msg, callback));\n }\n };\n ConnectionManager.prototype.sendQueuedMessages = function () {\n logger_1.default.logAction(logger_1.default.LOG_MICRO, 'ConnectionManager.sendQueuedMessages()', 'sending ' + this.queuedMessages.count() + ' queued messages');\n var pendingMessage;\n while ((pendingMessage = this.queuedMessages.shift()))\n this.sendImpl(pendingMessage);\n };\n ConnectionManager.prototype.queuePendingMessages = function (pendingMessages) {\n if (pendingMessages && pendingMessages.length) {\n logger_1.default.logAction(logger_1.default.LOG_MICRO, 'ConnectionManager.queuePendingMessages()', 'queueing ' + pendingMessages.length + ' pending messages');\n this.queuedMessages.prepend(pendingMessages);\n }\n };\n ConnectionManager.prototype.failQueuedMessages = function (err) {\n var numQueued = this.queuedMessages.count();\n if (numQueued > 0) {\n logger_1.default.logAction(logger_1.default.LOG_ERROR, 'ConnectionManager.failQueuedMessages()', 'failing ' + numQueued + ' queued messages, err = ' + Utils.inspectError(err));\n this.queuedMessages.completeAllMessages(err);\n }\n };\n ConnectionManager.prototype.onChannelMessage = function (message, transport) {\n var onActiveTransport = this.activeProtocol && transport === this.activeProtocol.getTransport(), onUpgradeTransport = Utils.arrIn(this.pendingTransports, transport) && this.state == this.states.synchronizing;\n /* As the lib now has a period where the upgrade transport is synced but\n * before it's become active (while waiting for the old one to become\n * idle), message can validly arrive on it even though it isn't active */\n if (onActiveTransport || onUpgradeTransport) {\n this.realtime.channels.onChannelMessage(message);\n }\n else {\n // Message came in on a defunct transport. Allow only acks, nacks, & errors for outstanding\n // messages, no new messages (as sync has been sent on new transport so new messages will\n // be resent there, or connection has been closed so don't want new messages)\n if (Utils.arrIndexOf([actions.ACK, actions.NACK, actions.ERROR], message.action) > -1) {\n this.realtime.channels.onChannelMessage(message);\n }\n else {\n logger_1.default.logAction(logger_1.default.LOG_MICRO, 'ConnectionManager.onChannelMessage()', 'received message ' + JSON.stringify(message) + 'on defunct transport; discarding');\n }\n }\n };\n ConnectionManager.prototype.ping = function (transport, callback) {\n var _this = this;\n /* if transport is specified, try that */\n if (transport) {\n logger_1.default.logAction(logger_1.default.LOG_MINOR, 'ConnectionManager.ping()', 'transport = ' + transport);\n var onTimeout = function () {\n transport.off('heartbeat', onHeartbeat_1);\n callback(new errorinfo_1.default('Timeout waiting for heartbeat response', 50000, 500));\n };\n var pingStart_1 = Utils.now(), id_1 = Utils.cheapRandStr();\n var onHeartbeat_1 = function (responseId) {\n if (responseId === id_1) {\n transport.off('heartbeat', onHeartbeat_1);\n clearTimeout(timer_1);\n var responseTime = Utils.now() - pingStart_1;\n callback(null, responseTime);\n }\n };\n var timer_1 = setTimeout(onTimeout, this.options.timeouts.realtimeRequestTimeout);\n transport.on('heartbeat', onHeartbeat_1);\n transport.ping(id_1);\n return;\n }\n /* if we're not connected, don't attempt */\n if (this.state.state !== 'connected') {\n callback(new errorinfo_1.default('Unable to ping service; not connected', 40000, 400));\n return;\n }\n /* no transport was specified, so use the current (connected) one\n * but ensure that we retry if the transport is superseded before we complete */\n var completed = false;\n var onPingComplete = function (err, responseTime) {\n _this.off('transport.active', onTransportActive);\n if (!completed) {\n completed = true;\n callback(err, responseTime);\n }\n };\n var onTransportActive = function () {\n if (!completed) {\n /* ensure that no callback happens for the currently outstanding operation */\n completed = true;\n /* repeat but picking up the new transport */\n platform_1.default.Config.nextTick(function () {\n _this.ping(null, callback);\n });\n }\n };\n this.on('transport.active', onTransportActive);\n this.ping(this.activeProtocol.getTransport(), onPingComplete);\n };\n ConnectionManager.prototype.abort = function (error) {\n this.activeProtocol.getTransport().fail(error);\n };\n ConnectionManager.prototype.registerProposedTransport = function (transport) {\n this.proposedTransports.push(transport);\n };\n ConnectionManager.prototype.getTransportPreference = function () {\n var _a, _b;\n return this.transportPreference || (haveWebStorage() && ((_b = (_a = platform_1.default.WebStorage) === null || _a === void 0 ? void 0 : _a.get) === null || _b === void 0 ? void 0 : _b.call(_a, transportPreferenceName)));\n };\n ConnectionManager.prototype.persistTransportPreference = function (transport) {\n var _a, _b;\n if (Utils.arrIn(defaults_1.default.upgradeTransports, transport.shortName)) {\n this.transportPreference = transport.shortName;\n if (haveWebStorage()) {\n (_b = (_a = platform_1.default.WebStorage) === null || _a === void 0 ? void 0 : _a.set) === null || _b === void 0 ? void 0 : _b.call(_a, transportPreferenceName, transport.shortName);\n }\n }\n };\n ConnectionManager.prototype.unpersistTransportPreference = function () {\n var _a, _b;\n this.transportPreference = null;\n if (haveWebStorage()) {\n (_b = (_a = platform_1.default.WebStorage) === null || _a === void 0 ? void 0 : _a.remove) === null || _b === void 0 ? void 0 : _b.call(_a, 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 ConnectionManager.prototype.actOnErrorFromAuthorize = function (err) {\n if (err.code === 40171) {\n /* No way to reauth */\n this.notifyState({ state: 'failed', error: err });\n }\n else if (err.code === 40102) {\n this.notifyState({ state: 'failed', error: err });\n }\n else if (err.statusCode === HttpStatusCodes_1.default.Forbidden) {\n var msg = 'Client configured authentication provider returned 403; failing the connection';\n logger_1.default.logAction(logger_1.default.LOG_ERROR, 'ConnectionManager.actOnErrorFromAuthorize()', msg);\n this.notifyState({ state: 'failed', error: new errorinfo_1.default(msg, 80019, 403, err) });\n }\n else {\n var msg = 'Client configured authentication provider request failed';\n logger_1.default.logAction(logger_1.default.LOG_MINOR, 'ConnectionManager.actOnErrorFromAuthorize', msg);\n this.notifyState({ state: this.state.failState, error: new errorinfo_1.default(msg, 80019, 401, err) });\n }\n };\n ConnectionManager.prototype.onConnectionDetailsUpdate = function (connectionDetails, transport) {\n if (!connectionDetails) {\n return;\n }\n this.connectionDetails = connectionDetails;\n if (connectionDetails.maxMessageSize) {\n this.options.maxMessageSize = connectionDetails.maxMessageSize;\n }\n var clientId = connectionDetails.clientId;\n if (clientId) {\n var err = this.realtime.auth._uncheckedSetClientId(clientId);\n if (err) {\n logger_1.default.logAction(logger_1.default.LOG_ERROR, 'ConnectionManager.onConnectionDetailsUpdate()', err.message);\n /* Errors setting the clientId are fatal to the connection */\n transport.fail(err);\n return;\n }\n }\n var connectionStateTtl = connectionDetails.connectionStateTtl;\n if (connectionStateTtl) {\n this.connectionStateTtl = connectionStateTtl;\n }\n this.maxIdleInterval = connectionDetails.maxIdleInterval;\n this.emit('connectiondetails', connectionDetails);\n };\n /*********************\n * transport management\n *********************/\n ConnectionManager.supportedTransports = {};\n return ConnectionManager;\n}(eventemitter_1.default));\nexports.default = ConnectionManager;\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(13)))\n\n/***/ }),\n/* 36 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = __webpack_require__(0);\nvar eventemitter_1 = tslib_1.__importDefault(__webpack_require__(7));\nvar logger_1 = tslib_1.__importDefault(__webpack_require__(2));\nvar MessageQueue = /** @class */ (function (_super) {\n tslib_1.__extends(MessageQueue, _super);\n function MessageQueue() {\n var _this = _super.call(this) || this;\n _this.messages = [];\n return _this;\n }\n MessageQueue.prototype.count = function () {\n return this.messages.length;\n };\n MessageQueue.prototype.push = function (message) {\n this.messages.push(message);\n };\n MessageQueue.prototype.shift = function () {\n return this.messages.shift();\n };\n MessageQueue.prototype.last = function () {\n return this.messages[this.messages.length - 1];\n };\n MessageQueue.prototype.copyAll = function () {\n return this.messages.slice();\n };\n MessageQueue.prototype.append = function (messages) {\n this.messages.push.apply(this.messages, messages);\n };\n MessageQueue.prototype.prepend = function (messages) {\n this.messages.unshift.apply(this.messages, messages);\n };\n MessageQueue.prototype.completeMessages = function (serial, count, err) {\n logger_1.default.logAction(logger_1.default.LOG_MICRO, 'MessageQueue.completeMessages()', 'serial = ' + serial + '; count = ' + count);\n err = err || null;\n var messages = this.messages;\n if (messages.length === 0) {\n throw new Error('MessageQueue.completeMessages(): completeMessages called on any empty MessageQueue');\n }\n var first = messages[0];\n if (first) {\n var startSerial = first.message.msgSerial;\n var endSerial = serial + count; /* the serial of the first message that is *not* the subject of this call */\n if (endSerial > startSerial) {\n var completeMessages = messages.splice(0, endSerial - startSerial);\n for (var _i = 0, completeMessages_1 = completeMessages; _i < completeMessages_1.length; _i++) {\n var message = completeMessages_1[_i];\n message.callback(err);\n }\n }\n if (messages.length == 0)\n this.emit('idle');\n }\n };\n MessageQueue.prototype.completeAllMessages = function (err) {\n this.completeMessages(0, Number.MAX_SAFE_INTEGER || Number.MAX_VALUE, err);\n };\n MessageQueue.prototype.resetSendAttempted = function () {\n for (var _i = 0, _a = this.messages; _i < _a.length; _i++) {\n var msg = _a[_i];\n msg.sendAttempted = false;\n }\n };\n MessageQueue.prototype.clear = function () {\n logger_1.default.logAction(logger_1.default.LOG_MICRO, 'MessageQueue.clear()', 'clearing ' + this.messages.length + ' messages');\n this.messages = [];\n this.emit('idle');\n };\n return MessageQueue;\n}(eventemitter_1.default));\nexports.default = MessageQueue;\n\n\n/***/ }),\n/* 37 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar ConnectionStateChange = /** @class */ (function () {\n function ConnectionStateChange(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 return ConnectionStateChange;\n}());\nexports.default = ConnectionStateChange;\n\n\n/***/ }),\n/* 38 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = __webpack_require__(0);\nvar protocolmessage_1 = tslib_1.__importDefault(__webpack_require__(10));\nvar eventemitter_1 = tslib_1.__importDefault(__webpack_require__(7));\nvar Utils = tslib_1.__importStar(__webpack_require__(1));\nvar channel_1 = tslib_1.__importDefault(__webpack_require__(33));\nvar logger_1 = tslib_1.__importDefault(__webpack_require__(2));\nvar realtimepresence_1 = tslib_1.__importDefault(__webpack_require__(54));\nvar message_1 = tslib_1.__importDefault(__webpack_require__(9));\nvar channelstatechange_1 = tslib_1.__importDefault(__webpack_require__(39));\nvar errorinfo_1 = tslib_1.__importStar(__webpack_require__(4));\nvar presencemessage_1 = tslib_1.__importDefault(__webpack_require__(14));\nvar connectionerrors_1 = tslib_1.__importDefault(__webpack_require__(19));\nvar actions = protocolmessage_1.default.Action;\nvar noop = function () { };\nfunction validateChannelOptions(options) {\n if (options && 'params' in options && !Utils.isObject(options.params)) {\n return new errorinfo_1.default('options.params must be an object', 40000, 400);\n }\n if (options && 'modes' in options) {\n if (!Utils.isArray(options.modes)) {\n return new errorinfo_1.default('options.modes must be an array', 40000, 400);\n }\n for (var i = 0; i < options.modes.length; i++) {\n var currentMode = options.modes[i];\n if (!currentMode ||\n typeof currentMode !== 'string' ||\n !Utils.arrIn(protocolmessage_1.default.channelModes, String.prototype.toUpperCase.call(currentMode))) {\n return new errorinfo_1.default('Invalid channel mode: ' + currentMode, 40000, 400);\n }\n }\n }\n}\nvar RealtimeChannel = /** @class */ (function (_super) {\n tslib_1.__extends(RealtimeChannel, _super);\n function RealtimeChannel(realtime, name, options) {\n var _this = _super.call(this, realtime, name, options) || this;\n _this.retryCount = 0;\n _this.history = function (params, callback) {\n logger_1.default.logAction(logger_1.default.LOG_MICRO, 'RealtimeChannel.history()', 'channel = ' + this.name);\n /* params and callback are optional; see if params contains the callback */\n if (callback === undefined) {\n if (typeof params == 'function') {\n callback = params;\n params = null;\n }\n else {\n if (this.rest.options.promises) {\n return Utils.promisify(this, 'history', arguments);\n }\n callback = noop;\n }\n }\n if (params && params.untilAttach) {\n if (this.state !== 'attached') {\n callback(new errorinfo_1.default('option untilAttach requires the channel to be attached', 40000, 400));\n return;\n }\n if (!this.properties.attachSerial) {\n callback(new errorinfo_1.default('untilAttach was specified and channel is attached, but attachSerial is not defined', 40000, 400));\n return;\n }\n delete params.untilAttach;\n params.from_serial = this.properties.attachSerial;\n }\n channel_1.default.prototype._history.call(this, params, callback);\n };\n _this.whenState = (function (state, listener) {\n return eventemitter_1.default.prototype.whenState.call(_this, state, _this.state, listener);\n });\n logger_1.default.logAction(logger_1.default.LOG_MINOR, 'RealtimeChannel()', 'started; name = ' + name);\n _this.realtime = realtime;\n _this.presence = new realtimepresence_1.default(_this);\n _this.connectionManager = realtime.connection.connectionManager;\n _this.state = 'initialized';\n _this.subscriptions = new eventemitter_1.default();\n _this.syncChannelSerial = undefined;\n _this.properties = {\n attachSerial: undefined,\n channelSerial: undefined,\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: realtime.options.plugins || {},\n baseEncodedPreviousPayload: undefined,\n };\n _this._lastPayload = {\n messageId: null,\n protocolMessageChannelSerial: null,\n decodeFailureRecoveryInProgress: null,\n };\n /* Only differences between this and the public event emitter is that this emits an\n * update event for all ATTACHEDs, whether resumed or not */\n _this._allChannelChanges = new eventemitter_1.default();\n return _this;\n }\n RealtimeChannel.prototype.invalidStateError = function () {\n return new errorinfo_1.default('Channel operation failed as channel state is ' + this.state, 90001, 400, this.errorReason || undefined);\n };\n RealtimeChannel.processListenerArgs = function (args) {\n /* [event], listener, [callback] */\n args = Array.prototype.slice.call(args);\n if (typeof args[0] === 'function') {\n args.unshift(null);\n }\n if (args[args.length - 1] == undefined) {\n args.pop();\n }\n return args;\n };\n RealtimeChannel.prototype.setOptions = function (options, callback) {\n if (!callback) {\n if (this.rest.options.promises) {\n return Utils.promisify(this, 'setOptions', arguments);\n }\n }\n var _callback = callback ||\n function (err) {\n if (err) {\n logger_1.default.logAction(logger_1.default.LOG_ERROR, 'RealtimeChannel.setOptions()', 'Set options failed: ' + err.toString());\n }\n };\n var err = validateChannelOptions(options);\n if (err) {\n _callback(err);\n return;\n }\n channel_1.default.prototype.setOptions.call(this, options);\n if (this._decodingContext)\n this._decodingContext.channelOptions = this.channelOptions;\n if (this._shouldReattachToSetOptions(options)) {\n /* This does not just do _attach(true, null, callback) because that would put us\n * into the 'attaching' state until we receive the new attached, which is\n * conceptually incorrect: we are still attached, we just have a pending request to\n * change some channel params. Per RTL17 going into the attaching state would mean\n * rejecting messages until we have confirmation that the options have changed,\n * which would unnecessarily lose message continuity. */\n this.attachImpl();\n // Ignore 'attaching' -- could be just due to to a resume & reattach, should not\n // call back setOptions until we're definitely attached with the new options (or\n // else in a terminal state)\n this._allChannelChanges.once(['attached', 'update', 'detached', 'failed'], function (stateChange) {\n switch (this.event) {\n case 'update':\n case 'attached':\n _callback === null || _callback === void 0 ? void 0 : _callback(null);\n return;\n default:\n _callback === null || _callback === void 0 ? void 0 : _callback(stateChange.reason);\n return;\n }\n });\n }\n else {\n _callback();\n }\n };\n RealtimeChannel.prototype._shouldReattachToSetOptions = function (options) {\n return (this.state === 'attached' || this.state === 'attaching') && ((options === null || options === void 0 ? void 0 : options.params) || (options === null || options === void 0 ? void 0 : options.modes));\n };\n RealtimeChannel.prototype.publish = function () {\n var _this = this;\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var messages = args[0];\n var argCount = args.length;\n var callback = args[argCount - 1];\n if (typeof callback !== 'function') {\n if (this.realtime.options.promises) {\n return Utils.promisify(this, 'publish', arguments);\n }\n callback = noop;\n ++argCount;\n }\n if (!this.connectionManager.activeState()) {\n callback(this.connectionManager.getError());\n return;\n }\n if (argCount == 2) {\n if (Utils.isObject(messages))\n messages = [message_1.default.fromValues(messages)];\n else if (Utils.isArray(messages))\n messages = message_1.default.fromValuesArray(messages);\n else\n throw new errorinfo_1.default('The single-argument form of publish() expects a message object or an array of message objects', 40013, 400);\n }\n else {\n messages = [message_1.default.fromValues({ name: args[0], data: args[1] })];\n }\n var maxMessageSize = this.realtime.options.maxMessageSize;\n message_1.default.encodeArray(messages, this.channelOptions, function (err) {\n if (err) {\n callback(err);\n return;\n }\n /* RSL1i */\n var size = message_1.default.getMessagesSize(messages);\n if (size > maxMessageSize) {\n callback(new errorinfo_1.default('Maximum size of messages that can be published at once exceeded ( was ' +\n size +\n ' bytes; limit is ' +\n maxMessageSize +\n ' bytes)', 40009, 400));\n return;\n }\n _this.__publish(messages, callback);\n });\n };\n // Double underscore used to prevent type conflict with underlying Channel._publish method\n RealtimeChannel.prototype.__publish = function (messages, callback) {\n logger_1.default.logAction(logger_1.default.LOG_MICRO, 'RealtimeChannel.publish()', 'message count = ' + messages.length);\n var state = this.state;\n switch (state) {\n case 'failed':\n case 'suspended':\n callback(errorinfo_1.default.fromValues(this.invalidStateError()));\n break;\n default: {\n logger_1.default.logAction(logger_1.default.LOG_MICRO, 'RealtimeChannel.publish()', 'sending message; channel state is ' + state);\n var msg = new protocolmessage_1.default();\n msg.action = actions.MESSAGE;\n msg.channel = this.name;\n msg.messages = messages;\n this.sendMessage(msg, callback);\n break;\n }\n }\n };\n RealtimeChannel.prototype.onEvent = function (messages) {\n logger_1.default.logAction(logger_1.default.LOG_MICRO, 'RealtimeChannel.onEvent()', 'received message');\n var subscriptions = this.subscriptions;\n for (var i = 0; i < messages.length; i++) {\n var message = messages[i];\n subscriptions.emit(message.name, message);\n }\n };\n RealtimeChannel.prototype.attach = function (flags, callback) {\n var _flags;\n if (typeof flags === 'function') {\n callback = flags;\n _flags = null;\n }\n else {\n _flags = flags;\n }\n if (!callback) {\n if (this.realtime.options.promises) {\n return Utils.promisify(this, 'attach', arguments);\n }\n callback = function (err) {\n if (err) {\n logger_1.default.logAction(logger_1.default.LOG_MAJOR, 'RealtimeChannel.attach()', 'Channel attach failed: ' + err.toString());\n }\n };\n }\n if (_flags) {\n logger_1.default.deprecated('channel.attach() with flags', 'channel.setOptions() with channelOptions.params');\n /* If flags requested, always do a re-attach. TODO only do this if\n * current mode differs from requested mode */\n this._requestedFlags = _flags;\n }\n else if (this.state === 'attached') {\n callback(null, null);\n return;\n }\n this._attach(false, null, callback);\n };\n RealtimeChannel.prototype._attach = function (forceReattach, attachReason, callback) {\n if (!callback) {\n callback = function (err) {\n if (err) {\n logger_1.default.logAction(logger_1.default.LOG_ERROR, 'RealtimeChannel._attach()', 'Channel attach failed: ' + err.toString());\n }\n };\n }\n var 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 || callback === void 0 ? void 0 : callback(null, stateChange);\n break;\n case 'detached':\n case 'suspended':\n case 'failed':\n callback === null || callback === void 0 ? void 0 : callback(stateChange.reason ||\n connectionManager.getError() ||\n new errorinfo_1.default('Unable to attach; reason unknown; state = ' + this.event, 90000, 500));\n break;\n case 'detaching':\n callback === null || callback === void 0 ? void 0 : callback(new errorinfo_1.default('Attach request superseded by a subsequent detach request', 90000, 409));\n break;\n }\n });\n };\n RealtimeChannel.prototype.attachImpl = function () {\n logger_1.default.logAction(logger_1.default.LOG_MICRO, 'RealtimeChannel.attachImpl()', 'sending ATTACH message');\n var attachMsg = protocolmessage_1.default.fromValues({\n action: actions.ATTACH,\n channel: this.name,\n params: this.channelOptions.params,\n // RTL4c1: Includes the channel serial to resume from a previous message\n // or attachment.\n channelSerial: this.properties.channelSerial,\n });\n if (this._requestedFlags) {\n attachMsg.encodeModesToFlags(this._requestedFlags);\n }\n else if (this.channelOptions.modes) {\n attachMsg.encodeModesToFlags(Utils.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, noop);\n };\n RealtimeChannel.prototype.detach = function (callback) {\n if (!callback) {\n if (this.realtime.options.promises) {\n return Utils.promisify(this, 'detach', arguments);\n }\n callback = noop;\n }\n var connectionManager = this.connectionManager;\n if (!connectionManager.activeState()) {\n callback(connectionManager.getError());\n return;\n }\n switch (this.state) {\n case 'suspended':\n this.notifyState('detached');\n callback();\n break;\n case 'detached':\n callback();\n break;\n case 'failed':\n callback(new errorinfo_1.default('Unable to detach; channel state = failed', 90001, 400));\n break;\n default:\n this.requestState('detaching');\n // eslint-disable-next-line no-fallthrough\n case 'detaching':\n this.once(function (stateChange) {\n switch (this.event) {\n case 'detached':\n callback();\n break;\n case 'attached':\n case 'suspended':\n case 'failed':\n callback(stateChange.reason ||\n connectionManager.getError() ||\n new errorinfo_1.default('Unable to detach; reason unknown; state = ' + this.event, 90000, 500));\n break;\n case 'attaching':\n callback(new errorinfo_1.default('Detach request superseded by a subsequent attach request', 90000, 409));\n break;\n }\n });\n }\n };\n RealtimeChannel.prototype.detachImpl = function (callback) {\n logger_1.default.logAction(logger_1.default.LOG_MICRO, 'RealtimeChannel.detach()', 'sending DETACH message');\n var msg = protocolmessage_1.default.fromValues({ action: actions.DETACH, channel: this.name });\n this.sendMessage(msg, callback || noop);\n };\n RealtimeChannel.prototype.subscribe = function () {\n var args = []; /* [event], listener, [callback] */\n for (var _i = 0 /* [event], listener, [callback] */; _i < arguments.length /* [event], listener, [callback] */; _i++ /* [event], listener, [callback] */) {\n args[_i] = arguments[_i]; /* [event], listener, [callback] */\n }\n var _a = RealtimeChannel.processListenerArgs(args), event = _a[0], listener = _a[1], callback = _a[2];\n if (!callback && this.realtime.options.promises) {\n return Utils.promisify(this, 'subscribe', [event, listener]);\n }\n if (this.state === 'failed') {\n callback === null || callback === void 0 ? void 0 : callback(errorinfo_1.default.fromValues(this.invalidStateError()));\n return;\n }\n // Filtered\n if (event && typeof event === 'object' && !Array.isArray(event)) {\n this._subscribeFilter(event, listener);\n }\n else {\n this.subscriptions.on(event, listener);\n }\n return this.attach(callback || noop);\n };\n RealtimeChannel.prototype._subscribeFilter = function (filter, listener) {\n var filteredListener = function (m) {\n var _a, _b, _c, _d, _e, _f;\n var mapping = {\n name: m.name,\n refTimeserial: (_b = (_a = m.extras) === null || _a === void 0 ? void 0 : _a.ref) === null || _b === void 0 ? void 0 : _b.timeserial,\n refType: (_d = (_c = m.extras) === null || _c === void 0 ? void 0 : _c.ref) === null || _d === void 0 ? void 0 : _d.type,\n isRef: !!((_f = (_e = m.extras) === null || _e === void 0 ? void 0 : _e.ref) === null || _f === void 0 ? void 0 : _f.timeserial),\n clientId: m.clientId,\n };\n // Check if any values are defined in the filter and if they match the value in the message object\n if (Object.entries(filter).find(function (_a) {\n var key = _a[0], value = _a[1];\n return value !== undefined ? mapping[key] !== value : false;\n })) {\n return;\n }\n listener(m);\n };\n this._addFilteredSubscription(filter, listener, filteredListener);\n this.subscriptions.on(filteredListener);\n };\n // Adds a new filtered subscription\n RealtimeChannel.prototype._addFilteredSubscription = function (filter, realListener, filteredListener) {\n var _a;\n if (!this.filteredSubscriptions) {\n this.filteredSubscriptions = new Map();\n }\n if (this.filteredSubscriptions.has(realListener)) {\n var realListenerMap = this.filteredSubscriptions.get(realListener);\n // Add the filtered listener to the map, or append to the array if this filter has already been used\n realListenerMap.set(filter, ((_a = realListenerMap === null || realListenerMap === void 0 ? void 0 : realListenerMap.get(filter)) === null || _a === void 0 ? void 0 : _a.concat(filteredListener)) || [filteredListener]);\n }\n else {\n this.filteredSubscriptions.set(realListener, new Map([[filter, [filteredListener]]]));\n }\n };\n RealtimeChannel.prototype._getAndDeleteFilteredSubscriptions = function (filter, realListener) {\n var _this = this;\n // No filtered subscriptions map means there has been no filtered subscriptions yet, so return nothing\n if (!this.filteredSubscriptions) {\n return [];\n }\n // Only a filter is passed in with no specific listener\n if (!realListener && filter) {\n // Return each listener which is attached to the specified filter object\n return Array.from(this.filteredSubscriptions.entries())\n .map(function (_a) {\n var _b;\n var key = _a[0], filterMaps = _a[1];\n // Get (then delete) the maps matching this filter\n var listenerMaps = filterMaps.get(filter);\n filterMaps.delete(filter);\n // Clear the parent if nothing is left\n if (filterMaps.size === 0) {\n (_b = _this.filteredSubscriptions) === null || _b === void 0 ? void 0 : _b.delete(key);\n }\n return listenerMaps;\n })\n .reduce(function (prev, cur) {\n var _a;\n return (cur ? (_a = prev).concat.apply(_a, cur) : prev);\n }, []);\n }\n // No subscriptions for this listener\n if (!realListener || !this.filteredSubscriptions.has(realListener)) {\n return [];\n }\n var realListenerMap = this.filteredSubscriptions.get(realListener);\n // If no filter is specified return all listeners using that function\n if (!filter) {\n // array.flat is not available unless we support es2019 or higher\n var listeners_1 = Array.from(realListenerMap.values()).reduce(function (prev, cur) { return prev.concat.apply(prev, cur); }, []);\n // remove the listener from the map\n this.filteredSubscriptions.delete(realListener);\n return listeners_1;\n }\n var listeners = realListenerMap.get(filter);\n realListenerMap.delete(filter);\n return listeners || [];\n };\n RealtimeChannel.prototype.unsubscribe = function () {\n var _this = this;\n var _a;\n var args = []; /* [event], listener */\n for (var _i = 0 /* [event], listener */; _i < arguments.length /* [event], listener */; _i++ /* [event], listener */) {\n args[_i] = arguments[_i]; /* [event], listener */\n }\n var _b = RealtimeChannel.processListenerArgs(args), event = _b[0], listener = _b[1];\n // If we either have a filtered listener, a filter or both we need to do additional processing to find the original function(s)\n if ((typeof event === 'object' && !listener) || ((_a = this.filteredSubscriptions) === null || _a === void 0 ? void 0 : _a.has(listener))) {\n this._getAndDeleteFilteredSubscriptions(event, listener).forEach(function (l) { return _this.subscriptions.off(l); });\n return;\n }\n this.subscriptions.off(event, listener);\n };\n RealtimeChannel.prototype.sync = function () {\n /* check preconditions */\n switch (this.state) {\n case 'initialized':\n case 'detaching':\n case 'detached':\n throw new errorinfo_1.PartialErrorInfo('Unable to sync to channel; not attached', 40000);\n default:\n }\n var connectionManager = this.connectionManager;\n if (!connectionManager.activeState()) {\n throw connectionManager.getError();\n }\n /* send sync request */\n var syncMessage = protocolmessage_1.default.fromValues({ action: actions.SYNC, channel: this.name });\n if (this.syncChannelSerial) {\n syncMessage.channelSerial = this.syncChannelSerial;\n }\n connectionManager.send(syncMessage);\n };\n RealtimeChannel.prototype.sendMessage = function (msg, callback) {\n this.connectionManager.send(msg, this.realtime.options.queueMessages, callback);\n };\n RealtimeChannel.prototype.sendPresence = function (presence, callback) {\n var msg = protocolmessage_1.default.fromValues({\n action: actions.PRESENCE,\n channel: this.name,\n presence: Utils.isArray(presence)\n ? presencemessage_1.default.fromValuesArray(presence)\n : [presencemessage_1.default.fromValues(presence)],\n });\n this.sendMessage(msg, callback);\n };\n RealtimeChannel.prototype.onMessage = function (message) {\n if (message.action === actions.ATTACHED ||\n message.action === actions.MESSAGE ||\n message.action === actions.PRESENCE) {\n // RTL15b\n this.setChannelSerial(message.channelSerial);\n }\n var syncChannelSerial, isSync = false;\n switch (message.action) {\n case actions.ATTACHED: {\n this.properties.attachSerial = message.channelSerial;\n this._mode = message.getMode();\n this.params = message.params || {};\n var modesFromFlags = message.decodeModesFromFlags();\n this.modes = (modesFromFlags && Utils.allToLowerCase(modesFromFlags)) || undefined;\n var resumed = message.hasFlag('RESUMED');\n var hasPresence = message.hasFlag('HAS_PRESENCE');\n var hasBacklog = message.hasFlag('HAS_BACKLOG');\n if (this.state === 'attached') {\n if (!resumed) {\n /* On a loss of continuity, the presence set needs to be re-synced */\n this.presence.onAttached(hasPresence);\n }\n var change = new channelstatechange_1.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 }\n else if (this.state === 'detaching') {\n /* RTL5i: re-send DETACH and remain in the 'detaching' state */\n this.checkPendingState();\n }\n else {\n this.notifyState('attached', message.error, resumed, hasPresence, hasBacklog);\n }\n break;\n }\n case actions.DETACHED: {\n var detachErr = message.error\n ? errorinfo_1.default.fromValues(message.error)\n : new errorinfo_1.default('Channel detached', 90001, 404);\n if (this.state === 'detaching') {\n this.notifyState('detached', detachErr);\n }\n else if (this.state === 'attaching') {\n /* Only retry immediately if we were previously attached. If we were\n * attaching, go into suspended, fail messages, and wait a few seconds\n * before retrying */\n this.notifyState('suspended', detachErr);\n }\n else {\n this.requestState('attaching', detachErr);\n }\n break;\n }\n case actions.SYNC:\n /* syncs can have channelSerials, but might not if the sync is one page long */\n isSync = true;\n syncChannelSerial = this.syncChannelSerial = message.channelSerial;\n /* syncs can happen on channels with no presence data as part of connection\n * resuming, in which case protocol message has no presence property */\n if (!message.presence)\n break;\n // eslint-disable-next-line no-fallthrough\n case actions.PRESENCE: {\n var presence = message.presence;\n var id = message.id, connectionId = message.connectionId, timestamp = message.timestamp;\n var options = this.channelOptions;\n var presenceMsg = void 0;\n for (var i = 0; i < presence.length; i++) {\n try {\n presenceMsg = presence[i];\n presencemessage_1.default.decode(presenceMsg, options);\n if (!presenceMsg.connectionId)\n presenceMsg.connectionId = connectionId;\n if (!presenceMsg.timestamp)\n presenceMsg.timestamp = timestamp;\n if (!presenceMsg.id)\n presenceMsg.id = id + ':' + i;\n }\n catch (e) {\n logger_1.default.logAction(logger_1.default.LOG_ERROR, 'RealtimeChannel.onMessage()', e.toString());\n }\n }\n this.presence.setPresence(presence, isSync, syncChannelSerial);\n break;\n }\n case actions.MESSAGE: {\n //RTL17\n if (this.state !== 'attached') {\n logger_1.default.logAction(logger_1.default.LOG_MAJOR, 'RealtimeChannel.onMessage()', 'Message \"' +\n message.id +\n '\" skipped as this channel \"' +\n this.name +\n '\" state is not \"attached\" (state is \"' +\n this.state +\n '\").');\n return;\n }\n var messages = message.messages, firstMessage = messages[0], lastMessage = messages[messages.length - 1], id = message.id, connectionId = message.connectionId, timestamp = message.timestamp;\n if (firstMessage.extras &&\n firstMessage.extras.delta &&\n firstMessage.extras.delta.from !== this._lastPayload.messageId) {\n var msg = 'Delta message decode failure - previous message not available for message \"' +\n message.id +\n '\" on this channel \"' +\n this.name +\n '\".';\n logger_1.default.logAction(logger_1.default.LOG_ERROR, 'RealtimeChannel.onMessage()', msg);\n this._startDecodeFailureRecovery(new errorinfo_1.default(msg, 40018, 400));\n break;\n }\n for (var i = 0; i < messages.length; i++) {\n var msg = messages[i];\n try {\n message_1.default.decode(msg, this._decodingContext);\n }\n catch (e) {\n /* decrypt failed .. the most likely cause is that we have the wrong key */\n logger_1.default.logAction(logger_1.default.LOG_ERROR, 'RealtimeChannel.onMessage()', e.toString());\n switch (e.code) {\n case 40018:\n /* decode failure */\n this._startDecodeFailureRecovery(e);\n return;\n case 40019:\n /* No vcdiff plugin passed in - no point recovering, give up */\n // eslint-disable-next-line no-fallthrough\n case 40021:\n /* Browser does not support deltas, similarly no point recovering */\n this.notifyState('failed', e);\n return;\n }\n }\n if (!msg.connectionId)\n msg.connectionId = connectionId;\n if (!msg.timestamp)\n msg.timestamp = timestamp;\n if (!msg.id)\n msg.id = id + ':' + i;\n }\n this._lastPayload.messageId = lastMessage.id;\n this._lastPayload.protocolMessageChannelSerial = message.channelSerial;\n this.onEvent(messages);\n break;\n }\n case actions.ERROR: {\n /* there was a channel-specific error */\n var err = message.error;\n if (err && err.code == 80016) {\n /* attach/detach operation attempted on superseded transport handle */\n this.checkPendingState();\n }\n else {\n this.notifyState('failed', errorinfo_1.default.fromValues(err));\n }\n break;\n }\n default:\n logger_1.default.logAction(logger_1.default.LOG_ERROR, 'RealtimeChannel.onMessage()', 'Fatal protocol error: unrecognised action (' + message.action + ')');\n this.connectionManager.abort(connectionerrors_1.default.unknownChannelErr());\n }\n };\n RealtimeChannel.prototype._startDecodeFailureRecovery = function (reason) {\n var _this = this;\n if (!this._lastPayload.decodeFailureRecoveryInProgress) {\n logger_1.default.logAction(logger_1.default.LOG_MAJOR, 'RealtimeChannel.onMessage()', 'Starting decode failure recovery process.');\n this._lastPayload.decodeFailureRecoveryInProgress = true;\n this._attach(true, reason, function () {\n _this._lastPayload.decodeFailureRecoveryInProgress = false;\n });\n }\n };\n RealtimeChannel.prototype.onAttached = function () {\n logger_1.default.logAction(logger_1.default.LOG_MINOR, 'RealtimeChannel.onAttached', 'activating channel; name = ' + this.name);\n };\n RealtimeChannel.prototype.notifyState = function (state, reason, resumed, hasPresence, hasBacklog) {\n logger_1.default.logAction(logger_1.default.LOG_MICRO, 'RealtimeChannel.notifyState', 'name = ' + this.name + ', current state = ' + this.state + ', notifying state ' + state);\n this.clearStateTimer();\n // RTP5a1\n if (Utils.arrIn(['detached', 'suspended', 'failed'], state)) {\n this.properties.channelSerial = null;\n }\n if (state === this.state) {\n return;\n }\n this.presence.actOnChannelState(state, hasPresence, reason);\n if (state === 'suspended' && this.connectionManager.state.sendEvents) {\n this.startRetryTimer();\n }\n else {\n this.cancelRetryTimer();\n }\n if (reason) {\n this.errorReason = reason;\n }\n var change = new channelstatechange_1.default(this.state, state, resumed, hasBacklog, reason);\n var logLevel = state === 'failed' ? logger_1.default.LOG_ERROR : logger_1.default.LOG_MAJOR;\n logger_1.default.logAction(logLevel, 'Channel state for channel \"' + this.name + '\"', state + (reason ? '; reason: ' + reason : ''));\n if (state !== 'attaching' && state !== 'suspended') {\n this.retryCount = 0;\n }\n /* Note: we don't set inProgress for pending states until the request is actually in progress */\n if (state === 'attached') {\n this.onAttached();\n }\n if (state === 'attached') {\n this._attachResume = true;\n }\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 RealtimeChannel.prototype.requestState = function (state, reason) {\n logger_1.default.logAction(logger_1.default.LOG_MINOR, 'RealtimeChannel.requestState', 'name = ' + this.name + ', state = ' + state);\n this.notifyState(state, reason);\n /* send the event and await response */\n this.checkPendingState();\n };\n RealtimeChannel.prototype.checkPendingState = function () {\n /* if can't send events, do nothing */\n var cmState = this.connectionManager.state;\n /* Allow attach messages to queue up when synchronizing, since this will be\n * the state we'll be in when upgrade transport.active triggers a checkpendingstate */\n if (!(cmState.sendEvents || cmState.forceQueueEvents)) {\n logger_1.default.logAction(logger_1.default.LOG_MINOR, 'RealtimeChannel.checkPendingState', 'sendEvents is false; state is ' + this.connectionManager.state.state);\n return;\n }\n logger_1.default.logAction(logger_1.default.LOG_MINOR, 'RealtimeChannel.checkPendingState', 'name = ' + this.name + ', state = ' + this.state);\n /* Only start the state timer running when actually sending the event */\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 /* resume any sync operation that was in progress */\n this.sync();\n break;\n default:\n break;\n }\n };\n RealtimeChannel.prototype.timeoutPendingState = function () {\n switch (this.state) {\n case 'attaching': {\n var err = new errorinfo_1.default('Channel attach timed out', 90007, 408);\n this.notifyState('suspended', err);\n break;\n }\n case 'detaching': {\n var err = new errorinfo_1.default('Channel detach timed out', 90007, 408);\n this.notifyState('attached', err);\n break;\n }\n default:\n this.checkPendingState();\n break;\n }\n };\n RealtimeChannel.prototype.startStateTimerIfNotRunning = function () {\n var _this = this;\n if (!this.stateTimer) {\n this.stateTimer = setTimeout(function () {\n logger_1.default.logAction(logger_1.default.LOG_MINOR, 'RealtimeChannel.startStateTimerIfNotRunning', 'timer expired');\n _this.stateTimer = null;\n _this.timeoutPendingState();\n }, this.realtime.options.timeouts.realtimeRequestTimeout);\n }\n };\n RealtimeChannel.prototype.clearStateTimer = function () {\n var stateTimer = this.stateTimer;\n if (stateTimer) {\n clearTimeout(stateTimer);\n this.stateTimer = null;\n }\n };\n RealtimeChannel.prototype.startRetryTimer = function () {\n var _this = this;\n if (this.retryTimer)\n return;\n this.retryCount++;\n var retryDelay = Utils.getRetryTime(this.realtime.options.timeouts.channelRetryTimeout, this.retryCount);\n this.retryTimer = setTimeout(function () {\n /* If connection is not connected, just leave in suspended, a reattach\n * will be triggered once it connects again */\n if (_this.state === 'suspended' && _this.connectionManager.state.sendEvents) {\n _this.retryTimer = null;\n logger_1.default.logAction(logger_1.default.LOG_MINOR, 'RealtimeChannel retry timer expired', 'attempting a new attach');\n _this.requestState('attaching');\n }\n }, retryDelay);\n };\n RealtimeChannel.prototype.cancelRetryTimer = function () {\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 RealtimeChannel.prototype.getReleaseErr = function () {\n var s = this.state;\n if (s === 'initialized' || s === 'detached' || s === 'failed') {\n return null;\n }\n return new errorinfo_1.default('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 ' +\n s, 90001, 400);\n };\n RealtimeChannel.prototype.setChannelSerial = function (channelSerial) {\n logger_1.default.logAction(logger_1.default.LOG_MICRO, 'RealtimeChannel.setChannelSerial()', 'Updating channel serial; serial = ' + channelSerial + '; previous = ' + this.properties.channelSerial);\n // RTP17h: Only update the channel serial if its present (it won't always\n // be set).\n if (channelSerial) {\n this.properties.channelSerial = channelSerial;\n }\n };\n return RealtimeChannel;\n}(channel_1.default));\nexports.default = RealtimeChannel;\n\n\n/***/ }),\n/* 39 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar ChannelStateChange = /** @class */ (function () {\n function ChannelStateChange(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 return ChannelStateChange;\n}());\nexports.default = ChannelStateChange;\n\n\n/***/ }),\n/* 40 */\n/***/ (function(module, exports, __webpack_require__) {\n\n;(function (root, factory) {\n\tif (true) {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(__webpack_require__(6));\n\t}\n\telse {}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var Hasher = C_lib.Hasher;\n\t var C_algo = C.algo;\n\n\t // Reusable object\n\t var W = [];\n\n\t /**\n\t * SHA-1 hash algorithm.\n\t */\n\t var SHA1 = C_algo.SHA1 = Hasher.extend({\n\t _doReset: function () {\n\t this._hash = new WordArray.init([\n\t 0x67452301, 0xefcdab89,\n\t 0x98badcfe, 0x10325476,\n\t 0xc3d2e1f0\n\t ]);\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcut\n\t var H = this._hash.words;\n\n\t // Working variables\n\t var a = H[0];\n\t var b = H[1];\n\t var c = H[2];\n\t var d = H[3];\n\t var e = H[4];\n\n\t // Computation\n\t for (var i = 0; i < 80; i++) {\n\t if (i < 16) {\n\t W[i] = M[offset + i] | 0;\n\t } else {\n\t var n = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16];\n\t W[i] = (n << 1) | (n >>> 31);\n\t }\n\n\t var t = ((a << 5) | (a >>> 27)) + e + W[i];\n\t if (i < 20) {\n\t t += ((b & c) | (~b & d)) + 0x5a827999;\n\t } else if (i < 40) {\n\t t += (b ^ c ^ d) + 0x6ed9eba1;\n\t } else if (i < 60) {\n\t t += ((b & c) | (b & d) | (c & d)) - 0x70e44324;\n\t } else /* if (i < 80) */ {\n\t t += (b ^ c ^ d) - 0x359d3e2a;\n\t }\n\n\t e = d;\n\t d = c;\n\t c = (b << 30) | (b >>> 2);\n\t b = a;\n\t a = t;\n\t }\n\n\t // Intermediate hash value\n\t H[0] = (H[0] + a) | 0;\n\t H[1] = (H[1] + b) | 0;\n\t H[2] = (H[2] + c) | 0;\n\t H[3] = (H[3] + d) | 0;\n\t H[4] = (H[4] + e) | 0;\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal;\n\t data.sigBytes = dataWords.length * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Return final computed hash\n\t return this._hash;\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\t clone._hash = this._hash.clone();\n\n\t return clone;\n\t }\n\t });\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.SHA1('message');\n\t * var hash = CryptoJS.SHA1(wordArray);\n\t */\n\t C.SHA1 = Hasher._createHelper(SHA1);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacSHA1(message, key);\n\t */\n\t C.HmacSHA1 = Hasher._createHmacHelper(SHA1);\n\t}());\n\n\n\treturn CryptoJS.SHA1;\n\n}));\n\n/***/ }),\n/* 41 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nfunction inspect(buffer) {\n if (buffer === undefined)\n return 'undefined';\n var view;\n var type;\n if (buffer instanceof ArrayBuffer) {\n type = 'ArrayBuffer';\n view = new DataView(buffer);\n }\n else if (buffer instanceof DataView) {\n type = 'DataView';\n view = buffer;\n }\n if (!view)\n return JSON.stringify(buffer);\n var bytes = [];\n for (var i = 0; i < buffer.byteLength; i++) {\n if (i > 20) {\n bytes.push('...');\n break;\n }\n var 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}\n// Encode string as utf8 into dataview at offset\nfunction utf8Write(view, offset, string) {\n for (var i = 0, l = string.length; i < l; i++) {\n var codePoint = string.charCodeAt(i);\n // One byte of UTF-8\n if (codePoint < 0x80) {\n view.setUint8(offset++, ((codePoint >>> 0) & 0x7f) | 0x00);\n continue;\n }\n // Two bytes of UTF-8\n if (codePoint < 0x800) {\n view.setUint8(offset++, ((codePoint >>> 6) & 0x1f) | 0xc0);\n view.setUint8(offset++, ((codePoint >>> 0) & 0x3f) | 0x80);\n continue;\n }\n // Three bytes of UTF-8.\n if (codePoint < 0x10000) {\n view.setUint8(offset++, ((codePoint >>> 12) & 0x0f) | 0xe0);\n view.setUint8(offset++, ((codePoint >>> 6) & 0x3f) | 0x80);\n view.setUint8(offset++, ((codePoint >>> 0) & 0x3f) | 0x80);\n continue;\n }\n // Four bytes of UTF-8\n if (codePoint < 0x110000) {\n view.setUint8(offset++, ((codePoint >>> 18) & 0x07) | 0xf0);\n view.setUint8(offset++, ((codePoint >>> 12) & 0x3f) | 0x80);\n view.setUint8(offset++, ((codePoint >>> 6) & 0x3f) | 0x80);\n view.setUint8(offset++, ((codePoint >>> 0) & 0x3f) | 0x80);\n continue;\n }\n throw new Error('bad codepoint ' + codePoint);\n }\n}\nfunction utf8Read(view, offset, length) {\n var string = '';\n for (var i = offset, end = offset + length; i < end; i++) {\n var byte_ = view.getUint8(i);\n // One byte character\n if ((byte_ & 0x80) === 0x00) {\n string += String.fromCharCode(byte_);\n continue;\n }\n // Two byte character\n if ((byte_ & 0xe0) === 0xc0) {\n string += String.fromCharCode(((byte_ & 0x0f) << 6) | (view.getUint8(++i) & 0x3f));\n continue;\n }\n // Three byte character\n if ((byte_ & 0xf0) === 0xe0) {\n string += String.fromCharCode(((byte_ & 0x0f) << 12) | ((view.getUint8(++i) & 0x3f) << 6) | ((view.getUint8(++i) & 0x3f) << 0));\n continue;\n }\n // Four byte character\n if ((byte_ & 0xf8) === 0xf0) {\n string += String.fromCharCode(((byte_ & 0x07) << 18) |\n ((view.getUint8(++i) & 0x3f) << 12) |\n ((view.getUint8(++i) & 0x3f) << 6) |\n ((view.getUint8(++i) & 0x3f) << 0));\n continue;\n }\n throw new Error('Invalid byte ' + byte_.toString(16));\n }\n return string;\n}\nfunction utf8ByteCount(string) {\n var count = 0;\n for (var i = 0, l = string.length; i < l; i++) {\n var codePoint = string.charCodeAt(i);\n if (codePoint < 0x80) {\n count += 1;\n continue;\n }\n if (codePoint < 0x800) {\n count += 2;\n continue;\n }\n if (codePoint < 0x10000) {\n count += 3;\n continue;\n }\n if (codePoint < 0x110000) {\n count += 4;\n continue;\n }\n throw new Error('bad codepoint ' + codePoint);\n }\n return count;\n}\nfunction encode(value, sparse) {\n var size = sizeof(value, sparse);\n if (size === 0)\n return undefined;\n var buffer = new ArrayBuffer(size);\n var view = new DataView(buffer);\n _encode(value, view, 0, sparse);\n return buffer;\n}\nvar SH_L_32 = (1 << 16) * (1 << 16), 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 < 0x8000000000000000) {\n view.setInt32(offset, Math.floor(val * SH_R_32));\n view.setInt32(offset + 4, val & -1);\n }\n else {\n view.setUint32(offset, 0x7fffffff);\n view.setUint32(offset + 4, 0x7fffffff);\n }\n}\nfunction setUint64(view, offset, val) {\n if (val < 0x10000000000000000) {\n view.setUint32(offset, Math.floor(val * SH_R_32));\n view.setInt32(offset + 4, val & -1);\n }\n else {\n view.setUint32(offset, 0xffffffff);\n view.setUint32(offset + 4, 0xffffffff);\n }\n}\n// https://gist.github.com/frsyuki/5432559 - v5 spec\n//\n// I've used one extension point from `fixext 1` to store `undefined`. On the wire this\n// should translate to exactly 0xd40000\n//\n// +--------+--------+--------+\n// | 0xd4 | 0x00 | 0x00 |\n// +--------+--------+--------+\n// ^ fixext | ^ value part unused (fixed to be 0)\n// ^ indicates undefined value\n//\nvar Decoder = /** @class */ (function () {\n function Decoder(view, offset) {\n var _this = this;\n this.map = function (length) {\n var value = {};\n for (var i = 0; i < length; i++) {\n var key = _this.parse();\n value[key] = _this.parse();\n }\n return value;\n };\n this.bin = function (length) {\n var 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 = function (length) {\n var value = utf8Read(_this.view, _this.offset, length);\n _this.offset += length;\n return value;\n };\n this.array = function (length) {\n var value = new Array(length);\n for (var i = 0; i < length; i++) {\n value[i] = _this.parse();\n }\n return value;\n };\n this.ext = function (length) {\n _this.offset += length;\n return {\n type: _this.view.getInt8(_this.offset),\n data: _this.buf(length),\n };\n };\n this.parse = function () {\n var type = _this.view.getUint8(_this.offset);\n var value, length;\n // Positive FixInt - 0xxxxxxx\n if ((type & 0x80) === 0x00) {\n _this.offset++;\n return type;\n }\n // FixMap - 1000xxxx\n if ((type & 0xf0) === 0x80) {\n length = type & 0x0f;\n _this.offset++;\n return _this.map(length);\n }\n // FixArray - 1001xxxx\n if ((type & 0xf0) === 0x90) {\n length = type & 0x0f;\n _this.offset++;\n return _this.array(length);\n }\n // FixStr - 101xxxxx\n if ((type & 0xe0) === 0xa0) {\n length = type & 0x1f;\n _this.offset++;\n return _this.str(length);\n }\n // Negative FixInt - 111xxxxx\n if ((type & 0xe0) === 0xe0) {\n value = _this.view.getInt8(_this.offset);\n _this.offset++;\n return value;\n }\n switch (type) {\n // nil\n case 0xc0:\n _this.offset++;\n return null;\n // 0xc1 never used - use for undefined (NON-STANDARD)\n case 0xc1:\n _this.offset++;\n return undefined;\n // false\n case 0xc2:\n _this.offset++;\n return false;\n // true\n case 0xc3:\n _this.offset++;\n return true;\n // bin 8\n case 0xc4:\n length = _this.view.getUint8(_this.offset + 1);\n _this.offset += 2;\n return _this.bin(length);\n // bin 16\n case 0xc5:\n length = _this.view.getUint16(_this.offset + 1);\n _this.offset += 3;\n return _this.bin(length);\n // bin 32\n case 0xc6:\n length = _this.view.getUint32(_this.offset + 1);\n _this.offset += 5;\n return _this.bin(length);\n // ext 8\n case 0xc7:\n length = _this.view.getUint8(_this.offset + 1);\n _this.offset += 2;\n return _this.ext(length);\n // ext 16\n case 0xc8:\n length = _this.view.getUint16(_this.offset + 1);\n _this.offset += 3;\n return _this.ext(length);\n // ext 32\n case 0xc9:\n length = _this.view.getUint32(_this.offset + 1);\n _this.offset += 5;\n return _this.ext(length);\n // float 32\n case 0xca:\n value = _this.view.getFloat32(_this.offset + 1);\n _this.offset += 5;\n return value;\n // float 64\n case 0xcb:\n value = _this.view.getFloat64(_this.offset + 1);\n _this.offset += 9;\n return value;\n // uint8\n case 0xcc:\n value = _this.view.getUint8(_this.offset + 1);\n _this.offset += 2;\n return value;\n // uint 16\n case 0xcd:\n value = _this.view.getUint16(_this.offset + 1);\n _this.offset += 3;\n return value;\n // uint 32\n case 0xce:\n value = _this.view.getUint32(_this.offset + 1);\n _this.offset += 5;\n return value;\n // uint 64\n case 0xcf:\n value = getUint64(_this.view, _this.offset + 1);\n _this.offset += 9;\n return value;\n // int 8\n case 0xd0:\n value = _this.view.getInt8(_this.offset + 1);\n _this.offset += 2;\n return value;\n // int 16\n case 0xd1:\n value = _this.view.getInt16(_this.offset + 1);\n _this.offset += 3;\n return value;\n // int 32\n case 0xd2:\n value = _this.view.getInt32(_this.offset + 1);\n _this.offset += 5;\n return value;\n // int 64\n case 0xd3:\n value = getInt64(_this.view, _this.offset + 1);\n _this.offset += 9;\n return value;\n // fixext 1\n case 0xd4:\n length = 1;\n _this.offset++;\n return _this.ext(length);\n // fixext 2\n case 0xd5:\n length = 2;\n _this.offset++;\n return _this.ext(length);\n // fixext 4\n case 0xd6:\n length = 4;\n _this.offset++;\n return _this.ext(length);\n // fixext 8\n case 0xd7:\n length = 8;\n _this.offset++;\n return _this.ext(length);\n // fixext 16\n case 0xd8:\n length = 16;\n _this.offset++;\n return _this.ext(length);\n // str8\n case 0xd9:\n length = _this.view.getUint8(_this.offset + 1);\n _this.offset += 2;\n return _this.str(length);\n // str 16\n case 0xda:\n length = _this.view.getUint16(_this.offset + 1);\n _this.offset += 3;\n return _this.str(length);\n // str 32\n case 0xdb:\n length = _this.view.getUint32(_this.offset + 1);\n _this.offset += 5;\n return _this.str(length);\n // array 16\n case 0xdc:\n length = _this.view.getUint16(_this.offset + 1);\n _this.offset += 3;\n return _this.array(length);\n // array 32\n case 0xdd:\n length = _this.view.getUint32(_this.offset + 1);\n _this.offset += 5;\n return _this.array(length);\n // map 16\n case 0xde:\n length = _this.view.getUint16(_this.offset + 1);\n _this.offset += 3;\n return _this.map(length);\n // map 32\n case 0xdf:\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 return Decoder;\n}());\nfunction decode(buffer) {\n var view = new DataView(buffer);\n var decoder = new Decoder(view);\n var 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 var val = value[e], type = typeof val;\n return (!sparse || (val !== undefined && val !== null)) && ('function' !== type || !!val.toJSON);\n });\n}\nfunction _encode(value, view, offset, sparse) {\n var type = typeof value;\n // Strings Bytes\n // There are four string types: fixstr/str8/str16/str32\n if (typeof value === 'string') {\n var length_1 = utf8ByteCount(value);\n // fixstr\n if (length_1 < 0x20) {\n view.setUint8(offset, length_1 | 0xa0);\n utf8Write(view, offset + 1, value);\n return 1 + length_1;\n }\n // str8\n if (length_1 < 0x100) {\n view.setUint8(offset, 0xd9);\n view.setUint8(offset + 1, length_1);\n utf8Write(view, offset + 2, value);\n return 2 + length_1;\n }\n // str16\n if (length_1 < 0x10000) {\n view.setUint8(offset, 0xda);\n view.setUint16(offset + 1, length_1);\n utf8Write(view, offset + 3, value);\n return 3 + length_1;\n }\n // str32\n if (length_1 < 0x100000000) {\n view.setUint8(offset, 0xdb);\n view.setUint32(offset + 1, length_1);\n utf8Write(view, offset + 5, value);\n return 5 + length_1;\n }\n }\n if (ArrayBuffer.isView && ArrayBuffer.isView(value)) {\n // extract the arraybuffer and fallthrough\n value = value.buffer;\n }\n // There are three bin types: bin8/bin16/bin32\n if (value instanceof ArrayBuffer) {\n var length_2 = value.byteLength;\n // bin8\n if (length_2 < 0x100) {\n view.setUint8(offset, 0xc4);\n view.setUint8(offset + 1, length_2);\n new Uint8Array(view.buffer).set(new Uint8Array(value), offset + 2);\n return 2 + length_2;\n }\n // bin16\n if (length_2 < 0x10000) {\n view.setUint8(offset, 0xc5);\n view.setUint16(offset + 1, length_2);\n new Uint8Array(view.buffer).set(new Uint8Array(value), offset + 3);\n return 3 + length_2;\n }\n // bin 32\n if (length_2 < 0x100000000) {\n view.setUint8(offset, 0xc6);\n view.setUint32(offset + 1, length_2);\n new Uint8Array(view.buffer).set(new Uint8Array(value), offset + 5);\n return 5 + length_2;\n }\n }\n if (typeof value === 'number') {\n // Floating Point\n // NOTE: We're always using float64\n if (Math.floor(value) !== value) {\n view.setUint8(offset, 0xcb);\n view.setFloat64(offset + 1, value);\n return 9;\n }\n // Integers\n if (value >= 0) {\n // positive fixnum\n if (value < 0x80) {\n view.setUint8(offset, value);\n return 1;\n }\n // uint 8\n if (value < 0x100) {\n view.setUint8(offset, 0xcc);\n view.setUint8(offset + 1, value);\n return 2;\n }\n // uint 16\n if (value < 0x10000) {\n view.setUint8(offset, 0xcd);\n view.setUint16(offset + 1, value);\n return 3;\n }\n // uint 32\n if (value < 0x100000000) {\n view.setUint8(offset, 0xce);\n view.setUint32(offset + 1, value);\n return 5;\n }\n // uint 64\n if (value < 0x10000000000000000) {\n view.setUint8(offset, 0xcf);\n setUint64(view, offset + 1, value);\n return 9;\n }\n throw new Error('Number too big 0x' + value.toString(16));\n }\n // negative fixnum\n if (value >= -0x20) {\n view.setInt8(offset, value);\n return 1;\n }\n // int 8\n if (value >= -0x80) {\n view.setUint8(offset, 0xd0);\n view.setInt8(offset + 1, value);\n return 2;\n }\n // int 16\n if (value >= -0x8000) {\n view.setUint8(offset, 0xd1);\n view.setInt16(offset + 1, value);\n return 3;\n }\n // int 32\n if (value >= -0x80000000) {\n view.setUint8(offset, 0xd2);\n view.setInt32(offset + 1, value);\n return 5;\n }\n // int 64\n if (value >= -0x8000000000000000) {\n view.setUint8(offset, 0xd3);\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 // undefined - use d4 (NON-STANDARD)\n if (type === 'undefined') {\n if (sparse)\n return 0;\n view.setUint8(offset, 0xd4);\n view.setUint8(offset + 1, 0x00);\n view.setUint8(offset + 2, 0x00);\n return 3;\n }\n // null\n if (value === null) {\n if (sparse)\n return 0;\n view.setUint8(offset, 0xc0);\n return 1;\n }\n // Boolean\n if (type === 'boolean') {\n view.setUint8(offset, value ? 0xc3 : 0xc2);\n return 1;\n }\n if ('function' === typeof value.toJSON)\n return _encode(value.toJSON(), view, offset, sparse);\n // Container Types\n if (type === 'object') {\n var length_3, size = 0;\n var keys = void 0;\n var isArray = Array.isArray(value);\n if (isArray) {\n length_3 = value.length;\n }\n else {\n keys = encodeableKeys(value, sparse);\n length_3 = keys.length;\n }\n if (length_3 < 0x10) {\n view.setUint8(offset, length_3 | (isArray ? 0x90 : 0x80));\n size = 1;\n }\n else if (length_3 < 0x10000) {\n view.setUint8(offset, isArray ? 0xdc : 0xde);\n view.setUint16(offset + 1, length_3);\n size = 3;\n }\n else if (length_3 < 0x100000000) {\n view.setUint8(offset, isArray ? 0xdd : 0xdf);\n view.setUint32(offset + 1, length_3);\n size = 5;\n }\n if (isArray) {\n for (var i = 0; i < length_3; i++) {\n size += _encode(value[i], view, offset + size, sparse);\n }\n }\n else if (keys) {\n for (var i = 0; i < length_3; i++) {\n var 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 var type = typeof value;\n // fixstr or str8 or str16 or str32\n if (type === 'string') {\n var length_4 = utf8ByteCount(value);\n if (length_4 < 0x20) {\n return 1 + length_4;\n }\n if (length_4 < 0x100) {\n return 2 + length_4;\n }\n if (length_4 < 0x10000) {\n return 3 + length_4;\n }\n if (length_4 < 0x100000000) {\n return 5 + length_4;\n }\n }\n if (ArrayBuffer.isView && ArrayBuffer.isView(value)) {\n // extract the arraybuffer and fallthrough\n value = value.buffer;\n }\n // bin8 or bin16 or bin32\n if (value instanceof ArrayBuffer) {\n var length_5 = value.byteLength;\n if (length_5 < 0x100) {\n return 2 + length_5;\n }\n if (length_5 < 0x10000) {\n return 3 + length_5;\n }\n if (length_5 < 0x100000000) {\n return 5 + length_5;\n }\n }\n if (typeof value === 'number') {\n // Floating Point (32 bits)\n // double\n if (Math.floor(value) !== value)\n return 9;\n // Integers\n if (value >= 0) {\n // positive fixint\n if (value < 0x80)\n return 1;\n // uint 8\n if (value < 0x100)\n return 2;\n // uint 16\n if (value < 0x10000)\n return 3;\n // uint 32\n if (value < 0x100000000)\n return 5;\n // uint 64\n if (value < 0x10000000000000000)\n return 9;\n // Too big\n throw new Error('Number too big 0x' + value.toString(16));\n }\n // negative fixint\n if (value >= -0x20)\n return 1;\n // int 8\n if (value >= -0x80)\n return 2;\n // int 16\n if (value >= -0x8000)\n return 3;\n // int 32\n if (value >= -0x80000000)\n return 5;\n // int 64\n if (value >= -0x8000000000000000)\n return 9;\n // Too small\n throw new Error('Number too small -0x' + value.toString(16).substr(1));\n }\n // Boolean\n if (type === 'boolean')\n return 1;\n // undefined, null\n if (value === null)\n return sparse ? 0 : 1;\n if (value === undefined)\n return sparse ? 0 : 3;\n if ('function' === typeof value.toJSON)\n return sizeof(value.toJSON(), sparse);\n // Container Types\n if (type === 'object') {\n var length_6, size = 0;\n if (Array.isArray(value)) {\n length_6 = value.length;\n for (var i = 0; i < length_6; i++) {\n size += sizeof(value[i], sparse);\n }\n }\n else {\n var keys = encodeableKeys(value, sparse);\n length_6 = keys.length;\n for (var i = 0; i < length_6; i++) {\n var key = keys[i];\n size += sizeof(key) + sizeof(value[key], sparse);\n }\n }\n if (length_6 < 0x10) {\n return 1 + size;\n }\n if (length_6 < 0x10000) {\n return 3 + size;\n }\n if (length_6 < 0x100000000) {\n return 5 + size;\n }\n throw new Error('Array or object too long 0x' + length_6.toString(16));\n }\n if (type === 'function')\n return 0;\n throw new Error('Unknown type ' + type);\n}\nexports.default = {\n encode: encode,\n decode: decode,\n inspect: inspect,\n utf8Write: utf8Write,\n utf8Read: utf8Read,\n utf8ByteCount: utf8ByteCount,\n};\n\n\n/***/ }),\n/* 42 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = __webpack_require__(0);\n// Common\nvar rest_1 = tslib_1.__importDefault(__webpack_require__(30));\nvar realtime_1 = tslib_1.__importDefault(__webpack_require__(50));\nvar platform_1 = tslib_1.__importDefault(__webpack_require__(3));\n// Platform Specific\nvar bufferutils_1 = tslib_1.__importDefault(__webpack_require__(55));\n// @ts-ignore\nvar crypto_1 = tslib_1.__importDefault(__webpack_require__(57));\nvar http_1 = tslib_1.__importDefault(__webpack_require__(62));\nvar config_1 = tslib_1.__importDefault(__webpack_require__(64));\n// @ts-ignore\nvar transport_1 = tslib_1.__importDefault(__webpack_require__(68));\nvar logger_1 = tslib_1.__importDefault(__webpack_require__(2));\nvar defaults_1 = __webpack_require__(8);\nvar webstorage_1 = tslib_1.__importDefault(__webpack_require__(65));\nvar defaults_2 = tslib_1.__importDefault(__webpack_require__(66));\nvar msgpack_1 = tslib_1.__importDefault(__webpack_require__(41));\nvar Crypto = (0, crypto_1.default)(config_1.default, bufferutils_1.default);\nplatform_1.default.Crypto = Crypto;\nplatform_1.default.BufferUtils = bufferutils_1.default;\nplatform_1.default.Http = http_1.default;\nplatform_1.default.Config = config_1.default;\nplatform_1.default.Transports = transport_1.default;\nplatform_1.default.WebStorage = webstorage_1.default;\nrest_1.default.Crypto = Crypto;\nrealtime_1.default.Crypto = Crypto;\nlogger_1.default.initLogHandlers();\nplatform_1.default.Defaults = (0, defaults_1.getDefaults)(defaults_2.default);\nif (platform_1.default.Config.agent) {\n // @ts-ignore\n platform_1.default.Defaults.agent += ' ' + platform_1.default.Config.agent;\n}\n/* If using IE8, don't attempt to upgrade from xhr_polling to xhr_streaming -\n * while it can do streaming, the low max http-connections-per-host limit means\n * that the polling transport is crippled during the upgrade process. So just\n * leave it at the base transport */\nif (platform_1.default.Config.noUpgrade) {\n platform_1.default.Defaults.upgradeTransports = [];\n}\nexports.default = {\n Rest: rest_1.default,\n Realtime: realtime_1.default,\n msgpack: msgpack_1.default,\n};\n\n\n/***/ }),\n/* 43 */\n/***/ (function(module) {\n\nmodule.exports = JSON.parse(\"{\\\"name\\\":\\\"ably\\\",\\\"description\\\":\\\"Realtime client library for Ably, the realtime messaging service\\\",\\\"version\\\":\\\"1.2.42\\\",\\\"license\\\":\\\"Apache-2.0\\\",\\\"bugs\\\":{\\\"url\\\":\\\"https://github.com/ably/ably-js/issues\\\",\\\"email\\\":\\\"support@ably.com\\\"},\\\"main\\\":\\\"./build/ably-node.js\\\",\\\"typings\\\":\\\"./ably.d.ts\\\",\\\"react-native\\\":{\\\"./build/ably-node.js\\\":\\\"./build/ably-reactnative.js\\\"},\\\"browser\\\":{\\\"./build/ably-node.js\\\":\\\"./build/ably-commonjs.js\\\"},\\\"files\\\":[\\\"build/**\\\",\\\"ably.d.ts\\\",\\\"callbacks.d.ts\\\",\\\"callbacks.js\\\",\\\"promises.d.ts\\\",\\\"promises.js\\\",\\\"resources/**\\\"],\\\"dependencies\\\":{\\\"@ably/msgpack-js\\\":\\\"^0.4.0\\\",\\\"got\\\":\\\"^11.8.5\\\",\\\"ws\\\":\\\"^5.1\\\"},\\\"devDependencies\\\":{\\\"@ably/vcdiff-decoder\\\":\\\"1.0.4\\\",\\\"@types/crypto-js\\\":\\\"^4.0.1\\\",\\\"@types/node\\\":\\\"^15.0.0\\\",\\\"@types/request\\\":\\\"^2.48.7\\\",\\\"@types/ws\\\":\\\"^8.2.0\\\",\\\"@typescript-eslint/eslint-plugin\\\":\\\"^5.14.0\\\",\\\"@typescript-eslint/parser\\\":\\\"^5.14.0\\\",\\\"async\\\":\\\"ably-forks/async#requirejs\\\",\\\"aws-sdk\\\":\\\"^2.1413.0\\\",\\\"chai\\\":\\\"^4.2.0\\\",\\\"copy-webpack-plugin\\\":\\\"^6.4.1\\\",\\\"cors\\\":\\\"^2.8.5\\\",\\\"crypto-js\\\":\\\"ably-forks/crypto-js#crypto-lite\\\",\\\"eslint\\\":\\\"^7.13.0\\\",\\\"eslint-plugin-jsdoc\\\":\\\"^40.0.0\\\",\\\"eslint-plugin-security\\\":\\\"^1.4.0\\\",\\\"express\\\":\\\"^4.17.1\\\",\\\"glob\\\":\\\"~4.4\\\",\\\"google-closure-compiler\\\":\\\"^20180610.0.1\\\",\\\"grunt\\\":\\\"^1.6.1\\\",\\\"grunt-bump\\\":\\\"^0.3.1\\\",\\\"grunt-cli\\\":\\\"~1.2.0\\\",\\\"grunt-closure-tools\\\":\\\"^1.0.0\\\",\\\"grunt-contrib-concat\\\":\\\"~0.5\\\",\\\"grunt-shell\\\":\\\"~1.1\\\",\\\"grunt-webpack\\\":\\\"^4.0.2\\\",\\\"hexy\\\":\\\"~0.2\\\",\\\"kexec\\\":\\\"ably-forks/node-kexec#update-for-node-12\\\",\\\"minimist\\\":\\\"^1.2.5\\\",\\\"mocha\\\":\\\"^8.1.3\\\",\\\"null-loader\\\":\\\"^4.0.1\\\",\\\"playwright\\\":\\\"^1.10.0\\\",\\\"prettier\\\":\\\"^2.5.1\\\",\\\"requirejs\\\":\\\"~2.1\\\",\\\"shelljs\\\":\\\"~0.8\\\",\\\"source-map-explorer\\\":\\\"^2.5.2\\\",\\\"ts-loader\\\":\\\"^8.2.0\\\",\\\"tsconfig-paths-webpack-plugin\\\":\\\"^4.0.1\\\",\\\"tslib\\\":\\\"^2.3.1\\\",\\\"typedoc\\\":\\\"^0.23.8\\\",\\\"typescript\\\":\\\"^4.6.4\\\",\\\"webpack\\\":\\\"^4.44.2\\\",\\\"webpack-cli\\\":\\\"^4.2.0\\\"},\\\"engines\\\":{\\\"node\\\":\\\">=5.10.x\\\"},\\\"repository\\\":\\\"ably/ably-js\\\",\\\"jspm\\\":{\\\"registry\\\":\\\"npm\\\",\\\"directories\\\":{\\\"lib\\\":\\\"build\\\"},\\\"main\\\":\\\"ably\\\"},\\\"scripts\\\":{\\\"grunt\\\":\\\"grunt\\\",\\\"test\\\":\\\"grunt test\\\",\\\"test:node\\\":\\\"grunt test:node\\\",\\\"test:node:skip-build\\\":\\\"grunt mocha\\\",\\\"test:webserver\\\":\\\"grunt test:webserver\\\",\\\"test:playwright\\\":\\\"node test/support/runPlaywrightTests.js\\\",\\\"concat\\\":\\\"grunt concat\\\",\\\"build\\\":\\\"grunt build:all\\\",\\\"build:node\\\":\\\"grunt build:node\\\",\\\"build:browser\\\":\\\"grunt build:browser\\\",\\\"requirejs\\\":\\\"grunt requirejs\\\",\\\"lint\\\":\\\"eslint .\\\",\\\"lint:fix\\\":\\\"eslint --fix .\\\",\\\"check-closure-compiler\\\":\\\"grunt check-closure-compiler\\\",\\\"prepare\\\":\\\"npm run build\\\",\\\"format\\\":\\\"prettier --write --ignore-path .gitignore --ignore-path .prettierignore src test ably.d.ts webpack.config.js Gruntfile.js scripts/cdn_deploy.js docs/chrome-mv3.md\\\",\\\"format:check\\\":\\\"prettier --check --ignore-path .gitignore --ignore-path .prettierignore src test ably.d.ts webpack.config.js Gruntfile.js scripts/cdn_deploy.js\\\",\\\"sourcemap\\\":\\\"source-map-explorer build/ably.min.js\\\",\\\"sourcemap:noencryption\\\":\\\"source-map-explorer build/ably.noencryption.min.js\\\",\\\"docs\\\":\\\"typedoc --entryPoints ably.d.ts --out docs/generated/default --readme docs/landing-pages/default.md && typedoc --entryPoints promises.d.ts --out docs/generated/promises --name \\\\\\\"ably (Promise-based)\\\\\\\" --readme docs/landing-pages/promises.md && cp docs/landing-pages/choose-library.html docs/generated/index.html\\\"}}\");\n\n/***/ }),\n/* 44 */\n/***/ (function(module, exports) {\n\n\n\n/***/ }),\n/* 45 */\n/***/ (function(module, exports, __webpack_require__) {\n\n;(function (root, factory) {\n\tif (true) {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(__webpack_require__(6), __webpack_require__(32), __webpack_require__(23));\n\t}\n\telse {}\n}(this, function (CryptoJS) {\n\n\treturn CryptoJS.HmacSHA256;\n\n}));\n\n/***/ }),\n/* 46 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = __webpack_require__(0);\nvar Utils = tslib_1.__importStar(__webpack_require__(1));\nvar devicedetails_1 = tslib_1.__importDefault(__webpack_require__(47));\nvar resource_1 = tslib_1.__importDefault(__webpack_require__(25));\nvar paginatedresource_1 = tslib_1.__importDefault(__webpack_require__(18));\nvar errorinfo_1 = tslib_1.__importDefault(__webpack_require__(4));\nvar pushchannelsubscription_1 = tslib_1.__importDefault(__webpack_require__(48));\nvar noop = function () { };\nvar Push = /** @class */ (function () {\n function Push(rest) {\n this.rest = rest;\n this.admin = new Admin(rest);\n }\n return Push;\n}());\nvar Admin = /** @class */ (function () {\n function Admin(rest) {\n this.rest = rest;\n this.deviceRegistrations = new DeviceRegistrations(rest);\n this.channelSubscriptions = new ChannelSubscriptions(rest);\n }\n Admin.prototype.publish = function (recipient, payload, callback) {\n var rest = this.rest;\n var format = rest.options.useBinaryProtocol ? Utils.Format.msgpack : Utils.Format.json, headers = Utils.defaultPostHeaders(rest.options, format), params = {};\n var body = Utils.mixin({ recipient: recipient }, payload);\n if (typeof callback !== 'function') {\n if (this.rest.options.promises) {\n return Utils.promisify(this, 'publish', arguments);\n }\n callback = noop;\n }\n if (rest.options.headers)\n Utils.mixin(headers, rest.options.headers);\n if (rest.options.pushFullWait)\n Utils.mixin(params, { fullWait: 'true' });\n var requestBody = Utils.encodeBody(body, format);\n resource_1.default.post(rest, '/push/publish', requestBody, headers, params, null, function (err) { return callback(err); });\n };\n return Admin;\n}());\nvar DeviceRegistrations = /** @class */ (function () {\n function DeviceRegistrations(rest) {\n this.rest = rest;\n }\n DeviceRegistrations.prototype.save = function (device, callback) {\n var rest = this.rest;\n var body = devicedetails_1.default.fromValues(device);\n var format = rest.options.useBinaryProtocol ? Utils.Format.msgpack : Utils.Format.json, headers = Utils.defaultPostHeaders(rest.options, format), params = {};\n if (typeof callback !== 'function') {\n if (this.rest.options.promises) {\n return Utils.promisify(this, 'save', arguments);\n }\n callback = noop;\n }\n if (rest.options.headers)\n Utils.mixin(headers, rest.options.headers);\n if (rest.options.pushFullWait)\n Utils.mixin(params, { fullWait: 'true' });\n var requestBody = Utils.encodeBody(body, format);\n resource_1.default.put(rest, '/push/deviceRegistrations/' + encodeURIComponent(device.id), requestBody, headers, params, null, function (err, body, headers, unpacked) {\n callback(err, !err\n ? devicedetails_1.default.fromResponseBody(body, unpacked ? undefined : format)\n : undefined);\n });\n };\n DeviceRegistrations.prototype.get = function (deviceIdOrDetails, callback) {\n var rest = this.rest, format = rest.options.useBinaryProtocol ? Utils.Format.msgpack : Utils.Format.json, headers = Utils.defaultGetHeaders(rest.options, format), deviceId = deviceIdOrDetails.id || deviceIdOrDetails;\n if (typeof callback !== 'function') {\n if (this.rest.options.promises) {\n return Utils.promisify(this, 'get', arguments);\n }\n callback = noop;\n }\n if (typeof deviceId !== 'string' || !deviceId.length) {\n callback(new errorinfo_1.default('First argument to DeviceRegistrations#get must be a deviceId string or DeviceDetails', 40000, 400));\n return;\n }\n if (rest.options.headers)\n Utils.mixin(headers, rest.options.headers);\n resource_1.default.get(rest, '/push/deviceRegistrations/' + encodeURIComponent(deviceId), headers, {}, null, function (err, body, headers, unpacked) {\n callback(err, !err\n ? devicedetails_1.default.fromResponseBody(body, unpacked ? undefined : format)\n : undefined);\n });\n };\n DeviceRegistrations.prototype.list = function (params, callback) {\n var rest = this.rest, format = rest.options.useBinaryProtocol ? Utils.Format.msgpack : Utils.Format.json, envelope = this.rest.http.supportsLinkHeaders ? undefined : format, headers = Utils.defaultGetHeaders(rest.options, format);\n if (typeof callback !== 'function') {\n if (this.rest.options.promises) {\n return Utils.promisify(this, 'list', arguments);\n }\n callback = noop;\n }\n if (rest.options.headers)\n Utils.mixin(headers, rest.options.headers);\n new paginatedresource_1.default(rest, '/push/deviceRegistrations', headers, envelope, function (body, headers, unpacked) {\n return devicedetails_1.default.fromResponseBody(body, unpacked ? undefined : format);\n }).get(params, callback);\n };\n DeviceRegistrations.prototype.remove = function (deviceIdOrDetails, callback) {\n var rest = this.rest, format = rest.options.useBinaryProtocol ? Utils.Format.msgpack : Utils.Format.json, headers = Utils.defaultGetHeaders(rest.options, format), params = {}, deviceId = deviceIdOrDetails.id || deviceIdOrDetails;\n if (typeof callback !== 'function') {\n if (this.rest.options.promises) {\n return Utils.promisify(this, 'remove', arguments);\n }\n callback = noop;\n }\n if (typeof deviceId !== 'string' || !deviceId.length) {\n callback(new errorinfo_1.default('First argument to DeviceRegistrations#remove must be a deviceId string or DeviceDetails', 40000, 400));\n return;\n }\n if (rest.options.headers)\n Utils.mixin(headers, rest.options.headers);\n if (rest.options.pushFullWait)\n Utils.mixin(params, { fullWait: 'true' });\n resource_1.default['delete'](rest, '/push/deviceRegistrations/' + encodeURIComponent(deviceId), headers, params, null, function (err) { return callback(err); });\n };\n DeviceRegistrations.prototype.removeWhere = function (params, callback) {\n var rest = this.rest, format = rest.options.useBinaryProtocol ? Utils.Format.msgpack : Utils.Format.json, headers = Utils.defaultGetHeaders(rest.options, format);\n if (typeof callback !== 'function') {\n if (this.rest.options.promises) {\n return Utils.promisify(this, 'removeWhere', arguments);\n }\n callback = noop;\n }\n if (rest.options.headers)\n Utils.mixin(headers, rest.options.headers);\n if (rest.options.pushFullWait)\n Utils.mixin(params, { fullWait: 'true' });\n resource_1.default['delete'](rest, '/push/deviceRegistrations', headers, params, null, function (err) { return callback(err); });\n };\n return DeviceRegistrations;\n}());\nvar ChannelSubscriptions = /** @class */ (function () {\n function ChannelSubscriptions(rest) {\n /* ChannelSubscriptions have no unique id; removing one is equivalent to removeWhere by its properties */\n this.remove = ChannelSubscriptions.prototype.removeWhere;\n this.rest = rest;\n }\n ChannelSubscriptions.prototype.save = function (subscription, callback) {\n var rest = this.rest;\n var body = pushchannelsubscription_1.default.fromValues(subscription);\n var format = rest.options.useBinaryProtocol ? Utils.Format.msgpack : Utils.Format.json, headers = Utils.defaultPostHeaders(rest.options, format), params = {};\n if (typeof callback !== 'function') {\n if (this.rest.options.promises) {\n return Utils.promisify(this, 'save', arguments);\n }\n callback = noop;\n }\n if (rest.options.headers)\n Utils.mixin(headers, rest.options.headers);\n if (rest.options.pushFullWait)\n Utils.mixin(params, { fullWait: 'true' });\n var requestBody = Utils.encodeBody(body, format);\n resource_1.default.post(rest, '/push/channelSubscriptions', requestBody, headers, params, null, function (err, body, headers, unpacked) {\n callback(err, !err && pushchannelsubscription_1.default.fromResponseBody(body, unpacked ? undefined : format));\n });\n };\n ChannelSubscriptions.prototype.list = function (params, callback) {\n var rest = this.rest, format = rest.options.useBinaryProtocol ? Utils.Format.msgpack : Utils.Format.json, envelope = this.rest.http.supportsLinkHeaders ? undefined : format, headers = Utils.defaultGetHeaders(rest.options, format);\n if (typeof callback !== 'function') {\n if (this.rest.options.promises) {\n return Utils.promisify(this, 'list', arguments);\n }\n callback = noop;\n }\n if (rest.options.headers)\n Utils.mixin(headers, rest.options.headers);\n new paginatedresource_1.default(rest, '/push/channelSubscriptions', headers, envelope, function (body, headers, unpacked) {\n return pushchannelsubscription_1.default.fromResponseBody(body, unpacked ? undefined : format);\n }).get(params, callback);\n };\n ChannelSubscriptions.prototype.removeWhere = function (params, callback) {\n var rest = this.rest, format = rest.options.useBinaryProtocol ? Utils.Format.msgpack : Utils.Format.json, headers = Utils.defaultGetHeaders(rest.options, format);\n if (typeof callback !== 'function') {\n if (this.rest.options.promises) {\n return Utils.promisify(this, 'removeWhere', arguments);\n }\n callback = noop;\n }\n if (rest.options.headers)\n Utils.mixin(headers, rest.options.headers);\n if (rest.options.pushFullWait)\n Utils.mixin(params, { fullWait: 'true' });\n resource_1.default['delete'](rest, '/push/channelSubscriptions', headers, params, null, function (err) { return callback(err); });\n };\n ChannelSubscriptions.prototype.listChannels = function (params, callback) {\n var rest = this.rest, format = rest.options.useBinaryProtocol ? Utils.Format.msgpack : Utils.Format.json, envelope = this.rest.http.supportsLinkHeaders ? undefined : format, headers = Utils.defaultGetHeaders(rest.options, format);\n if (typeof callback !== 'function') {\n if (this.rest.options.promises) {\n return Utils.promisify(this, 'listChannels', arguments);\n }\n callback = noop;\n }\n if (rest.options.headers)\n Utils.mixin(headers, rest.options.headers);\n if (rest.options.pushFullWait)\n Utils.mixin(params, { fullWait: 'true' });\n new paginatedresource_1.default(rest, '/push/channels', headers, envelope, function (body, headers, unpacked) {\n var parsedBody = (!unpacked && format ? Utils.decodeBody(body, format) : body);\n for (var i = 0; i < parsedBody.length; i++) {\n parsedBody[i] = String(parsedBody[i]);\n }\n return parsedBody;\n }).get(params, callback);\n };\n return ChannelSubscriptions;\n}());\nexports.default = Push;\n\n\n/***/ }),\n/* 47 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = __webpack_require__(0);\nvar Utils = tslib_1.__importStar(__webpack_require__(1));\nvar errorinfo_1 = tslib_1.__importDefault(__webpack_require__(4));\nvar DeviceFormFactor;\n(function (DeviceFormFactor) {\n DeviceFormFactor[\"Phone\"] = \"phone\";\n DeviceFormFactor[\"Tablet\"] = \"tablet\";\n DeviceFormFactor[\"Desktop\"] = \"desktop\";\n DeviceFormFactor[\"TV\"] = \"tv\";\n DeviceFormFactor[\"Watch\"] = \"watch\";\n DeviceFormFactor[\"Car\"] = \"car\";\n DeviceFormFactor[\"Embedded\"] = \"embedded\";\n DeviceFormFactor[\"Other\"] = \"other\";\n})(DeviceFormFactor || (DeviceFormFactor = {}));\nvar DevicePlatform;\n(function (DevicePlatform) {\n DevicePlatform[\"Android\"] = \"android\";\n DevicePlatform[\"IOS\"] = \"ios\";\n DevicePlatform[\"Browser\"] = \"browser\";\n})(DevicePlatform || (DevicePlatform = {}));\nvar DeviceDetails = /** @class */ (function () {\n function DeviceDetails() {\n }\n DeviceDetails.prototype.toJSON = function () {\n var _a, _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: (_a = this.push) === null || _a === void 0 ? void 0 : _a.recipient,\n state: (_b = this.push) === null || _b === void 0 ? void 0 : _b.state,\n error: (_c = this.push) === null || _c === void 0 ? void 0 : _c.error,\n },\n };\n };\n DeviceDetails.prototype.toString = function () {\n var _a, _b, _c, _d;\n var 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 ((_a = this.push) === null || _a === void 0 ? void 0 : _a.recipient)\n result += '; push.recipient=' + JSON.stringify(this.push.recipient);\n if ((_b = this.push) === null || _b === void 0 ? void 0 : _b.state)\n result += '; push.state=' + this.push.state;\n if ((_c = this.push) === null || _c === void 0 ? void 0 : _c.error)\n result += '; push.error=' + JSON.stringify(this.push.error);\n if ((_d = this.push) === null || _d === void 0 ? void 0 : _d.metadata)\n result += '; push.metadata=' + this.push.metadata;\n result += ']';\n return result;\n };\n DeviceDetails.fromResponseBody = function (body, format) {\n if (format) {\n body = Utils.decodeBody(body, format);\n }\n if (Utils.isArray(body)) {\n return DeviceDetails.fromValuesArray(body);\n }\n else {\n return DeviceDetails.fromValues(body);\n }\n };\n DeviceDetails.fromValues = function (values) {\n values.error = values.error && errorinfo_1.default.fromValues(values.error);\n return Object.assign(new DeviceDetails(), values);\n };\n DeviceDetails.fromValuesArray = function (values) {\n var count = values.length, result = new Array(count);\n for (var i = 0; i < count; i++)\n result[i] = DeviceDetails.fromValues(values[i]);\n return result;\n };\n DeviceDetails.toRequestBody = Utils.encodeBody;\n return DeviceDetails;\n}());\nexports.default = DeviceDetails;\n\n\n/***/ }),\n/* 48 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = __webpack_require__(0);\nvar Utils = tslib_1.__importStar(__webpack_require__(1));\nvar PushChannelSubscription = /** @class */ (function () {\n function PushChannelSubscription() {\n }\n /**\n * Overload toJSON() to intercept JSON.stringify()\n * @return {*}\n */\n PushChannelSubscription.prototype.toJSON = function () {\n return {\n channel: this.channel,\n deviceId: this.deviceId,\n clientId: this.clientId,\n };\n };\n PushChannelSubscription.prototype.toString = function () {\n var 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 PushChannelSubscription.fromResponseBody = function (body, format) {\n if (format) {\n body = Utils.decodeBody(body, format);\n }\n if (Utils.isArray(body)) {\n return PushChannelSubscription.fromValuesArray(body);\n }\n else {\n return PushChannelSubscription.fromValues(body);\n }\n };\n PushChannelSubscription.fromValues = function (values) {\n return Object.assign(new PushChannelSubscription(), values);\n };\n PushChannelSubscription.fromValuesArray = function (values) {\n var count = values.length, result = new Array(count);\n for (var i = 0; i < count; i++)\n result[i] = PushChannelSubscription.fromValues(values[i]);\n return result;\n };\n PushChannelSubscription.toRequestBody = Utils.encodeBody;\n return PushChannelSubscription;\n}());\nexports.default = PushChannelSubscription;\n\n\n/***/ }),\n/* 49 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = __webpack_require__(0);\nvar Utils = tslib_1.__importStar(__webpack_require__(1));\nvar MessageCount = /** @class */ (function () {\n function MessageCount(values) {\n this.count = (values && values.count) || 0;\n this.data = (values && values.data) || 0;\n this.uncompressedData = (values && values.uncompressedData) || 0;\n this.failed = (values && values.failed) || 0;\n this.refused = (values && values.refused) || 0;\n }\n return MessageCount;\n}());\nvar MessageCategory = /** @class */ (function (_super) {\n tslib_1.__extends(MessageCategory, _super);\n function MessageCategory(values) {\n var _this = _super.call(this, values) || this;\n if (values && values.category) {\n _this.category = {};\n Utils.forInOwnNonNullProperties(values.category, function (prop) {\n _this.category[prop] = new MessageCount(values.category[prop]);\n });\n }\n return _this;\n }\n return MessageCategory;\n}(MessageCount));\nvar ResourceCount = /** @class */ (function () {\n function ResourceCount(values) {\n this.peak = (values && values.peak) || 0;\n this.min = (values && values.min) || 0;\n this.mean = (values && values.mean) || 0;\n this.opened = (values && values.opened) || 0;\n this.refused = (values && values.refused) || 0;\n }\n return ResourceCount;\n}());\nvar RequestCount = /** @class */ (function () {\n function RequestCount(values) {\n this.succeeded = (values && values.succeeded) || 0;\n this.failed = (values && values.failed) || 0;\n this.refused = (values && values.refused) || 0;\n }\n return RequestCount;\n}());\nvar ConnectionTypes = /** @class */ (function () {\n function ConnectionTypes(values) {\n this.plain = new ResourceCount(values && values.plain);\n this.tls = new ResourceCount(values && values.tls);\n this.all = new ResourceCount(values && values.all);\n }\n return ConnectionTypes;\n}());\nvar MessageTypes = /** @class */ (function () {\n function MessageTypes(values) {\n this.messages = new MessageCategory(values && values.messages);\n this.presence = new MessageCategory(values && values.presence);\n this.all = new MessageCategory(values && values.all);\n }\n return MessageTypes;\n}());\nvar MessageTraffic = /** @class */ (function () {\n function MessageTraffic(values) {\n this.realtime = new MessageTypes(values && values.realtime);\n this.rest = new MessageTypes(values && values.rest);\n this.webhook = new MessageTypes(values && values.webhook);\n this.sharedQueue = new MessageTypes(values && values.sharedQueue);\n this.externalQueue = new MessageTypes(values && values.externalQueue);\n this.httpEvent = new MessageTypes(values && values.httpEvent);\n this.push = new MessageTypes(values && values.push);\n this.all = new MessageTypes(values && values.all);\n }\n return MessageTraffic;\n}());\nvar MessageDirections = /** @class */ (function () {\n function MessageDirections(values) {\n this.all = new MessageTypes(values && values.all);\n this.inbound = new MessageTraffic(values && values.inbound);\n this.outbound = new MessageTraffic(values && values.outbound);\n }\n return MessageDirections;\n}());\nvar XchgMessages = /** @class */ (function () {\n function XchgMessages(values) {\n this.all = new MessageTypes(values && values.all);\n this.producerPaid = new MessageDirections(values && values.producerPaid);\n this.consumerPaid = new MessageDirections(values && values.consumerPaid);\n }\n return XchgMessages;\n}());\nvar PushStats = /** @class */ (function () {\n function PushStats(values) {\n this.messages = (values && values.messages) || 0;\n var notifications = values && values.notifications;\n this.notifications = {\n invalid: (notifications && notifications.invalid) || 0,\n attempted: (notifications && notifications.attempted) || 0,\n successful: (notifications && notifications.successful) || 0,\n failed: (notifications && notifications.failed) || 0,\n };\n this.directPublishes = (values && values.directPublishes) || 0;\n }\n return PushStats;\n}());\nvar ProcessedCount = /** @class */ (function () {\n function ProcessedCount(values) {\n this.succeeded = (values && values.succeeded) || 0;\n this.skipped = (values && values.skipped) || 0;\n this.failed = (values && values.failed) || 0;\n }\n return ProcessedCount;\n}());\nvar ProcessedMessages = /** @class */ (function () {\n function ProcessedMessages(values) {\n var _this = this;\n this.delta = undefined;\n if (values && values.delta) {\n this.delta = {};\n Utils.forInOwnNonNullProperties(values.delta, function (prop) {\n _this.delta[prop] = new ProcessedCount(values.delta[prop]);\n });\n }\n }\n return ProcessedMessages;\n}());\nvar Stats = /** @class */ (function (_super) {\n tslib_1.__extends(Stats, _super);\n function Stats(values) {\n var _this = _super.call(this, values) || this;\n _this.persisted = new MessageTypes(values && values.persisted);\n _this.connections = new ConnectionTypes(values && values.connections);\n _this.channels = new ResourceCount(values && values.channels);\n _this.apiRequests = new RequestCount(values && values.apiRequests);\n _this.tokenRequests = new RequestCount(values && values.tokenRequests);\n _this.xchgProducer = new XchgMessages(values && values.xchgProducer);\n _this.xchgConsumer = new XchgMessages(values && values.xchgConsumer);\n _this.push = new PushStats(values && values.pushStats);\n _this.processed = new ProcessedMessages(values && values.processed);\n _this.inProgress = (values && values.inProgress) || undefined;\n _this.unit = (values && values.unit) || undefined;\n _this.intervalId = (values && values.intervalId) || undefined;\n return _this;\n }\n Stats.fromValues = function (values) {\n return new Stats(values);\n };\n return Stats;\n}(MessageDirections));\nexports.default = Stats;\n\n\n/***/ }),\n/* 50 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = __webpack_require__(0);\nvar Utils = tslib_1.__importStar(__webpack_require__(1));\nvar rest_1 = tslib_1.__importDefault(__webpack_require__(30));\nvar eventemitter_1 = tslib_1.__importDefault(__webpack_require__(7));\nvar logger_1 = tslib_1.__importDefault(__webpack_require__(2));\nvar connection_1 = tslib_1.__importDefault(__webpack_require__(51));\nvar realtimechannel_1 = tslib_1.__importDefault(__webpack_require__(38));\nvar defaults_1 = tslib_1.__importDefault(__webpack_require__(8));\nvar errorinfo_1 = tslib_1.__importDefault(__webpack_require__(4));\nvar protocolmessage_1 = tslib_1.__importDefault(__webpack_require__(10));\nvar connectionmanager_1 = tslib_1.__importDefault(__webpack_require__(35));\nvar platform_1 = tslib_1.__importDefault(__webpack_require__(3));\nvar message_1 = tslib_1.__importDefault(__webpack_require__(9));\nvar Realtime = /** @class */ (function (_super) {\n tslib_1.__extends(Realtime, _super);\n function Realtime(options) {\n var _this = _super.call(this, options) || this;\n logger_1.default.logAction(logger_1.default.LOG_MINOR, 'Realtime()', '');\n _this.connection = new connection_1.default(_this, _this.options);\n _this.channels = new Channels(_this);\n if (options.autoConnect !== false)\n _this.connect();\n return _this;\n }\n Realtime.prototype.connect = function () {\n logger_1.default.logAction(logger_1.default.LOG_MINOR, 'Realtime.connect()', '');\n this.connection.connect();\n };\n Realtime.prototype.close = function () {\n logger_1.default.logAction(logger_1.default.LOG_MINOR, 'Realtime.close()', '');\n this.connection.close();\n };\n Realtime.Promise = function (options) {\n options = defaults_1.default.objectifyOptions(options);\n options.promises = true;\n return new Realtime(options);\n };\n Realtime.Callbacks = Realtime;\n Realtime.Utils = Utils;\n Realtime.ConnectionManager = connectionmanager_1.default;\n Realtime.Platform = platform_1.default;\n Realtime.ProtocolMessage = protocolmessage_1.default;\n Realtime.Message = message_1.default;\n return Realtime;\n}(rest_1.default));\nvar Channels = /** @class */ (function (_super) {\n tslib_1.__extends(Channels, _super);\n function Channels(realtime) {\n var _this = _super.call(this) || this;\n _this.realtime = realtime;\n _this.all = Object.create(null);\n realtime.connection.connectionManager.on('transport.active', function () {\n _this.onTransportActive();\n });\n return _this;\n }\n Channels.prototype.channelSerials = function () {\n var serials = {};\n for (var _i = 0, _a = Utils.keysArray(this.all, true); _i < _a.length; _i++) {\n var name_1 = _a[_i];\n var channel = this.all[name_1];\n if (channel.properties.channelSerial) {\n serials[name_1] = channel.properties.channelSerial;\n }\n }\n return serials;\n };\n // recoverChannels gets the given channels and sets their channel serials.\n Channels.prototype.recoverChannels = function (channelSerials) {\n for (var _i = 0, _a = Utils.keysArray(channelSerials, true); _i < _a.length; _i++) {\n var name_2 = _a[_i];\n var channel = this.get(name_2);\n channel.properties.channelSerial = channelSerials[name_2];\n }\n };\n Channels.prototype.onChannelMessage = function (msg) {\n var channelName = msg.channel;\n if (channelName === undefined) {\n logger_1.default.logAction(logger_1.default.LOG_ERROR, 'Channels.onChannelMessage()', 'received event unspecified channel, action = ' + msg.action);\n return;\n }\n var channel = this.all[channelName];\n if (!channel) {\n logger_1.default.logAction(logger_1.default.LOG_ERROR, 'Channels.onChannelMessage()', 'received event for non-existent channel: ' + channelName);\n return;\n }\n channel.onMessage(msg);\n };\n /* called when a transport becomes connected; reattempt attach/detach\n * for channels that are attaching or detaching. */\n Channels.prototype.onTransportActive = function () {\n for (var channelName in this.all) {\n var channel = this.all[channelName];\n if (channel.state === 'attaching' || channel.state === 'detaching') {\n channel.checkPendingState();\n }\n else if (channel.state === 'suspended') {\n channel._attach(false, null);\n }\n else if (channel.state === 'attached') {\n // Note explicity request the state, channel.attach() would do nothing\n // as its already 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 Channels.prototype.propogateConnectionInterruption = function (connectionState, reason) {\n var connectionStateToChannelState = {\n closing: 'detached',\n closed: 'detached',\n failed: 'failed',\n suspended: 'suspended',\n };\n var fromChannelStates = ['attaching', 'attached', 'detaching', 'suspended'];\n var toChannelState = connectionStateToChannelState[connectionState];\n for (var channelId in this.all) {\n var channel = this.all[channelId];\n if (Utils.arrIn(fromChannelStates, channel.state)) {\n channel.notifyState(toChannelState, reason);\n }\n }\n };\n Channels.prototype.get = function (name, channelOptions) {\n name = String(name);\n var channel = this.all[name];\n if (!channel) {\n channel = this.all[name] = new realtimechannel_1.default(this.realtime, name, channelOptions);\n }\n else if (channelOptions) {\n if (channel._shouldReattachToSetOptions(channelOptions)) {\n throw new errorinfo_1.default('Channels.get() cannot be used to set channel options that would cause the channel to reattach. Please, use RealtimeChannel.setOptions() instead.', 40000, 400);\n }\n channel.setOptions(channelOptions);\n }\n return channel;\n };\n Channels.prototype.getDerived = function (name, deriveOptions, channelOptions) {\n if (deriveOptions.filter) {\n var filter = Utils.toBase64(deriveOptions.filter);\n var match = Utils.matchDerivedChannel(name);\n name = \"[filter=\".concat(filter).concat(match.qualifierParam, \"]\").concat(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 Channels.prototype.release = function (name) {\n name = String(name);\n var channel = this.all[name];\n if (!channel) {\n return;\n }\n var releaseErr = channel.getReleaseErr();\n if (releaseErr) {\n throw releaseErr;\n }\n delete this.all[name];\n };\n return Channels;\n}(eventemitter_1.default));\nexports.default = Realtime;\n\n\n/***/ }),\n/* 51 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = __webpack_require__(0);\nvar Utils = tslib_1.__importStar(__webpack_require__(1));\nvar eventemitter_1 = tslib_1.__importDefault(__webpack_require__(7));\nvar connectionmanager_1 = tslib_1.__importDefault(__webpack_require__(35));\nvar logger_1 = tslib_1.__importDefault(__webpack_require__(2));\nvar connectionstatechange_1 = tslib_1.__importDefault(__webpack_require__(37));\nvar platform_1 = tslib_1.__importDefault(__webpack_require__(3));\nfunction noop() { }\nvar Connection = /** @class */ (function (_super) {\n tslib_1.__extends(Connection, _super);\n function Connection(ably, options) {\n var _this = _super.call(this) || this;\n _this.whenState = (function (state, listener) {\n return eventemitter_1.default.prototype.whenState.call(_this, state, _this.state, listener, new connectionstatechange_1.default(undefined, state));\n });\n _this.ably = ably;\n _this.connectionManager = new connectionmanager_1.default(ably, options);\n _this.state = _this.connectionManager.state.state;\n _this.key = undefined;\n _this.id = undefined;\n _this.errorReason = null;\n _this.connectionManager.on('connectionstate', function (stateChange) {\n var state = (_this.state = stateChange.current);\n platform_1.default.Config.nextTick(function () {\n _this.emit(state, stateChange);\n });\n });\n _this.connectionManager.on('update', function (stateChange) {\n platform_1.default.Config.nextTick(function () {\n _this.emit('update', stateChange);\n });\n });\n return _this;\n }\n Connection.prototype.connect = function () {\n logger_1.default.logAction(logger_1.default.LOG_MINOR, 'Connection.connect()', '');\n this.connectionManager.requestState({ state: 'connecting' });\n };\n Connection.prototype.ping = function (callback) {\n logger_1.default.logAction(logger_1.default.LOG_MINOR, 'Connection.ping()', '');\n if (!callback) {\n if (this.ably.options.promises) {\n return Utils.promisify(this, 'ping', arguments);\n }\n callback = noop;\n }\n this.connectionManager.ping(null, callback);\n };\n Connection.prototype.close = function () {\n logger_1.default.logAction(logger_1.default.LOG_MINOR, 'Connection.close()', 'connectionKey = ' + this.key);\n this.connectionManager.requestState({ state: 'closing' });\n };\n Object.defineProperty(Connection.prototype, \"recoveryKey\", {\n get: function () {\n return this.createRecoveryKey();\n },\n enumerable: false,\n configurable: true\n });\n Connection.prototype.createRecoveryKey = function () {\n return this.connectionManager.createRecoveryKey();\n };\n return Connection;\n}(eventemitter_1.default));\nexports.default = Connection;\n\n\n/***/ }),\n/* 52 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.PendingMessage = void 0;\nvar tslib_1 = __webpack_require__(0);\nvar protocolmessage_1 = tslib_1.__importDefault(__webpack_require__(10));\nvar Utils = tslib_1.__importStar(__webpack_require__(1));\nvar eventemitter_1 = tslib_1.__importDefault(__webpack_require__(7));\nvar logger_1 = tslib_1.__importDefault(__webpack_require__(2));\nvar messagequeue_1 = tslib_1.__importDefault(__webpack_require__(36));\nvar errorinfo_1 = tslib_1.__importDefault(__webpack_require__(4));\nvar actions = protocolmessage_1.default.Action;\nvar PendingMessage = /** @class */ (function () {\n function PendingMessage(message, callback) {\n this.message = message;\n this.callback = callback;\n this.merged = false;\n var action = message.action;\n this.sendAttempted = false;\n this.ackRequired = action == actions.MESSAGE || action == actions.PRESENCE;\n }\n return PendingMessage;\n}());\nexports.PendingMessage = PendingMessage;\nvar Protocol = /** @class */ (function (_super) {\n tslib_1.__extends(Protocol, _super);\n function Protocol(transport) {\n var _this = _super.call(this) || this;\n _this.transport = transport;\n _this.messageQueue = new messagequeue_1.default();\n transport.on('ack', function (serial, count) {\n _this.onAck(serial, count);\n });\n transport.on('nack', function (serial, count, err) {\n _this.onNack(serial, count, err);\n });\n return _this;\n }\n Protocol.prototype.onAck = function (serial, count) {\n logger_1.default.logAction(logger_1.default.LOG_MICRO, 'Protocol.onAck()', 'serial = ' + serial + '; count = ' + count);\n this.messageQueue.completeMessages(serial, count);\n };\n Protocol.prototype.onNack = function (serial, count, err) {\n logger_1.default.logAction(logger_1.default.LOG_ERROR, 'Protocol.onNack()', 'serial = ' + serial + '; count = ' + count + '; err = ' + Utils.inspectError(err));\n if (!err) {\n err = new errorinfo_1.default('Unable to send message; channel not responding', 50001, 500);\n }\n this.messageQueue.completeMessages(serial, count, err);\n };\n Protocol.prototype.onceIdle = function (listener) {\n var messageQueue = this.messageQueue;\n if (messageQueue.count() === 0) {\n listener();\n return;\n }\n messageQueue.once('idle', listener);\n };\n Protocol.prototype.send = function (pendingMessage) {\n if (pendingMessage.ackRequired) {\n this.messageQueue.push(pendingMessage);\n }\n if (logger_1.default.shouldLog(logger_1.default.LOG_MICRO)) {\n logger_1.default.logAction(logger_1.default.LOG_MICRO, 'Protocol.send()', 'sending msg; ' + protocolmessage_1.default.stringify(pendingMessage.message));\n }\n pendingMessage.sendAttempted = true;\n this.transport.send(pendingMessage.message);\n };\n Protocol.prototype.getTransport = function () {\n return this.transport;\n };\n Protocol.prototype.getPendingMessages = function () {\n return this.messageQueue.copyAll();\n };\n Protocol.prototype.clearPendingMessages = function () {\n return this.messageQueue.clear();\n };\n Protocol.prototype.finish = function () {\n var transport = this.transport;\n this.onceIdle(function () {\n transport.disconnect();\n });\n };\n return Protocol;\n}(eventemitter_1.default));\nexports.default = Protocol;\n\n\n/***/ }),\n/* 53 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = __webpack_require__(0);\nvar platform_1 = tslib_1.__importDefault(__webpack_require__(3));\nvar Utils = tslib_1.__importStar(__webpack_require__(1));\nvar transport_1 = tslib_1.__importDefault(__webpack_require__(26));\nvar defaults_1 = tslib_1.__importDefault(__webpack_require__(8));\nvar logger_1 = tslib_1.__importDefault(__webpack_require__(2));\nvar protocolmessage_1 = tslib_1.__importDefault(__webpack_require__(10));\nvar errorinfo_1 = tslib_1.__importDefault(__webpack_require__(4));\nvar shortName = 'web_socket';\nfunction isNodeWebSocket(ws) {\n return !!ws.on;\n}\nvar WebSocketTransport = /** @class */ (function (_super) {\n tslib_1.__extends(WebSocketTransport, _super);\n function WebSocketTransport(connectionManager, auth, params) {\n var _this = _super.call(this, connectionManager, auth, params) || this;\n _this.shortName = shortName;\n /* If is a browser, can't detect pings, so request protocol heartbeats */\n params.heartbeats = platform_1.default.Config.useProtocolHeartbeats;\n _this.wsHost = defaults_1.default.getHost(params.options, params.host, true);\n return _this;\n }\n WebSocketTransport.isAvailable = function () {\n return !!platform_1.default.Config.WebSocket;\n };\n WebSocketTransport.prototype.createWebSocket = function (uri, connectParams) {\n this.uri = uri + Utils.toQueryString(connectParams);\n return new platform_1.default.Config.WebSocket(this.uri);\n };\n WebSocketTransport.prototype.toString = function () {\n return 'WebSocketTransport; uri=' + this.uri;\n };\n WebSocketTransport.prototype.connect = function () {\n logger_1.default.logAction(logger_1.default.LOG_MINOR, 'WebSocketTransport.connect()', 'starting');\n transport_1.default.prototype.connect.call(this);\n var self = this, params = this.params, options = params.options;\n var wsScheme = options.tls ? 'wss://' : 'ws://';\n var wsUri = wsScheme + this.wsHost + ':' + defaults_1.default.getPort(options) + '/';\n logger_1.default.logAction(logger_1.default.LOG_MINOR, 'WebSocketTransport.connect()', 'uri: ' + wsUri);\n this.auth.getAuthParams(function (err, authParams) {\n if (self.isDisposed) {\n return;\n }\n var paramStr = '';\n for (var param in authParams)\n paramStr += ' ' + param + ': ' + authParams[param] + ';';\n logger_1.default.logAction(logger_1.default.LOG_MINOR, 'WebSocketTransport.connect()', 'authParams:' + paramStr + ' err: ' + err);\n if (err) {\n self.disconnect(err);\n return;\n }\n var connectParams = params.getConnectParams(authParams);\n try {\n var wsConnection = (self.wsConnection = self.createWebSocket(wsUri, connectParams));\n wsConnection.binaryType = platform_1.default.Config.binaryType;\n wsConnection.onopen = function () {\n self.onWsOpen();\n };\n wsConnection.onclose = function (ev) {\n self.onWsClose(ev);\n };\n wsConnection.onmessage = function (ev) {\n self.onWsData(ev.data);\n };\n wsConnection.onerror = function (ev) {\n self.onWsError(ev);\n };\n if (isNodeWebSocket(wsConnection)) {\n /* node; browsers currently don't have a general eventemitter and can't detect\n * pings. Also, no need to reply with a pong explicitly, ws lib handles that */\n wsConnection.on('ping', function () {\n self.onActivity();\n });\n }\n }\n catch (e) {\n logger_1.default.logAction(logger_1.default.LOG_ERROR, 'WebSocketTransport.connect()', 'Unexpected exception creating websocket: err = ' + (e.stack || e.message));\n self.disconnect(e);\n }\n });\n };\n WebSocketTransport.prototype.send = function (message) {\n var wsConnection = this.wsConnection;\n if (!wsConnection) {\n logger_1.default.logAction(logger_1.default.LOG_ERROR, 'WebSocketTransport.send()', 'No socket connection');\n return;\n }\n try {\n wsConnection.send(protocolmessage_1.default.serialize(message, this.params.format));\n }\n catch (e) {\n var msg = 'Exception from ws connection when trying to send: ' + Utils.inspectError(e);\n logger_1.default.logAction(logger_1.default.LOG_ERROR, 'WebSocketTransport.send()', msg);\n /* Don't try to request a disconnect, that'll just involve sending data\n * down the websocket again. Just finish the transport. */\n this.finish('disconnected', new errorinfo_1.default(msg, 50000, 500));\n }\n };\n WebSocketTransport.prototype.onWsData = function (data) {\n logger_1.default.logAction(logger_1.default.LOG_MICRO, 'WebSocketTransport.onWsData()', 'data received; length = ' + data.length + '; type = ' + typeof data);\n try {\n this.onProtocolMessage(protocolmessage_1.default.deserialize(data, this.format));\n }\n catch (e) {\n logger_1.default.logAction(logger_1.default.LOG_ERROR, 'WebSocketTransport.onWsData()', 'Unexpected exception handing channel message: ' + e.stack);\n }\n };\n WebSocketTransport.prototype.onWsOpen = function () {\n logger_1.default.logAction(logger_1.default.LOG_MINOR, 'WebSocketTransport.onWsOpen()', 'opened WebSocket');\n this.emit('preconnect');\n };\n WebSocketTransport.prototype.onWsClose = function (ev) {\n var wasClean, code;\n if (typeof ev == 'object') {\n /* W3C spec-compatible */\n code = ev.code;\n // ev.wasClean is undefined in reactnative\n wasClean = ev.wasClean || code === 1000;\n } /*if(typeof(ev) == 'number')*/\n else {\n /* ws in node */\n code = ev;\n wasClean = code == 1000;\n }\n delete this.wsConnection;\n if (wasClean) {\n logger_1.default.logAction(logger_1.default.LOG_MINOR, 'WebSocketTransport.onWsClose()', 'Cleanly closed WebSocket');\n var err = new errorinfo_1.default('Websocket closed', 80003, 400);\n this.finish('disconnected', err);\n }\n else {\n var msg = 'Unclean disconnection of WebSocket ; code = ' + code, err = new errorinfo_1.default(msg, 80003, 400);\n logger_1.default.logAction(logger_1.default.LOG_MINOR, 'WebSocketTransport.onWsClose()', msg);\n this.finish('disconnected', err);\n }\n this.emit('disposed');\n };\n WebSocketTransport.prototype.onWsError = function (err) {\n var _this = this;\n logger_1.default.logAction(logger_1.default.LOG_MINOR, 'WebSocketTransport.onError()', 'Error from WebSocket: ' + err.message);\n /* Wait a tick before aborting: if the websocket was connected, this event\n * will be immediately followed by an onclose event with a close code. Allow\n * that to close it (so we see the close code) rather than anticipating it */\n platform_1.default.Config.nextTick(function () {\n _this.disconnect(Error(err.message));\n });\n };\n WebSocketTransport.prototype.dispose = function () {\n logger_1.default.logAction(logger_1.default.LOG_MINOR, 'WebSocketTransport.dispose()', '');\n this.isDisposed = true;\n var wsConnection = this.wsConnection;\n if (wsConnection) {\n /* Ignore any messages that come through after dispose() is called but before\n * websocket is actually closed. (mostly would be harmless, but if it's a\n * CONNECTED, it'll re-tick isConnected and cause all sorts of havoc) */\n wsConnection.onmessage = function () { };\n delete this.wsConnection;\n /* defer until the next event loop cycle before closing the socket,\n * giving some implementations the opportunity to send any outstanding close message */\n platform_1.default.Config.nextTick(function () {\n logger_1.default.logAction(logger_1.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 return WebSocketTransport;\n}(transport_1.default));\nfunction initialiseTransport(connectionManager) {\n if (WebSocketTransport.isAvailable())\n connectionManager.supportedTransports[shortName] = WebSocketTransport;\n return WebSocketTransport;\n}\nexports.default = initialiseTransport;\n\n\n/***/ }),\n/* 54 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = __webpack_require__(0);\nvar Utils = tslib_1.__importStar(__webpack_require__(1));\nvar presence_1 = tslib_1.__importDefault(__webpack_require__(34));\nvar eventemitter_1 = tslib_1.__importDefault(__webpack_require__(7));\nvar logger_1 = tslib_1.__importDefault(__webpack_require__(2));\nvar presencemessage_1 = tslib_1.__importDefault(__webpack_require__(14));\nvar errorinfo_1 = tslib_1.__importStar(__webpack_require__(4));\nvar realtimechannel_1 = tslib_1.__importDefault(__webpack_require__(38));\nvar multicaster_1 = tslib_1.__importDefault(__webpack_require__(22));\nvar channelstatechange_1 = tslib_1.__importDefault(__webpack_require__(39));\nvar noop = function () { };\nfunction getClientId(realtimePresence) {\n return realtimePresence.channel.realtime.auth.clientId;\n}\nfunction isAnonymousOrWildcard(realtimePresence) {\n var realtime = realtimePresence.channel.realtime;\n /* If not currently connected, we can't assume that we're an anonymous\n * client, as realtime may inform us of our clientId in the CONNECTED\n * message. So assume we're not anonymous and leave it to realtime to\n * return an error if we are */\n var clientId = realtime.auth.clientId;\n return (!clientId || clientId === '*') && realtime.connection.state === 'connected';\n}\n/* Callback is called only in the event of an error */\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 channel.attach(function (err) {\n if (err)\n callback(err);\n else\n action();\n });\n break;\n default:\n callback(errorinfo_1.default.fromValues(channel.invalidStateError()));\n }\n}\nfunction newerThan(item, existing) {\n /* RTP2b1: if either is synthesised, compare by timestamp */\n if (item.isSynthesized() || existing.isSynthesized()) {\n // RTP2b1a: if equal, prefer the newly-arrived one\n return item.timestamp >= existing.timestamp;\n }\n /* RTP2b2 */\n var itemOrderings = item.parseId(), existingOrderings = existing.parseId();\n if (itemOrderings.msgSerial === existingOrderings.msgSerial) {\n return itemOrderings.index > existingOrderings.index;\n }\n else {\n return itemOrderings.msgSerial > existingOrderings.msgSerial;\n }\n}\nvar RealtimePresence = /** @class */ (function (_super) {\n tslib_1.__extends(RealtimePresence, _super);\n function RealtimePresence(channel) {\n var _this = _super.call(this, channel) || this;\n _this.channel = channel;\n _this.syncComplete = false;\n _this.members = new PresenceMap(_this, function (item) { return item.clientId + ':' + item.connectionId; });\n // RTP17h: Store own members by clientId only.\n _this._myMembers = new PresenceMap(_this, function (item) { return item.clientId; });\n _this.subscriptions = new eventemitter_1.default();\n _this.pendingPresence = [];\n return _this;\n }\n RealtimePresence.prototype.enter = function (data, callback) {\n if (isAnonymousOrWildcard(this)) {\n throw new errorinfo_1.default('clientId must be specified to enter a presence channel', 40012, 400);\n }\n return this._enterOrUpdateClient(undefined, undefined, data, 'enter', callback);\n };\n RealtimePresence.prototype.update = function (data, callback) {\n if (isAnonymousOrWildcard(this)) {\n throw new errorinfo_1.default('clientId must be specified to update presence data', 40012, 400);\n }\n return this._enterOrUpdateClient(undefined, undefined, data, 'update', callback);\n };\n RealtimePresence.prototype.enterClient = function (clientId, data, callback) {\n return this._enterOrUpdateClient(undefined, clientId, data, 'enter', callback);\n };\n RealtimePresence.prototype.updateClient = function (clientId, data, callback) {\n return this._enterOrUpdateClient(undefined, clientId, data, 'update', callback);\n };\n RealtimePresence.prototype._enterOrUpdateClient = function (id, clientId, data, action, callback) {\n var _this = this;\n if (!callback) {\n if (typeof data === 'function') {\n callback = data;\n data = null;\n }\n else {\n if (this.channel.realtime.options.promises) {\n return Utils.promisify(this, '_enterOrUpdateClient', [id, clientId, data, action]);\n }\n callback = noop;\n }\n }\n var channel = this.channel;\n if (!channel.connectionManager.activeState()) {\n callback(channel.connectionManager.getError());\n return;\n }\n logger_1.default.logAction(logger_1.default.LOG_MICRO, 'RealtimePresence.' + action + 'Client()', 'channel = ' + channel.name + ', id = ' + id + ', client = ' + (clientId || '(implicit) ' + getClientId(this)));\n var presence = presencemessage_1.default.fromValues({\n action: action,\n data: data,\n });\n if (id) {\n presence.id = id;\n }\n if (clientId) {\n presence.clientId = clientId;\n }\n presencemessage_1.default.encode(presence, channel.channelOptions, function (err) {\n if (err) {\n callback(err);\n return;\n }\n switch (channel.state) {\n case 'attached':\n channel.sendPresence(presence, callback);\n break;\n case 'initialized':\n case 'detached':\n channel.attach();\n // eslint-disable-next-line no-fallthrough\n case 'attaching':\n _this.pendingPresence.push({\n presence: presence,\n callback: callback,\n });\n break;\n default:\n err = new errorinfo_1.PartialErrorInfo('Unable to ' + action + ' presence channel while in ' + channel.state + ' state', 90001);\n err.code = 90001;\n callback(err);\n }\n });\n };\n RealtimePresence.prototype.leave = function (data, callback) {\n if (isAnonymousOrWildcard(this)) {\n throw new errorinfo_1.default('clientId must have been specified to enter or leave a presence channel', 40012, 400);\n }\n return this.leaveClient(undefined, data, callback);\n };\n RealtimePresence.prototype.leaveClient = function (clientId, data, callback) {\n if (!callback) {\n if (typeof data === 'function') {\n callback = data;\n data = null;\n }\n else {\n if (this.channel.realtime.options.promises) {\n return Utils.promisify(this, 'leaveClient', [clientId, data]);\n }\n callback = noop;\n }\n }\n var channel = this.channel;\n if (!channel.connectionManager.activeState()) {\n callback === null || callback === void 0 ? void 0 : callback(channel.connectionManager.getError());\n return;\n }\n logger_1.default.logAction(logger_1.default.LOG_MICRO, 'RealtimePresence.leaveClient()', 'leaving; channel = ' + this.channel.name + ', client = ' + clientId);\n var presence = presencemessage_1.default.fromValues({\n action: 'leave',\n data: data,\n });\n if (clientId) {\n presence.clientId = clientId;\n }\n switch (channel.state) {\n case 'attached':\n channel.sendPresence(presence, callback);\n break;\n case 'attaching':\n this.pendingPresence.push({\n presence: presence,\n callback: callback,\n });\n break;\n case 'initialized':\n case 'failed': {\n /* we're not attached; therefore we let any entered status\n * timeout by itself instead of attaching just in order to leave */\n var err = new errorinfo_1.PartialErrorInfo('Unable to leave presence channel (incompatible state)', 90001);\n callback === null || callback === void 0 ? void 0 : callback(err);\n break;\n }\n default:\n callback === null || callback === void 0 ? void 0 : callback(channel.invalidStateError());\n }\n };\n // Return type is any to avoid conflict with base Presence class\n RealtimePresence.prototype.get = function (params, callback) {\n var _this = this;\n var args = Array.prototype.slice.call(arguments);\n if (args.length == 1 && typeof args[0] == 'function')\n args.unshift(null);\n params = args[0];\n callback = args[1];\n var waitForSync = !params || ('waitForSync' in params ? params.waitForSync : true);\n if (!callback) {\n if (this.channel.realtime.options.promises) {\n return Utils.promisify(this, 'get', args);\n }\n callback = noop;\n }\n function returnMembers(members) {\n callback(null, params ? members.list(params) : members.values());\n }\n /* Special-case the suspended state: can still get (stale) presence set if waitForSync is false */\n if (this.channel.state === 'suspended') {\n if (waitForSync) {\n callback(errorinfo_1.default.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(this.channel, callback, function () {\n var members = _this.members;\n if (waitForSync) {\n members.waitSync(function () {\n returnMembers(members);\n });\n }\n else {\n returnMembers(members);\n }\n });\n };\n RealtimePresence.prototype.history = function (params, callback) {\n logger_1.default.logAction(logger_1.default.LOG_MICRO, 'RealtimePresence.history()', 'channel = ' + this.name);\n /* params and callback are optional; see if params contains the callback */\n if (callback === undefined) {\n if (typeof params == 'function') {\n callback = params;\n params = null;\n }\n else {\n if (this.channel.realtime.options.promises) {\n return Utils.promisify(this, 'history', arguments);\n }\n callback = noop;\n }\n }\n if (params && params.untilAttach) {\n if (this.channel.state === 'attached') {\n delete params.untilAttach;\n params.from_serial = this.channel.properties.attachSerial;\n }\n else {\n callback(new errorinfo_1.default('option untilAttach requires the channel to be attached, was: ' + this.channel.state, 40000, 400));\n }\n }\n presence_1.default.prototype._history.call(this, params, callback);\n };\n RealtimePresence.prototype.setPresence = function (presenceSet, isSync, syncChannelSerial) {\n logger_1.default.logAction(logger_1.default.LOG_MICRO, 'RealtimePresence.setPresence()', 'received presence for ' + presenceSet.length + ' participants; syncChannelSerial = ' + syncChannelSerial);\n var syncCursor, match;\n var 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 (var i = 0; i < presenceSet.length; i++) {\n var presence = presencemessage_1.default.fromValues(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 this is the last (or only) message in a sequence of sync updates, end the sync */\n if (isSync && !syncCursor) {\n members.endSync();\n this.channel.syncChannelSerial = null;\n }\n /* broadcast to listeners */\n for (var i = 0; i < broadcastMessages.length; i++) {\n var presence = broadcastMessages[i];\n this.subscriptions.emit(presence.action, presence);\n }\n };\n RealtimePresence.prototype.onAttached = function (hasPresence) {\n logger_1.default.logAction(logger_1.default.LOG_MINOR, 'RealtimePresence.onAttached()', 'channel = ' + this.channel.name + ', hasPresence = ' + hasPresence);\n if (hasPresence) {\n this.members.startSync();\n }\n else {\n this._synthesizeLeaves(this.members.values());\n this.members.clear();\n }\n // RTP17f: Re-enter own members when moving into the attached state.\n this._ensureMyMembersPresent();\n /* NB this must be after the _ensureMyMembersPresent call, which may add items to pendingPresence */\n var pendingPresence = this.pendingPresence, pendingPresCount = pendingPresence.length;\n if (pendingPresCount) {\n this.pendingPresence = [];\n var presenceArray = [];\n var multicaster = multicaster_1.default.create();\n logger_1.default.logAction(logger_1.default.LOG_MICRO, 'RealtimePresence.onAttached', 'sending ' + pendingPresCount + ' queued presence messages');\n for (var i = 0; i < pendingPresCount; i++) {\n var event_1 = pendingPresence[i];\n presenceArray.push(event_1.presence);\n multicaster.push(event_1.callback);\n }\n this.channel.sendPresence(presenceArray, multicaster);\n }\n };\n RealtimePresence.prototype.actOnChannelState = function (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 /* falls through */\n case 'suspended':\n this.failPendingPresence(err);\n break;\n }\n };\n RealtimePresence.prototype.failPendingPresence = function (err) {\n if (this.pendingPresence.length) {\n logger_1.default.logAction(logger_1.default.LOG_MINOR, 'RealtimeChannel.failPendingPresence', 'channel; name = ' + this.channel.name + ', err = ' + Utils.inspectError(err));\n for (var i = 0; i < this.pendingPresence.length; i++)\n try {\n this.pendingPresence[i].callback(err);\n // eslint-disable-next-line no-empty\n }\n catch (e) { }\n this.pendingPresence = [];\n }\n };\n RealtimePresence.prototype._clearMyMembers = function () {\n this._myMembers.clear();\n };\n RealtimePresence.prototype._ensureMyMembersPresent = function () {\n var _this = this;\n var myMembers = this._myMembers, reenterCb = function (err) {\n if (err) {\n var msg = 'Presence auto-re-enter failed: ' + err.toString();\n var wrappedErr = new errorinfo_1.default(msg, 91004, 400);\n logger_1.default.logAction(logger_1.default.LOG_ERROR, 'RealtimePresence._ensureMyMembersPresent()', msg);\n var change = new channelstatechange_1.default(_this.channel.state, _this.channel.state, true, false, wrappedErr);\n _this.channel.emit('update', change);\n }\n };\n for (var memberKey in myMembers.map) {\n var entry = myMembers.map[memberKey];\n logger_1.default.logAction(logger_1.default.LOG_MICRO, 'RealtimePresence._ensureMyMembersPresent()', 'Auto-reentering clientId \"' + entry.clientId + '\" into the presence set');\n // RTP17g: Send ENTER containing the member id, clientId and data\n // attributes.\n this._enterOrUpdateClient(entry.id, entry.clientId, entry.data, 'enter', reenterCb);\n }\n };\n RealtimePresence.prototype._synthesizeLeaves = function (items) {\n var subscriptions = this.subscriptions;\n Utils.arrForEach(items, function (item) {\n var presence = presencemessage_1.default.fromValues({\n action: 'leave',\n connectionId: item.connectionId,\n clientId: item.clientId,\n data: item.data,\n encoding: item.encoding,\n timestamp: Utils.now(),\n });\n subscriptions.emit('leave', presence);\n });\n };\n /* Deprecated */\n RealtimePresence.prototype.on = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n logger_1.default.deprecated('presence.on', 'presence.subscribe');\n this.subscribe.apply(this, args);\n };\n /* Deprecated */\n RealtimePresence.prototype.off = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n logger_1.default.deprecated('presence.off', 'presence.unsubscribe');\n this.unsubscribe.apply(this, args);\n };\n RealtimePresence.prototype.subscribe = function () {\n var _args = []; /* [event], listener, [callback] */\n for (var _i = 0 /* [event], listener, [callback] */; _i < arguments.length /* [event], listener, [callback] */; _i++ /* [event], listener, [callback] */) {\n _args[_i] = arguments[_i]; /* [event], listener, [callback] */\n }\n var args = realtimechannel_1.default.processListenerArgs(_args);\n var event = args[0];\n var listener = args[1];\n var callback = args[2];\n var channel = this.channel;\n if (!callback) {\n if (this.channel.realtime.options.promises) {\n return Utils.promisify(this, 'subscribe', [event, listener]);\n }\n callback = noop;\n }\n if (channel.state === 'failed') {\n callback(errorinfo_1.default.fromValues(channel.invalidStateError()));\n return;\n }\n this.subscriptions.on(event, listener);\n channel.attach(callback);\n };\n RealtimePresence.prototype.unsubscribe = function () {\n var _args = []; /* [event], listener */\n for (var _i = 0 /* [event], listener */; _i < arguments.length /* [event], listener */; _i++ /* [event], listener */) {\n _args[_i] = arguments[_i]; /* [event], listener */\n }\n var args = realtimechannel_1.default.processListenerArgs(_args);\n var event = args[0];\n var listener = args[1];\n this.subscriptions.off(event, listener);\n };\n return RealtimePresence;\n}(presence_1.default));\nvar PresenceMap = /** @class */ (function (_super) {\n tslib_1.__extends(PresenceMap, _super);\n function PresenceMap(presence, memberKey) {\n var _this = _super.call(this) || this;\n _this.presence = presence;\n _this.map = Object.create(null);\n _this.syncInProgress = false;\n _this.residualMembers = null;\n _this.memberKey = memberKey;\n return _this;\n }\n PresenceMap.prototype.get = function (key) {\n return this.map[key];\n };\n PresenceMap.prototype.getClient = function (clientId) {\n var map = this.map, result = [];\n for (var key in map) {\n var item = map[key];\n if (item.clientId == clientId && item.action != 'absent')\n result.push(item);\n }\n return result;\n };\n PresenceMap.prototype.list = function (params) {\n var map = this.map, clientId = params && params.clientId, connectionId = params && params.connectionId, result = [];\n for (var key in map) {\n var 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 PresenceMap.prototype.put = function (item) {\n if (item.action === 'enter' || item.action === 'update') {\n item = presencemessage_1.default.fromValues(item);\n item.action = 'present';\n }\n var map = this.map, key = this.memberKey(item);\n /* we've seen this member, so do not remove it at the end of sync */\n if (this.residualMembers)\n delete this.residualMembers[key];\n /* compare the timestamp of the new item with any existing member (or ABSENT witness) */\n var existingItem = map[key];\n if (existingItem && !newerThan(item, existingItem)) {\n return false;\n }\n map[key] = item;\n return true;\n };\n PresenceMap.prototype.values = function () {\n var map = this.map, result = [];\n for (var key in map) {\n var item = map[key];\n if (item.action != 'absent')\n result.push(item);\n }\n return result;\n };\n PresenceMap.prototype.remove = function (item) {\n var map = this.map, key = this.memberKey(item);\n var existingItem = map[key];\n if (existingItem && !newerThan(item, existingItem)) {\n return false;\n }\n /* RTP2f */\n if (this.syncInProgress) {\n item = presencemessage_1.default.fromValues(item);\n item.action = 'absent';\n map[key] = item;\n }\n else {\n delete map[key];\n }\n return true;\n };\n PresenceMap.prototype.startSync = function () {\n var map = this.map, syncInProgress = this.syncInProgress;\n logger_1.default.logAction(logger_1.default.LOG_MINOR, 'PresenceMap.startSync()', 'channel = ' + this.presence.channel.name + '; syncInProgress = ' + syncInProgress);\n /* we might be called multiple times while a sync is in progress */\n if (!this.syncInProgress) {\n this.residualMembers = Utils.copy(map);\n this.setInProgress(true);\n }\n };\n PresenceMap.prototype.endSync = function () {\n var map = this.map, syncInProgress = this.syncInProgress;\n logger_1.default.logAction(logger_1.default.LOG_MINOR, 'PresenceMap.endSync()', 'channel = ' + this.presence.channel.name + '; syncInProgress = ' + syncInProgress);\n if (syncInProgress) {\n /* we can now strip out the ABSENT members, as we have\n * received all of the out-of-order sync messages */\n for (var memberKey in map) {\n var entry = map[memberKey];\n if (entry.action === 'absent') {\n delete map[memberKey];\n }\n }\n /* any members that were present at the start of the sync,\n * and have not been seen in sync, can be removed, and leave events emitted */\n this.presence._synthesizeLeaves(Utils.valuesArray(this.residualMembers));\n for (var memberKey in this.residualMembers) {\n delete map[memberKey];\n }\n this.residualMembers = null;\n /* finish, notifying any waiters */\n this.setInProgress(false);\n }\n this.emit('sync');\n };\n PresenceMap.prototype.waitSync = function (callback) {\n var syncInProgress = this.syncInProgress;\n logger_1.default.logAction(logger_1.default.LOG_MINOR, 'PresenceMap.waitSync()', 'channel = ' + this.presence.channel.name + '; syncInProgress = ' + syncInProgress);\n if (!syncInProgress) {\n callback();\n return;\n }\n this.once('sync', callback);\n };\n PresenceMap.prototype.clear = function () {\n this.map = {};\n this.setInProgress(false);\n this.residualMembers = null;\n };\n PresenceMap.prototype.setInProgress = function (inProgress) {\n logger_1.default.logAction(logger_1.default.LOG_MICRO, 'PresenceMap.setInProgress()', 'inProgress = ' + inProgress);\n this.syncInProgress = inProgress;\n this.presence.syncComplete = !inProgress;\n };\n return PresenceMap;\n}(eventemitter_1.default));\nexports.default = RealtimePresence;\n\n\n/***/ }),\n/* 55 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = __webpack_require__(0);\nvar enc_hex_1 = __webpack_require__(56);\nvar enc_utf8_1 = __webpack_require__(31);\nvar enc_base64_1 = __webpack_require__(11);\nvar lib_typedarrays_1 = tslib_1.__importDefault(__webpack_require__(5));\nvar platform_1 = tslib_1.__importDefault(__webpack_require__(3));\nvar BufferUtils = /** @class */ (function () {\n function BufferUtils() {\n this.base64CharSet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n this.hexCharSet = '0123456789abcdef';\n }\n BufferUtils.prototype.isWordArray = function (ob) {\n return ob !== null && ob !== undefined && ob.sigBytes !== undefined;\n };\n BufferUtils.prototype.isArrayBuffer = function (ob) {\n return ob !== null && ob !== undefined && ob.constructor === ArrayBuffer;\n };\n BufferUtils.prototype.isTypedArray = function (ob) {\n return !!ArrayBuffer && ArrayBuffer.isView && ArrayBuffer.isView(ob);\n };\n // // https://gist.githubusercontent.com/jonleighton/958841/raw/f200e30dfe95212c0165ccf1ae000ca51e9de803/gistfile1.js\n BufferUtils.prototype.uint8ViewToBase64 = function (bytes) {\n var base64 = '';\n var encodings = this.base64CharSet;\n var byteLength = bytes.byteLength;\n var byteRemainder = byteLength % 3;\n var mainLength = byteLength - byteRemainder;\n var a, b, c, d;\n var chunk;\n // Main loop deals with bytes in chunks of 3\n for (var i = 0; i < mainLength; i = i + 3) {\n // Combine the three bytes into a single integer\n chunk = (bytes[i] << 16) | (bytes[i + 1] << 8) | bytes[i + 2];\n // Use bitmasks to extract 6-bit segments from the triplet\n a = (chunk & 16515072) >> 18; // 16515072 = (2^6 - 1) << 18\n b = (chunk & 258048) >> 12; // 258048 = (2^6 - 1) << 12\n c = (chunk & 4032) >> 6; // 4032 = (2^6 - 1) << 6\n d = chunk & 63; // 63 = 2^6 - 1\n // Convert the raw binary segments to the appropriate ASCII encoding\n base64 += encodings[a] + encodings[b] + encodings[c] + encodings[d];\n }\n // Deal with the remaining bytes and padding\n if (byteRemainder == 1) {\n chunk = bytes[mainLength];\n a = (chunk & 252) >> 2; // 252 = (2^6 - 1) << 2\n // Set the 4 least significant bits to zero\n b = (chunk & 3) << 4; // 3 = 2^2 - 1\n base64 += encodings[a] + encodings[b] + '==';\n }\n else if (byteRemainder == 2) {\n chunk = (bytes[mainLength] << 8) | bytes[mainLength + 1];\n a = (chunk & 64512) >> 10; // 64512 = (2^6 - 1) << 10\n b = (chunk & 1008) >> 4; // 1008 = (2^6 - 1) << 4\n // Set the 2 least significant bits to zero\n c = (chunk & 15) << 2; // 15 = 2^4 - 1\n base64 += encodings[a] + encodings[b] + encodings[c] + '=';\n }\n return base64;\n };\n BufferUtils.prototype.base64ToArrayBuffer = function (base64) {\n var binary_string = atob === null || atob === void 0 ? void 0 : atob(base64); // this will always be defined in browser so it's safe to cast\n var len = binary_string.length;\n var bytes = new Uint8Array(len);\n for (var i = 0; i < len; i++) {\n var ascii = binary_string.charCodeAt(i);\n bytes[i] = ascii;\n }\n return bytes.buffer;\n };\n BufferUtils.prototype.isBuffer = function (buffer) {\n return this.isArrayBuffer(buffer) || this.isWordArray(buffer) || this.isTypedArray(buffer);\n };\n /* In browsers, returns a Uint8Array */\n BufferUtils.prototype.toBuffer = function (buffer) {\n if (!ArrayBuffer) {\n throw new Error(\"Can't convert to Buffer: browser does not support the necessary types\");\n }\n if (this.isArrayBuffer(buffer)) {\n return new Uint8Array(buffer);\n }\n if (this.isTypedArray(buffer)) {\n return new Uint8Array(buffer.buffer);\n }\n if (this.isWordArray(buffer)) {\n /* Backported from unreleased CryptoJS\n * https://code.google.com/p/crypto-js/source/browse/branches/3.x/src/lib-typedarrays.js?r=661 */\n var arrayBuffer = new ArrayBuffer(buffer.sigBytes);\n var uint8View = new Uint8Array(arrayBuffer);\n for (var i = 0; i < buffer.sigBytes; i++) {\n uint8View[i] = (buffer.words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n }\n return uint8View;\n }\n throw new Error('BufferUtils.toBuffer expected an arraybuffer, typed array, or CryptoJS wordarray');\n };\n BufferUtils.prototype.toArrayBuffer = function (buffer) {\n if (this.isArrayBuffer(buffer)) {\n return buffer;\n }\n return this.toBuffer(buffer).buffer;\n };\n BufferUtils.prototype.toWordArray = function (buffer) {\n if (this.isTypedArray(buffer)) {\n buffer = buffer.buffer;\n }\n return this.isWordArray(buffer) ? buffer : lib_typedarrays_1.default.create(buffer);\n };\n BufferUtils.prototype.base64Encode = function (buffer) {\n if (this.isWordArray(buffer)) {\n return (0, enc_base64_1.stringify)(buffer);\n }\n return this.uint8ViewToBase64(this.toBuffer(buffer));\n };\n BufferUtils.prototype.base64Decode = function (str) {\n if (ArrayBuffer && platform_1.default.Config.atob) {\n return this.base64ToArrayBuffer(str);\n }\n return (0, enc_base64_1.parse)(str);\n };\n BufferUtils.prototype.hexEncode = function (buffer) {\n return (0, enc_hex_1.stringify)(this.toWordArray(buffer));\n };\n BufferUtils.prototype.hexDecode = function (string) {\n var wordArray = (0, enc_hex_1.parse)(string);\n return ArrayBuffer ? this.toArrayBuffer(wordArray) : wordArray;\n };\n BufferUtils.prototype.utf8Encode = function (string) {\n if (platform_1.default.Config.TextEncoder) {\n return new platform_1.default.Config.TextEncoder().encode(string).buffer;\n }\n return (0, enc_utf8_1.parse)(string);\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 BufferUtils.prototype.utf8Decode = function (buffer) {\n if (!this.isBuffer(buffer)) {\n throw new Error('Expected input of utf8decode to be an arraybuffer, typed array, or CryptoJS wordarray');\n }\n if (TextDecoder && !this.isWordArray(buffer)) {\n return new TextDecoder().decode(buffer);\n }\n buffer = this.toWordArray(buffer);\n return (0, enc_utf8_1.stringify)(buffer);\n };\n BufferUtils.prototype.bufferCompare = function (buffer1, buffer2) {\n if (!buffer1)\n return -1;\n if (!buffer2)\n return 1;\n var wordArray1 = this.toWordArray(buffer1);\n var wordArray2 = this.toWordArray(buffer2);\n wordArray1.clamp();\n wordArray2.clamp();\n var cmp = wordArray1.sigBytes - wordArray2.sigBytes;\n if (cmp != 0)\n return cmp;\n var words1 = wordArray1.words;\n var words2 = wordArray2.words;\n for (var i = 0; i < words1.length; i++) {\n cmp = words1[i] - words2[i];\n if (cmp != 0)\n return cmp;\n }\n return 0;\n };\n BufferUtils.prototype.byteLength = function (buffer) {\n if (this.isArrayBuffer(buffer) || this.isTypedArray(buffer)) {\n return buffer.byteLength;\n }\n else if (this.isWordArray(buffer)) {\n return buffer.sigBytes;\n }\n return -1;\n };\n /* Returns ArrayBuffer on browser and Buffer on Node.js */\n BufferUtils.prototype.typedArrayToBuffer = function (typedArray) {\n return typedArray.buffer;\n };\n return BufferUtils;\n}());\nexports.default = new BufferUtils();\n\n\n/***/ }),\n/* 56 */\n/***/ (function(module, exports, __webpack_require__) {\n\n;(function (root, factory) {\n\tif (true) {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(__webpack_require__(6));\n\t}\n\telse {}\n}(this, function (CryptoJS) {\n\n\treturn CryptoJS.enc.Hex;\n\n}));\n\n/***/ }),\n/* 57 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var crypto_js_build_lib_typedarrays__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(5);\n/* harmony import */ var crypto_js_build_lib_typedarrays__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(crypto_js_build_lib_typedarrays__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var crypto_js_build_enc_base64__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(11);\n/* harmony import */ var crypto_js_build_enc_base64__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(crypto_js_build_enc_base64__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var crypto_js_build__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(21);\n/* harmony import */ var crypto_js_build__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(crypto_js_build__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _common_lib_util_logger__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(2);\n/* harmony import */ var _common_lib_util_logger__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_common_lib_util_logger__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var common_lib_types_errorinfo__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(4);\n/* harmony import */ var common_lib_types_errorinfo__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(common_lib_types_errorinfo__WEBPACK_IMPORTED_MODULE_4__);\n\n\n\n\n\n\nvar CryptoFactory = function (config, bufferUtils) {\n var DEFAULT_ALGORITHM = 'aes';\n var DEFAULT_KEYLENGTH = 256; // bits\n var DEFAULT_MODE = 'cbc';\n var DEFAULT_BLOCKLENGTH = 16; // bytes\n var DEFAULT_BLOCKLENGTH_WORDS = 4; // 32-bit words\n var UINT32_SUP = 0x100000000;\n var INT32_SUP = 0x80000000;\n\n /**\n * Internal: generate an array of secure random words corresponding to the given length of bytes\n * @param bytes\n * @param callback\n */\n var generateRandom;\n if (config.getRandomWordArray) {\n generateRandom = config.getRandomWordArray;\n } else if (typeof Uint32Array !== 'undefined' && config.getRandomValues) {\n var blockRandomArray = new Uint32Array(DEFAULT_BLOCKLENGTH_WORDS);\n generateRandom = function (bytes, callback) {\n var words = bytes / 4,\n nativeArray = words == DEFAULT_BLOCKLENGTH_WORDS ? blockRandomArray : new Uint32Array(words);\n config.getRandomValues(nativeArray, function (err) {\n if (typeof callback !== 'undefined') {\n callback(err, bufferUtils.toWordArray(nativeArray));\n }\n });\n };\n } else {\n generateRandom = function (bytes, callback) {\n _common_lib_util_logger__WEBPACK_IMPORTED_MODULE_3___default.a.logAction(\n _common_lib_util_logger__WEBPACK_IMPORTED_MODULE_3___default.a.LOG_MAJOR,\n 'Ably.Crypto.generateRandom()',\n 'Warning: the browser you are using does not support secure cryptographically secure randomness generation; falling back to insecure Math.random()'\n );\n var words = bytes / 4,\n array = new Array(words);\n for (var i = 0; i < words; i++) {\n /* cryptojs wordarrays use signed ints. When WordArray.create is fed a\n * Uint32Array unsigned are converted to signed automatically, but when\n * fed a normal array they aren't, so need to do so ourselves by\n * subtracting INT32_SUP */\n array[i] = Math.floor(Math.random() * UINT32_SUP) - INT32_SUP;\n }\n\n callback(null, crypto_js_build_lib_typedarrays__WEBPACK_IMPORTED_MODULE_0___default.a.create(array));\n };\n }\n\n /**\n * Internal: calculate the padded length of a given plaintext\n * using PKCS5.\n * @param plaintextLength\n * @return\n */\n function getPaddedLength(plaintextLength) {\n return (plaintextLength + DEFAULT_BLOCKLENGTH) & -DEFAULT_BLOCKLENGTH;\n }\n\n /**\n * Internal: checks that the cipherParams are a valid combination. Currently\n * just checks that the calculated keyLength is a valid one for aes-cbc\n */\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 ' +\n params.keyLength +\n ' for aes-cbc encryption. Encryption key must be 128 or 256 bits (16 or 32 ASCII characters)'\n );\n }\n }\n\n function normaliseBase64(string) {\n /* url-safe base64 strings use _ and - instread of / and + */\n return string.replace('_', '/').replace('-', '+');\n }\n\n /**\n * Internal: obtain the pkcs5 padding string for a given padded length;\n */\n var pkcs5Padding = [\n crypto_js_build_lib_typedarrays__WEBPACK_IMPORTED_MODULE_0___default.a.create([0x10101010, 0x10101010, 0x10101010, 0x10101010], 16),\n crypto_js_build_lib_typedarrays__WEBPACK_IMPORTED_MODULE_0___default.a.create([0x01000000], 1),\n crypto_js_build_lib_typedarrays__WEBPACK_IMPORTED_MODULE_0___default.a.create([0x02020000], 2),\n crypto_js_build_lib_typedarrays__WEBPACK_IMPORTED_MODULE_0___default.a.create([0x03030300], 3),\n crypto_js_build_lib_typedarrays__WEBPACK_IMPORTED_MODULE_0___default.a.create([0x04040404], 4),\n crypto_js_build_lib_typedarrays__WEBPACK_IMPORTED_MODULE_0___default.a.create([0x05050505, 0x05000000], 5),\n crypto_js_build_lib_typedarrays__WEBPACK_IMPORTED_MODULE_0___default.a.create([0x06060606, 0x06060000], 6),\n crypto_js_build_lib_typedarrays__WEBPACK_IMPORTED_MODULE_0___default.a.create([0x07070707, 0x07070700], 7),\n crypto_js_build_lib_typedarrays__WEBPACK_IMPORTED_MODULE_0___default.a.create([0x08080808, 0x08080808], 8),\n crypto_js_build_lib_typedarrays__WEBPACK_IMPORTED_MODULE_0___default.a.create([0x09090909, 0x09090909, 0x09000000], 9),\n crypto_js_build_lib_typedarrays__WEBPACK_IMPORTED_MODULE_0___default.a.create([0x0a0a0a0a, 0x0a0a0a0a, 0x0a0a0000], 10),\n crypto_js_build_lib_typedarrays__WEBPACK_IMPORTED_MODULE_0___default.a.create([0x0b0b0b0b, 0x0b0b0b0b, 0x0b0b0b00], 11),\n crypto_js_build_lib_typedarrays__WEBPACK_IMPORTED_MODULE_0___default.a.create([0x0c0c0c0c, 0x0c0c0c0c, 0x0c0c0c0c], 12),\n crypto_js_build_lib_typedarrays__WEBPACK_IMPORTED_MODULE_0___default.a.create([0x0d0d0d0d, 0x0d0d0d0d, 0x0d0d0d0d, 0x0d000000], 13),\n crypto_js_build_lib_typedarrays__WEBPACK_IMPORTED_MODULE_0___default.a.create([0x0e0e0e0e, 0x0e0e0e0e, 0x0e0e0e0e, 0x0e0e0000], 14),\n crypto_js_build_lib_typedarrays__WEBPACK_IMPORTED_MODULE_0___default.a.create([0x0f0f0f0f, 0x0f0f0f0f, 0x0f0f0f0f, 0x0f0f0f0f], 15),\n crypto_js_build_lib_typedarrays__WEBPACK_IMPORTED_MODULE_0___default.a.create([0x10101010, 0x10101010, 0x10101010, 0x10101010], 16),\n ];\n\n /**\n * Utility classes and interfaces for message payload encryption.\n *\n * This class supports AES/CBC/PKCS5 with a default keylength of 128 bits\n * but supporting other keylengths. Other algorithms and chaining modes are\n * not supported directly, but supportable by extending/implementing the base\n * classes and interfaces here.\n *-\n * Secure random data for creation of Initialization Vectors (IVs) and keys\n * is obtained from window.crypto.getRandomValues if available, or from\n * Math.random() if not. Clients who do not want to depend on Math.random()\n * should polyfill window.crypto.getRandomValues with a library that seeds\n * a PRNG with real entropy.\n *\n * Each message payload is encrypted with an IV in CBC mode, and the IV is\n * concatenated with the resulting raw ciphertext to construct the \"ciphertext\"\n * data passed to the recipient.\n */\n function Crypto() {}\n\n /**\n * A class encapsulating the client-specifiable parameters for\n * the cipher.\n *\n * algorithm is the name of the algorithm in the default system provider,\n * or the lower-cased version of it; eg \"aes\" or \"AES\".\n *\n * Clients are recommended to not call this directly, but instead to use the\n * Crypto.getDefaultParams helper, which will fill in any fields not supplied\n * with default values and validation the result.\n */\n function CipherParams() {\n this.algorithm = null;\n this.keyLength = null;\n this.mode = null;\n this.key = null;\n }\n Crypto.CipherParams = CipherParams;\n\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 (ArrayBuffer, Array, WordArray) or a\n * base64-encoded string. May optionally also contain: algorithm (defaults to\n * AES), mode (defaults to 'cbc')\n */\n Crypto.getDefaultParams = function (params) {\n var key;\n /* Backward compatibility */\n if (typeof params === 'function' || typeof params === 'string') {\n _common_lib_util_logger__WEBPACK_IMPORTED_MODULE_3___default.a.deprecated('Crypto.getDefaultParams(key, callback)', 'Crypto.getDefaultParams({key: key})');\n if (typeof params === 'function') {\n Crypto.generateRandomKey(function (key) {\n params(null, Crypto.getDefaultParams({ key: key }));\n });\n } else if (typeof arguments[1] === 'function') {\n arguments[1](null, Crypto.getDefaultParams({ key: params }));\n } else {\n throw new Error('Invalid arguments for Crypto.getDefaultParams');\n }\n return;\n }\n\n if (!params.key) {\n throw new Error('Crypto.getDefaultParams: a key is required');\n }\n\n if (typeof params.key === 'string') {\n key = Object(crypto_js_build_enc_base64__WEBPACK_IMPORTED_MODULE_1__[\"parse\"])(normaliseBase64(params.key));\n } else {\n key = bufferUtils.toWordArray(params.key); // Expect key to be an Array, ArrayBuffer, or WordArray at this point\n }\n\n var cipherParams = new CipherParams();\n cipherParams.key = key;\n cipherParams.algorithm = params.algorithm || DEFAULT_ALGORITHM;\n cipherParams.keyLength = key.words.length * (4 * 8);\n cipherParams.mode = params.mode || DEFAULT_MODE;\n\n if (params.keyLength && params.keyLength !== cipherParams.keyLength) {\n throw new Error(\n 'Crypto.getDefaultParams: a keyLength of ' +\n params.keyLength +\n ' was specified, but the key actually has length ' +\n cipherParams.keyLength\n );\n }\n\n validateCipherParams(cipherParams);\n return cipherParams;\n };\n\n /**\n * Generate a random encryption key from the supplied keylength (or the\n * default keyLength if none supplied) as a CryptoJS WordArray\n * @param keyLength (optional) the required keyLength in bits\n * @param callback (optional) (err, key)\n */\n Crypto.generateRandomKey = function (keyLength, callback) {\n if (arguments.length == 1 && typeof keyLength == 'function') {\n callback = keyLength;\n keyLength = undefined;\n }\n\n generateRandom((keyLength || DEFAULT_KEYLENGTH) / 8, function (err, buf) {\n if (callback !== undefined) {\n callback(err ? common_lib_types_errorinfo__WEBPACK_IMPORTED_MODULE_4___default.a.fromValues(err) : null, buf);\n }\n });\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 Crypto.getCipher = function (params) {\n var cipherParams = params instanceof CipherParams ? params : Crypto.getDefaultParams(params);\n\n return { cipherParams: cipherParams, cipher: new CBCCipher(cipherParams, DEFAULT_BLOCKLENGTH_WORDS, params.iv) };\n };\n\n function CBCCipher(params, blockLengthWords, iv) {\n this.algorithm = params.algorithm + '-' + String(params.keyLength) + '-' + params.mode;\n this.cjsAlgorithm = params.algorithm.toUpperCase().replace(/-\\d+$/, '');\n this.key = bufferUtils.toWordArray(params.key);\n if (iv) {\n this.iv = bufferUtils.toWordArray(iv).clone();\n }\n this.blockLengthWords = blockLengthWords;\n }\n\n CBCCipher.prototype.encrypt = function (plaintext, callback) {\n _common_lib_util_logger__WEBPACK_IMPORTED_MODULE_3___default.a.logAction(_common_lib_util_logger__WEBPACK_IMPORTED_MODULE_3___default.a.LOG_MICRO, 'CBCCipher.encrypt()', '');\n plaintext = bufferUtils.toWordArray(plaintext);\n var plaintextLength = plaintext.sigBytes,\n paddedLength = getPaddedLength(plaintextLength),\n self = this;\n\n var then = function () {\n self.getIv(function (err, iv) {\n if (err) {\n callback(err);\n return;\n }\n var cipherOut = self.encryptCipher.process(plaintext.concat(pkcs5Padding[paddedLength - plaintextLength]));\n var ciphertext = iv.concat(cipherOut);\n callback(null, ciphertext);\n });\n };\n\n if (!this.encryptCipher) {\n if (this.iv) {\n this.encryptCipher = crypto_js_build__WEBPACK_IMPORTED_MODULE_2___default.a.algo[this.cjsAlgorithm].createEncryptor(this.key, { iv: this.iv });\n then();\n } else {\n generateRandom(DEFAULT_BLOCKLENGTH, function (err, iv) {\n if (err) {\n callback(err);\n return;\n }\n self.encryptCipher = crypto_js_build__WEBPACK_IMPORTED_MODULE_2___default.a.algo[self.cjsAlgorithm].createEncryptor(self.key, { iv: iv });\n self.iv = iv;\n then();\n });\n }\n } else {\n then();\n }\n };\n\n CBCCipher.prototype.decrypt = function (ciphertext) {\n _common_lib_util_logger__WEBPACK_IMPORTED_MODULE_3___default.a.logAction(_common_lib_util_logger__WEBPACK_IMPORTED_MODULE_3___default.a.LOG_MICRO, 'CBCCipher.decrypt()', '');\n ciphertext = bufferUtils.toWordArray(ciphertext);\n var blockLengthWords = this.blockLengthWords,\n ciphertextWords = ciphertext.words,\n iv = crypto_js_build_lib_typedarrays__WEBPACK_IMPORTED_MODULE_0___default.a.create(ciphertextWords.slice(0, blockLengthWords)),\n ciphertextBody = crypto_js_build_lib_typedarrays__WEBPACK_IMPORTED_MODULE_0___default.a.create(ciphertextWords.slice(blockLengthWords));\n\n var decryptCipher = crypto_js_build__WEBPACK_IMPORTED_MODULE_2___default.a.algo[this.cjsAlgorithm].createDecryptor(this.key, { iv: iv });\n var plaintext = decryptCipher.process(ciphertextBody);\n var epilogue = decryptCipher.finalize();\n decryptCipher.reset();\n if (epilogue && epilogue.sigBytes) plaintext.concat(epilogue);\n return plaintext;\n };\n\n CBCCipher.prototype.getIv = function (callback) {\n if (this.iv) {\n var iv = this.iv;\n this.iv = null;\n callback(null, iv);\n return;\n }\n\n /* Since the iv for a new block is the ciphertext of the last, this\n * sets a new iv (= aes(randomBlock XOR lastCipherText)) as well as\n * returning it */\n var self = this;\n generateRandom(DEFAULT_BLOCKLENGTH, function (err, randomBlock) {\n if (err) {\n callback(err);\n return;\n }\n callback(null, self.encryptCipher.process(randomBlock));\n });\n };\n\n return Crypto;\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (CryptoFactory);\n\n\n/***/ }),\n/* 58 */\n/***/ (function(module, exports, __webpack_require__) {\n\n;(function (root, factory) {\n\tif (true) {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(__webpack_require__(6));\n\t}\n\telse {}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var C_enc = C.enc;\n\n\t /**\n\t * UTF-16 BE encoding strategy.\n\t */\n\t var Utf16BE = C_enc.Utf16 = C_enc.Utf16BE = {\n\t /**\n\t * Converts a word array to a UTF-16 BE string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The UTF-16 BE string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var utf16String = CryptoJS.enc.Utf16.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\n\t // Convert\n\t var utf16Chars = [];\n\t for (var i = 0; i < sigBytes; i += 2) {\n\t var codePoint = (words[i >>> 2] >>> (16 - (i % 4) * 8)) & 0xffff;\n\t utf16Chars.push(String.fromCharCode(codePoint));\n\t }\n\n\t return utf16Chars.join('');\n\t },\n\n\t /**\n\t * Converts a UTF-16 BE string to a word array.\n\t *\n\t * @param {string} utf16Str The UTF-16 BE string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Utf16.parse(utf16String);\n\t */\n\t parse: function (utf16Str) {\n\t // Shortcut\n\t var utf16StrLength = utf16Str.length;\n\n\t // Convert\n\t var words = [];\n\t for (var i = 0; i < utf16StrLength; i++) {\n\t words[i >>> 1] |= utf16Str.charCodeAt(i) << (16 - (i % 2) * 16);\n\t }\n\n\t return WordArray.create(words, utf16StrLength * 2);\n\t }\n\t };\n\n\t /**\n\t * UTF-16 LE encoding strategy.\n\t */\n\t C_enc.Utf16LE = {\n\t /**\n\t * Converts a word array to a UTF-16 LE string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The UTF-16 LE string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var utf16Str = CryptoJS.enc.Utf16LE.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\n\t // Convert\n\t var utf16Chars = [];\n\t for (var i = 0; i < sigBytes; i += 2) {\n\t var codePoint = swapEndian((words[i >>> 2] >>> (16 - (i % 4) * 8)) & 0xffff);\n\t utf16Chars.push(String.fromCharCode(codePoint));\n\t }\n\n\t return utf16Chars.join('');\n\t },\n\n\t /**\n\t * Converts a UTF-16 LE string to a word array.\n\t *\n\t * @param {string} utf16Str The UTF-16 LE string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Utf16LE.parse(utf16Str);\n\t */\n\t parse: function (utf16Str) {\n\t // Shortcut\n\t var utf16StrLength = utf16Str.length;\n\n\t // Convert\n\t var words = [];\n\t for (var i = 0; i < utf16StrLength; i++) {\n\t words[i >>> 1] |= swapEndian(utf16Str.charCodeAt(i) << (16 - (i % 2) * 16));\n\t }\n\n\t return WordArray.create(words, utf16StrLength * 2);\n\t }\n\t };\n\n\t function swapEndian(word) {\n\t return ((word << 8) & 0xff00ff00) | ((word >>> 8) & 0x00ff00ff);\n\t }\n\t}());\n\n\n\treturn CryptoJS.enc.Utf16;\n\n}));\n\n/***/ }),\n/* 59 */\n/***/ (function(module, exports, __webpack_require__) {\n\n;(function (root, factory) {\n\tif (true) {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(__webpack_require__(6), __webpack_require__(28));\n\t}\n\telse {}\n}(this, function (CryptoJS) {\n\n\t(function (undefined) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var CipherParams = C_lib.CipherParams;\n\t var C_enc = C.enc;\n\t var Hex = C_enc.Hex;\n\t var C_format = C.format;\n\n\t var HexFormatter = C_format.Hex = {\n\t /**\n\t * Converts the ciphertext of a cipher params object to a hexadecimally encoded string.\n\t *\n\t * @param {CipherParams} cipherParams The cipher params object.\n\t *\n\t * @return {string} The hexadecimally encoded string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hexString = CryptoJS.format.Hex.stringify(cipherParams);\n\t */\n\t stringify: function (cipherParams) {\n\t return cipherParams.ciphertext.toString(Hex);\n\t },\n\n\t /**\n\t * Converts a hexadecimally encoded ciphertext string to a cipher params object.\n\t *\n\t * @param {string} input The hexadecimally encoded string.\n\t *\n\t * @return {CipherParams} The cipher params object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var cipherParams = CryptoJS.format.Hex.parse(hexString);\n\t */\n\t parse: function (input) {\n\t var ciphertext = Hex.parse(input);\n\t return CipherParams.create({ ciphertext: ciphertext });\n\t }\n\t };\n\t}());\n\n\n\treturn CryptoJS.format.Hex;\n\n}));\n\n/***/ }),\n/* 60 */\n/***/ (function(module, exports, __webpack_require__) {\n\n;(function (root, factory) {\n\tif (true) {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(__webpack_require__(6), __webpack_require__(11), __webpack_require__(61), __webpack_require__(27), __webpack_require__(28));\n\t}\n\telse {}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var BlockCipher = C_lib.BlockCipher;\n\t var C_algo = C.algo;\n\n\t // Lookup tables\n\t var SBOX = [];\n\t var INV_SBOX = [];\n\t var SUB_MIX_0 = [];\n\t var SUB_MIX_1 = [];\n\t var SUB_MIX_2 = [];\n\t var SUB_MIX_3 = [];\n\t var INV_SUB_MIX_0 = [];\n\t var INV_SUB_MIX_1 = [];\n\t var INV_SUB_MIX_2 = [];\n\t var INV_SUB_MIX_3 = [];\n\n\t // Compute lookup tables\n\t (function () {\n\t // Compute double table\n\t var d = [];\n\t for (var i = 0; i < 256; i++) {\n\t if (i < 128) {\n\t d[i] = i << 1;\n\t } else {\n\t d[i] = (i << 1) ^ 0x11b;\n\t }\n\t }\n\n\t // Walk GF(2^8)\n\t var x = 0;\n\t var xi = 0;\n\t for (var i = 0; i < 256; i++) {\n\t // Compute sbox\n\t var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4);\n\t sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63;\n\t SBOX[x] = sx;\n\t INV_SBOX[sx] = x;\n\n\t // Compute multiplication\n\t var x2 = d[x];\n\t var x4 = d[x2];\n\t var x8 = d[x4];\n\n\t // Compute sub bytes, mix columns tables\n\t var t = (d[sx] * 0x101) ^ (sx * 0x1010100);\n\t SUB_MIX_0[x] = (t << 24) | (t >>> 8);\n\t SUB_MIX_1[x] = (t << 16) | (t >>> 16);\n\t SUB_MIX_2[x] = (t << 8) | (t >>> 24);\n\t SUB_MIX_3[x] = t;\n\n\t // Compute inv sub bytes, inv mix columns tables\n\t var t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100);\n\t INV_SUB_MIX_0[sx] = (t << 24) | (t >>> 8);\n\t INV_SUB_MIX_1[sx] = (t << 16) | (t >>> 16);\n\t INV_SUB_MIX_2[sx] = (t << 8) | (t >>> 24);\n\t INV_SUB_MIX_3[sx] = t;\n\n\t // Compute next counter\n\t if (!x) {\n\t x = xi = 1;\n\t } else {\n\t x = x2 ^ d[d[d[x8 ^ x2]]];\n\t xi ^= d[d[xi]];\n\t }\n\t }\n\t }());\n\n\t // Precomputed Rcon lookup\n\t var RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36];\n\n\t /**\n\t * AES block cipher algorithm.\n\t */\n\t var AES = C_algo.AES = BlockCipher.extend({\n\t _doReset: function () {\n\t var t;\n\n\t // Skip reset of nRounds has been set before and key did not change\n\t if (this._nRounds && this._keyPriorReset === this._key) {\n\t return;\n\t }\n\n\t // Shortcuts\n\t var key = this._keyPriorReset = this._key;\n\t var keyWords = key.words;\n\t var keySize = key.sigBytes / 4;\n\n\t // Compute number of rounds\n\t var nRounds = this._nRounds = keySize + 6;\n\n\t // Compute number of key schedule rows\n\t var ksRows = (nRounds + 1) * 4;\n\n\t // Compute key schedule\n\t var keySchedule = this._keySchedule = [];\n\t for (var ksRow = 0; ksRow < ksRows; ksRow++) {\n\t if (ksRow < keySize) {\n\t keySchedule[ksRow] = keyWords[ksRow];\n\t } else {\n\t t = keySchedule[ksRow - 1];\n\n\t if (!(ksRow % keySize)) {\n\t // Rot word\n\t t = (t << 8) | (t >>> 24);\n\n\t // Sub word\n\t t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff];\n\n\t // Mix Rcon\n\t t ^= RCON[(ksRow / keySize) | 0] << 24;\n\t } else if (keySize > 6 && ksRow % keySize == 4) {\n\t // Sub word\n\t t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff];\n\t }\n\n\t keySchedule[ksRow] = keySchedule[ksRow - keySize] ^ t;\n\t }\n\t }\n\n\t // Compute inv key schedule\n\t var invKeySchedule = this._invKeySchedule = [];\n\t for (var invKsRow = 0; invKsRow < ksRows; invKsRow++) {\n\t var ksRow = ksRows - invKsRow;\n\n\t if (invKsRow % 4) {\n\t var t = keySchedule[ksRow];\n\t } else {\n\t var t = keySchedule[ksRow - 4];\n\t }\n\n\t if (invKsRow < 4 || ksRow <= 4) {\n\t invKeySchedule[invKsRow] = t;\n\t } else {\n\t invKeySchedule[invKsRow] = INV_SUB_MIX_0[SBOX[t >>> 24]] ^ INV_SUB_MIX_1[SBOX[(t >>> 16) & 0xff]] ^\n\t INV_SUB_MIX_2[SBOX[(t >>> 8) & 0xff]] ^ INV_SUB_MIX_3[SBOX[t & 0xff]];\n\t }\n\t }\n\t },\n\n\t encryptBlock: function (M, offset) {\n\t this._doCryptBlock(M, offset, this._keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX);\n\t },\n\n\t decryptBlock: function (M, offset) {\n\t // Swap 2nd and 4th rows\n\t var t = M[offset + 1];\n\t M[offset + 1] = M[offset + 3];\n\t M[offset + 3] = t;\n\n\t this._doCryptBlock(M, offset, this._invKeySchedule, INV_SUB_MIX_0, INV_SUB_MIX_1, INV_SUB_MIX_2, INV_SUB_MIX_3, INV_SBOX);\n\n\t // Inv swap 2nd and 4th rows\n\t var t = M[offset + 1];\n\t M[offset + 1] = M[offset + 3];\n\t M[offset + 3] = t;\n\t },\n\n\t _doCryptBlock: function (M, offset, keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX) {\n\t // Shortcut\n\t var nRounds = this._nRounds;\n\n\t // Get input, add round key\n\t var s0 = M[offset] ^ keySchedule[0];\n\t var s1 = M[offset + 1] ^ keySchedule[1];\n\t var s2 = M[offset + 2] ^ keySchedule[2];\n\t var s3 = M[offset + 3] ^ keySchedule[3];\n\n\t // Key schedule row counter\n\t var ksRow = 4;\n\n\t // Rounds\n\t for (var round = 1; round < nRounds; round++) {\n\t // Shift rows, sub bytes, mix columns, add round key\n\t var t0 = SUB_MIX_0[s0 >>> 24] ^ SUB_MIX_1[(s1 >>> 16) & 0xff] ^ SUB_MIX_2[(s2 >>> 8) & 0xff] ^ SUB_MIX_3[s3 & 0xff] ^ keySchedule[ksRow++];\n\t var t1 = SUB_MIX_0[s1 >>> 24] ^ SUB_MIX_1[(s2 >>> 16) & 0xff] ^ SUB_MIX_2[(s3 >>> 8) & 0xff] ^ SUB_MIX_3[s0 & 0xff] ^ keySchedule[ksRow++];\n\t var t2 = SUB_MIX_0[s2 >>> 24] ^ SUB_MIX_1[(s3 >>> 16) & 0xff] ^ SUB_MIX_2[(s0 >>> 8) & 0xff] ^ SUB_MIX_3[s1 & 0xff] ^ keySchedule[ksRow++];\n\t var t3 = SUB_MIX_0[s3 >>> 24] ^ SUB_MIX_1[(s0 >>> 16) & 0xff] ^ SUB_MIX_2[(s1 >>> 8) & 0xff] ^ SUB_MIX_3[s2 & 0xff] ^ keySchedule[ksRow++];\n\n\t // Update state\n\t s0 = t0;\n\t s1 = t1;\n\t s2 = t2;\n\t s3 = t3;\n\t }\n\n\t // Shift rows, sub bytes, add round key\n\t var t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++];\n\t var t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++];\n\t var t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++];\n\t var t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++];\n\n\t // Set output\n\t M[offset] = t0;\n\t M[offset + 1] = t1;\n\t M[offset + 2] = t2;\n\t M[offset + 3] = t3;\n\t },\n\n\t keySize: 256/32\n\t });\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.AES.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.AES.decrypt(ciphertext, key, cfg);\n\t */\n\t C.AES = BlockCipher._createHelper(AES);\n\t}());\n\n\n\treturn CryptoJS.AES;\n\n}));\n\n/***/ }),\n/* 61 */\n/***/ (function(module, exports, __webpack_require__) {\n\n;(function (root, factory) {\n\tif (true) {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(__webpack_require__(6));\n\t}\n\telse {}\n}(this, function (CryptoJS) {\n\n\t(function (Math) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var Hasher = C_lib.Hasher;\n\t var C_algo = C.algo;\n\n\t // Constants table\n\t var T = [];\n\n\t // Compute constants\n\t (function () {\n\t for (var i = 0; i < 64; i++) {\n\t T[i] = (Math.abs(Math.sin(i + 1)) * 0x100000000) | 0;\n\t }\n\t }());\n\n\t /**\n\t * MD5 hash algorithm.\n\t */\n\t var MD5 = C_algo.MD5 = Hasher.extend({\n\t _doReset: function () {\n\t this._hash = new WordArray.init([\n\t 0x67452301, 0xefcdab89,\n\t 0x98badcfe, 0x10325476\n\t ]);\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Swap endian\n\t for (var i = 0; i < 16; i++) {\n\t // Shortcuts\n\t var offset_i = offset + i;\n\t var M_offset_i = M[offset_i];\n\n\t M[offset_i] = (\n\t (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |\n\t (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)\n\t );\n\t }\n\n\t // Shortcuts\n\t var H = this._hash.words;\n\n\t var M_offset_0 = M[offset + 0];\n\t var M_offset_1 = M[offset + 1];\n\t var M_offset_2 = M[offset + 2];\n\t var M_offset_3 = M[offset + 3];\n\t var M_offset_4 = M[offset + 4];\n\t var M_offset_5 = M[offset + 5];\n\t var M_offset_6 = M[offset + 6];\n\t var M_offset_7 = M[offset + 7];\n\t var M_offset_8 = M[offset + 8];\n\t var M_offset_9 = M[offset + 9];\n\t var M_offset_10 = M[offset + 10];\n\t var M_offset_11 = M[offset + 11];\n\t var M_offset_12 = M[offset + 12];\n\t var M_offset_13 = M[offset + 13];\n\t var M_offset_14 = M[offset + 14];\n\t var M_offset_15 = M[offset + 15];\n\n\t // Working varialbes\n\t var a = H[0];\n\t var b = H[1];\n\t var c = H[2];\n\t var d = H[3];\n\n\t // Computation\n\t a = FF(a, b, c, d, M_offset_0, 7, T[0]);\n\t d = FF(d, a, b, c, M_offset_1, 12, T[1]);\n\t c = FF(c, d, a, b, M_offset_2, 17, T[2]);\n\t b = FF(b, c, d, a, M_offset_3, 22, T[3]);\n\t a = FF(a, b, c, d, M_offset_4, 7, T[4]);\n\t d = FF(d, a, b, c, M_offset_5, 12, T[5]);\n\t c = FF(c, d, a, b, M_offset_6, 17, T[6]);\n\t b = FF(b, c, d, a, M_offset_7, 22, T[7]);\n\t a = FF(a, b, c, d, M_offset_8, 7, T[8]);\n\t d = FF(d, a, b, c, M_offset_9, 12, T[9]);\n\t c = FF(c, d, a, b, M_offset_10, 17, T[10]);\n\t b = FF(b, c, d, a, M_offset_11, 22, T[11]);\n\t a = FF(a, b, c, d, M_offset_12, 7, T[12]);\n\t d = FF(d, a, b, c, M_offset_13, 12, T[13]);\n\t c = FF(c, d, a, b, M_offset_14, 17, T[14]);\n\t b = FF(b, c, d, a, M_offset_15, 22, T[15]);\n\n\t a = GG(a, b, c, d, M_offset_1, 5, T[16]);\n\t d = GG(d, a, b, c, M_offset_6, 9, T[17]);\n\t c = GG(c, d, a, b, M_offset_11, 14, T[18]);\n\t b = GG(b, c, d, a, M_offset_0, 20, T[19]);\n\t a = GG(a, b, c, d, M_offset_5, 5, T[20]);\n\t d = GG(d, a, b, c, M_offset_10, 9, T[21]);\n\t c = GG(c, d, a, b, M_offset_15, 14, T[22]);\n\t b = GG(b, c, d, a, M_offset_4, 20, T[23]);\n\t a = GG(a, b, c, d, M_offset_9, 5, T[24]);\n\t d = GG(d, a, b, c, M_offset_14, 9, T[25]);\n\t c = GG(c, d, a, b, M_offset_3, 14, T[26]);\n\t b = GG(b, c, d, a, M_offset_8, 20, T[27]);\n\t a = GG(a, b, c, d, M_offset_13, 5, T[28]);\n\t d = GG(d, a, b, c, M_offset_2, 9, T[29]);\n\t c = GG(c, d, a, b, M_offset_7, 14, T[30]);\n\t b = GG(b, c, d, a, M_offset_12, 20, T[31]);\n\n\t a = HH(a, b, c, d, M_offset_5, 4, T[32]);\n\t d = HH(d, a, b, c, M_offset_8, 11, T[33]);\n\t c = HH(c, d, a, b, M_offset_11, 16, T[34]);\n\t b = HH(b, c, d, a, M_offset_14, 23, T[35]);\n\t a = HH(a, b, c, d, M_offset_1, 4, T[36]);\n\t d = HH(d, a, b, c, M_offset_4, 11, T[37]);\n\t c = HH(c, d, a, b, M_offset_7, 16, T[38]);\n\t b = HH(b, c, d, a, M_offset_10, 23, T[39]);\n\t a = HH(a, b, c, d, M_offset_13, 4, T[40]);\n\t d = HH(d, a, b, c, M_offset_0, 11, T[41]);\n\t c = HH(c, d, a, b, M_offset_3, 16, T[42]);\n\t b = HH(b, c, d, a, M_offset_6, 23, T[43]);\n\t a = HH(a, b, c, d, M_offset_9, 4, T[44]);\n\t d = HH(d, a, b, c, M_offset_12, 11, T[45]);\n\t c = HH(c, d, a, b, M_offset_15, 16, T[46]);\n\t b = HH(b, c, d, a, M_offset_2, 23, T[47]);\n\n\t a = II(a, b, c, d, M_offset_0, 6, T[48]);\n\t d = II(d, a, b, c, M_offset_7, 10, T[49]);\n\t c = II(c, d, a, b, M_offset_14, 15, T[50]);\n\t b = II(b, c, d, a, M_offset_5, 21, T[51]);\n\t a = II(a, b, c, d, M_offset_12, 6, T[52]);\n\t d = II(d, a, b, c, M_offset_3, 10, T[53]);\n\t c = II(c, d, a, b, M_offset_10, 15, T[54]);\n\t b = II(b, c, d, a, M_offset_1, 21, T[55]);\n\t a = II(a, b, c, d, M_offset_8, 6, T[56]);\n\t d = II(d, a, b, c, M_offset_15, 10, T[57]);\n\t c = II(c, d, a, b, M_offset_6, 15, T[58]);\n\t b = II(b, c, d, a, M_offset_13, 21, T[59]);\n\t a = II(a, b, c, d, M_offset_4, 6, T[60]);\n\t d = II(d, a, b, c, M_offset_11, 10, T[61]);\n\t c = II(c, d, a, b, M_offset_2, 15, T[62]);\n\t b = II(b, c, d, a, M_offset_9, 21, T[63]);\n\n\t // Intermediate hash value\n\t H[0] = (H[0] + a) | 0;\n\t H[1] = (H[1] + b) | 0;\n\t H[2] = (H[2] + c) | 0;\n\t H[3] = (H[3] + d) | 0;\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\n\t var nBitsTotalH = Math.floor(nBitsTotal / 0x100000000);\n\t var nBitsTotalL = nBitsTotal;\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = (\n\t (((nBitsTotalH << 8) | (nBitsTotalH >>> 24)) & 0x00ff00ff) |\n\t (((nBitsTotalH << 24) | (nBitsTotalH >>> 8)) & 0xff00ff00)\n\t );\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (\n\t (((nBitsTotalL << 8) | (nBitsTotalL >>> 24)) & 0x00ff00ff) |\n\t (((nBitsTotalL << 24) | (nBitsTotalL >>> 8)) & 0xff00ff00)\n\t );\n\n\t data.sigBytes = (dataWords.length + 1) * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Shortcuts\n\t var hash = this._hash;\n\t var H = hash.words;\n\n\t // Swap endian\n\t for (var i = 0; i < 4; i++) {\n\t // Shortcut\n\t var H_i = H[i];\n\n\t H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |\n\t (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00);\n\t }\n\n\t // Return final computed hash\n\t return hash;\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\t clone._hash = this._hash.clone();\n\n\t return clone;\n\t }\n\t });\n\n\t function FF(a, b, c, d, x, s, t) {\n\t var n = a + ((b & c) | (~b & d)) + x + t;\n\t return ((n << s) | (n >>> (32 - s))) + b;\n\t }\n\n\t function GG(a, b, c, d, x, s, t) {\n\t var n = a + ((b & d) | (c & ~d)) + x + t;\n\t return ((n << s) | (n >>> (32 - s))) + b;\n\t }\n\n\t function HH(a, b, c, d, x, s, t) {\n\t var n = a + (b ^ c ^ d) + x + t;\n\t return ((n << s) | (n >>> (32 - s))) + b;\n\t }\n\n\t function II(a, b, c, d, x, s, t) {\n\t var n = a + (c ^ (b | ~d)) + x + t;\n\t return ((n << s) | (n >>> (32 - s))) + b;\n\t }\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.MD5('message');\n\t * var hash = CryptoJS.MD5(wordArray);\n\t */\n\t C.MD5 = Hasher._createHelper(MD5);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacMD5(message, key);\n\t */\n\t C.HmacMD5 = Hasher._createHmacHelper(MD5);\n\t}(Math));\n\n\n\treturn CryptoJS.MD5;\n\n}));\n\n/***/ }),\n/* 62 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar _a;\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = __webpack_require__(0);\nvar platform_1 = tslib_1.__importDefault(__webpack_require__(3));\nvar Utils = tslib_1.__importStar(__webpack_require__(1));\nvar defaults_1 = tslib_1.__importDefault(__webpack_require__(8));\nvar errorinfo_1 = __webpack_require__(4);\nvar HttpMethods_1 = tslib_1.__importDefault(__webpack_require__(17));\nvar xhrrequest_1 = tslib_1.__importDefault(__webpack_require__(15));\nvar XHRStates_1 = tslib_1.__importDefault(__webpack_require__(20));\nvar logger_1 = tslib_1.__importDefault(__webpack_require__(2));\nvar jsonptransport_1 = __webpack_require__(29);\nvar fetchrequest_1 = tslib_1.__importDefault(__webpack_require__(63));\nvar HttpStatusCodes_1 = __webpack_require__(24);\nfunction shouldFallback(errorInfo) {\n var statusCode = errorInfo.statusCode;\n /* 400 + no code = a generic xhr onerror. Browser doesn't give us enough\n * detail to know whether it's fallback-fixable, but it may be (eg if a\n * network issue), so try just in case */\n return ((statusCode === 408 && !errorInfo.code) ||\n (statusCode === 400 && !errorInfo.code) ||\n (statusCode >= 500 && statusCode <= 504));\n}\nfunction getHosts(client) {\n /* If we're a connected realtime client, try the endpoint we're connected\n * to first -- but still have fallbacks, being connected is not an absolute\n * guarantee that a datacenter has free capacity to service REST requests. */\n var connection = client.connection, connectionHost = connection && connection.connectionManager.host;\n if (connectionHost) {\n return [connectionHost].concat(defaults_1.default.getFallbackHosts(client.options));\n }\n return defaults_1.default.getHosts(client.options);\n}\nvar Http = (_a = /** @class */ (function () {\n function class_1(options) {\n this.checksInProgress = null;\n this.checkConnectivity = undefined;\n this.supportsAuthHeaders = false;\n this.supportsLinkHeaders = false;\n this._getHosts = getHosts;\n this.options = options || {};\n var connectivityCheckUrl = this.options.connectivityCheckUrl || defaults_1.default.connectivityCheckUrl;\n var connectivityCheckParams = this.options.connectivityCheckParams;\n var connectivityUrlIsDefault = !this.options.connectivityCheckUrl;\n if (platform_1.default.Config.xhrSupported) {\n this.supportsAuthHeaders = true;\n this.Request = function (method, rest, uri, headers, params, body, callback) {\n var req = xhrrequest_1.default.createRequest(uri, headers, params, body, XHRStates_1.default.REQ_SEND, rest && rest.options.timeouts, method);\n req.once('complete', callback);\n req.exec();\n return req;\n };\n if (this.options.disableConnectivityCheck) {\n this.checkConnectivity = function (callback) {\n callback(null, true);\n };\n }\n else {\n this.checkConnectivity = function (callback) {\n logger_1.default.logAction(logger_1.default.LOG_MICRO, '(XHRRequest)Http.checkConnectivity()', 'Sending; ' + connectivityCheckUrl);\n this.doUri(HttpMethods_1.default.Get, null, connectivityCheckUrl, null, null, connectivityCheckParams, function (err, responseText, headers, unpacked, statusCode) {\n var result = false;\n if (!connectivityUrlIsDefault) {\n result = !err && (0, HttpStatusCodes_1.isSuccessCode)(statusCode);\n }\n else {\n result = !err && (responseText === null || responseText === void 0 ? void 0 : responseText.replace(/\\n/, '')) == 'yes';\n }\n logger_1.default.logAction(logger_1.default.LOG_MICRO, '(XHRRequest)Http.checkConnectivity()', 'Result: ' + result);\n callback(null, result);\n });\n };\n }\n }\n else if (platform_1.default.Config.jsonpSupported) {\n this.Request = function (method, rest, uri, headers, params, body, callback) {\n var req = (0, jsonptransport_1.createRequest)(uri, headers, params, body, XHRStates_1.default.REQ_SEND, rest && rest.options.timeouts, method);\n req.once('complete', callback);\n platform_1.default.Config.nextTick(function () {\n req.exec();\n });\n return req;\n };\n if (this.options.disableConnectivityCheck) {\n this.checkConnectivity = function (callback) {\n callback(null, true);\n };\n }\n else {\n this.checkConnectivity = function (callback) {\n var _this = this;\n var upUrl = defaults_1.default.jsonpInternetUpUrl;\n if (this.checksInProgress) {\n this.checksInProgress.push(callback);\n return;\n }\n this.checksInProgress = [callback];\n logger_1.default.logAction(logger_1.default.LOG_MICRO, '(JSONP)Http.checkConnectivity()', 'Sending; ' + upUrl);\n var req = new jsonptransport_1.Request('isTheInternetUp', upUrl, null, null, null, XHRStates_1.default.REQ_SEND, defaults_1.default.TIMEOUTS);\n req.once('complete', function (err, response) {\n var result = !err && response;\n logger_1.default.logAction(logger_1.default.LOG_MICRO, '(JSONP)Http.checkConnectivity()', 'Result: ' + result);\n for (var i = 0; i < _this.checksInProgress.length; i++)\n _this.checksInProgress[i](null, result);\n _this.checksInProgress = null;\n });\n platform_1.default.Config.nextTick(function () {\n req.exec();\n });\n };\n }\n }\n else if (platform_1.default.Config.fetchSupported) {\n this.supportsAuthHeaders = true;\n this.Request = fetchrequest_1.default;\n this.checkConnectivity = function (callback) {\n logger_1.default.logAction(logger_1.default.LOG_MICRO, '(Fetch)Http.checkConnectivity()', 'Sending; ' + connectivityCheckUrl);\n this.doUri(HttpMethods_1.default.Get, null, connectivityCheckUrl, null, null, null, function (err, responseText) {\n var result = !err && (responseText === null || responseText === void 0 ? void 0 : responseText.replace(/\\n/, '')) == 'yes';\n logger_1.default.logAction(logger_1.default.LOG_MICRO, '(Fetch)Http.checkConnectivity()', 'Result: ' + result);\n callback(null, result);\n });\n };\n }\n else {\n this.Request = function (method, rest, uri, headers, params, body, callback) {\n callback(new errorinfo_1.PartialErrorInfo('no supported HTTP transports available', null, 400), null);\n };\n }\n }\n /* Unlike for doUri, the 'rest' param here is mandatory, as it's used to generate the hosts */\n class_1.prototype.do = function (method, rest, path, headers, body, params, callback) {\n var _this = this;\n var uriFromHost = typeof path == 'function'\n ? path\n : function (host) {\n return rest.baseUri(host) + path;\n };\n var currentFallback = rest._currentFallback;\n if (currentFallback) {\n if (currentFallback.validUntil > Utils.now()) {\n /* Use stored fallback */\n if (!this.Request) {\n callback === null || callback === void 0 ? void 0 : callback(new errorinfo_1.PartialErrorInfo('Request invoked before assigned to', null, 500));\n return;\n }\n this.Request(method, rest, uriFromHost(currentFallback.host), headers, params, body, function (err) {\n var args = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n // This typecast is safe because ErrnoExceptions are only thrown in NodeJS\n if (err && shouldFallback(err)) {\n /* unstore the fallback and start from the top with the default sequence */\n rest._currentFallback = null;\n _this.do(method, rest, path, headers, body, params, callback);\n return;\n }\n callback === null || callback === void 0 ? void 0 : callback.apply(void 0, tslib_1.__spreadArray([err], args, false));\n });\n return;\n }\n else {\n /* Fallback expired; remove it and fallthrough to normal sequence */\n rest._currentFallback = null;\n }\n }\n var hosts = getHosts(rest);\n /* if there is only one host do it */\n if (hosts.length === 1) {\n this.doUri(method, rest, uriFromHost(hosts[0]), headers, body, params, callback);\n return;\n }\n /* hosts is an array with preferred host plus at least one fallback */\n var tryAHost = function (candidateHosts, persistOnSuccess) {\n var host = candidateHosts.shift();\n _this.doUri(method, rest, uriFromHost(host), headers, body, params, function (err) {\n var args = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n // This typecast is safe because ErrnoExceptions are only thrown in NodeJS\n if (err && shouldFallback(err) && candidateHosts.length) {\n tryAHost(candidateHosts, true);\n return;\n }\n if (persistOnSuccess) {\n /* RSC15f */\n rest._currentFallback = {\n host: host,\n validUntil: Utils.now() + rest.options.timeouts.fallbackRetryTimeout,\n };\n }\n callback === null || callback === void 0 ? void 0 : callback.apply(void 0, tslib_1.__spreadArray([err], args, false));\n });\n };\n tryAHost(hosts);\n };\n class_1.prototype.doUri = function (method, rest, uri, headers, body, params, callback) {\n if (!this.Request) {\n callback(new errorinfo_1.PartialErrorInfo('Request invoked before assigned to', null, 500));\n return;\n }\n this.Request(method, rest, uri, headers, params, body, callback);\n };\n return class_1;\n }()),\n _a.methods = [HttpMethods_1.default.Get, HttpMethods_1.default.Delete, HttpMethods_1.default.Post, HttpMethods_1.default.Put, HttpMethods_1.default.Patch],\n _a.methodsWithoutBody = [HttpMethods_1.default.Get, HttpMethods_1.default.Delete],\n _a.methodsWithBody = [HttpMethods_1.default.Post, HttpMethods_1.default.Put, HttpMethods_1.default.Patch],\n _a);\nexports.default = Http;\n\n\n/***/ }),\n/* 63 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = __webpack_require__(0);\nvar errorinfo_1 = tslib_1.__importStar(__webpack_require__(4));\nvar platform_1 = tslib_1.__importDefault(__webpack_require__(3));\nvar defaults_1 = tslib_1.__importDefault(__webpack_require__(8));\nvar Utils = tslib_1.__importStar(__webpack_require__(1));\nvar utils_1 = __webpack_require__(1);\nfunction isAblyError(responseBody, headers) {\n return !!headers.get('x-ably-errorcode');\n}\nfunction getAblyError(responseBody, headers) {\n if (isAblyError(responseBody, headers)) {\n return responseBody.error && errorinfo_1.default.fromValues(responseBody.error);\n }\n}\nfunction fetchRequest(method, rest, uri, headers, params, body, callback) {\n var fetchHeaders = new Headers(headers || {});\n var _method = method ? method.toUpperCase() : Utils.isEmptyArg(body) ? 'GET' : 'POST';\n var controller = new AbortController();\n var timeout = setTimeout(function () {\n controller.abort();\n callback(new errorinfo_1.PartialErrorInfo('Request timed out', null, 408));\n }, rest ? rest.options.timeouts.httpRequestTimeout : defaults_1.default.TIMEOUTS.httpRequestTimeout);\n var requestInit = {\n method: _method,\n headers: fetchHeaders,\n body: body,\n };\n if (!platform_1.default.Config.isWebworker) {\n requestInit.credentials = fetchHeaders.has('authorization') ? 'include' : 'same-origin';\n }\n (0, utils_1.getGlobalObject)()\n .fetch(uri + '?' + new URLSearchParams(params || {}), requestInit)\n .then(function (res) {\n clearTimeout(timeout);\n var contentType = res.headers.get('Content-Type');\n var prom;\n if (contentType && contentType.indexOf('application/x-msgpack') > -1) {\n prom = res.arrayBuffer();\n }\n else if (contentType && contentType.indexOf('application/json') > -1) {\n prom = res.json();\n }\n else {\n prom = res.text();\n }\n prom.then(function (body) {\n var unpacked = !!contentType && contentType.indexOf('application/x-msgpack') === -1;\n if (!res.ok) {\n var err = getAblyError(body, res.headers) ||\n new errorinfo_1.PartialErrorInfo('Error response received from server: ' + res.status + ' body was: ' + platform_1.default.Config.inspect(body), null, res.status);\n callback(err, body, res.headers, unpacked, res.status);\n }\n else {\n callback(null, body, res.headers, unpacked, res.status);\n }\n });\n })\n .catch(function (err) {\n clearTimeout(timeout);\n callback(err);\n });\n}\nexports.default = fetchRequest;\n\n\n/***/ }),\n/* 64 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = __webpack_require__(0);\nvar msgpack_1 = tslib_1.__importDefault(__webpack_require__(41));\nvar Utils = tslib_1.__importStar(__webpack_require__(1));\n// Workaround for salesforce lightning locker compat\nvar globalObject = Utils.getGlobalObject();\nif (typeof Window === 'undefined' && typeof WorkerGlobalScope === 'undefined') {\n console.log(\"Warning: this distribution of Ably is intended for browsers. On nodejs, please use the 'ably' package on npm\");\n}\nfunction allowComet() {\n /* xhr requests from local files are unreliable in some browsers, such as Chrome 65 and higher -- see eg\n * https://stackoverflow.com/questions/49256429/chrome-65-unable-to-make-post-requests-from-local-files-to-flask\n * So if websockets are supported, then just forget about comet transports and use that */\n var loc = globalObject.location;\n return !globalObject.WebSocket || !loc || !loc.origin || loc.origin.indexOf('http') > -1;\n}\nvar userAgent = globalObject.navigator && globalObject.navigator.userAgent.toString();\nvar currentUrl = globalObject.location && globalObject.location.href;\nvar Config = {\n agent: 'browser',\n logTimestamps: true,\n userAgent: userAgent,\n currentUrl: currentUrl,\n noUpgrade: userAgent && !!userAgent.match(/MSIE\\s8\\.0/),\n binaryType: 'arraybuffer',\n WebSocket: globalObject.WebSocket,\n fetchSupported: !!globalObject.fetch,\n xhrSupported: globalObject.XMLHttpRequest && 'withCredentials' in new XMLHttpRequest(),\n jsonpSupported: typeof document !== 'undefined',\n allowComet: allowComet(),\n streamingSupported: true,\n useProtocolHeartbeats: true,\n createHmac: null,\n msgpack: msgpack_1.default,\n supportsBinary: !!globalObject.TextDecoder,\n preferBinary: false,\n ArrayBuffer: globalObject.ArrayBuffer,\n atob: globalObject.atob,\n nextTick: typeof globalObject.setImmediate !== 'undefined'\n ? globalObject.setImmediate.bind(globalObject)\n : function (f) {\n setTimeout(f, 0);\n },\n addEventListener: globalObject.addEventListener,\n inspect: JSON.stringify,\n stringByteSize: function (str) {\n /* str.length will be an underestimate for non-ascii strings. But if we're\n * in a browser too old to support TextDecoder, not much we can do. Better\n * to underestimate, so if we do go over-size, the server will reject the\n * message */\n return (globalObject.TextDecoder && new globalObject.TextEncoder().encode(str).length) || str.length;\n },\n TextEncoder: globalObject.TextEncoder,\n TextDecoder: globalObject.TextDecoder,\n Promise: globalObject.Promise,\n getRandomValues: (function (crypto) {\n if (crypto === undefined) {\n return undefined;\n }\n return function (arr, callback) {\n crypto.getRandomValues(arr);\n if (callback) {\n callback(null);\n }\n };\n })(globalObject.crypto || msCrypto),\n};\nexports.default = Config;\n\n\n/***/ }),\n/* 65 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(global) {\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = __webpack_require__(0);\nvar Utils = tslib_1.__importStar(__webpack_require__(1));\nvar test = 'ablyjs-storage-test';\nvar Webstorage = /** @class */ (function () {\n function Webstorage() {\n /* Even just accessing the session/localStorage object can throw a\n * security exception in some circumstances with some browsers. In\n * others, calling setItem will throw. So have to check in this\n * somewhat roundabout way. (If unsupported or no global object,\n * will throw on accessing a property of undefined) */\n try {\n global.sessionStorage.setItem(test, test);\n global.sessionStorage.removeItem(test);\n this.sessionSupported = true;\n }\n catch (e) {\n this.sessionSupported = false;\n }\n try {\n global.localStorage.setItem(test, test);\n global.localStorage.removeItem(test);\n this.localSupported = true;\n }\n catch (e) {\n this.localSupported = false;\n }\n }\n Webstorage.prototype.get = function (name) {\n return this._get(name, false);\n };\n Webstorage.prototype.getSession = function (name) {\n return this._get(name, true);\n };\n Webstorage.prototype.remove = function (name) {\n return this._remove(name, false);\n };\n Webstorage.prototype.removeSession = function (name) {\n return this._remove(name, true);\n };\n Webstorage.prototype.set = function (name, value, ttl) {\n return this._set(name, value, ttl, false);\n };\n Webstorage.prototype.setSession = function (name, value, ttl) {\n return this._set(name, value, ttl, true);\n };\n Webstorage.prototype._set = function (name, value, ttl, session) {\n var wrappedValue = { value: value };\n if (ttl) {\n wrappedValue.expires = Utils.now() + ttl;\n }\n return this.storageInterface(session).setItem(name, JSON.stringify(wrappedValue));\n };\n Webstorage.prototype._get = function (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 var rawItem = this.storageInterface(session).getItem(name);\n if (!rawItem)\n return null;\n var wrappedValue = JSON.parse(rawItem);\n if (wrappedValue.expires && wrappedValue.expires < Utils.now()) {\n this.storageInterface(session).removeItem(name);\n return null;\n }\n return wrappedValue.value;\n };\n Webstorage.prototype._remove = function (name, session) {\n return this.storageInterface(session).removeItem(name);\n };\n Webstorage.prototype.storageInterface = function (session) {\n return session ? global.sessionStorage : global.localStorage;\n };\n return Webstorage;\n}());\nexports.default = new Webstorage();\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(13)))\n\n/***/ }),\n/* 66 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = __webpack_require__(0);\nvar TransportNames_1 = tslib_1.__importDefault(__webpack_require__(67));\nvar Defaults = {\n connectivityCheckUrl: 'https://internet-up.ably-realtime.com/is-the-internet-up.txt',\n jsonpInternetUpUrl: 'https://internet-up.ably-realtime.com/is-the-internet-up-0-9.js',\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. This is not quite the same as the preference order -- e.g.\n * xhr_polling is preferred to jsonp, but for browsers that support it we want\n * the base transport to be xhr_polling, not jsonp */\n defaultTransports: [\n TransportNames_1.default.XhrPolling,\n TransportNames_1.default.XhrStreaming,\n TransportNames_1.default.JsonP,\n TransportNames_1.default.WebSocket,\n ],\n baseTransportOrder: [\n TransportNames_1.default.XhrPolling,\n TransportNames_1.default.XhrStreaming,\n TransportNames_1.default.JsonP,\n TransportNames_1.default.WebSocket,\n ],\n transportPreferenceOrder: [\n TransportNames_1.default.JsonP,\n TransportNames_1.default.XhrPolling,\n TransportNames_1.default.XhrStreaming,\n TransportNames_1.default.WebSocket,\n ],\n upgradeTransports: [TransportNames_1.default.XhrStreaming, TransportNames_1.default.WebSocket],\n};\nexports.default = Defaults;\n\n\n/***/ }),\n/* 67 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar TransportNames;\n(function (TransportNames) {\n TransportNames[\"WebSocket\"] = \"web_socket\";\n TransportNames[\"Comet\"] = \"comet\";\n TransportNames[\"XhrStreaming\"] = \"xhr_streaming\";\n TransportNames[\"XhrPolling\"] = \"xhr_polling\";\n TransportNames[\"JsonP\"] = \"jsonp\";\n})(TransportNames || (TransportNames = {}));\nexports.default = TransportNames;\n\n\n/***/ }),\n/* 68 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n// ESM COMPAT FLAG\n__webpack_require__.r(__webpack_exports__);\n\n// EXTERNAL MODULE: ./src/platform/web/lib/transport/jsonptransport.ts\nvar jsonptransport = __webpack_require__(29);\nvar jsonptransport_default = /*#__PURE__*/__webpack_require__.n(jsonptransport);\n\n// EXTERNAL MODULE: ./src/common/lib/util/utils.ts\nvar utils = __webpack_require__(1);\n\n// EXTERNAL MODULE: ./src/common/platform.ts\nvar platform = __webpack_require__(3);\nvar platform_default = /*#__PURE__*/__webpack_require__.n(platform);\n\n// EXTERNAL MODULE: ./src/common/lib/transport/comettransport.ts\nvar comettransport = __webpack_require__(12);\nvar comettransport_default = /*#__PURE__*/__webpack_require__.n(comettransport);\n\n// EXTERNAL MODULE: ./src/platform/web/lib/transport/xhrrequest.ts\nvar xhrrequest = __webpack_require__(15);\nvar xhrrequest_default = /*#__PURE__*/__webpack_require__.n(xhrrequest);\n\n// CONCATENATED MODULE: ./src/platform/web/lib/transport/xhrpollingtransport.js\n\n\n\n\n\nvar xhrpollingtransport_XHRPollingTransport = function (connectionManager) {\n var shortName = 'xhr_polling';\n\n function XHRPollingTransport(connectionManager, auth, params) {\n params.stream = false;\n comettransport_default.a.call(this, connectionManager, auth, params);\n this.shortName = shortName;\n }\n utils[\"inherits\"](XHRPollingTransport, comettransport_default.a);\n\n XHRPollingTransport.isAvailable = function () {\n return platform_default.a.Config.xhrSupported && platform_default.a.Config.allowComet;\n };\n\n XHRPollingTransport.prototype.toString = function () {\n return 'XHRPollingTransport; uri=' + this.baseUri + '; isConnected=' + this.isConnected;\n };\n\n XHRPollingTransport.prototype.createRequest = function (uri, headers, params, body, requestMode) {\n return xhrrequest_default.a.createRequest(uri, headers, params, body, requestMode, this.timeouts);\n };\n\n if (typeof connectionManager !== 'undefined' && XHRPollingTransport.isAvailable()) {\n connectionManager.supportedTransports[shortName] = XHRPollingTransport;\n }\n\n return XHRPollingTransport;\n};\n\n/* harmony default export */ var xhrpollingtransport = (xhrpollingtransport_XHRPollingTransport);\n\n// CONCATENATED MODULE: ./src/platform/web/lib/transport/xhrstreamingtransport.js\n\n\n\n\n\nvar xhrstreamingtransport_XHRStreamingTransport = function (connectionManager) {\n var shortName = 'xhr_streaming';\n\n /* public constructor */\n function XHRStreamingTransport(connectionManager, auth, params) {\n comettransport_default.a.call(this, connectionManager, auth, params);\n this.shortName = shortName;\n }\n utils[\"inherits\"](XHRStreamingTransport, comettransport_default.a);\n\n XHRStreamingTransport.isAvailable = function () {\n return platform_default.a.Config.xhrSupported && platform_default.a.Config.streamingSupported && platform_default.a.Config.allowComet;\n };\n\n XHRStreamingTransport.prototype.toString = function () {\n return 'XHRStreamingTransport; uri=' + this.baseUri + '; isConnected=' + this.isConnected;\n };\n\n XHRStreamingTransport.prototype.createRequest = function (uri, headers, params, body, requestMode) {\n return xhrrequest_default.a.createRequest(uri, headers, params, body, requestMode, this.timeouts);\n };\n\n if (typeof connectionManager !== 'undefined' && XHRStreamingTransport.isAvailable()) {\n connectionManager.supportedTransports[shortName] = XHRStreamingTransport;\n }\n\n return XHRStreamingTransport;\n};\n\n/* harmony default export */ var xhrstreamingtransport = (xhrstreamingtransport_XHRStreamingTransport);\n\n// CONCATENATED MODULE: ./src/platform/web/lib/transport/index.js\n\n\n\n\n/* harmony default export */ var transport = __webpack_exports__[\"default\"] = ([jsonptransport_default.a, xhrpollingtransport, xhrstreamingtransport]);\n\n\n/***/ })\n/******/ ])[\"default\"];\n});","'use strict';\nfunction promisifyOptions(options) {\n if (typeof options == 'string') {\n options = options.indexOf(':') == -1 ? { token: options } : { key: options };\n }\n options.promises = true;\n return options;\n}\n\n/* Please note that the file imported below is only generated after running\n * the build task. */\n// eslint-disable-next-line @typescript-eslint/no-var-requires\nvar Ably = require('./build/ably-node');\n\nvar RestPromise = function (options) {\n return new Ably.Rest(promisifyOptions(options));\n};\nObject.assign(RestPromise, Ably.Rest);\n\nvar RealtimePromise = function (options) {\n return new Ably.Realtime(promisifyOptions(options));\n};\nObject.assign(RealtimePromise, Ably.Realtime);\n\nmodule.exports = {\n Rest: RestPromise,\n Realtime: RealtimePromise,\n};\n","import * as Ably from 'ably/promises';\nimport Cookies from 'js-cookie';\n\nconst initAblyClient = async ({\n userId,\n appId,\n}: {\n userId: string;\n appId: string;\n}): Promise => {\n const authCookie = `ablyAuthToken_${appId}_${userId}`;\n const storedToken = Cookies.get(authCookie);\n const ablyClient = new Ably.Realtime({\n authUrl: 'https://events.flipdish.com/api/eventAuth',\n authHeaders: { appId, userId },\n clientId: userId,\n ...(storedToken && { token: storedToken }),\n });\n\n return await new Promise((resolve) => {\n ablyClient.connection.on('connected', () => {\n // @ts-expect-error this is just TS being TS. It exists\n const authToken = ablyClient.auth.tokenDetails.token;\n // @ts-expect-error this is just TS being TS. It exists\n const authTokenExpire = ablyClient.auth.tokenDetails.expires;\n Cookies.set(authCookie, authToken, {\n expires: new Date(authTokenExpire),\n path: '/',\n secure: true,\n });\n console.log('Connected to Ably!');\n resolve(ablyClient);\n });\n });\n};\n\nexport { initAblyClient };\n"],"names":["root","factory","module","modules","installedModules","__webpack_require__","moduleId","exports","name","getter","value","mode","ns","key","object","property","__webpack_exports__","__extends","__assign","__rest","__decorate","__param","__metadata","__awaiter","__generator","__createBinding","__exportStar","__values","__read","__spread","__spreadArrays","__spreadArray","__await","__asyncGenerator","__asyncDelegator","__asyncValues","__makeTemplateObject","__importStar","__importDefault","__classPrivateFieldGet","__classPrivateFieldSet","extendStatics","d","b","p","__","t","s","i","n","e","decorators","target","desc","c","r","paramIndex","decorator","metadataKey","metadataValue","thisArg","_arguments","P","generator","adopt","resolve","reject","fulfilled","step","rejected","result","body","_","f","y","g","verb","v","op","o","m","k","k2","ar","error","il","a","j","jl","to","from","pack","l","q","resume","settle","fulfill","cooked","raw","__setModuleDefault","mod","receiver","state","kind","global","tslib_1","platform_1","defaults_1","errorinfo_1","enc_base64_1","enc_utf8_1","randomPosn","arrOrStr","mixin","args","_i","source","hasOwnProperty","copy","src","ensureArray","obj","isEmptyArg","isObject","ob","isEmpty","prop","isOnlyPropIn","arg","shallowClone","prototypicalClone","ownProperties","F","inherits","ctor","superCtor","containsValue","val","intersect","arr","arrIntersect","arrIntersectOb","arr1","arr2","member","arrSubtract","element","elem","fromIndex","len","arrIn","arrDeleteValue","idx","res","arrWithoutValue","newArr","keysArray","ownOnly","valuesArray","forInOwnNonNullProperties","fn","safeArrForEach","allSame","first","item","contentTypes","defaultGetHeaders","options","format","accept","Format","defaultPostHeaders","contentType","arrPopRandomElement","toQueryString","params","parts","parseQueryString","query","match","search","isErrorInfoOrPartialErrorInfo","err","inspectError","_a","_b","inspectBody","dataSizeBytes","data","cheapRandStr","randomString","numBytes","uIntArr","charset","length","randomHexString","arrChooseN","numItems","mutableArr","str","promisify","fnName","decodeBody","encodeBody","allToLowerCase","allToUpperCase","getBackoffCoefficient","count","getJitterCoefficient","getRetryTime","initialTimeout","retryAttempt","getGlobalObject","shallowEquals","matchDerivedChannel","regex","toBase64","globalObject","LogLevels","pad","timeSegment","three","getHandler","logger","msg","time","getDefaultLoggers","consoleLogger","errorLogger","Logger","logHandler","logErrorHandler","level","action","message","original","replacement","funcName","handler","Platform","Utils","toString","ErrorInfo","_super","code","statusCode","cause","_this","values","PartialErrorInfo","CryptoJS","C","C_lib","WordArray","superInit","subInit","typedArray","typedArrayByteLength","words","Math","undefined","crypto","cryptoSecureRandomInt","create","subtype","Base","overrides","instance","properties","propertyName","sigBytes","encoder","Hex","wordArray","thisWords","thatWords","thisSigBytes","thatSigBytes","thatByte","clone","nBytes","C_enc","hexChars","bite","hexStr","hexStrLength","Latin1","latin1Chars","latin1Str","latin1StrLength","Utf8","utf8Str","BufferedBlockAlgorithm","doFlush","processedWords","dataWords","dataSigBytes","blockSize","blockSizeBytes","nBlocksReady","nWordsReady","nBytesReady","offset","cfg","messageUpdate","hash","hasher","C_algo","logger_1","callListener","eventThis","listener","removeListener","targetListeners","eventFilter","listeners","index","eventName","targetListenersIndex","EventEmitter","event_1","listener_1","firstArg","secondArg","event","eventsOnceListeners","eventsListeners","argCount","event_2","self_1","listenerWrapper_1","innerArgs","targetState","currentState","listenerArgs","package_json_1","agent","Defaults","getHost","getPort","getHttpScheme","environmentFallbackHosts","getFallbackHosts","getHosts","checkHost","objectifyOptions","normaliseOptions","host","ws","tls","environment","fallbackHosts","httpMaxRetryCount","getRealtimeHost","production","getTimeouts","timeouts","getAgentString","agentStr","lastConnectionDetails","cb","restHost","realtimeHost","headers","connectivityCheckParams","connectivityCheckUrl","uri","qs","getDefaults","platformDefaults","normaliseContext","context","normalizeCipherOptions","cipher","getMessageSize","size","Message","encoding","callback","nativeDataType","messages","processed","inputContext","lastPayload","xforms","lastProcessedEncodingIndex","encodingsToProcess","xform","xformAlgorithm","deltaBase","encoded","inputOptions","encodedArray","total","message_1","presencemessage_1","actions","ActionName","flags","flagNames","toStringArray","array","simpleAttributes","ProtocolMessage","flag","modes","serialized","deserialized","presence","attribute","attribIndex","stringifiedParams_1","map","base64Chars","byte1","byte2","byte3","triplet","paddingChar","base64Str","base64StrLength","reverseMap","paddingIndex","parseLoop","bits1","bits2","bitsCombined","protocolmessage_1","transport_1","connectionerrors_1","auth_1","XHRStates_1","shouldBeErrorAction","UNRESOLVABLE_ERROR_CODES","protocolMessageFromRawError","CometTransport","connectionManager","auth","tokenDetails","port","cometScheme","connectUri","authParams","connectParams","preconnected","connectRequest","closing","closeOrDisconnectUri","request","connectionStr","baseConnectionUri","pendingItems","items","sendRequest","recvRequest","responseData","requestItems","toActionValue","actionString","PresenceMessage","stringifyAction","eventemitter_1","isAblyError","responseBody","getAblyError","noop","idCounter","pendingRequests","isIE","ieVersion","needJsonEnvelope","version","getHeader","xhr","header","isEncodingChunked","getHeadersAsObject","headerPairs","XHRRequest","requestMode","method","_timeouts","unpacked","timeout","timer","responseType","h","errorHandler","errorEvent","errorMessage","streaming","successResponse","streamPos","onResponse","onEnd","parsedResponse","json","jsonResponseBody","onProgress","responseText","bodyEnd","chunk","onChunk","onStreamEnd","readyState","multicaster_1","hmac_sha256_1","HttpMethods_1","HttpStatusCodes_1","MAX_TOKEN_LENGTH","random","isRealtime","client","normaliseAuthcallbackError","hmac","text","inst","c14n","capability","c14nCapability","keys","logAndValidateTokenAuthMethod","authOptions","basicAuthForced","useTokenAuth","noWayToRenew","trId","getTokenRequestId","Auth","tokenParams","_authOptions","_callback","tokenRequestCallback","authHeaders","usePost","providedQsParams","queryIdx","authUrlRequestCallback","tokenRequest","signedTokenParams","tokenCb","keyName","path","tokenUri","requestHeaders","tokenRequestCallbackTimeoutExpired","timeoutLength","tokenRequestCallbackTimeout","tokenRequestOrDetails","objectSize","tokenResponse","keyParts","keySecret","clientId","ttl","authoriseCb","nonce","timestamp","signText","queryTime","forceSupersede","token","tokenRequestId","callbacks","tokenClientId","HttpMethods","resource_1","getRelParams","linkUrl","urlMatch","parseRelLinks","linkHeader","relParams","linkMatch","returnErrOnly","useHPR","PaginatedResource","rest","envelope","bodyHandler","useHttpPaginatedResponse","HttpPaginatedResponse","PaginatedResult","resource","self","ConnectionErrorCodes","ConnectionErrors","isRetriable","XHRStates","Multicaster","members","hasherBlockSize","hasherBlockSizeBytes","oKey","iKey","oKeyWords","iKeyWords","innerHash","HttpStatusCodes","isSuccessCode","withAuthDetails","errCallback","opCallback","unenvelope","outerHeaders","outerStatusCode","wrappedStatusCode","response","wrappedHeaders","wrappedErr","paramString","paramPairs","needle","urlFromPathAndParams","logResponseHandler","Resource","doRequest","decodedBody","decodeErr","closeMessage","disconnectMessage","Transport","forceJsonProtocol","maxPromisedIdle","id","sinceLast","timeRemaining","transportCtor","transportParams","transport","transportAttemptTimer","errorCb","realtimeRequestTimeout","MD5","EvpKDF","password","salt","block","derivedKey","derivedKeyWords","keySize","iterations","Base64","Cipher","xformMode","dataUpdate","finalProcessedData","selectCipherStrategy","PasswordBasedCipher","SerializableCipher","ciphertext","finalProcessedBlocks","C_mode","BlockCipherMode","iv","CBC","xorBlock","thisBlock","C_pad","Pkcs7","nPaddingBytes","paddingWord","paddingWords","padding","modeCreator","CipherParams","cipherParams","formatter","C_format","OpenSSLFormatter","openSSLStr","ciphertextWords","encryptor","cipherCfg","plaintext","C_kdf","OpenSSLKdf","ivSize","derivedParams","comettransport_1","shortName","createRequest","Request","JSONPTransport","script","head","default_1","push_1","paginatedresource_1","channel_1","stats_1","Rest","optionsObj","normalOptions","keyMatch","Channels","statsValues","timeUri","customHeaders","useBinary","decoder","_method","paginatedResource","resbody","logOptions","channelOptions","channel","Hasher","H","K","isPrime","sqrtN","factor","getFractionalBits","nPrime","W","SHA256","M","gamma0x","gamma0","gamma1x","gamma1","ch","maj","sigma0","sigma1","t1","t2","nBitsTotal","nBitsLeft","presence_1","MSG_ID_ENTROPY_BYTES","allEmptyIds","normaliseChannelOptions","Channel","second","idempotentRestPublishing","msgIdBase_1","maxMessageSize","requestBody","Presence","protocol_1","messagequeue_1","connectionstatechange_1","websockettransport_1","haveWebStorage","haveSessionStorage","transportPreferenceName","sessionRecoveryName","getSessionRecoverData","setSessionRecoverData","clearSessionRecoverData","betterTransportThan","bundleWith","dest","maxSize","proposed","decodeRecoveryKey","recoveryKey","TransportParams","connectionKey","recoveryContext","ConnectionManager","realtime","connectingTimeout","addEventListener","initFn","decideMode","modeCb","recoverFn","lastSessionData","shouldRecover","candidate","optimalTransport","connectionId","connectionDetails","currentTransport","abandon","oldProtocol","finishUpgrade","existingState","connectedState","existingActiveProtocol","connectedErr","_connectionId","pendingTransport","proposedTransport","currentProtocol","wasActive","wasPending","wasProposed","noTransportsScheduledForActivation","newConnectionState","hasConnectionError","prevConnId","connIdChanged","recoverFailure","stateChange","logLevel","newState","transitionState","interval","indicated","retryImmediately","retryDelay","change","autoReconnect","connectCount","connect","authCb","preference","preferenceTimeoutExpired","preferenceTimeout","fatal","giveUp","candidateHosts","hostAttemptCb","tryFallbackHosts","connectivity","current","currentSerial","upgradePossibilities","upgradeTransport","upgradeTransportParams","transportParams_1","activeTransport","authMsg","successListener_1","failureListener_1","exceptActive","queueEvent","shouldQueue","pendingMessage","lastQueued","pendingMessages","numQueued","onActiveTransport","onUpgradeTransport","onTimeout","onHeartbeat_1","pingStart_1","id_1","responseId","timer_1","responseTime","completed","onPingComplete","onTransportActive","connectionStateTtl","MessageQueue","serial","startSerial","endSerial","completeMessages","completeMessages_1","ConnectionStateChange","previous","retryIn","reason","realtimepresence_1","channelstatechange_1","validateChannelOptions","currentMode","RealtimeChannel","subscriptions","_flags","forceReattach","attachReason","attachMsg","filter","filteredListener","_c","_d","_e","_f","mapping","realListener","realListenerMap","filterMaps","listenerMaps","prev","cur","listeners_1","syncMessage","syncChannelSerial","isSync","modesFromFlags","resumed","hasPresence","hasBacklog","detachErr","presenceMsg","firstMessage","lastMessage","cmState","stateTimer","channelSerial","ChannelStateChange","SHA1","inspect","buffer","view","type","bytes","byte_","utf8Write","string","codePoint","utf8Read","end","utf8ByteCount","encode","sparse","sizeof","_encode","SH_L_32","SH_R_32","getInt64","getUint64","setInt64","setUint64","Decoder","decode","encodeableKeys","length_1","length_2","length_3","isArray","length_4","length_5","length_6","rest_1","realtime_1","bufferutils_1","crypto_1","http_1","config_1","webstorage_1","defaults_2","msgpack_1","Crypto","devicedetails_1","pushchannelsubscription_1","Push","Admin","DeviceRegistrations","ChannelSubscriptions","recipient","payload","device","deviceIdOrDetails","deviceId","subscription","parsedBody","DeviceFormFactor","DevicePlatform","DeviceDetails","PushChannelSubscription","MessageCount","MessageCategory","ResourceCount","RequestCount","ConnectionTypes","MessageTypes","MessageTraffic","MessageDirections","XchgMessages","PushStats","notifications","ProcessedCount","ProcessedMessages","Stats","connection_1","realtimechannel_1","connectionmanager_1","Realtime","serials","name_1","channelSerials","name_2","channelName","connectionState","connectionStateToChannelState","fromChannelStates","toChannelState","channelId","deriveOptions","releaseErr","Connection","ably","PendingMessage","Protocol","messageQueue","isNodeWebSocket","WebSocketTransport","wsScheme","wsUri","paramStr","param","wsConnection","ev","wasClean","initialiseTransport","getClientId","realtimePresence","isAnonymousOrWildcard","waitAttached","newerThan","existing","itemOrderings","existingOrderings","RealtimePresence","PresenceMap","waitForSync","returnMembers","presenceSet","syncCursor","myMembers","broadcastMessages","connId","pendingPresence","pendingPresCount","presenceArray","multicaster","reenterCb","memberKey","entry","_args","existingItem","syncInProgress","inProgress","enc_hex_1","lib_typedarrays_1","BufferUtils","base64","encodings","byteLength","byteRemainder","mainLength","binary_string","ascii","arrayBuffer","uint8View","buffer1","buffer2","wordArray1","wordArray2","cmp","words1","words2","crypto_js_build_lib_typedarrays__WEBPACK_IMPORTED_MODULE_0__","crypto_js_build_lib_typedarrays__WEBPACK_IMPORTED_MODULE_0___default","crypto_js_build_enc_base64__WEBPACK_IMPORTED_MODULE_1__","crypto_js_build__WEBPACK_IMPORTED_MODULE_2__","crypto_js_build__WEBPACK_IMPORTED_MODULE_2___default","_common_lib_util_logger__WEBPACK_IMPORTED_MODULE_3__","_common_lib_util_logger__WEBPACK_IMPORTED_MODULE_3___default","common_lib_types_errorinfo__WEBPACK_IMPORTED_MODULE_4__","common_lib_types_errorinfo__WEBPACK_IMPORTED_MODULE_4___default","CryptoFactory","config","bufferUtils","DEFAULT_ALGORITHM","DEFAULT_KEYLENGTH","DEFAULT_MODE","DEFAULT_BLOCKLENGTH","DEFAULT_BLOCKLENGTH_WORDS","UINT32_SUP","INT32_SUP","generateRandom","blockRandomArray","nativeArray","getPaddedLength","plaintextLength","validateCipherParams","normaliseBase64","pkcs5Padding","keyLength","buf","CBCCipher","blockLengthWords","paddedLength","then","cipherOut","ciphertextBody","decryptCipher","epilogue","randomBlock","utf16Chars","utf16Str","utf16StrLength","swapEndian","word","input","BlockCipher","SBOX","INV_SBOX","SUB_MIX_0","SUB_MIX_1","SUB_MIX_2","SUB_MIX_3","INV_SUB_MIX_0","INV_SUB_MIX_1","INV_SUB_MIX_2","INV_SUB_MIX_3","x","xi","sx","x2","x4","x8","RCON","AES","keyWords","nRounds","ksRows","keySchedule","ksRow","invKeySchedule","invKsRow","s0","s1","s2","s3","round","t0","t3","T","offset_i","M_offset_i","M_offset_0","M_offset_1","M_offset_2","M_offset_3","M_offset_4","M_offset_5","M_offset_6","M_offset_7","M_offset_8","M_offset_9","M_offset_10","M_offset_11","M_offset_12","M_offset_13","M_offset_14","M_offset_15","FF","GG","HH","II","nBitsTotalH","nBitsTotalL","H_i","xhrrequest_1","jsonptransport_1","fetchrequest_1","shouldFallback","errorInfo","connection","connectionHost","Http","class_1","connectivityUrlIsDefault","req","upUrl","uriFromHost","currentFallback","hosts","tryAHost","persistOnSuccess","utils_1","fetchRequest","fetchHeaders","controller","requestInit","prom","allowComet","loc","userAgent","currentUrl","Config","test","Webstorage","session","wrappedValue","rawItem","TransportNames_1","TransportNames","jsonptransport","jsonptransport_default","utils","platform","platform_default","comettransport","comettransport_default","xhrrequest","xhrrequest_default","xhrpollingtransport_XHRPollingTransport","XHRPollingTransport","xhrpollingtransport","xhrstreamingtransport_XHRStreamingTransport","XHRStreamingTransport","xhrstreamingtransport","promisifyOptions","Ably","require$$0","RestPromise","RealtimePromise","promises","initAblyClient","userId","appId","authCookie","storedToken","Cookies","ablyClient","Ably.Realtime","authToken","authTokenExpire"],"mappings":"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","x_google_ignoreList":[0,1]}