/*! * @license Copyright 2015-2022 Ably Real-time Ltd (ably.com) * * Ably JavaScript Library v1.2.50 * https://github.com/ably/ably-js * * Released under the Apache Licence v2.0 */ !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.Ably=t():e.Ably=t()}(window,(function(){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=42)}([function(e,t,n){"use strict";n.r(t),n.d(t,"__extends",(function(){return o})),n.d(t,"__assign",(function(){return i})),n.d(t,"__rest",(function(){return a})),n.d(t,"__decorate",(function(){return s})),n.d(t,"__param",(function(){return c})),n.d(t,"__metadata",(function(){return u})),n.d(t,"__awaiter",(function(){return l})),n.d(t,"__generator",(function(){return f})),n.d(t,"__createBinding",(function(){return d})),n.d(t,"__exportStar",(function(){return p})),n.d(t,"__values",(function(){return h})),n.d(t,"__read",(function(){return g})),n.d(t,"__spread",(function(){return m})),n.d(t,"__spreadArrays",(function(){return y})),n.d(t,"__spreadArray",(function(){return v})),n.d(t,"__await",(function(){return _})),n.d(t,"__asyncGenerator",(function(){return b})),n.d(t,"__asyncDelegator",(function(){return O})),n.d(t,"__asyncValues",(function(){return C})),n.d(t,"__makeTemplateObject",(function(){return w})),n.d(t,"__importStar",(function(){return A})),n.d(t,"__importDefault",(function(){return S})),n.d(t,"__classPrivateFieldGet",(function(){return k})),n.d(t,"__classPrivateFieldSet",(function(){return T})); /*! ***************************************************************************** Copyright (c) Microsoft Corporation. Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ***************************************************************************** */ var r=function(e,t){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])})(e,t)};function o(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}var i=function(){return(i=Object.assign||function(e){for(var t,n=1,r=arguments.length;n=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a}function c(e,t){return function(n,r){t(n,r,e)}}function u(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)}function l(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{c(r.next(e))}catch(e){i(e)}}function s(e){try{c(r.throw(e))}catch(e){i(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}c((r=r.apply(e,t||[])).next())}))}function f(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function g(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,o,i=n.call(e),a=[];try{for(;(void 0===t||t-- >0)&&!(r=i.next()).done;)a.push(r.value)}catch(e){o={error:e}}finally{try{r&&!r.done&&(n=i.return)&&n.call(i)}finally{if(o)throw o.error}}return a}function m(){for(var e=[],t=0;t1||s(e,t)}))})}function s(e,t){try{(n=o[e](t)).value instanceof _?Promise.resolve(n.value.v).then(c,u):l(i[0][2],n)}catch(e){l(i[0][3],e)}var n}function c(e){s("next",e)}function u(e){s("throw",e)}function l(e,t){e(t),i.shift(),i.length&&s(i[0][0],i[0][1])}}function O(e){var t,n;return t={},r("next"),r("throw",(function(e){throw e})),r("return"),t[Symbol.iterator]=function(){return this},t;function r(r,o){t[r]=e[r]?function(t){return(n=!n)?{value:_(e[r](t)),done:"return"===r}:o?o(t):t}:o}}function C(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var t,n=e[Symbol.asyncIterator];return n?n.call(e):(e=h(e),t={},r("next"),r("throw"),r("return"),t[Symbol.asyncIterator]=function(){return this},t);function r(n){t[n]=e[n]&&function(t){return new Promise((function(r,o){(function(e,t,n,r){Promise.resolve(r).then((function(t){e({value:t,done:n})}),t)})(r,o,(t=e[n](t)).done,t.value)}))}}}function w(e,t){return Object.defineProperty?Object.defineProperty(e,"raw",{value:t}):e.raw=t,e}var R=Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t};function A(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&d(t,e,n);return R(t,e),t}function S(e){return e&&e.__esModule?e:{default:e}}function k(e,t,n,r){if("a"===n&&!r)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!r:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?r:"a"===n?r.call(e):r?r.value:t.get(e)}function T(e,t,n,r,o){if("m"===r)throw new TypeError("Private method is not writable");if("a"===r&&!o)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!o:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===r?o.call(e,n):o?o.value=n:t.set(e,n),n}},function(e,t,n){"use strict";(function(e){Object.defineProperty(t,"__esModule",{value:!0}),t.allToUpperCase=t.allToLowerCase=t.encodeBody=t.decodeBody=t.Format=t.promisify=t.trim=t.arrChooseN=t.randomHexString=t.randomString=t.cheapRandStr=t.dataSizeBytes=t.inspectBody=t.inspectError=t.isErrorInfoOrPartialErrorInfo=t.now=t.parseQueryString=t.toQueryString=t.arrPopRandomElement=t.defaultPostHeaders=t.defaultGetHeaders=t.allSame=t.arrEvery=t.arrFilter=t.arrMap=t.safeArrForEach=t.arrForEach=t.forInOwnNonNullProperties=t.valuesArray=t.keysArray=t.arrWithoutValue=t.arrDeleteValue=t.arrIn=t.arrIndexOf=t.arrSubtract=t.arrIntersectOb=t.arrIntersect=t.intersect=t.containsValue=t.inherits=t.prototypicalClone=t.shallowClone=t.isEmptyArg=t.isOnlyPropIn=t.isEmpty=t.isObject=t.ensureArray=t.isArray=t.copy=t.mixin=void 0,t.arrEquals=t.toBase64=t.matchDerivedChannel=t.shallowEquals=t.getGlobalObject=t.getRetryTime=t.getJitterCoefficient=t.getBackoffCoefficient=void 0;var r=n(0),o=r.__importDefault(n(3)),i=r.__importStar(n(8)),a=r.__importDefault(n(4)),s=n(11),c=n(31);function u(e){return Math.floor(Math.random()*e.length)}function l(e){for(var t=[],n=1;n-1||(t+="; see "+e.href+" "),t+="]"}var s=function(e){function t(n,r,o,i){var a=e.call(this,n)||this;return void 0!==Object.setPrototypeOf&&Object.setPrototypeOf(a,t.prototype),a.code=r,a.statusCode=o,a.cause=i,a}return r.__extends(t,e),t.prototype.toString=function(){return a(this)},t.fromValues=function(e){var n=e,r=n.message,i=n.code,a=n.statusCode;if("string"!=typeof r||"number"!=typeof i||"number"!=typeof a)throw new Error("ErrorInfo.fromValues(): invalid values: "+o.default.Config.inspect(e));var s=Object.assign(new t(r,i,a),e);return s.code&&!s.href&&(s.href="https://help.ably.io/error/"+s.code),s},t}(Error);t.default=s;var c=function(e){function t(n,r,o,i){var a=e.call(this,n)||this;return void 0!==Object.setPrototypeOf&&Object.setPrototypeOf(a,t.prototype),a.code=r,a.statusCode=o,a.cause=i,a}return r.__extends(t,e),t.prototype.toString=function(){return a(this)},t}(Error);t.PartialErrorInfo=c},function(e,t,n){var r;e.exports=(r=n(6),function(){if("function"==typeof ArrayBuffer){var e=r.lib.WordArray,t=e.init;(e.init=function(e){if(e instanceof ArrayBuffer&&(e=new Uint8Array(e)),(e instanceof Int8Array||"undefined"!=typeof Uint8ClampedArray&&e instanceof Uint8ClampedArray||e instanceof Int16Array||e instanceof Uint16Array||e instanceof Int32Array||e instanceof Uint32Array||e instanceof Float32Array||e instanceof Float64Array)&&(e=new Uint8Array(e.buffer,e.byteOffset,e.byteLength)),e instanceof Uint8Array){for(var n=e.byteLength,r=[],o=0;o>>2]|=e[o]<<24-o%4*8;t.call(this,r,n)}else t.apply(this,arguments)}).prototype=e}}(),r.lib.WordArray)},function(e,t,n){(function(t){var r;e.exports=(r=r||function(e,r){var o;if("undefined"!=typeof window&&window.crypto&&(o=window.crypto),!o&&"undefined"!=typeof window&&window.msCrypto&&(o=window.msCrypto),!o&&void 0!==t&&t.crypto&&(o=t.crypto),!o)try{o=n(44)}catch(e){}var i=function(){if(o){if("function"==typeof o.getRandomValues)try{return o.getRandomValues(new Uint32Array(1))[0]}catch(e){}if("function"==typeof o.randomBytes)try{return o.randomBytes(4).readInt32LE()}catch(e){}}throw new Error("Native crypto module could not be used to get secure random number.")},a=Object.create||function(){function e(){}return function(t){var n;return e.prototype=t,n=new e,e.prototype=null,n}}(),s={},c=s.lib={},u=c.Base={extend:function(e){var t=a(this);return e&&t.mixIn(e),t.hasOwnProperty("init")&&this.init!==t.init||(t.init=function(){t.$super.init.apply(this,arguments)}),t.init.prototype=t,t.$super=this,t},create:function(){var e=this.extend();return e.init.apply(e,arguments),e},init:function(){},mixIn:function(e){for(var t in e)e.hasOwnProperty(t)&&(this[t]=e[t]);e.hasOwnProperty("toString")&&(this.toString=e.toString)},clone:function(){return this.init.prototype.extend(this)}},l=c.WordArray=u.extend({init:function(e,t){e=this.words=e||[],this.sigBytes=null!=t?t:4*e.length},toString:function(e){return(e||d).stringify(this)},concat:function(e){var t=this.words,n=e.words,r=this.sigBytes,o=e.sigBytes;if(this.clamp(),r%4)for(var i=0;i>>2]>>>24-i%4*8&255;t[r+i>>>2]|=a<<24-(r+i)%4*8}else for(i=0;i>>2]=n[i>>>2];return this.sigBytes+=o,this},clamp:function(){var t=this.words,n=this.sigBytes;t[n>>>2]&=4294967295<<32-n%4*8,t.length=e.ceil(n/4)},clone:function(){var e=u.clone.call(this);return e.words=this.words.slice(0),e},random:function(e){for(var t=[],n=0;n>>2]>>>24-o%4*8&255;r.push((i>>>4).toString(16)),r.push((15&i).toString(16))}return r.join("")},parse:function(e){for(var t=e.length,n=[],r=0;r>>3]|=parseInt(e.substr(r,2),16)<<24-r%8*4;return new l.init(n,t/2)}},p=f.Latin1={stringify:function(e){for(var t=e.words,n=e.sigBytes,r=[],o=0;o>>2]>>>24-o%4*8&255;r.push(String.fromCharCode(i))}return r.join("")},parse:function(e){for(var t=e.length,n=[],r=0;r>>2]|=(255&e.charCodeAt(r))<<24-r%4*8;return new l.init(n,t)}},h=f.Utf8={stringify:function(e){try{return decodeURIComponent(escape(p.stringify(e)))}catch(e){throw new Error("Malformed UTF-8 data")}},parse:function(e){return p.parse(unescape(encodeURIComponent(e)))}},g=c.BufferedBlockAlgorithm=u.extend({reset:function(){this._data=new l.init,this._nDataBytes=0},_append:function(e){"string"==typeof e&&(e=h.parse(e)),this._data.concat(e),this._nDataBytes+=e.sigBytes},_process:function(t){var n,r=this._data,o=r.words,i=r.sigBytes,a=this.blockSize,s=i/(4*a),c=(s=t?e.ceil(s):e.max((0|s)-this._minBufferSize,0))*a,u=e.min(4*c,i);if(c){for(var f=0;f0?(e=e?e+"/base64":"base64",t=o.default.BufferUtils.base64Encode(t)):t=o.default.BufferUtils.toBuffer(t)),{name:this.name,id:this.id,clientId:this.clientId,connectionId:this.connectionId,connectionKey:this.connectionKey,extras:this.extras,encoding:e,data:t}},e.prototype.toString=function(){var e="[Message";return this.name&&(e+="; name="+this.name),this.id&&(e+="; id="+this.id),this.timestamp&&(e+="; timestamp="+this.timestamp),this.clientId&&(e+="; clientId="+this.clientId),this.connectionId&&(e+="; connectionId="+this.connectionId),this.encoding&&(e+="; encoding="+this.encoding),this.extras&&(e+="; extras ="+JSON.stringify(this.extras)),this.data&&("string"==typeof this.data?e+="; data="+this.data:o.default.BufferUtils.isBuffer(this.data)?e+="; data (buffer)="+o.default.BufferUtils.base64Encode(this.data):e+="; data (json)="+JSON.stringify(this.data)),this.extras&&(e+="; extras="+JSON.stringify(this.extras)),e+="]"},e.encrypt=function(e,t,n){var r=e.data,i=e.encoding,a=t.channelCipher;i=i?i+"/":"",o.default.BufferUtils.isBuffer(r)||(r=o.default.BufferUtils.utf8Encode(String(r)),i+="utf-8/"),a.encrypt(r,(function(t,r){t?n(t):(e.data=r,e.encoding=i+"cipher+"+a.algorithm,n(null,e))}))},e.encode=function(t,n,r){var i=t.data;if(!("string"==typeof i||o.default.BufferUtils.isBuffer(i)||null==i)){if(!s.isObject(i)&&!s.isArray(i))throw new a.default("Data type is unsupported",40013,400);t.data=JSON.stringify(i),t.encoding=t.encoding?t.encoding+"/json":"json"}null!=n&&n.cipher?e.encrypt(t,n,r):r(null,t)},e.encodeArray=function(t,n,r){for(var o=0,i=0;i0;){var d=s[--u].match(/([-\w]+)(\+([\w-]+))?/);if(!d)break;switch(f=d[1]){case"base64":l=o.default.BufferUtils.base64Decode(String(l)),c==s.length&&(r=l);continue;case"utf-8":l=o.default.BufferUtils.utf8Decode(l);continue;case"json":l=JSON.parse(l);continue;case"cipher":if(null!=n.channelOptions&&n.channelOptions.cipher&&n.channelOptions.channelCipher){var p=d[3],h=n.channelOptions.channelCipher;if(p!=h.algorithm)throw new Error("Unable to decrypt message with given cipher; incompatible cipher params");l=h.decrypt(l);continue}throw new Error("Unable to decrypt message; not an encrypted channel");case"vcdiff":if(!n.plugins||!n.plugins.vcdiff)throw new a.default("Missing Vcdiff decoder (https://github.com/ably-forks/vcdiff-decoder)",40019,400);if("undefined"==typeof Uint8Array)throw new a.default("Delta decoding not supported on this browser (need ArrayBuffer & Uint8Array)",40020,400);try{var g=n.baseEncodedPreviousPayload;"string"==typeof g&&(g=o.default.BufferUtils.utf8Encode(g)),g=o.default.BufferUtils.toBuffer(g),l=o.default.BufferUtils.toBuffer(l),r=l=o.default.BufferUtils.typedArrayToBuffer(n.plugins.vcdiff.decode(l,g))}catch(e){throw new a.default("Vcdiff delta decode failed with "+e,40018,400)}continue;default:throw new Error("Unknown encoding")}}}catch(e){var m=e;throw new a.default("Error processing the "+f+" encoding, decoder returned ‘"+m.message+"’",m.code||40013,400)}finally{e.encoding=c<=0?null:s.slice(0,c).join("/"),e.data=l}}n.baseEncodedPreviousPayload=r},e.fromResponseBody=function(t,n,r){r&&(t=s.decodeBody(t,r));for(var o=0;o0}}return e.prototype.setFlag=function(e){return this.flags=this.flags|l[e]},e.prototype.getMode=function(){return this.flags&&this.flags&l.MODE_ALL},e.prototype.encodeModesToFlags=function(e){var t=this;e.forEach((function(e){return t.setFlag(e)}))},e.prototype.decodeModesFromFlags=function(){var t=this,n=[];return e.channelModes.forEach((function(e){t.hasFlag(e)&&n.push(e)})),n.length>0?n:void 0},e.fromValues=function(t){return Object.assign(new e,t)},e.Action=c,e.channelModes=["PRESENCE","PUBLISH","SUBSCRIBE","PRESENCE_SUBSCRIBE"],e.ActionName=u,e.serialize=o.encodeBody,e.deserialize=function(t,n){var r=o.decodeBody(t,n);return e.fromDeserialized(r)},e.fromDeserialized=function(t){var n=t.error;n&&(t.error=i.default.fromValues(n));var r=t.messages;if(r)for(var o=0;o0&&(u+="; "),u+=e+"="+t.params[e]})),u.length>0&&(r+="; params=["+u+"]")}return r+="]"},e}();t.default=h},function(e,t,n){var r,o,i;e.exports=(i=n(6),o=(r=i).lib.WordArray,r.enc.Base64={stringify:function(e){var t=e.words,n=e.sigBytes,r="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";e.clamp();for(var o=[],i=0;i>>2]>>>24-i%4*8&255)<<16|(t[i+1>>>2]>>>24-(i+1)%4*8&255)<<8|t[i+2>>>2]>>>24-(i+2)%4*8&255,s=0;s<4&&i+.75*s>>6*(3-s)&63));var c=r.charAt(64);if(c)for(;o.length%4;)o.push(c);return o.join("")},parse:function(e){var t=e.length,n="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",r=this._reverseMap;if(!r){r=this._reverseMap=[];for(var i=0;i>>6-a%4*2,u=s|c;r[i>>>2]|=u<<24-i%4*8,i++}return o.create(r,i)}(e,t,r)}},i.enc.Base64)},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(0),o=r.__importStar(n(1)),i=r.__importDefault(n(10)),a=r.__importDefault(n(26)),s=r.__importDefault(n(2)),c=r.__importDefault(n(8)),u=r.__importDefault(n(21)),l=r.__importDefault(n(18)),f=r.__importDefault(n(4)),d=r.__importDefault(n(22)),p=r.__importDefault(n(3));function h(e){return function(e){return!!e.code&&(!l.default.isTokenErr(e)&&(!!o.arrIn([80015,80017,80030],e.code)||e.code>=4e4&&e.code<5e4))}(e)?[i.default.fromValues({action:i.default.Action.ERROR,error:e})]:[i.default.fromValues({action:i.default.Action.DISCONNECTED,error:e})]}var g=function(e){function t(t,n,r){var o=e.call(this,t,n,r,!0)||this;return o.onAuthUpdated=function(e){o.authParams={access_token:e.token}},o.stream=!("stream"in r)||r.stream,o.sendRequest=null,o.recvRequest=null,o.pendingCallback=null,o.pendingItems=null,o}return r.__extends(t,e),t.prototype.connect=function(){var e=this;s.default.logAction(s.default.LOG_MINOR,"CometTransport.connect()","starting"),a.default.prototype.connect.call(this);var t=this.params,n=t.options,r=c.default.getHost(n,t.host),i=c.default.getPort(n),u=n.tls?"https://":"http://";this.baseUri=u+r+":"+i+"/comet/";var l=this.baseUri+"connect";s.default.logAction(s.default.LOG_MINOR,"CometTransport.connect()","uri: "+l),this.auth.getAuthParams((function(t,n){if(t)e.disconnect(t);else if(!e.isDisposed){e.authParams=n;var r=e.params.getConnectParams(n);"stream"in r&&(e.stream=r.stream),s.default.logAction(s.default.LOG_MINOR,"CometTransport.connect()","connectParams:"+o.toQueryString(r));var i=!1,a=e.recvRequest=e.createRequest(l,null,r,null,e.stream?d.default.REQ_RECV_STREAM:d.default.REQ_RECV);a.on("data",(function(t){e.recvRequest&&(i||(i=!0,e.emit("preconnect")),e.onData(t))})),a.on("complete",(function(t){e.recvRequest||(t=t||new f.default("Request cancelled",80003,400)),e.recvRequest=null,i||t||(i=!0,e.emit("preconnect")),e.onActivity(),t?t.code?e.onData(h(t)):e.disconnect(t):p.default.Config.nextTick((function(){e.recv()}))})),a.exec()}}))},t.prototype.requestClose=function(){s.default.logAction(s.default.LOG_MINOR,"CometTransport.requestClose()"),this._requestCloseOrDisconnect(!0)},t.prototype.requestDisconnect=function(){s.default.logAction(s.default.LOG_MINOR,"CometTransport.requestDisconnect()"),this._requestCloseOrDisconnect(!1)},t.prototype._requestCloseOrDisconnect=function(e){var t=this,n=e?this.closeUri:this.disconnectUri;if(n){var r=this.createRequest(n,null,this.authParams,null,d.default.REQ_SEND);r.on("complete",(function(n){n&&(s.default.logAction(s.default.LOG_ERROR,"CometTransport.request"+(e?"Close()":"Disconnect()"),"request returned err = "+o.inspectError(n)),t.finish("disconnected",n))})),r.exec()}},t.prototype.dispose=function(){var e=this;s.default.logAction(s.default.LOG_MINOR,"CometTransport.dispose()",""),this.isDisposed||(this.isDisposed=!0,this.recvRequest&&(s.default.logAction(s.default.LOG_MINOR,"CometTransport.dispose()","aborting recv request"),this.recvRequest.abort(),this.recvRequest=null),this.finish("disconnected",u.default.disconnected()),p.default.Config.nextTick((function(){e.emit("disposed")})))},t.prototype.onConnect=function(e){var t;if(!this.isDisposed){var n=null===(t=e.connectionDetails)||void 0===t?void 0:t.connectionKey;a.default.prototype.onConnect.call(this,e);var r=this.baseUri+n;s.default.logAction(s.default.LOG_MICRO,"CometTransport.onConnect()","baseUri = "+r),this.sendUri=r+"/send",this.recvUri=r+"/recv",this.closeUri=r+"/close",this.disconnectUri=r+"/disconnect"}},t.prototype.send=function(e){if(this.sendRequest)return this.pendingItems=this.pendingItems||[],void this.pendingItems.push(e);var t=this.pendingItems||[];t.push(e),this.pendingItems=null,this.sendItems(t)},t.prototype.sendAnyPending=function(){var e=this.pendingItems;e&&(this.pendingItems=null,this.sendItems(e))},t.prototype.sendItems=function(e){var t=this,n=this.sendRequest=this.createRequest(this.sendUri,null,this.authParams,this.encodeRequest(e),d.default.REQ_SEND);n.on("complete",(function(e,n){e&&s.default.logAction(s.default.LOG_ERROR,"CometTransport.sendItems()","on complete: err = "+o.inspectError(e)),t.sendRequest=null,e?e.code?t.onData(h(e)):t.disconnect(e):(n&&t.onData(n),t.pendingItems&&p.default.Config.nextTick((function(){t.sendRequest||t.sendAnyPending()})))})),n.exec()},t.prototype.recv=function(){var e=this;if(!this.recvRequest&&this.isConnected){var t=this.recvRequest=this.createRequest(this.recvUri,null,this.authParams,null,this.stream?d.default.REQ_RECV_STREAM:d.default.REQ_RECV_POLL);t.on("data",(function(t){e.onData(t)})),t.on("complete",(function(t){e.recvRequest=null,e.onActivity(),t?t.code?e.onData(h(t)):e.disconnect(t):p.default.Config.nextTick((function(){e.recv()}))})),t.exec()}},t.prototype.onData=function(e){try{var t=this.decodeResponse(e);if(t&&t.length)for(var n=0;n=r.Success&&e=300){var h=d&&d.error||n;return h||((h=new Error("Error in unenveloping "+r)).statusCode=f),void e(h,d,p,!0,f)}e(n,d,p,!0,f)}else e(n,r,o,!0,s)}else e(new u.PartialErrorInfo("unenvelope(): Response body is missing",null))}else e(n,[],o,!0,s);else e(n)}}(m,g),(h=h||{}).envelope=g),f(t,c,h,m,(function c(u,l){var d;if(a.default.shouldLog(a.default.LOG_MICRO)&&a.default.logAction(a.default.LOG_MICRO,"Resource."+e+"()","Sending; "+p(n,l)),a.default.shouldLog(a.default.LOG_MICRO)){var h=r;if((null===(d=u["content-type"])||void 0===d?void 0:d.indexOf("msgpack"))>0)try{h=o.default.Config.msgpack.decode(r)}catch(t){a.default.logAction(a.default.LOG_MICRO,"Resource."+e+"()","Sending MsgPack Decoding Error: "+i.inspectError(t))}a.default.logAction(a.default.LOG_MICRO,"Resource."+e+"()","Sending; "+p(n,l)+"; Body: "+h)}t.http.do(e,t,n,u,r,l,(function(e,n,r,o,i){e&&s.default.isTokenErr(e)?t.auth.authorize(null,null,(function(e){e?m(e):f(t,u,l,m,c)})):m(e,n,r,o,i)}))}))},e}();t.default=h},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(0),o=r.__importDefault(n(2)),i=r.__importDefault(n(3)),a=r.__importDefault(n(9)),s=r.__importStar(n(1));function c(e){return u.Actions.indexOf(e)}var u=function(){function e(){}return e.prototype.isSynthesized=function(){return!this.id||!this.connectionId||this.id.substring(this.connectionId.length,0)!==this.connectionId},e.prototype.parseId=function(){if(!this.id)throw new Error("parseId(): Presence message does not contain an id");var e=this.id.split(":");return{connectionId:e[0],msgSerial:parseInt(e[1],10),index:parseInt(e[2],10)}},e.prototype.toJSON=function(){var e=this.data,t=this.encoding;return e&&i.default.BufferUtils.isBuffer(e)&&(arguments.length>0?(t=t?t+"/base64":"base64",e=i.default.BufferUtils.base64Encode(e)):e=i.default.BufferUtils.toBuffer(e)),{id:this.id,clientId:this.clientId,action:c(this.action),data:e,encoding:t,extras:this.extras}},e.prototype.toString=function(){var e="[PresenceMessage";return e+="; action="+this.action,this.id&&(e+="; id="+this.id),this.timestamp&&(e+="; timestamp="+this.timestamp),this.clientId&&(e+="; clientId="+this.clientId),this.connectionId&&(e+="; connectionId="+this.connectionId),this.encoding&&(e+="; encoding="+this.encoding),this.data&&("string"==typeof this.data?e+="; data="+this.data:i.default.BufferUtils.isBuffer(this.data)?e+="; data (buffer)="+i.default.BufferUtils.base64Encode(this.data):e+="; data (json)="+JSON.stringify(this.data)),this.extras&&(e+="; extras="+JSON.stringify(this.extras)),e+="]"},e.fromResponseBody=function(t,n,r){var i=[];r&&(t=s.decodeBody(t,r));for(var a=0;a-1&&"string"!=typeof p&&(p=JSON.stringify(p)));for(var g in c.open(i,this.uri,!0),c.responseType=h,"authorization"in t&&(c.withCredentials=!0),t)c.setRequestHeader(g,t[g]);var m,y,v,_=function(t,n,r,o){var i,c=n+" (event type: "+t.type+")";(null===(i=null==e?void 0:e.xhr)||void 0===i?void 0:i.statusText)&&(c+=", current statusText is "+e.xhr.statusText),s.default.logAction(s.default.LOG_ERROR,"Request.on"+t.type+"()",c),e.complete(new a.PartialErrorInfo(c,r,o))};c.onerror=function(e){_(e,"XHR error occurred",null,400)},c.onabort=function(t){e.timedOut?_(t,"Request aborted due to request timeout expiring",null,408):_(t,"Request cancelled",null,400)},c.ontimeout=function(e){_(e,"Request timed out",null,408)};var b=0,O=!1,C=function(){var n;try{var r=function(e,t){return e.getResponseHeader&&e.getResponseHeader(t)}(c,"content-type");if(r?r.indexOf("application/json")>=0:"text"==c.responseType){var i="arraybuffer"===c.responseType?l.default.BufferUtils.utf8Decode(c.response):String(c.responseText);n=i.length?JSON.parse(i):i,O=!0}else n=c.response;void 0!==n.response?(y=n.statusCode,v=y<400,t=n.headers,n=n.response):t=function(e){for(var t=o.trim(e.getAllResponseHeaders()).split("\r\n"),n={},r=0;r-1;)t=n.slice(b,e),b=e+1,R(t)}var R=function(t){try{t=JSON.parse(t)}catch(t){return void e.complete(new a.PartialErrorInfo("Malformed response body from server: "+t.message,null,400))}e.emit("data",t)};c.onreadystatechange=function(){var t=c.readyState;t<3||0!==c.status&&(void 0===y&&(1223===(y=c.status)&&(y=204),clearTimeout(r),v=y<400,204!=y?m=e.requestMode==u.default.REQ_RECV_STREAM&&v&&function(e){return e.getResponseHeader&&(e.getResponseHeader("transfer-encoding")||!e.getResponseHeader("content-length"))}(c):e.complete(null,null,null,null,y)),3==t&&m?w():4==t&&(m?(w(),e.streamComplete=!0,l.default.Config.nextTick((function(){e.complete()}))):C()))},c.send(p)},t.prototype.dispose=function(){var e=this.xhr;if(e){e.onreadystatechange=e.onerror=e.onabort=e.ontimeout=d,this.xhr=null;var t=this.timer;t&&(clearTimeout(t),this.timer=null),this.requestComplete||e.abort()}delete h[this.id]},t}(i.default);t.default=y}).call(this,n(13))},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(0),o=r.__importDefault(n(2)),i=r.__importStar(n(1)),a=r.__importDefault(n(24)),s=r.__importDefault(n(4)),c=r.__importDefault(n(45)),u=n(11),l=r.__importDefault(n(19)),f=r.__importDefault(n(14)),d=r.__importDefault(n(3)),p=r.__importDefault(n(15)),h=Math.pow(2,17);function g(){}function m(){return("000000"+Math.floor(1e16*Math.random())).slice(-16)}function y(e){return!!e.connection}function v(e){return i.isErrorInfoOrPartialErrorInfo(e)?(e.code||(403===e.statusCode?e.code=40300:(e.code=40170,e.statusCode=401)),e):new s.default(i.inspectError(e),e.code||40170,e.statusCode||401)}var _=function(e,t){if(d.default.Config.createHmac){var n=d.default.Config.createHmac("SHA256",t);return n.update(e),n.digest("base64")}return(0,u.stringify)((0,c.default)(e,t))};function b(e){if(!e)return"";"string"==typeof e&&(e=JSON.parse(e));var t=Object.create(null),n=i.keysArray(e,!0);if(!n)return"";n.sort();for(var r=0;r-1&&(a=i.parseQueryString(t.authUrl.slice(p)),t.authUrl=t.authUrl.slice(0,p),f||(t.authParams=i.mixin(a,t.authParams)));var g=i.mixin({},t.authParams||{},e),m=function(e,t,r,a){var c;if(e?o.default.logAction(o.default.LOG_MICRO,"Auth.requestToken().tokenRequestCallback","Received Error: "+i.inspectError(e)):(c=r["content-type"],o.default.logAction(o.default.LOG_MICRO,"Auth.requestToken().tokenRequestCallback","Received; content-type: "+c+"; body: "+i.inspectBody(t))),e||a)return n(e,t);if(d.default.BufferUtils.isBuffer(t)&&(t=t.toString()),c){var u=c.indexOf("application/json")>-1,l=c.indexOf("text/plain")>-1||c.indexOf("application/jwt")>-1;if(u||l){if(u){if(t.length>h)return void n(new s.default("authUrl response exceeded max permitted length",40170,401));try{t=JSON.parse(t)}catch(e){return void n(new s.default("Unexpected error processing authURL response; err = "+e.message,40170,401))}}n(null,t,c)}else n(new s.default("authUrl responded with unacceptable content-type "+c+", should be either text/plain, application/jwt or application/json",40170,401))}else n(new s.default("authUrl response is missing a content-type header",40170,401))};if(o.default.logAction(o.default.LOG_MICRO,"Auth.requestToken().tokenRequestCallback","Requesting token from "+t.authUrl+"; Params: "+JSON.stringify(g)+"; method: "+(f?"POST":"GET")),f){var y=c||{};y["content-type"]="application/x-www-form-urlencoded";var v=i.toQueryString(g).slice(1);r.client.http.doUri(l.default.Post,u,t.authUrl,y,v,a,m)}else r.client.http.doUri(l.default.Get,u,t.authUrl,c||{},null,g,m)};else{if(!t.key){var f="Need a new token, but authOptions does not include any way to request one (no authUrl, authCallback, or key)";return o.default.logAction(o.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"),void c(new s.default(f,40171,403))}o.default.logAction(o.default.LOG_MINOR,"Auth.requestToken()","using token auth with client-side signing"),a=function(e,n){r.createTokenRequest(e,t,n)}}"capability"in e&&(e.capability=b(e.capability));var p=function(e,n){var a="/keys/"+e.keyName+"/requestToken",s=i.defaultPostHeaders(r.client.options);t.requestHeaders&&i.mixin(s,t.requestHeaders),o.default.logAction(o.default.LOG_MICRO,"Auth.requestToken().requestToken","Sending POST to "+a+"; Token params: "+JSON.stringify(e)),r.client.http.do(l.default.Post,u,(function(e){return u.baseUri(e)+a}),s,JSON.stringify(e),null,n)},m=!1,y=this.client.options.timeouts.realtimeRequestTimeout,_=setTimeout((function(){m=!0;var e="Token request callback timed out after "+y/1e3+" seconds";o.default.logAction(o.default.LOG_ERROR,"Auth.requestToken()",e),c(new s.default(e,40170,401))}),y);a(e,(function(e,n,r){if(!m){if(clearTimeout(_),e)return o.default.logAction(o.default.LOG_ERROR,"Auth.requestToken()","token request signing call returned error; err = "+i.inspectError(e)),void c(v(e));if("string"!=typeof n){if("object"!=typeof n){var a="Expected token request callback to call back with a token string or token request/details object, but got a "+typeof n;return o.default.logAction(o.default.LOG_ERROR,"Auth.requestToken()",a),void c(new s.default(a,40170,401))}var u=JSON.stringify(n).length;if(u>h&&!t.suppressMaxLengthCheck)c(new s.default("Token request/details object exceeded max permitted stringified size (was "+u+" bytes)",40170,401));else if("issued"in n)c(null,n);else{if(!("keyName"in n)){a="Expected token request callback to call back with a token string, token request object, or token details object";return o.default.logAction(o.default.LOG_ERROR,"Auth.requestToken()",a),void c(new s.default(a,40170,401))}p(n,(function(e,t,n,r){if(e)return o.default.logAction(o.default.LOG_ERROR,"Auth.requestToken()","token request API call returned error; err = "+i.inspectError(e)),void c(v(e));r||(t=JSON.parse(t)),o.default.logAction(o.default.LOG_MINOR,"Auth.getToken()","token received"),c(null,t)}))}}else 0===n.length?c(new s.default("Token string is empty",40170,401)):n.length>h?c(new s.default("Token string exceeded max permitted length (was "+n.length+" bytes)",40170,401)):"undefined"===n||"null"===n?c(new s.default("Token string was literal null/undefined",40170,401)):"{"!==n[0]||r&&r.indexOf("application/jwt")>-1?c(null,{token:n}):c(new s.default("Token was double-encoded; make sure you're not JSON-encoding an already encoded token request or details",40170,401))}}))},e.prototype.createTokenRequest=function(e,t,n){var r=this;if("function"!=typeof e||n?"function"!=typeof t||n||(n=t,t=null):(n=e,t=e=null),!n&&this.client.options.promises)return i.promisify(this,"createTokenRequest",arguments);t=t||this.authOptions,e=e||i.copy(this.tokenParams);var a=t.key;if(a){var c=a.split(":"),u=c[0],l=c[1];if(l)if(""!==e.clientId){"capability"in e&&(e.capability=b(e.capability));var f,d=i.mixin({keyName:u},e),p=e.clientId||"",h=e.ttl||"",g=e.capability||"";f=function(){var e=d.nonce||(d.nonce=m()),t=d.timestamp,r=d.keyName+"\n"+h+"\n"+g+"\n"+p+"\n"+t+"\n"+e+"\n";d.mac=d.mac||_(r,l),o.default.logAction(o.default.LOG_MINOR,"Auth.getTokenRequest()","generated signed request"),n(null,d)},d.timestamp?f():r.getTimestamp(t&&t.queryTime,(function(e,t){e?n(e):(d.timestamp=t,f())}))}else n(new s.default("clientId can’t be an empty string",40012,400));else n(new s.default("Invalid key specified",40101,403))}else n(new s.default("No key specified",40101,403))},e.prototype.getAuthParams=function(e){"basic"==this.method?e(null,{key:this.key}):this._ensureValidAuthCredentials(!1,(function(t,n){if(t)e(t);else{if(!n)throw new Error("Auth.getAuthParams(): _ensureValidAuthCredentials returned no error or tokenDetails");e(null,{access_token:n.token})}}))},e.prototype.getAuthHeaders=function(e){"basic"==this.method?e(null,{authorization:"Basic "+this.basicKey}):this._ensureValidAuthCredentials(!1,(function(t,n){if(t)e(t);else{if(!n)throw new Error("Auth.getAuthParams(): _ensureValidAuthCredentials returned no error or tokenDetails");e(null,{authorization:"Bearer "+i.toBase64(n.token)})}}))},e.prototype.getTimestamp=function(e,t){this.isTimeOffsetSet()||!e&&!this.authOptions.queryTime?t(null,this.getTimestampUsingOffset()):this.client.time(t)},e.prototype.getTimestampUsingOffset=function(){return i.now()+(this.client.serverTimeOffset||0)},e.prototype.isTimeOffsetSet=function(){return null!==this.client.serverTimeOffset},e.prototype._saveBasicOptions=function(e){this.method="basic",this.key=e.key,this.basicKey=i.toBase64(e.key),this.authOptions=e||{},"clientId"in e&&this._userSetClientId(e.clientId)},e.prototype._saveTokenOptions=function(e,t){this.method="token",e&&(this.tokenParams=e),t&&(t.token&&(t.tokenDetails="string"==typeof t.token?{token:t.token}:t.token),t.tokenDetails&&(this.tokenDetails=t.tokenDetails),"clientId"in t&&this._userSetClientId(t.clientId),this.authOptions=t)},e.prototype._ensureValidAuthCredentials=function(e,t){var n=this,r=this.tokenDetails;if(r){if(this._tokenClientIdMismatch(r.clientId))return void t(new s.default("Mismatch between clientId in token ("+r.clientId+") and current clientId ("+this.clientId+")",40102,403));if(!this.isTimeOffsetSet()||!r.expires||r.expires>=this.getTimestampUsingOffset())return o.default.logAction(o.default.LOG_MINOR,"Auth.getToken()","using cached token; expires = "+r.expires),void t(null,r);o.default.logAction(o.default.LOG_MINOR,"Auth.getToken()","deleting expired token"),this.tokenDetails=null}if((this.waitingForTokenRequest||(this.waitingForTokenRequest=a.default.create())).push(t),null===this.currentTokenRequestId||e){var i=this.currentTokenRequestId=w++;this.requestToken(this.tokenParams,this.authOptions,(function(e,t){if(n.currentTokenRequestId>i)o.default.logAction(o.default.LOG_MINOR,"Auth._ensureValidAuthCredentials()","Discarding token request response; overtaken by newer one");else{n.currentTokenRequestId=null;var r=n.waitingForTokenRequest||g;n.waitingForTokenRequest=null,e?r(e):r(null,n.tokenDetails=t)}}))}},e.prototype._userSetClientId=function(e){if("string"!=typeof e&&null!==e)throw new s.default("clientId must be either a string or null",40012,400);if("*"===e)throw new s.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);var t=this._uncheckedSetClientId(e);if(t)throw t},e.prototype._uncheckedSetClientId=function(e){if(this._tokenClientIdMismatch(e)){var t="Unexpected clientId mismatch: client has "+this.clientId+", requested "+e,n=new s.default(t,40102,401);return o.default.logAction(o.default.LOG_ERROR,"Auth._uncheckedSetClientId()",t),n}return this.clientId=this.tokenParams.clientId=e,null},e.prototype._tokenClientIdMismatch=function(e){return!(!this.clientId||"*"===this.clientId||!e||"*"===e||this.clientId===e)},e.isTokenErr=function(e){return e.code&&e.code>=40140&&e.code<40150},e.prototype.revokeTokens=function(e,t,n){if(C(this.client.options))throw new s.default("Cannot revoke tokens when using token auth",40162,401);var o,a=this.client.options.keyName;if("function"==typeof t?(n=t,o={}):o=null!=t?t:{},void 0===n){if(this.client.options.promises)return i.promisify(this,"revokeTokens",[e,o]);n=g}var c=n,u=r.__assign({targets:e.map((function(e){return"".concat(e.type,":").concat(e.value)}))},o),l=this.client.options.useBinaryProtocol?i.Format.msgpack:i.Format.json,f=i.defaultPostHeaders(this.client.options,l);this.client.options.headers&&i.mixin(f,this.client.options.headers);var d=i.encodeBody(u,l);p.default.post(this.client,"/keys/".concat(a,"/revokeTokens"),d,f,{newBatchResponse:"true"},null,(function(e,t,n,r){if(e)c(e);else{var o=r?t:i.decodeBody(t,l);c(null,o)}}))},e}();t.default=R},function(e,t,n){"use strict";var r;Object.defineProperty(t,"__esModule",{value:!0}),function(e){e.Get="get",e.Delete="delete",e.Post="post",e.Put="put",e.Patch="patch"}(r||(r={})),t.default=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.HttpPaginatedResponse=t.PaginatedResult=void 0;var r=n(0),o=r.__importStar(n(1)),i=r.__importDefault(n(2)),a=r.__importDefault(n(15)),s=r.__importDefault(n(14));var c=function(){function e(e,t,n,r,o,i){this.rest=e,this.path=t,this.headers=n,this.envelope=null!=r?r:null,this.bodyHandler=o,this.useHttpPaginatedResponse=i||!1}return e.prototype.get=function(e,t){var n=this;a.default.get(this.rest,this.path,this.headers,e,this.envelope,(function(e,r,o,i,a){n.handlePage(e,r,o,i,a,t)}))},e.prototype.delete=function(e,t){var n=this;a.default.delete(this.rest,this.path,this.headers,e,this.envelope,(function(e,r,o,i,a){n.handlePage(e,r,o,i,a,t)}))},e.prototype.post=function(e,t,n){var r=this;a.default.post(this.rest,this.path,t,this.headers,e,this.envelope,(function(e,t,o,i,a){n&&r.handlePage(e,t,o,i,a,n)}))},e.prototype.put=function(e,t,n){var r=this;a.default.put(this.rest,this.path,t,this.headers,e,this.envelope,(function(e,t,o,i,a){n&&r.handlePage(e,t,o,i,a,n)}))},e.prototype.patch=function(e,t,n){var r=this;a.default.patch(this.rest,this.path,t,this.headers,e,this.envelope,(function(e,t,o,i,a){n&&r.handlePage(e,t,o,i,a,n)}))},e.prototype.handlePage=function(e,t,n,r,a,c){if(e&&function(e,t,n){return!(n&&(t||"number"==typeof e.code))}(e,t,this.useHttpPaginatedResponse))return i.default.logAction(i.default.LOG_ERROR,"PaginatedResource.handlePage()","Unexpected error getting resource: err = "+o.inspectError(e)),void(null==c||c(e));var f,d,p;try{f=a==s.default.NoContent?[]:this.bodyHandler(t,n||{},r)}catch(t){return void(null==c||c(e||t))}n&&(d=n.Link||n.link)&&(p=function(e){"string"==typeof e&&(e=e.split(","));for(var t,n,r={},i=0;i;\s*rel="(\w+)"$/);if(a){var s=(t=a[1],n=void 0,(n=t.match(/^\.\/(\w+)\?(.*)$/))&&n[2]&&o.parseQueryString(n[2]));s&&(r[a[2]]=s)}}return r}(d)),this.useHttpPaginatedResponse?c(null,new l(this,f,n||{},a,p,e)):c(null,new u(this,f,p))},e}(),u=function(){function e(e,t,n){var r=this;this.resource=e,this.items=t;var i=this;n&&("first"in n&&(this.first=function(e){if(!e&&i.resource.rest.options.promises)return o.promisify(i,"first",[]);i.get(n.first,e)}),"current"in n&&(this.current=function(e){if(!e&&i.resource.rest.options.promises)return o.promisify(i,"current",[]);i.get(n.current,e)}),this.next=function(e){if(!e&&i.resource.rest.options.promises)return o.promisify(i,"next",[]);"next"in n?i.get(n.next,e):e(null,null)},this.hasNext=function(){return"next"in n},this.isLast=function(){var e;return!(null===(e=r.hasNext)||void 0===e?void 0:e.call(r))})}return e.prototype.get=function(e,t){var n=this.resource;a.default.get(n.rest,n.path,n.headers,e,n.envelope,(function(e,r,o,i,a){n.handlePage(e,r,o,i,a,t)}))},e}();t.PaginatedResult=u;var l=function(e){function t(t,n,r,o,i,a){var s=e.call(this,t,n,i)||this;return s.statusCode=o,s.success=o<300&&o>=200,s.headers=r,s.errorCode=a&&a.code,s.errorMessage=a&&a.message,s}return r.__extends(t,e),t.prototype.toJSON=function(){return{items:this.items,statusCode:this.statusCode,success:this.success,headers:this.headers,errorCode:this.errorCode,errorMessage:this.errorMessage}},t}(u);t.HttpPaginatedResponse=l,t.default=c},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.isRetriable=void 0;var r=n(0).__importDefault(n(4)),o={DISCONNECTED:80003,SUSPENDED:80002,FAILED:8e4,CLOSING:80017,CLOSED:80017,UNKNOWN_CONNECTION_ERR:50002,UNKNOWN_CHANNEL_ERR:50001},i={disconnected:function(){return r.default.fromValues({statusCode:400,code:o.DISCONNECTED,message:"Connection to server temporarily unavailable"})},suspended:function(){return r.default.fromValues({statusCode:400,code:o.SUSPENDED,message:"Connection to server unavailable"})},failed:function(){return r.default.fromValues({statusCode:400,code:o.FAILED,message:"Connection failed or disconnected by server"})},closing:function(){return r.default.fromValues({statusCode:400,code:o.CLOSING,message:"Connection closing"})},closed:function(){return r.default.fromValues({statusCode:400,code:o.CLOSED,message:"Connection closed"})},unknownConnectionErr:function(){return r.default.fromValues({statusCode:500,code:o.UNKNOWN_CONNECTION_ERR,message:"Internal connection error"})},unknownChannelErr:function(){return r.default.fromValues({statusCode:500,code:o.UNKNOWN_CONNECTION_ERR,message:"Internal channel error"})}};t.isRetriable=function(e){return!e.statusCode||!e.code||e.statusCode>=500||Object.values(o).includes(e.code)},t.default=i},function(e,t,n){"use strict";var r;Object.defineProperty(t,"__esModule",{value:!0}),function(e){e[e.REQ_SEND=0]="REQ_SEND",e[e.REQ_RECV=1]="REQ_RECV",e[e.REQ_RECV_POLL=2]="REQ_RECV_POLL",e[e.REQ_RECV_STREAM=3]="REQ_RECV_STREAM"}(r||(r={})),t.default=r},function(e,t,n){var r;e.exports=(r=n(6),n(5),n(58),n(11),n(40),n(32),n(25),n(27),n(28),n(59),n(60),r)},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(0).__importDefault(n(2)),o=function(){function e(e){this.members=e||[]}return e.prototype.call=function(){for(var e=[],t=0;tr&&(t=e.finalize(t)),t.clamp();for(var o=this._oKey=t.clone(),i=this._iKey=t.clone(),s=o.words,c=i.words,u=0;u>>2];e.sigBytes-=t}},i.BlockCipher=d.extend({cfg:d.cfg.extend({mode:g,padding:m}),reset:function(){var e;d.reset.call(this);var t=this.cfg,n=t.iv,r=t.mode;this._xformMode==this._ENC_XFORM_MODE?e=r.createEncryptor:(e=r.createDecryptor,this._minBufferSize=1),this._mode&&this._mode.__creator==e?this._mode.init(this,n&&n.words):(this._mode=e.call(r,this,n&&n.words),this._mode.__creator=e)},_doProcessBlock:function(e,t){this._mode.processBlock(e,t)},_doFinalize:function(){var e,t=this.cfg.padding;return this._xformMode==this._ENC_XFORM_MODE?(t.pad(this._data,this.blockSize),e=this._process(!0)):(e=this._process(!0),t.unpad(e)),e},blockSize:4}),y=i.CipherParams=a.extend({init:function(e){this.mixIn(e)},toString:function(e){return(e||this.formatter).stringify(this)}}),v=(o.format={}).OpenSSL={stringify:function(e){var t=e.ciphertext,n=e.salt;return(n?s.create([1398893684,1701076831]).concat(n).concat(t):t).toString(l)},parse:function(e){var t,n=l.parse(e),r=n.words;return 1398893684==r[0]&&1701076831==r[1]&&(t=s.create(r.slice(2,4)),r.splice(0,4),n.sigBytes-=16),y.create({ciphertext:n,salt:t})}},_=i.SerializableCipher=a.extend({cfg:a.extend({format:v}),encrypt:function(e,t,n,r){r=this.cfg.extend(r);var o=e.createEncryptor(n,r),i=o.finalize(t),a=o.cfg;return y.create({ciphertext:i,key:n,iv:a.iv,algorithm:e,mode:a.mode,padding:a.padding,blockSize:e.blockSize,formatter:r.format})},decrypt:function(e,t,n,r){return r=this.cfg.extend(r),t=this._parse(t,r.format),e.createDecryptor(n,r).finalize(t.ciphertext)},_parse:function(e,t){return"string"==typeof e?t.parse(e,this):e}}),b=(o.kdf={}).OpenSSL={execute:function(e,t,n,r){r||(r=s.random(8));var o=f.create({keySize:t+n}).compute(e,r),i=s.create(o.words.slice(t),4*n);return o.sigBytes=4*t,y.create({key:o,iv:i,salt:r})}},O=i.PasswordBasedCipher=_.extend({cfg:_.cfg.extend({kdf:b}),encrypt:function(e,t,n,r){var o=(r=this.cfg.extend(r)).kdf.execute(n,e.keySize,e.ivSize);r.iv=o.iv;var i=_.encrypt.call(this,e,t,o.key,r);return i.mixIn(o),i},decrypt:function(e,t,n,r){r=this.cfg.extend(r),t=this._parse(t,r.format);var o=r.kdf.execute(n,e.keySize,e.ivSize,t.salt);return r.iv=o.iv,_.decrypt.call(this,e,t,o.key,r)}}))))},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Request=t.createRequest=void 0;var r=n(0),o=r.__importStar(n(1)),i=r.__importDefault(n(12)),a=r.__importDefault(n(3)),s=r.__importDefault(n(7)),c=n(4),u=r.__importDefault(n(8)),l=r.__importDefault(n(2)),f=r.__importDefault(n(22)),d=o.getGlobalObject(),p=function(){},h=d._ablyjs_jsonp={};h._=function(e){return h["_"+e]||p};var g=1;function m(e,t,n,r,i,a,s){return a=a||u.default.TIMEOUTS,new v(void 0,e,t,o.copy(n),r,i,a,s)}t.createRequest=m;var y=function(e){function t(t,n,r){var o=e.call(this,t,n,r)||this;return o.shortName="jsonp",r.stream=!1,o}return r.__extends(t,e),t.isAvailable=function(){return a.default.Config.jsonpSupported&&a.default.Config.allowComet},t.prototype.toString=function(){return"JSONPTransport; uri="+this.baseUri+"; isConnected="+this.isConnected},t.prototype.createRequest=function(e,t,n,r,o,i,a){return m(e,t,n,r,o,i=(null==this?void 0:this.timeouts)||i||u.default.TIMEOUTS,a)},t}(i.default),v=function(e){function t(t,n,r,i,a,s,c,u){var l=e.call(this)||this;return void 0===t&&(t=g++),l.id=t,l.uri=n,l.params=i||{},l.params.rnd=o.cheapRandStr(),r&&(r["X-Ably-Version"]&&(l.params.v=r["X-Ably-Version"]),r["X-Ably-Lib"]&&(l.params.lib=r["X-Ably-Lib"])),l.body=a,l.method=u,l.requestMode=s,l.timeouts=c,l.requestComplete=!1,l}return r.__extends(t,e),t.prototype.exec=function(){var e=this,t=this.id,n=this.body,r=this.method,i=this.uri,s=this.params;s.callback="_ablyjs_jsonp._("+t+")",s.envelope="jsonp",n&&(s.body=n),r&&"get"!==r&&(s.method=r);var u=this.script=document.createElement("script"),d=i+o.toQueryString(s);u.src=d,u.src.split("/").slice(-1)[0]!==d.split("/").slice(-1)[0]&&l.default.logAction(l.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"),u.async=!0,u.type="text/javascript",u.charset="UTF-8",u.onerror=function(t){e.complete(new c.PartialErrorInfo("JSONP script error (event: "+a.default.Config.inspect(t)+")",null,400))},h["_"+t]=function(t){if(t.statusCode){var n=t.response;if(204==t.statusCode)e.complete(null,null,null,t.statusCode);else if(n)if(t.statusCode<400||o.isArray(n))e.complete(null,n,t.headers,t.statusCode);else{var r=n.error||new c.PartialErrorInfo("Error response received from server",null,t.statusCode);e.complete(r)}else e.complete(new c.PartialErrorInfo("Invalid server response: no envelope detected",null,500))}else e.complete(null,t)};var p=this.requestMode==f.default.REQ_SEND?this.timeouts.httpRequestTimeout:this.timeouts.recvTimeout;this.timer=setTimeout(this.abort.bind(this),p);var g=document.getElementsByTagName("head")[0];g.insertBefore(u,g.firstChild)},t.prototype.complete=function(e,t,n,r){if(n=n||{},!this.requestComplete){this.requestComplete=!0;var o=void 0;t&&(o="string"==typeof t?"text/plain":"application/json",n["content-type"]=o,this.emit("data",t)),this.emit("complete",e,t,n,!0,r),this.dispose()}},t.prototype.abort=function(){this.dispose()},t.prototype.dispose=function(){var e=this.timer;e&&(clearTimeout(e),this.timer=null);var t=this.script;t.parentNode&&t.parentNode.removeChild(t),delete h[this.id],this.emit("disposed")},t}(s.default);t.Request=v,t.default=function(e){return d.JSONPTransport=y,y.isAvailable()&&(e.supportedTransports.jsonp=y),y}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(0),o=r.__importStar(n(1)),i=r.__importDefault(n(2)),a=r.__importDefault(n(8)),s=r.__importDefault(n(18)),c=r.__importDefault(n(46)),u=r.__importDefault(n(20)),l=r.__importDefault(n(33)),f=r.__importDefault(n(4)),d=r.__importDefault(n(49)),p=r.__importDefault(n(19)),h=r.__importDefault(n(3)),g=r.__importDefault(n(9)),m=r.__importDefault(n(16)),y=r.__importDefault(n(15)),v=function(){},_=function(){function e(e){if(!e){var t="no options provided";throw i.default.logAction(i.default.LOG_ERROR,"Rest()",t),new Error(t)}var n=a.default.objectifyOptions(e);n.log?(i.default.setLog(n.log.level,n.log.handler),i.default.deprecated("The `log` client option","Equivalent functionality is provided by the `logLevel` and `logHandler` client options. Update your client options code of the form `{ log: { level: logLevel, handler: logHandler } }` to instead be `{ logLevel, logHandler }`.")):i.default.setLog(n.logLevel,n.logHandler),i.default.logAction(i.default.LOG_MICRO,"Rest()","initialized with clientOptions "+h.default.Config.inspect(e));var r=this.options=a.default.normaliseOptions(n);if(r.key){var o=r.key.match(/^([^:\s]+):([^:.\s]+)$/);if(!o){t="invalid key parameter";throw i.default.logAction(i.default.LOG_ERROR,"Rest()",t),new f.default(t,40400,404)}r.keyName=o[1],r.keySecret=o[2]}if("clientId"in r){if("string"!=typeof r.clientId&&null!==r.clientId)throw new f.default("clientId must be either a string or null",40012,400);if("*"===r.clientId)throw new f.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)}i.default.logAction(i.default.LOG_MINOR,"Rest()","started; version = "+a.default.version),this.baseUri=this.authority=function(e){return a.default.getHttpScheme(r)+e+":"+a.default.getPort(r,!1)},this._currentFallback=null,this.serverTimeOffset=null,this.http=new h.default.Http(r),this.auth=new s.default(this,r),this.channels=new b(this),this.push=new c.default(this)}return e.prototype.stats=function(e,t){if(void 0===t)if("function"==typeof e)t=e,e=null;else{if(this.options.promises)return o.promisify(this,"stats",[e]);t=v}var n=o.defaultGetHeaders(this.options),r=this.options.useBinaryProtocol?o.Format.msgpack:o.Format.json,i=this.http.supportsLinkHeaders?void 0:r;this.options.headers&&o.mixin(n,this.options.headers),new u.default(this,"/stats",n,i,(function(e,t,n){for(var r=n?e:JSON.parse(e),o=0;o>>7)^(h<<14|h>>>18)^h>>>3,m=u[p-2],y=(m<<15|m>>>17)^(m<<13|m>>>19)^m>>>10;u[p]=g+u[p-7]+y+u[p-16]}var v=r&o^r&i^o&i,_=(r<<30|r>>>2)^(r<<19|r>>>13)^(r<<10|r>>>22),b=d+((s<<26|s>>>6)^(s<<21|s>>>11)^(s<<7|s>>>25))+(s&l^~s&f)+c[p]+u[p];d=f,f=l,l=s,s=a+b|0,a=i,i=o,o=r,r=b+(_+v)|0}n[0]=n[0]+r|0,n[1]=n[1]+o|0,n[2]=n[2]+i|0,n[3]=n[3]+a|0,n[4]=n[4]+s|0,n[5]=n[5]+l|0,n[6]=n[6]+f|0,n[7]=n[7]+d|0},_doFinalize:function(){var t=this._data,n=t.words,r=8*this._nDataBytes,o=8*t.sigBytes;return n[o>>>5]|=128<<24-o%32,n[14+(o+64>>>9<<4)]=e.floor(r/4294967296),n[15+(o+64>>>9<<4)]=r,t.sigBytes=4*n.length,this._process(),this._hash},clone:function(){var e=i.clone.call(this);return e._hash=this._hash.clone(),e}});t.SHA256=i._createHelper(l),t.HmacSHA256=i._createHmacHelper(l)}(Math),r.SHA256)},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(0),o=r.__importStar(n(1)),i=r.__importDefault(n(7)),a=r.__importDefault(n(2)),s=r.__importDefault(n(34)),c=r.__importDefault(n(9)),u=r.__importDefault(n(4)),l=r.__importDefault(n(20)),f=r.__importDefault(n(15)),d=r.__importDefault(n(3));function p(){}function h(e){return o.arrEvery(e,(function(e){return!e.id}))}function g(e){var t=e||{};if(t.cipher){if(!d.default.Crypto)throw new Error("Encryption not enabled; use ably.encryption.js instead");var n=d.default.Crypto.getCipher(t.cipher);t.cipher=n.cipherParams,t.channelCipher=n.cipher}else"cipher"in t&&(t.cipher=void 0,t.channelCipher=null);return t}var m=function(e){function t(t,n,r){var o=e.call(this)||this;return a.default.logAction(a.default.LOG_MINOR,"Channel()","started; name = "+n),o.rest=t,o.name=n,o.basePath="/channels/"+encodeURIComponent(n),o.presence=new s.default(o),o.channelOptions=g(r),o}return r.__extends(t,e),t.prototype.setOptions=function(e){this.channelOptions=g(e)},t.prototype.history=function(e,t){if(a.default.logAction(a.default.LOG_MICRO,"Channel.history()","channel = "+this.name),void 0===t)if("function"==typeof e)t=e,e=null;else{if(this.rest.options.promises)return o.promisify(this,"history",arguments);t=p}this._history(e,t)},t.prototype._history=function(e,t){var n=this.rest,r=n.options.useBinaryProtocol?o.Format.msgpack:o.Format.json,i=this.rest.http.supportsLinkHeaders?void 0:r,a=o.defaultGetHeaders(n.options,r);n.options.headers&&o.mixin(a,n.options.headers);var s=this.channelOptions;new l.default(n,this.basePath+"/messages",a,i,(function(e,t,n){return c.default.fromResponseBody(e,s,n?void 0:r)})).get(e,t)},t.prototype.publish=function(){var e,t,n=this,r=arguments.length,i=arguments[0],a=arguments[1],s=arguments[r-1];if("function"!=typeof s){if(this.rest.options.promises)return o.promisify(this,"publish",arguments);s=p}if("string"==typeof i||null===i)e=[c.default.fromValues({name:i,data:a})],t=arguments[2];else if(o.isObject(i))e=[c.default.fromValues(i)],t=arguments[1];else{if(!o.isArray(i))throw new u.default("The single-argument form of publish() expects a message object or an array of message objects",40013,400);e=c.default.fromValuesArray(i),t=arguments[1]}"object"==typeof t&&t||(t={});var l=this.rest,f=l.options,d=f.useBinaryProtocol?o.Format.msgpack:o.Format.json,g=l.options.idempotentRestPublishing,m=o.defaultPostHeaders(l.options,d);if(f.headers&&o.mixin(m,f.headers),g&&h(e)){var y=o.randomString(9);o.arrForEach(e,(function(e,t){e.id=y+":"+t.toString()}))}c.default.encodeArray(e,this.channelOptions,(function(r){if(r)s(r);else{var o=c.default.getMessagesSize(e),i=f.maxMessageSize;o>i?s(new u.default("Maximum size of messages that can be published at once exceeded ( was "+o+" bytes; limit is "+i+" bytes)",40009,400)):n._publish(c.default.serialize(e,d),m,t,s)}}))},t.prototype._publish=function(e,t,n,r){f.default.post(this.rest,this.basePath+"/messages",e,t,n,null,r)},t.prototype.status=function(e){if("function"!=typeof e&&this.rest.options.promises)return o.promisify(this,"status",[]);var t=this.rest.options.useBinaryProtocol?o.Format.msgpack:o.Format.json,n=o.defaultPostHeaders(this.rest.options,t);f.default.get(this.rest,this.basePath,n,{},t,e||p)},t}(i.default);t.default=m},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(0),o=r.__importStar(n(1)),i=r.__importDefault(n(7)),a=r.__importDefault(n(2)),s=r.__importDefault(n(20)),c=r.__importDefault(n(16));function u(){}var l=function(e){function t(t){var n=e.call(this)||this;return n.channel=t,n.basePath=t.basePath+"/presence",n}return r.__extends(t,e),t.prototype.get=function(e,t){if(a.default.logAction(a.default.LOG_MICRO,"Presence.get()","channel = "+this.channel.name),void 0===t)if("function"==typeof e)t=e,e=null;else{if(this.channel.rest.options.promises)return o.promisify(this,"get",arguments);t=u}var n=this.channel.rest,r=n.options.useBinaryProtocol?o.Format.msgpack:o.Format.json,i=this.channel.rest.http.supportsLinkHeaders?void 0:r,l=o.defaultGetHeaders(n.options,r);n.options.headers&&o.mixin(l,n.options.headers);var f=this.channel.channelOptions;new s.default(n,this.basePath,l,i,(function(e,t,n){return c.default.fromResponseBody(e,f,n?void 0:r)})).get(e,t)},t.prototype.history=function(e,t){return a.default.logAction(a.default.LOG_MICRO,"Presence.history()","channel = "+this.channel.name),this._history(e,t)},t.prototype._history=function(e,t){if(void 0===t)if("function"==typeof e)t=e,e=null;else{if(this.channel.rest.options.promises)return o.promisify(this,"_history",[e]);t=u}var n=this.channel.rest,r=n.options.useBinaryProtocol?o.Format.msgpack:o.Format.json,i=this.channel.rest.http.supportsLinkHeaders?void 0:r,a=o.defaultGetHeaders(n.options,r);n.options.headers&&o.mixin(a,n.options.headers);var l=this.channel.channelOptions;new s.default(n,this.basePath+"/history",a,i,(function(e,t,n){return c.default.fromResponseBody(e,l,n?void 0:r)})).get(e,t)},t}(i.default);t.default=l},function(e,t,n){"use strict";(function(e){Object.defineProperty(t,"__esModule",{value:!0}),t.TransportParams=void 0;var r=n(0),o=r.__importDefault(n(10)),i=r.__importStar(n(1)),a=r.__importStar(n(52)),s=r.__importStar(n(8)),c=r.__importDefault(n(3)),u=r.__importDefault(n(7)),l=r.__importDefault(n(36)),f=r.__importDefault(n(2)),d=r.__importDefault(n(37)),p=r.__importStar(n(21)),h=r.__importStar(n(4)),g=r.__importDefault(n(18)),m=r.__importDefault(n(9)),y=r.__importDefault(n(24)),v=r.__importDefault(n(53)),_=r.__importDefault(n(26)),b=r.__importDefault(n(14)),O=function(){var e;return void 0!==c.default.WebStorage&&(null===(e=c.default.WebStorage)||void 0===e?void 0:e.localSupported)},C=function(){var e;return void 0!==c.default.WebStorage&&(null===(e=c.default.WebStorage)||void 0===e?void 0:e.sessionSupported)},w=o.default.Action,R=function(){};function A(e){try{return JSON.parse(e)}catch(e){return null}}var S=function(){function e(e,t,n,r){this.options=e,this.host=t,this.mode=n,this.connectionKey=r,this.format=e.useBinaryProtocol?i.Format.msgpack:i.Format.json}return e.prototype.getConnectParams=function(e){var t=e?i.copy(e):{},n=this.options;switch(this.mode){case"upgrade":t.upgrade=this.connectionKey;break;case"resume":t.resume=this.connectionKey;break;case"recover":var r=A(n.recover);r&&(t.recover=r.connectionKey)}return void 0!==n.clientId&&(t.clientId=n.clientId),!1===n.echoMessages&&(t.echo="false"),void 0!==this.format&&(t.format=this.format),void 0!==this.stream&&(t.stream=this.stream),void 0!==this.heartbeats&&(t.heartbeats=this.heartbeats),t.v=s.default.protocolVersion,t.agent=(0,s.getAgentString)(this.options),void 0!==n.transportParams&&i.mixin(t,n.transportParams),t},e.prototype.toString=function(){var e="[mode="+this.mode;return this.host&&(e+=",host="+this.host),this.connectionKey&&(e+=",connectionKey="+this.connectionKey),this.format&&(e+=",format="+this.format),e+="]"},e}();t.TransportParams=S;var k=function(t){function n(e,r){var o=t.call(this)||this;o.disconnectedRetryCount=0,n.initTransports(),o.realtime=e,o.options=r;var a=r.timeouts,u=a.preferenceConnectTimeout+a.realtimeRequestTimeout;if(o.states={initialized:{state:"initialized",terminal:!1,queueEvents:!0,sendEvents:!1,failState:"disconnected"},connecting:{state:"connecting",terminal:!1,queueEvents:!0,sendEvents:!1,retryDelay:u,failState:"disconnected"},connected:{state:"connected",terminal:!1,queueEvents:!1,sendEvents:!0,failState:"disconnected"},synchronizing:{state:"connected",terminal:!1,queueEvents:!0,sendEvents:!1,forceQueueEvents:!0,failState:"disconnected"},disconnected:{state:"disconnected",terminal:!1,queueEvents:!0,sendEvents:!1,retryDelay:a.disconnectedRetryTimeout,failState:"disconnected"},suspended:{state:"suspended",terminal:!1,queueEvents:!1,sendEvents:!1,retryDelay:a.suspendedRetryTimeout,failState:"suspended"},closing:{state:"closing",terminal:!1,queueEvents:!1,sendEvents:!1,retryDelay:a.realtimeRequestTimeout,failState:"closed"},closed:{state:"closed",terminal:!0,queueEvents:!1,sendEvents:!1,failState:"closed"},failed:{state:"failed",terminal:!0,queueEvents:!1,sendEvents:!1,failState:"failed"}},o.state=o.states.initialized,o.errorReason=null,o.queuedMessages=new l.default,o.msgSerial=0,o.connectionDetails=void 0,o.connectionId=void 0,o.connectionKey=void 0,o.connectionStateTtl=a.connectionStateTtl,o.maxIdleInterval=null,o.transports=i.intersect(r.transports||s.default.defaultTransports,n.supportedTransports),o.baseTransport=i.intersect(s.default.baseTransportOrder,o.transports)[0],o.upgradeTransports=i.intersect(o.transports,s.default.upgradeTransports),o.transportPreference=null,o.httpHosts=s.default.getHosts(r),o.activeProtocol=null,o.proposedTransports=[],o.pendingTransports=[],o.host=null,o.lastAutoReconnectAttempt=null,o.lastActivity=null,o.forceFallbackHost=!1,o.connectCounter=0,f.default.logAction(f.default.LOG_MINOR,"Realtime.ConnectionManager()","started"),f.default.logAction(f.default.LOG_MICRO,"Realtime.ConnectionManager()","requested transports = ["+(r.transports||s.default.defaultTransports)+"]"),f.default.logAction(f.default.LOG_MICRO,"Realtime.ConnectionManager()","available transports = ["+o.transports+"]"),f.default.logAction(f.default.LOG_MICRO,"Realtime.ConnectionManager()","http hosts = ["+o.httpHosts+"]"),!o.transports.length){var d="no requested transports available";throw f.default.logAction(f.default.LOG_ERROR,"realtime.ConnectionManager()",d),new Error(d)}var p=c.default.Config.addEventListener;return p&&(C()&&"function"==typeof r.recover&&p("beforeunload",o.persistConnection.bind(o)),!0===r.closeOnUnload&&p("beforeunload",(function(){f.default.logAction(f.default.LOG_MAJOR,"Realtime.ConnectionManager()","beforeunload event has triggered the connection to close as closeOnUnload is true"),o.requestState({state:"closing"})})),p("online",(function(){o.state==o.states.disconnected||o.state==o.states.suspended?(f.default.logAction(f.default.LOG_MINOR,"ConnectionManager caught browser ‘online’ event","reattempting connection"),o.requestState({state:"connecting"})):o.state==o.states.connecting&&(o.pendingTransports.forEach((function(e){e.off()})),o.disconnectAllTransports(),o.startConnect())})),p("offline",(function(){o.state==o.states.connected&&(f.default.logAction(f.default.LOG_MINOR,"ConnectionManager caught browser ‘offline’ event","disconnecting active transport"),o.disconnectAllTransports())}))),o}return r.__extends(n,t),n.initTransports=function(){(0,v.default)(n),i.arrForEach(c.default.Transports,(function(e){e(n)}))},n.prototype.createTransportParams=function(e,t){return new S(this.options,e,t,this.connectionKey)},n.prototype.getTransportParams=function(e){var t=this;!function(e){if(t.connectionKey)e("resume");else if("string"!=typeof t.options.recover){var n,r,o=t.options.recover,i=C()&&(null===(r=null===(n=c.default.WebStorage)||void 0===n?void 0:n.getSession)||void 0===r?void 0:r.call(n,"ably-connection-recovery"));if(i&&"function"==typeof o)return f.default.logAction(f.default.LOG_MINOR,"ConnectionManager.getTransportParams()","Calling clientOptions-provided recover function with last session data"),void o(i,(function(n){n?(t.options.recover=i.recoveryKey,e("recover")):e("clean")}));e("clean")}else e("recover")}((function(n){var r=t.createTransportParams(null,n);if("recover"===n){f.default.logAction(f.default.LOG_MINOR,"ConnectionManager.getTransportParams()","Transport recovery mode = recover; recoveryKey = "+t.options.recover);var o=A(t.options.recover);o&&(t.msgSerial=o.msgSerial)}else f.default.logAction(f.default.LOG_MINOR,"ConnectionManager.getTransportParams()","Transport params = "+r.toString());e(r)}))},n.prototype.tryATransport=function(e,t,r){var o=this;f.default.logAction(f.default.LOG_MICRO,"ConnectionManager.tryATransport()","trying "+t),_.default.tryConnect(n.supportedTransports[t],this,this.realtime.auth,e,(function(n,i){var a=o.state;return a==o.states.closing||a==o.states.closed||a==o.states.failed?(i&&(f.default.logAction(f.default.LOG_MINOR,"ConnectionManager.tryATransport()","connection "+a.state+" while we were attempting the transport; closing "+i),i.close()),void r(!0)):n?(f.default.logAction(f.default.LOG_MINOR,"ConnectionManager.tryATransport()","transport "+t+" "+n.event+", err: "+n.error.toString()),void(!g.default.isTokenErr(n.error)||o.errorReason&&g.default.isTokenErr(o.errorReason)?"failed"===n.event?(o.notifyState({state:"failed",error:n.error}),r(!0)):"disconnected"===n.event&&((0,p.isRetriable)(n.error)?r(!1):(o.notifyState({state:o.states.connecting.failState,error:n.error}),r(!0))):(o.errorReason=n.error,o.realtime.auth._forceNewToken(null,null,(function(n){n?o.actOnErrorFromAuthorize(n):o.tryATransport(e,t,r)}))))):(f.default.logAction(f.default.LOG_MICRO,"ConnectionManager.tryATransport()","viable transport "+t+"; setting pending"),o.setTransportPending(i,e),void r(null,i))}))},n.prototype.setTransportPending=function(e,t){var n=this,r=t.mode;f.default.logAction(f.default.LOG_MINOR,"ConnectionManager.setTransportPending()","transport = "+e+"; mode = "+r),i.arrDeleteValue(this.proposedTransports,e),this.pendingTransports.push(e);var o=c.default.Defaults.transportPreferenceOrder[c.default.Defaults.transportPreferenceOrder.length-1];e.once("connected",(function(a,s,u){"upgrade"==r&&n.activeProtocol?e.shortName!==o&&i.arrIn(n.getUpgradePossibilities(),o)&&n.activeProtocol?setTimeout((function(){n.scheduleTransportActivation(a,e,s,u)}),n.options.timeouts.parallelUpgradeDelay):n.scheduleTransportActivation(a,e,s,u):(n.activateTransport(a,e,s,u),c.default.Config.nextTick((function(){n.connectImpl(t)}))),"recover"===r&&n.options.recover&&(n.options.recover=null,n.unpersistConnection())}));var a=this;e.on(["disconnected","closed","failed"],(function(t){a.deactivateTransport(e,this.event,t)})),this.emit("transport.pending",e)},n.prototype.scheduleTransportActivation=function(e,t,n,r){var a,s,u=this,l=this.activeProtocol&&this.activeProtocol.getTransport(),d=function(){t.disconnect(),i.arrDeleteValue(u.pendingTransports,t)};if(this.state!==this.states.connected&&this.state!==this.states.connecting)return f.default.logAction(f.default.LOG_MINOR,"ConnectionManager.scheduleTransportActivation()","Current connection state ("+this.state.state+(this.state===this.states.synchronizing?", but with an upgrade already in progress":"")+") is not valid to upgrade in; abandoning upgrade to "+t.shortName),void d();if(l&&(a=t,s=l,!(i.arrIndexOf(c.default.Defaults.transportPreferenceOrder,a.shortName)>i.arrIndexOf(c.default.Defaults.transportPreferenceOrder,s.shortName))))return f.default.logAction(f.default.LOG_MINOR,"ConnectionManager.scheduleTransportActivation()","Proposed transport "+t.shortName+" is no better than current active transport "+l.shortName+" - abandoning upgrade"),void d();f.default.logAction(f.default.LOG_MINOR,"ConnectionManager.scheduleTransportActivation()","Scheduling transport upgrade; transport = "+t);var p=null;if(!t.isConnected)return f.default.logAction(f.default.LOG_MINOR,"ConnectionManager.scheduleTransportActivation()","Proposed transport "+t.shortName+"is no longer connected; abandoning upgrade"),void d();if(this.state===this.states.connected)f.default.logAction(f.default.LOG_MICRO,"ConnectionManager.scheduleTransportActivation()","Currently connected, so temporarily pausing events until the upgrade is complete"),this.state=this.states.synchronizing,p=this.activeProtocol;else if(this.state!==this.states.connecting)return f.default.logAction(f.default.LOG_MINOR,"ConnectionManager.scheduleTransportActivation()","Current connection state ("+this.state.state+(this.state===this.states.synchronizing?", but with an upgrade already in progress":"")+") is not valid to upgrade in; abandoning upgrade to "+t.shortName),void d();f.default.logAction(f.default.LOG_MINOR,"ConnectionManager.scheduleTransportActivation()","Syncing transport; transport = "+t);var h=function(){f.default.logAction(f.default.LOG_MINOR,"ConnectionManager.scheduleTransportActivation()","Activating transport; transport = "+t),t.send(o.default.fromValues({action:w.ACTIVATE})),u.activateTransport(e,t,n,r),u.state===u.states.synchronizing?(f.default.logAction(f.default.LOG_MICRO,"ConnectionManager.scheduleTransportActivation()","Pre-upgrade protocol idle, sending queued messages on upgraded transport; transport = "+t),u.state=u.states.connected):f.default.logAction(f.default.LOG_MINOR,"ConnectionManager.scheduleTransportActivation()","Pre-upgrade protocol idle, but state is now "+u.state.state+", so leaving unchanged"),u.state.sendEvents&&u.sendQueuedMessages()};p?p.onceIdle(h):h()},n.prototype.activateTransport=function(e,t,n,r){var o=this;f.default.logAction(f.default.LOG_MINOR,"ConnectionManager.activateTransport()","transport = "+t),e&&f.default.logAction(f.default.LOG_ERROR,"ConnectionManager.activateTransport()","error = "+e),n&&f.default.logAction(f.default.LOG_MICRO,"ConnectionManager.activateTransport()","connectionId = "+n),r&&f.default.logAction(f.default.LOG_MICRO,"ConnectionManager.activateTransport()","connectionDetails = "+JSON.stringify(r)),this.persistTransportPreference(t);var s=this.state,u=this.states.connected.state;if(f.default.logAction(f.default.LOG_MINOR,"ConnectionManager.activateTransport()","current state = "+s.state),s.state==this.states.closing.state||s.state==this.states.closed.state||s.state==this.states.failed.state)return f.default.logAction(f.default.LOG_MINOR,"ConnectionManager.activateTransport()","Disconnecting transport and abandoning"),t.disconnect(),!1;if(i.arrDeleteValue(this.pendingTransports,t),!t.isConnected)return f.default.logAction(f.default.LOG_MINOR,"ConnectionManager.activateTransport()","Declining to activate transport "+t+" since it appears to no longer be connected"),!1;var l=this.activeProtocol;this.activeProtocol=new a.default(t),this.host=t.params.host;var p=r.connectionKey;if(p&&this.connectionKey!=p&&this.setConnection(n,r,!!e),this.onConnectionDetailsUpdate(r,t),c.default.Config.nextTick((function(){t.on("connected",(function(e,n,r){o.onConnectionDetailsUpdate(r,t),o.emit("update",new d.default(u,u,null,e))}))})),s.state===this.states.connected.state?e&&(this.errorReason=this.realtime.connection.errorReason=e,this.emit("update",new d.default(u,u,null,e))):(this.notifyState({state:"connected",error:e}),this.errorReason=this.realtime.connection.errorReason=e||null),this.emit("transport.active",t),l)if(l.messageQueue.count()>0&&f.default.logAction(f.default.LOG_ERROR,"ConnectionManager.activateTransport()","Previous active protocol (for transport "+l.transport.shortName+", new one is "+t.shortName+") finishing with "+l.messageQueue.count()+" messages still pending"),l.transport===t){var h="Assumption violated: activating a transport that was also the transport for the previous active protocol; transport = "+t.shortName+"; stack = "+(new Error).stack;f.default.logAction(f.default.LOG_ERROR,"ConnectionManager.activateTransport()",h)}else l.finish();return i.safeArrForEach(this.pendingTransports,(function(e){if(e===t){var n="Assumption violated: activating a transport that is still marked as a pending transport; transport = "+t.shortName+"; stack = "+(new Error).stack;f.default.logAction(f.default.LOG_ERROR,"ConnectionManager.activateTransport()",n),i.arrDeleteValue(o.pendingTransports,t)}else e.disconnect()})),i.safeArrForEach(this.proposedTransports,(function(e){e===t?(f.default.logAction(f.default.LOG_ERROR,"ConnectionManager.activateTransport()","Assumption violated: activating a transport that is still marked as a proposed transport; transport = "+t.shortName+"; stack = "+(new Error).stack),i.arrDeleteValue(o.proposedTransports,t)):e.dispose()})),!0},n.prototype.deactivateTransport=function(e,t,n){var r=this.activeProtocol,o=r&&r.getTransport()===e,a=i.arrDeleteValue(this.pendingTransports,e),s=i.arrDeleteValue(this.proposedTransports,e),u=this.noTransportsScheduledForActivation();if(f.default.logAction(f.default.LOG_MINOR,"ConnectionManager.deactivateTransport()","transport = "+e),f.default.logAction(f.default.LOG_MINOR,"ConnectionManager.deactivateTransport()","state = "+t+(o?"; was active":a?"; was pending":s?"; was proposed":"")+(u?"":"; another transport is scheduled for activation")),n&&n.message&&f.default.logAction(f.default.LOG_MICRO,"ConnectionManager.deactivateTransport()","reason = "+n.message),o&&(f.default.logAction(f.default.LOG_MICRO,"ConnectionManager.deactivateTransport()","Getting, clearing, and requeuing "+this.activeProtocol.messageQueue.count()+" pending messages"),this.queuePendingMessages(r.getPendingMessages()),c.default.Config.nextTick((function(){r.clearPendingMessages()})),this.activeProtocol=this.host=null),this.emit("transport.inactive",e),o&&u||o&&"failed"===t||"closed"===t||null===r&&a&&0===this.pendingTransports.length){if("disconnected"===t&&n&&n.statusCode>500&&this.httpHosts.length>1)return this.unpersistTransportPreference(),this.forceFallbackHost=!0,void this.notifyState({state:t,error:n,retryImmediately:!0});var l="failed"===t&&g.default.isTokenErr(n)?"disconnected":t;this.notifyState({state:l,error:n})}else o&&"disconnected"===t&&this.state!==this.states.synchronizing&&(f.default.logAction(f.default.LOG_MICRO,"ConnectionManager.deactivateTransport()","wasActive but another transport is connected and scheduled for activation, so going into the connecting state until it activates"),this.startSuspendTimer(),this.startTransitionTimer(this.states.connecting),this.notifyState({state:"connecting",error:n}))},n.prototype.noTransportsScheduledForActivation=function(){return i.isEmpty(this.pendingTransports)||this.pendingTransports.every((function(e){return!e.isConnected}))},n.prototype.setConnection=function(e,t,n){var r=this.connectionId;(r&&r!==e||!r&&n)&&(f.default.logAction(f.default.LOG_MINOR,"ConnectionManager.setConnection()","Resetting msgSerial"),this.msgSerial=0,this.queuedMessages.resetSendAttempted()),this.connectionId!==e&&f.default.logAction(f.default.LOG_MINOR,"ConnectionManager.setConnection()","New connectionId; reattaching any attached channels"),this.realtime.connection.id=this.connectionId=e,this.realtime.connection.key=this.connectionKey=t.connectionKey},n.prototype.clearConnection=function(){this.realtime.connection.id=this.connectionId=void 0,this.realtime.connection.key=this.connectionKey=void 0,this.msgSerial=0,this.unpersistConnection()},n.prototype.createRecoveryKey=function(){return this.connectionKey?JSON.stringify({connectionKey:this.connectionKey,msgSerial:this.msgSerial,channelSerials:this.realtime.channels.channelSerials()}):null},n.prototype.checkConnectionStateFreshness=function(){if(this.lastActivity&&this.connectionId){var e=i.now()-this.lastActivity;e>this.connectionStateTtl+this.maxIdleInterval&&(f.default.logAction(f.default.LOG_MINOR,"ConnectionManager.checkConnectionStateFreshness()","Last known activity from realtime was "+e+"ms ago; discarding connection state"),this.clearConnection(),this.states.connecting.failState="suspended")}},n.prototype.persistConnection=function(){if(C()){var t=this.createRecoveryKey();t&&(n={recoveryKey:t,disconnectedAt:i.now(),location:e.location,clientId:this.realtime.auth.clientId},C()&&(null===(o=null===(r=c.default.WebStorage)||void 0===r?void 0:r.setSession)||void 0===o||o.call(r,"ably-connection-recovery",n)))}var n,r,o},n.prototype.unpersistConnection=function(){var e,t;C()&&(null===(t=null===(e=c.default.WebStorage)||void 0===e?void 0:e.removeSession)||void 0===t||t.call(e,"ably-connection-recovery"))},n.prototype.getError=function(){return this.errorReason||this.getStateError()},n.prototype.getStateError=function(){var e,t;return null===(t=(e=p.default)[this.state.state])||void 0===t?void 0:t.call(e)},n.prototype.activeState=function(){return this.state.queueEvents||this.state.sendEvents},n.prototype.enactStateChange=function(e){var t="failed"===e.current?f.default.LOG_ERROR:f.default.LOG_MAJOR;f.default.logAction(t,"Connection state",e.current+(e.reason?"; reason: "+e.reason:"")),f.default.logAction(f.default.LOG_MINOR,"ConnectionManager.enactStateChange","setting new state: "+e.current+"; reason = "+(e.reason&&e.reason.message));var n=this.state=this.states[e.current];e.reason&&(this.errorReason=e.reason,this.realtime.connection.errorReason=e.reason),(n.terminal||"suspended"===n.state)&&this.clearConnection(),this.emit("connectionstate",e)},n.prototype.startTransitionTimer=function(e){var t=this;f.default.logAction(f.default.LOG_MINOR,"ConnectionManager.startTransitionTimer()","transitionState: "+e.state),this.transitionTimer&&(f.default.logAction(f.default.LOG_MINOR,"ConnectionManager.startTransitionTimer()","clearing already-running timer"),clearTimeout(this.transitionTimer)),this.transitionTimer=setTimeout((function(){t.transitionTimer&&(t.transitionTimer=null,f.default.logAction(f.default.LOG_MINOR,"ConnectionManager "+e.state+" timer expired","requesting new state: "+e.failState),t.notifyState({state:e.failState}))}),e.retryDelay)},n.prototype.cancelTransitionTimer=function(){f.default.logAction(f.default.LOG_MINOR,"ConnectionManager.cancelTransitionTimer()",""),this.transitionTimer&&(clearTimeout(this.transitionTimer),this.transitionTimer=null)},n.prototype.startSuspendTimer=function(){var e=this;this.suspendTimer||(this.suspendTimer=setTimeout((function(){e.suspendTimer&&(e.suspendTimer=null,f.default.logAction(f.default.LOG_MINOR,"ConnectionManager suspend timer expired","requesting new state: suspended"),e.states.connecting.failState="suspended",e.notifyState({state:"suspended"}))}),this.connectionStateTtl))},n.prototype.checkSuspendTimer=function(e){"disconnected"!==e&&"suspended"!==e&&"connecting"!==e&&this.cancelSuspendTimer()},n.prototype.cancelSuspendTimer=function(){this.states.connecting.failState="disconnected",this.suspendTimer&&(clearTimeout(this.suspendTimer),this.suspendTimer=null)},n.prototype.startRetryTimer=function(e){var t=this;this.retryTimer=setTimeout((function(){f.default.logAction(f.default.LOG_MINOR,"ConnectionManager retry timer expired","retrying"),t.retryTimer=null,t.requestState({state:"connecting"})}),e)},n.prototype.cancelRetryTimer=function(){this.retryTimer&&(clearTimeout(this.retryTimer),this.retryTimer=null)},n.prototype.notifyState=function(e){var t,n,r=this,o=e.state,a="disconnected"===o&&(this.state===this.states.connected||this.state===this.states.synchronizing||e.retryImmediately||this.state===this.states.connecting&&e.error&&g.default.isTokenErr(e.error)&&!(this.errorReason&&g.default.isTokenErr(this.errorReason)));if(f.default.logAction(f.default.LOG_MINOR,"ConnectionManager.notifyState()","new state: "+o+(a?"; will retry connection immediately":"")),o!=this.state.state&&(this.cancelTransitionTimer(),this.cancelRetryTimer(),this.checkSuspendTimer(e.state),"suspended"!==o&&"connected"!==o||(this.disconnectedRetryCount=0),!this.state.terminal)){var s=this.states[e.state],u=s.retryDelay;"disconnected"===s.state&&(this.disconnectedRetryCount++,u=i.getRetryTime(s.retryDelay,this.disconnectedRetryCount));var l=new d.default(this.state.state,s.state,u,e.error||(null===(n=(t=p.default)[s.state])||void 0===n?void 0:n.call(t)));if(a){var h=function(){r.state===r.states.disconnected&&(r.lastAutoReconnectAttempt=i.now(),r.requestState({state:"connecting"}))},m=this.lastAutoReconnectAttempt&&i.now()-this.lastAutoReconnectAttempt+1;m&&m<1e3?(f.default.logAction(f.default.LOG_MICRO,"ConnectionManager.notifyState()","Last reconnect attempt was only "+m+"ms ago, waiting another "+(1e3-m)+"ms before trying again"),setTimeout(h,1e3-m)):c.default.Config.nextTick(h)}else"disconnected"!==o&&"suspended"!==o||this.startRetryTimer(u);("disconnected"===o&&!a||"suspended"===o||s.terminal)&&c.default.Config.nextTick((function(){r.disconnectAllTransports()})),"connected"!=o||this.activeProtocol||f.default.logAction(f.default.LOG_ERROR,"ConnectionManager.notifyState()","Broken invariant: attempted to go into connected state, but there is no active protocol"),this.enactStateChange(l),this.state.sendEvents?this.sendQueuedMessages():this.state.queueEvents||(this.realtime.channels.propogateConnectionInterruption(o,l.reason),this.failQueuedMessages(l.reason))}},n.prototype.requestState=function(e){var t,n,r=this,o=e.state;if(f.default.logAction(f.default.LOG_MINOR,"ConnectionManager.requestState()","requested state: "+o+"; current state: "+this.state.state),o!=this.state.state&&(this.cancelTransitionTimer(),this.cancelRetryTimer(),this.checkSuspendTimer(o),!("connecting"==o&&"connected"==this.state.state||"closing"==o&&"closed"==this.state.state))){var i=this.states[o],a=new d.default(this.state.state,i.state,null,e.error||(null===(n=(t=p.default)[i.state])||void 0===n?void 0:n.call(t)));this.enactStateChange(a),"connecting"==o&&c.default.Config.nextTick((function(){r.startConnect()})),"closing"==o&&this.closeImpl()}},n.prototype.startConnect=function(){var e=this;if(this.state===this.states.connecting){var t=this.realtime.auth,n=++this.connectCounter,r=function(){e.checkConnectionStateFreshness(),e.getTransportParams((function(t){if("recover"===t.mode&&t.options.recover){var r=A(t.options.recover);r&&e.realtime.channels.recoverChannels(r.channelSerials)}n===e.connectCounter&&e.connectImpl(t,n)}))};if(f.default.logAction(f.default.LOG_MINOR,"ConnectionManager.startConnect()","starting connection"),this.startSuspendTimer(),this.startTransitionTimer(this.states.connecting),"basic"===t.method)r();else{var o=function(t){n===e.connectCounter&&(t?e.actOnErrorFromAuthorize(t):r())};this.errorReason&&g.default.isTokenErr(this.errorReason)?t._forceNewToken(null,null,o):t._ensureValidAuthCredentials(!1,o)}}else f.default.logAction(f.default.LOG_MINOR,"ConnectionManager.startConnect()","Must be in connecting state to connect, but was "+this.state.state)},n.prototype.connectImpl=function(e,t){var n=this.state.state;n!==this.states.connecting.state&&n!==this.states.connected.state?f.default.logAction(f.default.LOG_MINOR,"ConnectionManager.connectImpl()","Must be in connecting state to connect (or connected to upgrade), but was "+n):this.pendingTransports.length?f.default.logAction(f.default.LOG_MINOR,"ConnectionManager.connectImpl()","Transports "+this.pendingTransports[0].toString()+" currently pending; taking no action"):n==this.states.connected.state?this.upgradeIfNeeded(e):this.transports.length>1&&this.getTransportPreference()?this.connectPreference(e,t):this.connectBase(e,t)},n.prototype.connectPreference=function(e,t){var n=this,r=this.getTransportPreference(),o=!1;i.arrIn(this.transports,r)||(this.unpersistTransportPreference(),this.connectImpl(e,t)),f.default.logAction(f.default.LOG_MINOR,"ConnectionManager.connectPreference()","Trying to connect with stored transport preference "+r);var a=setTimeout((function(){o=!0,n.state.state!==n.states.connected.state&&(f.default.logAction(f.default.LOG_MINOR,"ConnectionManager.connectPreference()","Shortcircuit connection attempt with "+r+" failed; clearing preference and trying from scratch"),n.disconnectAllTransports(),n.unpersistTransportPreference()),n.connectImpl(e,t)}),this.options.timeouts.preferenceConnectTimeout);e.host=this.httpHosts[0],this.tryATransport(e,r,(function(r,s){clearTimeout(a),o&&s?(s.off(),s.disconnect(),i.arrDeleteValue(n.pendingTransports,s)):s||r||(n.unpersistTransportPreference(),n.connectImpl(e,t))}))},n.prototype.connectBase=function(e,t){var n=this,r=function(e){n.notifyState({state:n.states.connecting.failState,error:e})},o=this.httpHosts.slice(),a=function(e,r){t===n.connectCounter&&(r||e||c())};f.default.logAction(f.default.LOG_MINOR,"ConnectionManager.connectBase()","Trying to connect with base transport "+this.baseTransport);var s=o.shift();if(s){e.host=s;var c=function(){o.length?n.realtime.http.checkConnectivity?n.realtime.http.checkConnectivity((function(s,c){t===n.connectCounter&&(s?r(s):c?(e.host=i.arrPopRandomElement(o),n.tryATransport(e,n.baseTransport,a)):r(new h.default("Unable to connect (network unreachable)",80003,404)))})):r(new h.PartialErrorInfo("Internal error: Http.checkConnectivity not set",null,500)):r(new h.default("Unable to connect (and no more fallback hosts to try)",80003,404))};if(this.forceFallbackHost&&o.length)return this.forceFallbackHost=!1,void c();this.tryATransport(e,this.baseTransport,a)}else r(new h.default("Unable to connect (no available host)",80003,404))},n.prototype.getUpgradePossibilities=function(){var e=this.activeProtocol.getTransport().shortName,t=i.arrIndexOf(this.upgradeTransports,e);return this.upgradeTransports.slice(t+1)},n.prototype.upgradeIfNeeded=function(e){var t=this,n=this.getUpgradePossibilities();f.default.logAction(f.default.LOG_MINOR,"ConnectionManager.upgradeIfNeeded()","upgrade possibilities: "+c.default.Config.inspect(n)),n.length&&i.arrForEach(n,(function(n){var r=t.createTransportParams(e.host,"upgrade");t.tryATransport(r,n,R)}))},n.prototype.closeImpl=function(){f.default.logAction(f.default.LOG_MINOR,"ConnectionManager.closeImpl()","closing connection"),this.cancelSuspendTimer(),this.startTransitionTimer(this.states.closing),i.safeArrForEach(this.pendingTransports,(function(e){f.default.logAction(f.default.LOG_MICRO,"ConnectionManager.closeImpl()","Closing pending transport: "+e),e&&e.close()})),i.safeArrForEach(this.proposedTransports,(function(e){f.default.logAction(f.default.LOG_MICRO,"ConnectionManager.closeImpl()","Disposing of proposed transport: "+e),e&&e.dispose()})),this.activeProtocol&&(f.default.logAction(f.default.LOG_MICRO,"ConnectionManager.closeImpl()","Closing active transport: "+this.activeProtocol.getTransport()),this.activeProtocol.getTransport().close()),this.notifyState({state:"closed"})},n.prototype.onAuthUpdated=function(e,t){var n,r=this;switch(this.state.state){case"connected":if(f.default.logAction(f.default.LOG_MICRO,"ConnectionManager.onAuthUpdated()","Sending AUTH message on active transport"),(this.pendingTransports.length||this.proposedTransports.length)&&this.state!==this.states.synchronizing){this.disconnectAllTransports(!0);var i=this.activeProtocol.getTransport().params;c.default.Config.nextTick((function(){"connected"===r.state.state&&r.upgradeIfNeeded(i)}))}var a=null===(n=this.activeProtocol)||void 0===n?void 0:n.getTransport();a&&a.onAuthUpdated&&a.onAuthUpdated(e);var s=o.default.fromValues({action:w.AUTH,auth:{accessToken:e.token}});this.send(s);var u=function(){r.off(l),t(null,e)},l=function(e){"failed"===e.current&&(r.off(u),r.off(l),t(e.reason||r.getStateError()))};this.once("connectiondetails",u),this.on("connectionstate",l);break;case"connecting":f.default.logAction(f.default.LOG_MICRO,"ConnectionManager.onAuthUpdated()","Aborting current connection attempts in order to start again with the new auth details"),this.disconnectAllTransports();default:f.default.logAction(f.default.LOG_MICRO,"ConnectionManager.onAuthUpdated()","Connection state is "+this.state.state+"; waiting until either connected or failed");var d=function(n){switch(n.current){case"connected":r.off(d),t(null,e);break;case"failed":case"closed":case"suspended":r.off(d),t(n.reason||r.getStateError())}};this.on("connectionstate",d),"connecting"===this.state.state?this.startConnect():this.requestState({state:"connecting"})}},n.prototype.disconnectAllTransports=function(e){f.default.logAction(f.default.LOG_MINOR,"ConnectionManager.disconnectAllTransports()","Disconnecting all transports"+(e?" except the active transport":"")),this.connectCounter++,i.safeArrForEach(this.pendingTransports,(function(e){f.default.logAction(f.default.LOG_MICRO,"ConnectionManager.disconnectAllTransports()","Disconnecting pending transport: "+e),e&&e.disconnect()})),this.pendingTransports=[],i.safeArrForEach(this.proposedTransports,(function(e){f.default.logAction(f.default.LOG_MICRO,"ConnectionManager.disconnectAllTransports()","Disposing of proposed transport: "+e),e&&e.dispose()})),this.proposedTransports=[],this.activeProtocol&&!e&&(f.default.logAction(f.default.LOG_MICRO,"ConnectionManager.disconnectAllTransports()","Disconnecting active transport: "+this.activeProtocol.getTransport()),this.activeProtocol.getTransport().disconnect())},n.prototype.send=function(e,t,n){n=n||R;var r=this.state;if(r.sendEvents)return f.default.logAction(f.default.LOG_MICRO,"ConnectionManager.send()","sending event"),void this.sendImpl(new a.PendingMessage(e,n));if(!(t&&r.queueEvents||r.forceQueueEvents)){var i="rejecting event, queueEvent was "+t+", state was "+r.state;return f.default.logAction(f.default.LOG_MICRO,"ConnectionManager.send()",i),void n(this.errorReason||new h.default(i,9e4,400))}f.default.shouldLog(f.default.LOG_MICRO)&&f.default.logAction(f.default.LOG_MICRO,"ConnectionManager.send()","queueing msg; "+o.default.stringify(e)),this.queue(e,n)},n.prototype.sendImpl=function(e){var t=e.message;e.ackRequired&&!e.sendAttempted&&(t.msgSerial=this.msgSerial++);try{this.activeProtocol.send(e)}catch(e){f.default.logAction(f.default.LOG_ERROR,"ConnectionManager.sendImpl()","Unexpected exception in transport.send(): "+e.stack)}},n.prototype.queue=function(e,t){f.default.logAction(f.default.LOG_MICRO,"ConnectionManager.queue()","queueing event");var n=this.queuedMessages.last(),r=this.options.maxMessageSize;n&&!n.sendAttempted&&function(e,t,n){var r;if(e.channel!==t.channel)return!1;if((r=e.action)!==w.PRESENCE&&r!==w.MESSAGE)return!1;if(r!==t.action)return!1;var o=r===w.PRESENCE?"presence":"messages",a=e[o].concat(t[o]);return!(m.default.getMessagesSize(a)>n)&&(!!i.allSame(a,"clientId")&&(!!i.arrEvery(a,(function(e){return!e.id}))&&(e[o]=a,!0)))}(n.message,e,r)?(n.merged||(n.callback=y.default.create([n.callback]),n.merged=!0),n.callback.push(t)):this.queuedMessages.push(new a.PendingMessage(e,t))},n.prototype.sendQueuedMessages=function(){var e;for(f.default.logAction(f.default.LOG_MICRO,"ConnectionManager.sendQueuedMessages()","sending "+this.queuedMessages.count()+" queued messages");e=this.queuedMessages.shift();)this.sendImpl(e)},n.prototype.queuePendingMessages=function(e){e&&e.length&&(f.default.logAction(f.default.LOG_MICRO,"ConnectionManager.queuePendingMessages()","queueing "+e.length+" pending messages"),this.queuedMessages.prepend(e))},n.prototype.failQueuedMessages=function(e){var t=this.queuedMessages.count();t>0&&(f.default.logAction(f.default.LOG_ERROR,"ConnectionManager.failQueuedMessages()","failing "+t+" queued messages, err = "+i.inspectError(e)),this.queuedMessages.completeAllMessages(e))},n.prototype.onChannelMessage=function(e,t){var n=this.activeProtocol&&t===this.activeProtocol.getTransport(),r=i.arrIn(this.pendingTransports,t)&&this.state==this.states.synchronizing;n||r||i.arrIndexOf([w.ACK,w.NACK,w.ERROR],e.action)>-1?this.realtime.channels.onChannelMessage(e):f.default.logAction(f.default.LOG_MICRO,"ConnectionManager.onChannelMessage()","received message "+JSON.stringify(e)+"on defunct transport; discarding")},n.prototype.ping=function(e,t){var n=this;if(e){f.default.logAction(f.default.LOG_MINOR,"ConnectionManager.ping()","transport = "+e);var r=i.now(),o=i.cheapRandStr(),a=function(n){if(n===o){e.off("heartbeat",a),clearTimeout(s);var c=i.now()-r;t(null,c)}},s=setTimeout((function(){e.off("heartbeat",a),t(new h.default("Timeout waiting for heartbeat response",5e4,500))}),this.options.timeouts.realtimeRequestTimeout);return e.on("heartbeat",a),void e.ping(o)}if("connected"===this.state.state){var u=!1,l=function(){u||(u=!0,c.default.Config.nextTick((function(){n.ping(null,t)})))};this.on("transport.active",l),this.ping(this.activeProtocol.getTransport(),(function(e,r){n.off("transport.active",l),u||(u=!0,t(e,r))}))}else t(new h.default("Unable to ping service; not connected",4e4,400))},n.prototype.abort=function(e){this.activeProtocol.getTransport().fail(e)},n.prototype.registerProposedTransport=function(e){this.proposedTransports.push(e)},n.prototype.getTransportPreference=function(){var e,t;return this.transportPreference||O()&&(null===(t=null===(e=c.default.WebStorage)||void 0===e?void 0:e.get)||void 0===t?void 0:t.call(e,"ably-transport-preference"))},n.prototype.persistTransportPreference=function(e){var t,n;i.arrIn(s.default.upgradeTransports,e.shortName)&&(this.transportPreference=e.shortName,O()&&(null===(n=null===(t=c.default.WebStorage)||void 0===t?void 0:t.set)||void 0===n||n.call(t,"ably-transport-preference",e.shortName)))},n.prototype.unpersistTransportPreference=function(){var e,t;this.transportPreference=null,O()&&(null===(t=null===(e=c.default.WebStorage)||void 0===e?void 0:e.remove)||void 0===t||t.call(e,"ably-transport-preference"))},n.prototype.actOnErrorFromAuthorize=function(e){if(40171===e.code)this.notifyState({state:"failed",error:e});else if(40102===e.code)this.notifyState({state:"failed",error:e});else if(e.statusCode===b.default.Forbidden){var t="Client configured authentication provider returned 403; failing the connection";f.default.logAction(f.default.LOG_ERROR,"ConnectionManager.actOnErrorFromAuthorize()",t),this.notifyState({state:"failed",error:new h.default(t,80019,403,e)})}else{t="Client configured authentication provider request failed";f.default.logAction(f.default.LOG_MINOR,"ConnectionManager.actOnErrorFromAuthorize",t),this.notifyState({state:this.state.failState,error:new h.default(t,80019,401,e)})}},n.prototype.onConnectionDetailsUpdate=function(e,t){if(e){this.connectionDetails=e,e.maxMessageSize&&(this.options.maxMessageSize=e.maxMessageSize);var n=e.clientId;if(n){var r=this.realtime.auth._uncheckedSetClientId(n);if(r)return f.default.logAction(f.default.LOG_ERROR,"ConnectionManager.onConnectionDetailsUpdate()",r.message),void t.fail(r)}var o=e.connectionStateTtl;o&&(this.connectionStateTtl=o),this.maxIdleInterval=e.maxIdleInterval,this.emit("connectiondetails",e)}},n.supportedTransports={},n}(u.default);t.default=k}).call(this,n(13))},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(0),o=r.__importDefault(n(7)),i=r.__importDefault(n(2)),a=function(e){function t(){var t=e.call(this)||this;return t.messages=[],t}return r.__extends(t,e),t.prototype.count=function(){return this.messages.length},t.prototype.push=function(e){this.messages.push(e)},t.prototype.shift=function(){return this.messages.shift()},t.prototype.last=function(){return this.messages[this.messages.length-1]},t.prototype.copyAll=function(){return this.messages.slice()},t.prototype.append=function(e){this.messages.push.apply(this.messages,e)},t.prototype.prepend=function(e){this.messages.unshift.apply(this.messages,e)},t.prototype.completeMessages=function(e,t,n){i.default.logAction(i.default.LOG_MICRO,"MessageQueue.completeMessages()","serial = "+e+"; count = "+t),n=n||null;var r=this.messages;if(0===r.length)throw new Error("MessageQueue.completeMessages(): completeMessages called on any empty MessageQueue");var o=r[0];if(o){var a=o.message.msgSerial,s=e+t;if(s>a)for(var c=0,u=r.splice(0,s-a);cs?i(new d.default("Maximum size of messages that can be published at once exceeded ( was "+n+" bytes; limit is "+s+" bytes)",40009,400)):e.__publish(r,i)}}))}else i(this.connectionManager.getError())},t.prototype.__publish=function(e,t){c.default.logAction(c.default.LOG_MICRO,"RealtimeChannel.publish()","message count = "+e.length);var n=this.state;switch(n){case"failed":case"suspended":t(d.default.fromValues(this.invalidStateError()));break;default:c.default.logAction(c.default.LOG_MICRO,"RealtimeChannel.publish()","sending message; channel state is "+n);var r=new o.default;r.action=g.MESSAGE,r.channel=this.name,r.messages=e,this.sendMessage(r,t)}},t.prototype.onEvent=function(e){c.default.logAction(c.default.LOG_MICRO,"RealtimeChannel.onEvent()","received message");for(var t=this.subscriptions,n=0;n>>31}var f=(r<<5|r>>>27)+s+c[u];f+=u<20?1518500249+(o&i|~o&a):u<40?1859775393+(o^i^a):u<60?(o&i|o&a|i&a)-1894007588:(o^i^a)-899497514,s=a,a=i,i=o<<30|o>>>2,o=r,r=f}n[0]=n[0]+r|0,n[1]=n[1]+o|0,n[2]=n[2]+i|0,n[3]=n[3]+a|0,n[4]=n[4]+s|0},_doFinalize:function(){var e=this._data,t=e.words,n=8*this._nDataBytes,r=8*e.sigBytes;return t[r>>>5]|=128<<24-r%32,t[14+(r+64>>>9<<4)]=Math.floor(n/4294967296),t[15+(r+64>>>9<<4)]=n,e.sigBytes=4*t.length,this._process(),this._hash},clone:function(){var e=a.clone.call(this);return e._hash=this._hash.clone(),e}}),r.SHA1=a._createHelper(u),r.HmacSHA1=a._createHmacHelper(u),l.SHA1)},function(e,t,n){"use strict";function r(e,t,n){for(var r=0,o=n.length;r>>0&127|0);else if(i<2048)e.setUint8(t++,i>>>6&31|192),e.setUint8(t++,i>>>0&63|128);else if(i<65536)e.setUint8(t++,i>>>12&15|224),e.setUint8(t++,i>>>6&63|128),e.setUint8(t++,i>>>0&63|128);else{if(!(i<1114112))throw new Error("bad codepoint "+i);e.setUint8(t++,i>>>18&7|240),e.setUint8(t++,i>>>12&63|128),e.setUint8(t++,i>>>6&63|128),e.setUint8(t++,i>>>0&63|128)}}}function o(e,t,n){for(var r="",o=t,i=t+n;o=0){if(t<128)return 1;if(t<256)return 2;if(t<65536)return 3;if(t<4294967296)return 5;if(t<0x10000000000000000)return 9;throw new Error("Number too big 0x"+t.toString(16))}if(t>=-32)return 1;if(t>=-128)return 2;if(t>=-32768)return 3;if(t>=-2147483648)return 5;if(t>=-0x8000000000000000)return 9;throw new Error("Number too small -0x"+t.toString(16).substr(1))}if("boolean"===r)return 1;if(null===t)return n?0:1;if(void 0===t)return n?0:3;if("function"==typeof t.toJSON)return e(t.toJSON(),n);if("object"===r){var c,u=0;if(Array.isArray(t)){c=t.length;for(var l=0;l=0){if(t<128)return n.setUint8(o,t),1;if(t<256)return n.setUint8(o,204),n.setUint8(o+1,t),2;if(t<65536)return n.setUint8(o,205),n.setUint16(o+1,t),3;if(t<4294967296)return n.setUint8(o,206),n.setUint32(o+1,t),5;if(t<0x10000000000000000)return n.setUint8(o,207),function(e,t,n){n<0x10000000000000000?(e.setUint32(t,Math.floor(2.3283064365386963e-10*n)),e.setInt32(t+4,-1&n)):(e.setUint32(t,4294967295),e.setUint32(t+4,4294967295))}(n,o+1,t),9;throw new Error("Number too big 0x"+t.toString(16))}if(t>=-32)return n.setInt8(o,t),1;if(t>=-128)return n.setUint8(o,208),n.setInt8(o+1,t),2;if(t>=-32768)return n.setUint8(o,209),n.setInt16(o+1,t),3;if(t>=-2147483648)return n.setUint8(o,210),n.setInt32(o+1,t),5;if(t>=-0x8000000000000000)return n.setUint8(o,211),function(e,t,n){n<0x8000000000000000?(e.setInt32(t,Math.floor(2.3283064365386963e-10*n)),e.setInt32(t+4,-1&n)):(e.setUint32(t,2147483647),e.setUint32(t+4,2147483647))}(n,o+1,t),9;throw new Error("Number too small -0x"+(-t).toString(16).substr(1))}if("undefined"===c)return a?0:(n.setUint8(o,212),n.setUint8(o+1,0),n.setUint8(o+2,0),3);if(null===t)return a?0:(n.setUint8(o,192),1);if("boolean"===c)return n.setUint8(o,t?195:194),1;if("function"==typeof t.toJSON)return e(t.toJSON(),n,o,a);if("object"===c){var f,d=0,p=void 0,h=Array.isArray(t);if(h?f=t.length:(p=s(t,a),f=p.length),f<16?(n.setUint8(o,f|(h?144:128)),d=1):f<65536?(n.setUint8(o,h?220:222),n.setUint16(o+1,f),d=3):f<4294967296&&(n.setUint8(o,h?221:223),n.setUint32(o+1,f),d=5),h)for(var g=0;g20){r.push("...");break}var i=t.getUint8(o).toString(16);1===i.length&&(i="0"+i),r.push(i)}return"<"+n+" "+r.join(" ")+">"},utf8Write:r,utf8Read:o,utf8ByteCount:i}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(0),o=r.__importDefault(n(30)),i=r.__importDefault(n(50)),a=r.__importDefault(n(3)),s=r.__importDefault(n(4)),c=r.__importDefault(n(55)),u=r.__importDefault(n(57)),l=r.__importDefault(n(62)),f=r.__importDefault(n(64)),d=r.__importDefault(n(68)),p=r.__importDefault(n(2)),h=n(8),g=r.__importDefault(n(65)),m=r.__importDefault(n(66)),y=r.__importDefault(n(41)),v=(0,u.default)(f.default,c.default);a.default.Crypto=v,a.default.BufferUtils=c.default,a.default.Http=l.default,a.default.Config=f.default,a.default.Transports=d.default,a.default.WebStorage=g.default,o.default.Crypto=v,i.default.Crypto=v,p.default.initLogHandlers(),a.default.Defaults=(0,h.getDefaults)(m.default),a.default.Config.agent&&(a.default.Defaults.agent+=" "+a.default.Config.agent),a.default.Config.noUpgrade&&(a.default.Defaults.upgradeTransports=[]),t.default={ErrorInfo:s.default,Rest:o.default,Realtime:i.default,msgpack:y.default}},function(e){e.exports=JSON.parse('{"name":"ably","description":"Realtime client library for Ably, the realtime messaging service","version":"1.2.50","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/**","src/**","react/**"],"dependencies":{"@ably/msgpack-js":"^0.4.0","got":"^11.8.5","ws":"^8.14.2"},"peerDependencies":{"react":">=16.8.0","react-dom":">=16.8.0"},"peerDependenciesMeta":{"react":{"optional":true},"react-dom":{"optional":true}},"devDependencies":{"@ably/vcdiff-decoder":"1.0.4","@arethetypeswrong/cli":"^0.13.1","@babel/preset-env":"^7.23.6","@testing-library/react":"^13.3.0","@types/crypto-js":"^4.0.1","@types/jmespath":"^0.15.2","@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","@vitejs/plugin-react":"^1.3.2","async":"ably-forks/async#requirejs","aws-sdk":"^2.1413.0","babel-loader":"^8.3.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-import":"^2.28.0","eslint-plugin-jsdoc":"^40.0.0","eslint-plugin-react":"^7.32.2","eslint-plugin-react-hooks":"^4.6.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","jmespath":"^0.16.0","jsdom":"^20.0.0","kexec":"ably-forks/node-kexec#update-for-node-12","minimist":"^1.2.5","mocha":"^8.1.3","mocha-junit-reporter":"^2.2.1","null-loader":"^4.0.1","playwright":"^1.39.0","prettier":"^2.5.1","react":">=18.1.0","react-dom":">=18.1.0","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","vite":"^4.4.9","vitest":"^0.18.0","webpack":"^4.44.2","webpack-cli":"^4.2.0","webpack-node-externals":"^3.0.0"},"engines":{"node":">=5.10.x"},"repository":"ably/ably-js","jspm":{"registry":"npm","directories":{"lib":"build"},"main":"ably"},"scripts":{"start:react":"npx vite serve","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","test:react":"vitest run","concat":"grunt concat","build":"grunt build:all && npm run build:react","build:node":"grunt build:node","build:browser":"grunt build:browser","build:react":"npm run build:react:mjs && npm run build:react:cjs && cp src/platform/react-hooks/res/package.react.json react/package.json","build:react:mjs":"tsc --project src/platform/react-hooks/tsconfig.mjs.json && cp src/platform/react-hooks/res/package.mjs.json react/mjs/package.json","build:react:cjs":"tsc --project src/platform/react-hooks/tsconfig.cjs.json && cp src/platform/react-hooks/res/package.cjs.json react/cjs/package.json","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"}}')},function(e,t){},function(e,t,n){var r;e.exports=(r=n(6),n(32),n(25),r.HmacSHA256)},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(0),o=r.__importStar(n(1)),i=r.__importDefault(n(47)),a=r.__importDefault(n(15)),s=r.__importDefault(n(20)),c=r.__importDefault(n(4)),u=r.__importDefault(n(48)),l=function(){},f=function(e){this.rest=e,this.admin=new d(e)},d=function(){function e(e){this.rest=e,this.deviceRegistrations=new p(e),this.channelSubscriptions=new h(e)}return e.prototype.publish=function(e,t,n){var r=this.rest,i=r.options.useBinaryProtocol?o.Format.msgpack:o.Format.json,s=o.defaultPostHeaders(r.options,i),c={},u=o.mixin({recipient:e},t);if("function"!=typeof n){if(this.rest.options.promises)return o.promisify(this,"publish",arguments);n=l}r.options.headers&&o.mixin(s,r.options.headers),r.options.pushFullWait&&o.mixin(c,{fullWait:"true"});var f=o.encodeBody(u,i);a.default.post(r,"/push/publish",f,s,c,null,(function(e){return n(e)}))},e}(),p=function(){function e(e){this.rest=e}return e.prototype.save=function(e,t){var n=this.rest,r=i.default.fromValues(e),s=n.options.useBinaryProtocol?o.Format.msgpack:o.Format.json,c=o.defaultPostHeaders(n.options,s),u={};if("function"!=typeof t){if(this.rest.options.promises)return o.promisify(this,"save",arguments);t=l}n.options.headers&&o.mixin(c,n.options.headers),n.options.pushFullWait&&o.mixin(u,{fullWait:"true"});var f=o.encodeBody(r,s);a.default.put(n,"/push/deviceRegistrations/"+encodeURIComponent(e.id),f,c,u,null,(function(e,n,r,o){t(e,e?void 0:i.default.fromResponseBody(n,o?void 0:s))}))},e.prototype.get=function(e,t){var n=this.rest,r=n.options.useBinaryProtocol?o.Format.msgpack:o.Format.json,s=o.defaultGetHeaders(n.options,r),u=e.id||e;if("function"!=typeof t){if(this.rest.options.promises)return o.promisify(this,"get",arguments);t=l}"string"==typeof u&&u.length?(n.options.headers&&o.mixin(s,n.options.headers),a.default.get(n,"/push/deviceRegistrations/"+encodeURIComponent(u),s,{},null,(function(e,n,o,a){t(e,e?void 0:i.default.fromResponseBody(n,a?void 0:r))}))):t(new c.default("First argument to DeviceRegistrations#get must be a deviceId string or DeviceDetails",4e4,400))},e.prototype.list=function(e,t){var n=this.rest,r=n.options.useBinaryProtocol?o.Format.msgpack:o.Format.json,a=this.rest.http.supportsLinkHeaders?void 0:r,c=o.defaultGetHeaders(n.options,r);if("function"!=typeof t){if(this.rest.options.promises)return o.promisify(this,"list",arguments);t=l}n.options.headers&&o.mixin(c,n.options.headers),new s.default(n,"/push/deviceRegistrations",c,a,(function(e,t,n){return i.default.fromResponseBody(e,n?void 0:r)})).get(e,t)},e.prototype.remove=function(e,t){var n=this.rest,r=n.options.useBinaryProtocol?o.Format.msgpack:o.Format.json,i=o.defaultGetHeaders(n.options,r),s={},u=e.id||e;if("function"!=typeof t){if(this.rest.options.promises)return o.promisify(this,"remove",arguments);t=l}"string"==typeof u&&u.length?(n.options.headers&&o.mixin(i,n.options.headers),n.options.pushFullWait&&o.mixin(s,{fullWait:"true"}),a.default.delete(n,"/push/deviceRegistrations/"+encodeURIComponent(u),i,s,null,(function(e){return t(e)}))):t(new c.default("First argument to DeviceRegistrations#remove must be a deviceId string or DeviceDetails",4e4,400))},e.prototype.removeWhere=function(e,t){var n=this.rest,r=n.options.useBinaryProtocol?o.Format.msgpack:o.Format.json,i=o.defaultGetHeaders(n.options,r);if("function"!=typeof t){if(this.rest.options.promises)return o.promisify(this,"removeWhere",arguments);t=l}n.options.headers&&o.mixin(i,n.options.headers),n.options.pushFullWait&&o.mixin(e,{fullWait:"true"}),a.default.delete(n,"/push/deviceRegistrations",i,e,null,(function(e){return t(e)}))},e}(),h=function(){function e(t){this.remove=e.prototype.removeWhere,this.rest=t}return e.prototype.save=function(e,t){var n=this.rest,r=u.default.fromValues(e),i=n.options.useBinaryProtocol?o.Format.msgpack:o.Format.json,s=o.defaultPostHeaders(n.options,i),c={};if("function"!=typeof t){if(this.rest.options.promises)return o.promisify(this,"save",arguments);t=l}n.options.headers&&o.mixin(s,n.options.headers),n.options.pushFullWait&&o.mixin(c,{fullWait:"true"});var f=o.encodeBody(r,i);a.default.post(n,"/push/channelSubscriptions",f,s,c,null,(function(e,n,r,o){t(e,!e&&u.default.fromResponseBody(n,o?void 0:i))}))},e.prototype.list=function(e,t){var n=this.rest,r=n.options.useBinaryProtocol?o.Format.msgpack:o.Format.json,i=this.rest.http.supportsLinkHeaders?void 0:r,a=o.defaultGetHeaders(n.options,r);if("function"!=typeof t){if(this.rest.options.promises)return o.promisify(this,"list",arguments);t=l}n.options.headers&&o.mixin(a,n.options.headers),new s.default(n,"/push/channelSubscriptions",a,i,(function(e,t,n){return u.default.fromResponseBody(e,n?void 0:r)})).get(e,t)},e.prototype.removeWhere=function(e,t){var n=this.rest,r=n.options.useBinaryProtocol?o.Format.msgpack:o.Format.json,i=o.defaultGetHeaders(n.options,r);if("function"!=typeof t){if(this.rest.options.promises)return o.promisify(this,"removeWhere",arguments);t=l}n.options.headers&&o.mixin(i,n.options.headers),n.options.pushFullWait&&o.mixin(e,{fullWait:"true"}),a.default.delete(n,"/push/channelSubscriptions",i,e,null,(function(e){return t(e)}))},e.prototype.listChannels=function(e,t){var n=this.rest,r=n.options.useBinaryProtocol?o.Format.msgpack:o.Format.json,i=this.rest.http.supportsLinkHeaders?void 0:r,a=o.defaultGetHeaders(n.options,r);if("function"!=typeof t){if(this.rest.options.promises)return o.promisify(this,"listChannels",arguments);t=l}n.options.headers&&o.mixin(a,n.options.headers),n.options.pushFullWait&&o.mixin(e,{fullWait:"true"}),new s.default(n,"/push/channels",a,i,(function(e,t,n){for(var i=!n&&r?o.decodeBody(e,r):e,a=0;a=t.timestamp;var n=e.parseId(),r=t.parseId();return n.msgSerial===r.msgSerial?n.index>r.index:n.msgSerial>r.msgSerial}var y=function(e){function t(t){var n=e.call(this,t)||this;return n.channel=t,n.syncComplete=!1,n.members=new v(n,(function(e){return e.clientId+":"+e.connectionId})),n._myMembers=new v(n,(function(e){return e.clientId})),n.subscriptions=new a.default,n.pendingPresence=[],n}return r.__extends(t,e),t.prototype.enter=function(e,t){if(h(this))throw new u.default("clientId must be specified to enter a presence channel",40012,400);return this._enterOrUpdateClient(void 0,void 0,e,"enter",t)},t.prototype.update=function(e,t){if(h(this))throw new u.default("clientId must be specified to update presence data",40012,400);return this._enterOrUpdateClient(void 0,void 0,e,"update",t)},t.prototype.enterClient=function(e,t,n){return this._enterOrUpdateClient(void 0,e,t,"enter",n)},t.prototype.updateClient=function(e,t,n){return this._enterOrUpdateClient(void 0,e,t,"update",n)},t.prototype._enterOrUpdateClient=function(e,t,n,r,i){var a=this;if(!i)if("function"==typeof n)i=n,n=null;else{if(this.channel.realtime.options.promises)return o.promisify(this,"_enterOrUpdateClient",[e,t,n,r]);i=p}var l=this.channel;if(l.connectionManager.activeState()){s.default.logAction(s.default.LOG_MICRO,"RealtimePresence."+r+"Client()","channel = "+l.name+", id = "+e+", client = "+(t||"(implicit) "+this.channel.realtime.auth.clientId));var f=c.default.fromData(n);f.action=r,e&&(f.id=e),t&&(f.clientId=t),c.default.encode(f,l.channelOptions,(function(e){if(e)i(e);else switch(l.state){case"attached":l.sendPresence(f,i);break;case"initialized":case"detached":l.attach();case"attaching":a.pendingPresence.push({presence:f,callback:i});break;default:(e=new u.PartialErrorInfo("Unable to "+r+" presence channel while in "+l.state+" state",90001)).code=90001,i(e)}}))}else i(l.connectionManager.getError())},t.prototype.leave=function(e,t){if(h(this))throw new u.default("clientId must have been specified to enter or leave a presence channel",40012,400);return this.leaveClient(void 0,e,t)},t.prototype.leaveClient=function(e,t,n){if(!n)if("function"==typeof t)n=t,t=null;else{if(this.channel.realtime.options.promises)return o.promisify(this,"leaveClient",[e,t]);n=p}var r=this.channel;if(r.connectionManager.activeState()){s.default.logAction(s.default.LOG_MICRO,"RealtimePresence.leaveClient()","leaving; channel = "+this.channel.name+", client = "+e);var i=c.default.fromData(t);switch(i.action="leave",e&&(i.clientId=e),r.state){case"attached":r.sendPresence(i,n);break;case"attaching":this.pendingPresence.push({presence:i,callback:n});break;case"initialized":case"failed":var a=new u.PartialErrorInfo("Unable to leave presence channel (incompatible state)",90001);null==n||n(a);break;default:null==n||n(r.invalidStateError())}}else null==n||n(r.connectionManager.getError())},t.prototype.get=function(e,t){var n=this,r=Array.prototype.slice.call(arguments);1==r.length&&"function"==typeof r[0]&&r.unshift(null),e=r[0],t=r[1];var i=!e||!("waitForSync"in e)||e.waitForSync;if(!t){if(this.channel.realtime.options.promises)return o.promisify(this,"get",r);t=p}function a(n){t(null,e?n.list(e):n.values())}"suspended"!==this.channel.state?g(this.channel,t,(function(){var e=n.members;i?e.waitSync((function(){a(e)})):a(e)})):i?t(u.default.fromValues({statusCode:400,code:91005,message:"Presence state is out of sync due to channel being in the SUSPENDED state"})):a(this.members)},t.prototype.history=function(e,t){if(s.default.logAction(s.default.LOG_MICRO,"RealtimePresence.history()","channel = "+this.name),void 0===t)if("function"==typeof e)t=e,e=null;else{if(this.channel.realtime.options.promises)return o.promisify(this,"history",arguments);t=p}e&&e.untilAttach&&("attached"===this.channel.state?(delete e.untilAttach,e.from_serial=this.channel.properties.attachSerial):t(new u.default("option untilAttach requires the channel to be attached, was: "+this.channel.state,4e4,400))),i.default.prototype._history.call(this,e,t)},t.prototype.setPresence=function(e,t,n){var r,o;s.default.logAction(s.default.LOG_MICRO,"RealtimePresence.setPresence()","received presence for "+e.length+" participants; syncChannelSerial = "+n);var i=this.members,a=this._myMembers,u=[],l=this.channel.connectionManager.connectionId;t&&(this.members.startSync(),n&&(o=n.match(/^[\w-]+:(.*)$/))&&(r=o[1]));for(var f=0;f>12,n=(4032&o)>>6,r=63&o,i+=a[(16515072&o)>>18]+a[t]+a[n]+a[r];return 1==c?(t=(3&(o=e[u]))<<4,i+=a[(252&o)>>2]+a[t]+"=="):2==c&&(t=(1008&(o=e[u]<<8|e[u+1]))>>4,n=(15&o)<<2,i+=a[(64512&o)>>10]+a[t]+a[n]+"="),i},e.prototype.base64ToArrayBuffer=function(e){for(var t=null===atob||void 0===atob?void 0:atob(e),n=t.length,r=new Uint8Array(n),o=0;o>>2]>>>24-r%4*8&255;return n}throw new Error("BufferUtils.toBuffer expected an arraybuffer, typed array, or CryptoJS wordarray")},e.prototype.toArrayBuffer=function(e){return this.isArrayBuffer(e)?e:this.toBuffer(e).buffer},e.prototype.toWordArray=function(e){return this.isTypedArray(e)&&(e=e.buffer),this.isWordArray(e)?e:s.default.create(e)},e.prototype.base64Encode=function(e){return this.isWordArray(e)?(0,a.stringify)(e):this.uint8ViewToBase64(this.toBuffer(e))},e.prototype.base64Decode=function(e){return ArrayBuffer&&c.default.Config.atob?this.base64ToArrayBuffer(e):(0,a.parse)(e)},e.prototype.hexEncode=function(e){return(0,o.stringify)(this.toWordArray(e))},e.prototype.hexDecode=function(e){var t=(0,o.parse)(e);return ArrayBuffer?this.toArrayBuffer(t):t},e.prototype.utf8Encode=function(e){return c.default.Config.TextEncoder?(new c.default.Config.TextEncoder).encode(e).buffer:(0,i.parse)(e)},e.prototype.utf8Decode=function(e){if(!this.isBuffer(e))throw new Error("Expected input of utf8decode to be an arraybuffer, typed array, or CryptoJS wordarray");return TextDecoder&&!this.isWordArray(e)?(new TextDecoder).decode(e):(e=this.toWordArray(e),(0,i.stringify)(e))},e.prototype.bufferCompare=function(e,t){if(!e)return-1;if(!t)return 1;var n=this.toWordArray(e),r=this.toWordArray(t);n.clamp(),r.clamp();var o=n.sigBytes-r.sigBytes;if(0!=o)return o;for(var i=n.words,a=r.words,s=0;s>>8&16711935}n.Utf16=n.Utf16BE={stringify:function(e){for(var t=e.words,n=e.sigBytes,r=[],o=0;o>>2]>>>16-o%4*8&65535;r.push(String.fromCharCode(i))}return r.join("")},parse:function(e){for(var n=e.length,r=[],o=0;o>>1]|=e.charCodeAt(o)<<16-o%2*16;return t.create(r,2*n)}},n.Utf16LE={stringify:function(e){for(var t=e.words,n=e.sigBytes,r=[],i=0;i>>2]>>>16-i%4*8&65535);r.push(String.fromCharCode(a))}return r.join("")},parse:function(e){for(var n=e.length,r=[],i=0;i>>1]|=o(e.charCodeAt(i)<<16-i%2*16);return t.create(r,2*n)}}}(),r.enc.Utf16)},function(e,t,n){var r,o,i,a;e.exports=(a=n(6),n(28),o=(r=a).lib.CipherParams,i=r.enc.Hex,r.format.Hex={stringify:function(e){return e.ciphertext.toString(i)},parse:function(e){var t=i.parse(e);return o.create({ciphertext:t})}},a.format.Hex)},function(e,t,n){var r;e.exports=(r=n(6),n(11),n(61),n(27),n(28),function(){var e=r,t=e.lib.BlockCipher,n=e.algo,o=[],i=[],a=[],s=[],c=[],u=[],l=[],f=[],d=[],p=[];!function(){for(var e=[],t=0;t<256;t++)e[t]=t<128?t<<1:t<<1^283;var n=0,r=0;for(t=0;t<256;t++){var h=r^r<<1^r<<2^r<<3^r<<4;h=h>>>8^255&h^99,o[n]=h,i[h]=n;var g=e[n],m=e[g],y=e[m],v=257*e[h]^16843008*h;a[n]=v<<24|v>>>8,s[n]=v<<16|v>>>16,c[n]=v<<8|v>>>24,u[n]=v,v=16843009*y^65537*m^257*g^16843008*n,l[h]=v<<24|v>>>8,f[h]=v<<16|v>>>16,d[h]=v<<8|v>>>24,p[h]=v,n?(n=g^e[e[e[y^g]]],r^=e[e[r]]):n=r=1}}();var h=[0,1,2,4,8,16,32,64,128,27,54],g=n.AES=t.extend({_doReset:function(){if(!this._nRounds||this._keyPriorReset!==this._key){for(var e=this._keyPriorReset=this._key,t=e.words,n=e.sigBytes/4,r=4*((this._nRounds=n+6)+1),i=this._keySchedule=[],a=0;a6&&a%n==4&&(u=o[u>>>24]<<24|o[u>>>16&255]<<16|o[u>>>8&255]<<8|o[255&u]):(u=o[(u=u<<8|u>>>24)>>>24]<<24|o[u>>>16&255]<<16|o[u>>>8&255]<<8|o[255&u],u^=h[a/n|0]<<24),i[a]=i[a-n]^u);for(var s=this._invKeySchedule=[],c=0;c>>24]]^f[o[u>>>16&255]]^d[o[u>>>8&255]]^p[o[255&u]]}}},encryptBlock:function(e,t){this._doCryptBlock(e,t,this._keySchedule,a,s,c,u,o)},decryptBlock:function(e,t){var n=e[t+1];e[t+1]=e[t+3],e[t+3]=n,this._doCryptBlock(e,t,this._invKeySchedule,l,f,d,p,i),n=e[t+1],e[t+1]=e[t+3],e[t+3]=n},_doCryptBlock:function(e,t,n,r,o,i,a,s){for(var c=this._nRounds,u=e[t]^n[0],l=e[t+1]^n[1],f=e[t+2]^n[2],d=e[t+3]^n[3],p=4,h=1;h>>24]^o[l>>>16&255]^i[f>>>8&255]^a[255&d]^n[p++],m=r[l>>>24]^o[f>>>16&255]^i[d>>>8&255]^a[255&u]^n[p++],y=r[f>>>24]^o[d>>>16&255]^i[u>>>8&255]^a[255&l]^n[p++],v=r[d>>>24]^o[u>>>16&255]^i[l>>>8&255]^a[255&f]^n[p++];u=g,l=m,f=y,d=v}g=(s[u>>>24]<<24|s[l>>>16&255]<<16|s[f>>>8&255]<<8|s[255&d])^n[p++],m=(s[l>>>24]<<24|s[f>>>16&255]<<16|s[d>>>8&255]<<8|s[255&u])^n[p++],y=(s[f>>>24]<<24|s[d>>>16&255]<<16|s[u>>>8&255]<<8|s[255&l])^n[p++],v=(s[d>>>24]<<24|s[u>>>16&255]<<16|s[l>>>8&255]<<8|s[255&f])^n[p++],e[t]=g,e[t+1]=m,e[t+2]=y,e[t+3]=v},keySize:8});e.AES=t._createHelper(g)}(),r.AES)},function(e,t,n){var r;e.exports=(r=n(6),function(e){var t=r,n=t.lib,o=n.WordArray,i=n.Hasher,a=t.algo,s=[];!function(){for(var t=0;t<64;t++)s[t]=4294967296*e.abs(e.sin(t+1))|0}();var c=a.MD5=i.extend({_doReset:function(){this._hash=new o.init([1732584193,4023233417,2562383102,271733878])},_doProcessBlock:function(e,t){for(var n=0;n<16;n++){var r=t+n,o=e[r];e[r]=16711935&(o<<8|o>>>24)|4278255360&(o<<24|o>>>8)}var i=this._hash.words,a=e[t+0],c=e[t+1],p=e[t+2],h=e[t+3],g=e[t+4],m=e[t+5],y=e[t+6],v=e[t+7],_=e[t+8],b=e[t+9],O=e[t+10],C=e[t+11],w=e[t+12],R=e[t+13],A=e[t+14],S=e[t+15],k=i[0],T=i[1],E=i[2],I=i[3];k=u(k,T,E,I,a,7,s[0]),I=u(I,k,T,E,c,12,s[1]),E=u(E,I,k,T,p,17,s[2]),T=u(T,E,I,k,h,22,s[3]),k=u(k,T,E,I,g,7,s[4]),I=u(I,k,T,E,m,12,s[5]),E=u(E,I,k,T,y,17,s[6]),T=u(T,E,I,k,v,22,s[7]),k=u(k,T,E,I,_,7,s[8]),I=u(I,k,T,E,b,12,s[9]),E=u(E,I,k,T,O,17,s[10]),T=u(T,E,I,k,C,22,s[11]),k=u(k,T,E,I,w,7,s[12]),I=u(I,k,T,E,R,12,s[13]),E=u(E,I,k,T,A,17,s[14]),k=l(k,T=u(T,E,I,k,S,22,s[15]),E,I,c,5,s[16]),I=l(I,k,T,E,y,9,s[17]),E=l(E,I,k,T,C,14,s[18]),T=l(T,E,I,k,a,20,s[19]),k=l(k,T,E,I,m,5,s[20]),I=l(I,k,T,E,O,9,s[21]),E=l(E,I,k,T,S,14,s[22]),T=l(T,E,I,k,g,20,s[23]),k=l(k,T,E,I,b,5,s[24]),I=l(I,k,T,E,A,9,s[25]),E=l(E,I,k,T,h,14,s[26]),T=l(T,E,I,k,_,20,s[27]),k=l(k,T,E,I,R,5,s[28]),I=l(I,k,T,E,p,9,s[29]),E=l(E,I,k,T,v,14,s[30]),k=f(k,T=l(T,E,I,k,w,20,s[31]),E,I,m,4,s[32]),I=f(I,k,T,E,_,11,s[33]),E=f(E,I,k,T,C,16,s[34]),T=f(T,E,I,k,A,23,s[35]),k=f(k,T,E,I,c,4,s[36]),I=f(I,k,T,E,g,11,s[37]),E=f(E,I,k,T,v,16,s[38]),T=f(T,E,I,k,O,23,s[39]),k=f(k,T,E,I,R,4,s[40]),I=f(I,k,T,E,a,11,s[41]),E=f(E,I,k,T,h,16,s[42]),T=f(T,E,I,k,y,23,s[43]),k=f(k,T,E,I,b,4,s[44]),I=f(I,k,T,E,w,11,s[45]),E=f(E,I,k,T,S,16,s[46]),k=d(k,T=f(T,E,I,k,p,23,s[47]),E,I,a,6,s[48]),I=d(I,k,T,E,v,10,s[49]),E=d(E,I,k,T,A,15,s[50]),T=d(T,E,I,k,m,21,s[51]),k=d(k,T,E,I,w,6,s[52]),I=d(I,k,T,E,h,10,s[53]),E=d(E,I,k,T,O,15,s[54]),T=d(T,E,I,k,c,21,s[55]),k=d(k,T,E,I,_,6,s[56]),I=d(I,k,T,E,S,10,s[57]),E=d(E,I,k,T,y,15,s[58]),T=d(T,E,I,k,R,21,s[59]),k=d(k,T,E,I,g,6,s[60]),I=d(I,k,T,E,C,10,s[61]),E=d(E,I,k,T,p,15,s[62]),T=d(T,E,I,k,b,21,s[63]),i[0]=i[0]+k|0,i[1]=i[1]+T|0,i[2]=i[2]+E|0,i[3]=i[3]+I|0},_doFinalize:function(){var t=this._data,n=t.words,r=8*this._nDataBytes,o=8*t.sigBytes;n[o>>>5]|=128<<24-o%32;var i=e.floor(r/4294967296),a=r;n[15+(o+64>>>9<<4)]=16711935&(i<<8|i>>>24)|4278255360&(i<<24|i>>>8),n[14+(o+64>>>9<<4)]=16711935&(a<<8|a>>>24)|4278255360&(a<<24|a>>>8),t.sigBytes=4*(n.length+1),this._process();for(var s=this._hash,c=s.words,u=0;u<4;u++){var l=c[u];c[u]=16711935&(l<<8|l>>>24)|4278255360&(l<<24|l>>>8)}return s},clone:function(){var e=i.clone.call(this);return e._hash=this._hash.clone(),e}});function u(e,t,n,r,o,i,a){var s=e+(t&n|~t&r)+o+a;return(s<>>32-i)+t}function l(e,t,n,r,o,i,a){var s=e+(t&r|n&~r)+o+a;return(s<>>32-i)+t}function f(e,t,n,r,o,i,a){var s=e+(t^n^r)+o+a;return(s<>>32-i)+t}function d(e,t,n,r,o,i,a){var s=e+(n^(t|~r))+o+a;return(s<>>32-i)+t}t.MD5=i._createHelper(c),t.HmacMD5=i._createHmacHelper(c)}(Math),r.MD5)},function(e,t,n){"use strict";var r;Object.defineProperty(t,"__esModule",{value:!0});var o=n(0),i=o.__importDefault(n(3)),a=o.__importStar(n(1)),s=o.__importDefault(n(8)),c=n(4),u=o.__importDefault(n(19)),l=o.__importDefault(n(17)),f=o.__importDefault(n(22)),d=o.__importDefault(n(2)),p=n(29),h=o.__importDefault(n(63)),g=n(14);function m(e){var t=e.statusCode;return 408===t&&!e.code||400===t&&!e.code||t>=500&&t<=504}function y(e){var t=e.connection,n=t&&t.connectionManager.host;return n?[n].concat(s.default.getFallbackHosts(e.options)):s.default.getHosts(e.options)}var v=((r=function(){function e(e){this.checksInProgress=null,this.checkConnectivity=void 0,this.supportsAuthHeaders=!1,this.supportsLinkHeaders=!1,this._getHosts=y,this.options=e||{};var t=this.options.connectivityCheckUrl||s.default.connectivityCheckUrl,n=this.options.connectivityCheckParams,r=!this.options.connectivityCheckUrl;i.default.Config.xhrSupported?(this.supportsAuthHeaders=!0,this.Request=function(e,t,n,r,o,i,a){var s=l.default.createRequest(n,r,o,i,f.default.REQ_SEND,t&&t.options.timeouts,e);return s.once("complete",a),s.exec(),s},this.options.disableConnectivityCheck?this.checkConnectivity=function(e){e(null,!0)}:this.checkConnectivity=function(e){d.default.logAction(d.default.LOG_MICRO,"(XHRRequest)Http.checkConnectivity()","Sending; "+t),this.doUri(u.default.Get,null,t,null,null,n,(function(t,n,o,i,a){var s=!1;s=r?!t&&"yes"==(null==n?void 0:n.replace(/\n/,"")):!t&&(0,g.isSuccessCode)(a),d.default.logAction(d.default.LOG_MICRO,"(XHRRequest)Http.checkConnectivity()","Result: "+s),e(null,s)}))}):i.default.Config.jsonpSupported?(this.Request=function(e,t,n,r,o,a,s){var c=(0,p.createRequest)(n,r,o,a,f.default.REQ_SEND,t&&t.options.timeouts,e);return c.once("complete",s),i.default.Config.nextTick((function(){c.exec()})),c},this.options.disableConnectivityCheck?this.checkConnectivity=function(e){e(null,!0)}:this.checkConnectivity=function(e){var t=this,n=s.default.jsonpInternetUpUrl;if(this.checksInProgress)this.checksInProgress.push(e);else{this.checksInProgress=[e],d.default.logAction(d.default.LOG_MICRO,"(JSONP)Http.checkConnectivity()","Sending; "+n);var r=new p.Request("isTheInternetUp",n,null,null,null,f.default.REQ_SEND,s.default.TIMEOUTS);r.once("complete",(function(e,n){var r=!e&&n;d.default.logAction(d.default.LOG_MICRO,"(JSONP)Http.checkConnectivity()","Result: "+r);for(var o=0;oa.now())return this.Request?void this.Request(e,t,f(d.host),r,s,i,(function(a){for(var c=[],f=1;f-1?e.arrayBuffer():t&&t.indexOf("application/json")>-1?e.json():e.text()).then((function(n){var r=!!t&&-1===t.indexOf("application/x-msgpack");if(e.ok)f(null,n,e.headers,r,e.status);else{var a=function(e,t){if(function(e,t){return!!t.get("x-ably-errorcode")}(0,t))return e.error&&o.default.fromValues(e.error)}(n,e.headers)||new o.PartialErrorInfo("Error response received from server: "+e.status+" body was: "+i.default.Config.inspect(n),null,e.status);f(a,n,e.headers,r,e.status)}}))})).catch((function(e){clearTimeout(g),f(e)}))}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(0),o=r.__importDefault(n(41)),i=r.__importStar(n(1)).getGlobalObject();"undefined"==typeof Window&&"undefined"==typeof WorkerGlobalScope&&console.log("Warning: this distribution of Ably is intended for browsers. On nodejs, please use the 'ably' package on npm");var a,s=i.navigator&&i.navigator.userAgent.toString(),c={agent:"browser",logTimestamps:!0,userAgent:s,currentUrl:i.location&&i.location.href,noUpgrade:s&&!!s.match(/MSIE\s8\.0/),binaryType:"arraybuffer",WebSocket:i.WebSocket,fetchSupported:!!i.fetch,xhrSupported:i.XMLHttpRequest&&"withCredentials"in new XMLHttpRequest,jsonpSupported:"undefined"!=typeof document,allowComet:(a=i.location,!i.WebSocket||!a||!a.origin||a.origin.indexOf("http")>-1),streamingSupported:!0,useProtocolHeartbeats:!0,createHmac:null,msgpack:o.default,supportsBinary:!!i.TextDecoder,preferBinary:!1,ArrayBuffer:i.ArrayBuffer,atob:i.atob,nextTick:void 0!==i.setImmediate?i.setImmediate.bind(i):function(e){setTimeout(e,0)},addEventListener:i.addEventListener,inspect:JSON.stringify,stringByteSize:function(e){return i.TextDecoder&&(new i.TextEncoder).encode(e).length||e.length},TextEncoder:i.TextEncoder,TextDecoder:i.TextDecoder,Promise:i.Promise,getRandomValues:function(e){if(void 0!==e)return function(t,n){e.getRandomValues(t),n&&n(null)}}(i.crypto||msCrypto)};t.default=c},function(e,t,n){"use strict";(function(e){Object.defineProperty(t,"__esModule",{value:!0});var r=n(0).__importStar(n(1)),o="ablyjs-storage-test",i=function(){function t(){try{e.sessionStorage.setItem(o,o),e.sessionStorage.removeItem(o),this.sessionSupported=!0}catch(e){this.sessionSupported=!1}try{e.localStorage.setItem(o,o),e.localStorage.removeItem(o),this.localSupported=!0}catch(e){this.localSupported=!1}}return t.prototype.get=function(e){return this._get(e,!1)},t.prototype.getSession=function(e){return this._get(e,!0)},t.prototype.remove=function(e){return this._remove(e,!1)},t.prototype.removeSession=function(e){return this._remove(e,!0)},t.prototype.set=function(e,t,n){return this._set(e,t,n,!1)},t.prototype.setSession=function(e,t,n){return this._set(e,t,n,!0)},t.prototype._set=function(e,t,n,o){var i={value:t};return n&&(i.expires=r.now()+n),this.storageInterface(o).setItem(e,JSON.stringify(i))},t.prototype._get=function(e,t){if(t&&!this.sessionSupported)throw new Error("Session Storage not supported");if(!t&&!this.localSupported)throw new Error("Local Storage not supported");var n=this.storageInterface(t).getItem(e);if(!n)return null;var o=JSON.parse(n);return o.expires&&o.expires