From 9f5db2e2dd28dab89607e44e471784947785e3fe Mon Sep 17 00:00:00 2001 From: Paddy Byers Date: Thu, 8 Oct 2015 01:33:23 +0100 Subject: [PATCH] Regenerate and release version 0.8.6 --- browser/static/ably.js | 53 +-- browser/static/ably.min.js | 178 ++++---- browser/static/ably.noencryption.js | 53 +-- browser/static/ably.noencryption.min.js | 424 +++++++++--------- .../{iframe-0.8.5.html => iframe-0.8.6.html} | 2 +- browser/static/iframe.js | 2 +- ...e.min-0.8.5.html => iframe.min-0.8.6.html} | 2 +- browser/static/iframe.min.js | 2 +- common/lib/util/defaults.js | 2 +- package.json | 2 +- spec/support/browser_file_list.js | 2 +- 11 files changed, 362 insertions(+), 360 deletions(-) rename browser/static/{iframe-0.8.5.html => iframe-0.8.6.html} (99%) rename browser/static/{iframe.min-0.8.5.html => iframe.min-0.8.6.html} (99%) diff --git a/browser/static/ably.js b/browser/static/ably.js index 7c4d08bd5c..a21c25774d 100644 --- a/browser/static/ably.js +++ b/browser/static/ably.js @@ -3898,7 +3898,7 @@ Defaults.suspendedTimeout = 120000; Defaults.recvTimeout = 90000; Defaults.sendTimeout = 10000; Defaults.connectionPersistTimeout = 15000; -Defaults.version = '0.8.5'; +Defaults.version = '0.8.6'; Defaults.getHost = function(options, host, ws) { if(ws) @@ -6823,7 +6823,8 @@ var Resource = (function() { if (err) { Logger.logAction(Logger.LOG_MICRO, 'Resource.' + verb + '()', 'Received Error; ' + urlFromPathAndParams(path, params) + '; Error: ' + JSON.stringify(err)); } else { - Logger.logAction(Logger.LOG_MICRO, 'Resource.' + verb + '()', 'Received; ' + urlFromPathAndParams(path, params) + '; Headers: ' + paramString(headers) + '; Body: ' + JSON.stringify(body)); + Logger.logAction(Logger.LOG_MICRO, 'Resource.' + verb + '()', + 'Received; ' + urlFromPathAndParams(path, params) + '; Headers: ' + paramString(headers) + '; Body: ' + (BufferUtils.isBuffer(body) ? body.toString() : body)); } if (callback) { callback(err, body, headers, unpacked); } } @@ -6847,7 +6848,7 @@ var Resource = (function() { Http.get(rest, path, headers, params, function(err, res, headers, unpacked) { if(err && err.code == 40140) { /* token has expired, so get a new one */ - rest.auth.authorise({force:true}, null, function(err) { + rest.auth.authorise(null, {force:true}, function(err) { if(err) { callback(err); return; @@ -6889,7 +6890,7 @@ var Resource = (function() { Http.post(rest, path, headers, body, params, function(err, res, headers, unpacked) { if(err && err.code == 40140) { /* token has expired, so get a new one */ - rest.auth.authorise({force:true}, null, function(err) { + rest.auth.authorise(null, {force:true}, function(err) { if(err) { callback(err); return; @@ -7090,16 +7091,6 @@ var Auth = (function() { * requested. * Authorisation will use the parameters supplied on construction except * where overridden with the options supplied in the call. - * @param authOptions - * an object containing the request params: - * - key: (optional) the key to use; if not specified, a key - * passed in constructing the Rest interface may be used - * - * - queryTime (optional) boolean indicating that the Ably system should be - * queried for the current time when none is specified explicitly. - * - * - force (optional) boolean indicating that a new token should be requested, - * even if a current token is still valid. * * @param tokenParams * an object containing the parameters for the requested token: @@ -7118,9 +7109,20 @@ var Auth = (function() { * - timestamp: (optional) the time in ms since the epoch. If none is specified, * the system will be queried for a time value to use. * + * @param authOptions + * an object containing the request params: + * - key: (optional) the key to use; if not specified, a key + * passed in constructing the Rest interface may be used + * + * - queryTime (optional) boolean indicating that the Ably system should be + * queried for the current time when none is specified explicitly. + * + * - force (optional) boolean indicating that a new token should be requested, + * even if a current token is still valid. + * * @param callback (err, tokenDetails) */ - Auth.prototype.authorise = function(authOptions, tokenParams, callback) { + Auth.prototype.authorise = function(tokenParams, authOptions, callback) { var token = this.tokenDetails; if(token) { if(this.rest.clientId && token.clientId && this.rest.clientId !== token.clientId) { @@ -7140,7 +7142,7 @@ var Auth = (function() { } } var self = this; - this.requestToken(authOptions, tokenParams, function(err, tokenResponse) { + this.requestToken(tokenParams, authOptions, function(err, tokenResponse) { if(err) { callback(err); return; @@ -7195,15 +7197,14 @@ var Auth = (function() { * * @param callback (err, tokenDetails) */ - Auth.prototype.requestToken = function(authOptions, tokenParams, callback) { + Auth.prototype.requestToken = function(tokenParams, authOptions, callback) { /* shuffle and normalise arguments as necessary */ - if(typeof(authOptions) == 'function' && !callback) { - callback = authOptions; + if(typeof(tokenParams) == 'function' && !callback) { + callback = tokenParams; authOptions = tokenParams = null; } - else if(typeof(tokenParams) == 'function' && !callback) { - callback = tokenParams; - tokenParams = authOptions; + else if(typeof(authOptions) == 'function' && !callback) { + callback = authOptions; authOptions = null; } @@ -7255,7 +7256,7 @@ var Auth = (function() { } else if(authOptions.key) { var self = this; Logger.logAction(Logger.LOG_MINOR, 'Auth.requestToken()', 'using token auth with client-side signing'); - tokenRequestCallback = function(params, cb) { self.createTokenRequest(authOptions, params, cb); }; + tokenRequestCallback = function(params, cb) { self.createTokenRequest(params, authOptions, cb); }; } else { throw new Error('Auth.requestToken(): authOptions must include valid authentication parameters'); } @@ -7350,7 +7351,7 @@ var Auth = (function() { * the system will be queried for a time value to use. * */ - Auth.prototype.createTokenRequest = function(authOptions, tokenParams, callback) { + Auth.prototype.createTokenRequest = function(tokenParams, authOptions, callback) { authOptions = Utils.mixin(Utils.copy(this.rest.options), authOptions); tokenParams = tokenParams || Utils.copy(this.tokenParams); @@ -8415,7 +8416,7 @@ var RealtimePresence = (function() { }; break; default: - var err = new Error('Unable to enter presence channel (incompatible state)'); + var err = new Error('Unable to ' + action + ' presence channel (incompatible state)'); err.code = 90001; callback(err); } @@ -8453,7 +8454,7 @@ var RealtimePresence = (function() { /* we're not attached; therefore we let any entered status * timeout by itself instead of attaching just in order to leave */ this.pendingPresence = null; - var err = new Error('Unable to enter presence channel (incompatible state)'); + var err = new Error('Unable to leave presence channel (incompatible state)'); err.code = 90001; callback(err); break; diff --git a/browser/static/ably.min.js b/browser/static/ably.min.js index dd83eb258c..83754465b1 100644 --- a/browser/static/ably.min.js +++ b/browser/static/ably.min.js @@ -1,65 +1,65 @@ -(function(){var Y=window.Ably=this,y=y||function(e,c){var d={},b=d.lib={},a=b.Base=function(){function g(){}return{extend:function(a){g.prototype=this;var f=new g;a&&f.mixIn(a);f.hasOwnProperty("init")||(f.init=function(){f.$super.init.apply(this,arguments)});f.init.prototype=f;f.$super=this;return f},create:function(){var g=this.extend();g.init.apply(g,arguments);return g},init:function(){},mixIn:function(g){for(var a in g)g.hasOwnProperty(a)&&(this[a]=g[a]);g.hasOwnProperty("toString")&&(this.toString= -g.toString)},clone:function(){return this.init.prototype.extend(this)}}}(),f=b.WordArray=a.extend({init:function(g,a){g=this.words=g||[];this.sigBytes=a!=c?a:4*g.length},toString:function(g){return(g||m).stringify(this)},concat:function(g){var a=this.words,f=g.words,d=this.sigBytes;g=g.sigBytes;this.clamp();if(d%4)for(var b=0;b>>2]|=(f[b>>>2]>>>24-b%4*8&255)<<24-(d+b)%4*8;else if(65535>>2]=f[b>>>2];else a.push.apply(a,f);this.sigBytes+=g;return this}, -clamp:function(){var g=this.words,a=this.sigBytes;g[a>>>2]&=4294967295<<32-a%4*8;g.length=e.ceil(a/4)},clone:function(){var g=a.clone.call(this);g.words=this.words.slice(0);return g},random:function(g){for(var a=[],b=function(g){var a=987654321;return function(){a=36969*(a&65535)+(a>>16)&4294967295;g=18E3*(g&65535)+(g>>16)&4294967295;var f=(a<<16)+g&4294967295,f=f/4294967296+.5;return f*(.5>>2]>>>24-b%4*8&255;f.push((d>>>4).toString(16));f.push((d&15).toString(16))}return f.join("")},parse:function(g){for(var a=g.length,b=[],d=0;d>>3]|=parseInt(g.substr(d,2),16)<<24-d%8*4;return new f.init(b,a/2)}},p=k.Latin1={stringify:function(g){var a=g.words;g=g.sigBytes;for(var f=[],b=0;b>>2]>>>24-b%4*8&255));return f.join("")}, -parse:function(g){for(var a=g.length,b=[],d=0;d>>2]|=(g.charCodeAt(d)&255)<<24-d%4*8;return new f.init(b,a)}},g=k.Utf8={stringify:function(g){try{return decodeURIComponent(escape(p.stringify(g)))}catch(a){throw Error("Malformed UTF-8 data");}},parse:function(g){return p.parse(unescape(encodeURIComponent(g)))}},q=b.BufferedBlockAlgorithm=a.extend({reset:function(){this._data=new f.init;this._nDataBytes=0},_append:function(a){"string"==typeof a&&(a=g.parse(a));this._data.concat(a);this._nDataBytes+= -a.sigBytes},_process:function(g){var a=this._data,b=a.words,d=a.sigBytes,q=this.blockSize,k=d/(4*q),k=g?e.ceil(k):e.max((k|0)-this._minBufferSize,0);g=k*q;d=e.min(4*g,d);if(g){for(var t=0;td;)a(b)&&(8>d&&(f[d]=g(e.pow(b,.5))),k[d]=g(e.pow(b,1/3)),d++),b++})();var m=[],d=d.SHA256=a.extend({_doReset:function(){this._hash=new b.init(f.slice(0))},_doProcessBlock:function(a,g){for(var f=this._hash.words,b=f[0],d=f[1],e=f[2],c=f[3],h=f[4],H=f[5],L=f[6],U=f[7],l=0;64>l;l++){if(16>l)m[l]=a[g+l]|0;else{var n=m[l-15],F=m[l-2];m[l]=((n<<25|n>>>7)^(n<<14|n>>>18)^n>>>3)+m[l-7]+((F<<15|F>>>17)^(F<<13|F>>>19)^F>>> -10)+m[l-16]}n=U+((h<<26|h>>>6)^(h<<21|h>>>11)^(h<<7|h>>>25))+(h&H^~h&L)+k[l]+m[l];F=((b<<30|b>>>2)^(b<<19|b>>>13)^(b<<10|b>>>22))+(b&d^b&e^d&e);U=L;L=H;H=h;h=c+n|0;c=e;e=d;d=b;b=n+F|0}f[0]=f[0]+b|0;f[1]=f[1]+d|0;f[2]=f[2]+e|0;f[3]=f[3]+c|0;f[4]=f[4]+h|0;f[5]=f[5]+H|0;f[6]=f[6]+L|0;f[7]=f[7]+U|0},_doFinalize:function(){var a=this._data,g=a.words,f=8*this._nDataBytes,b=8*a.sigBytes;g[b>>>5]|=128<<24-b%32;g[(b+64>>>9<<4)+14]=e.floor(f/4294967296);g[(b+64>>>9<<4)+15]=f;a.sigBytes=4*g.length;this._process(); +(function(){var Y=window.Ably=this,y=y||function(e,c){var d={},b=d.lib={},a=b.Base=function(){function g(){}return{extend:function(a){g.prototype=this;var f=new g;a&&f.mixIn(a);f.hasOwnProperty("init")||(f.init=function(){f.$super.init.apply(this,arguments)});f.init.prototype=f;f.$super=this;return f},create:function(){var g=this.extend();g.init.apply(g,arguments);return g},init:function(){},mixIn:function(g){for(var f in g)g.hasOwnProperty(f)&&(this[f]=g[f]);g.hasOwnProperty("toString")&&(this.toString= +g.toString)},clone:function(){return this.init.prototype.extend(this)}}}(),f=b.WordArray=a.extend({init:function(g,f){g=this.words=g||[];this.sigBytes=f!=c?f:4*g.length},toString:function(g){return(g||m).stringify(this)},concat:function(g){var f=this.words,a=g.words,d=this.sigBytes;g=g.sigBytes;this.clamp();if(d%4)for(var b=0;b>>2]|=(a[b>>>2]>>>24-b%4*8&255)<<24-(d+b)%4*8;else if(65535>>2]=a[b>>>2];else f.push.apply(f,a);this.sigBytes+=g;return this}, +clamp:function(){var g=this.words,f=this.sigBytes;g[f>>>2]&=4294967295<<32-f%4*8;g.length=e.ceil(f/4)},clone:function(){var g=a.clone.call(this);g.words=this.words.slice(0);return g},random:function(g){for(var a=[],b=function(g){var f=987654321;return function(){f=36969*(f&65535)+(f>>16)&4294967295;g=18E3*(g&65535)+(g>>16)&4294967295;var a=(f<<16)+g&4294967295,a=a/4294967296+.5;return a*(.5>>2]>>>24-b%4*8&255;a.push((d>>>4).toString(16));a.push((d&15).toString(16))}return a.join("")},parse:function(g){for(var a=g.length,b=[],d=0;d>>3]|=parseInt(g.substr(d,2),16)<<24-d%8*4;return new f.init(b,a/2)}},p=k.Latin1={stringify:function(g){var f=g.words;g=g.sigBytes;for(var a=[],b=0;b>>2]>>>24-b%4*8&255));return a.join("")}, +parse:function(g){for(var a=g.length,b=[],d=0;d>>2]|=(g.charCodeAt(d)&255)<<24-d%4*8;return new f.init(b,a)}},g=k.Utf8={stringify:function(g){try{return decodeURIComponent(escape(p.stringify(g)))}catch(f){throw Error("Malformed UTF-8 data");}},parse:function(g){return p.parse(unescape(encodeURIComponent(g)))}},q=b.BufferedBlockAlgorithm=a.extend({reset:function(){this._data=new f.init;this._nDataBytes=0},_append:function(f){"string"==typeof f&&(f=g.parse(f));this._data.concat(f);this._nDataBytes+= +f.sigBytes},_process:function(g){var a=this._data,b=a.words,d=a.sigBytes,q=this.blockSize,k=d/(4*q),k=g?e.ceil(k):e.max((k|0)-this._minBufferSize,0);g=k*q;d=e.min(4*g,d);if(g){for(var s=0;sd;)a(b)&&(8>d&&(f[d]=g(e.pow(b,.5))),k[d]=g(e.pow(b,1/3)),d++),b++})();var m=[],d=d.SHA256=a.extend({_doReset:function(){this._hash=new b.init(f.slice(0))},_doProcessBlock:function(f,g){for(var a=this._hash.words,b=a[0],d=a[1],e=a[2],c=a[3],h=a[4],H=a[5],L=a[6],U=a[7],l=0;64>l;l++){if(16>l)m[l]=f[g+l]|0;else{var n=m[l-15],F=m[l-2];m[l]=((n<<25|n>>>7)^(n<<14|n>>>18)^n>>>3)+m[l-7]+((F<<15|F>>>17)^(F<<13|F>>>19)^F>>> +10)+m[l-16]}n=U+((h<<26|h>>>6)^(h<<21|h>>>11)^(h<<7|h>>>25))+(h&H^~h&L)+k[l]+m[l];F=((b<<30|b>>>2)^(b<<19|b>>>13)^(b<<10|b>>>22))+(b&d^b&e^d&e);U=L;L=H;H=h;h=c+n|0;c=e;e=d;d=b;b=n+F|0}a[0]=a[0]+b|0;a[1]=a[1]+d|0;a[2]=a[2]+e|0;a[3]=a[3]+c|0;a[4]=a[4]+h|0;a[5]=a[5]+H|0;a[6]=a[6]+L|0;a[7]=a[7]+U|0},_doFinalize:function(){var a=this._data,g=a.words,f=8*this._nDataBytes,b=8*a.sigBytes;g[b>>>5]|=128<<24-b%32;g[(b+64>>>9<<4)+14]=e.floor(f/4294967296);g[(b+64>>>9<<4)+15]=f;a.sigBytes=4*g.length;this._process(); return this._hash},clone:function(){var f=a.clone.call(this);f._hash=this._hash.clone();return f}});c.SHA256=a._createHelper(d);c.HmacSHA256=a._createHmacHelper(d)})(Math);(function(){var e=y,c=e.enc.Utf8;e.algo.HMAC=e.lib.Base.extend({init:function(d,b){d=this._hasher=new d.init;"string"==typeof b&&(b=c.parse(b));var a=d.blockSize,f=4*a;b.sigBytes>f&&(b=d.finalize(b));b.clamp();for(var e=this._oKey=b.clone(),m=this._iKey=b.clone(),p=e.words,g=m.words,q=0;q>>2]>>>24-e%4*8&255)<<16|(b[e+1>>>2]>>>24-(e+1)%4*8&255)<< 8|b[e+2>>>2]>>>24-(e+2)%4*8&255,h=0;4>h&&e+.75*h>>6*(3-h)&63));if(b=f.charAt(64))for(;d.length%4;)d.push(b);return d.join("")},parse:function(d){var b=d.length,a=this._map,f=a.charAt(64);f&&(f=d.indexOf(f),-1!=f&&(b=f));for(var f=[],e=0,m=0;m>>6-m%4*2;f[e>>>2]|=(p|g)<<24-e%4*8;e++}return c.create(f,e)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="}})();y.lib.Cipher||function(e){var c= y,d=c.lib,b=d.Base,a=d.WordArray,f=d.BufferedBlockAlgorithm,k=c.enc.Base64,m=c.algo.EvpKDF,p=d.Cipher=f.extend({cfg:b.extend(),createEncryptor:function(g,a){return this.create(this._ENC_XFORM_MODE,g,a)},createDecryptor:function(g,a){return this.create(this._DEC_XFORM_MODE,g,a)},init:function(g,a,f){this.cfg=this.cfg.extend(f);this._xformMode=g;this._key=a;this.reset()},reset:function(){f.reset.call(this);this._doReset()},process:function(g){this._append(g);return this._process()},finalize:function(g){g&& this._append(g);return this._doFinalize()},keySize:4,ivSize:4,_ENC_XFORM_MODE:1,_DEC_XFORM_MODE:2,_createHelper:function(){return function(g){return{encrypt:function(a,f,b){return("string"==typeof f?Q:u).encrypt(g,a,f,b)},decrypt:function(a,f,b){return("string"==typeof f?Q:u).decrypt(g,a,f,b)}}}}()});d.StreamCipher=p.extend({_doFinalize:function(){return this._process(!0)},blockSize:1});var g=c.mode={},q=d.BlockCipherMode=b.extend({createEncryptor:function(g,a){return this.Encryptor.create(g,a)}, createDecryptor:function(g,a){return this.Decryptor.create(g,a)},init:function(g,a){this._cipher=g;this._iv=a}}),g=g.CBC=function(){function g(a,f,b){var d=this._iv;d?this._iv=e:d=this._prevBlock;for(var q=0;q>>2]&255}};d.BlockCipher=p.extend({cfg:p.cfg.extend({mode:g,padding:t}),reset:function(){p.reset.call(this);var g=this.cfg,a=g.iv,g=g.mode;if(this._xformMode==this._ENC_XFORM_MODE)var f=g.createEncryptor;else f=g.createDecryptor,this._minBufferSize= -1;this._mode=f.call(g,this,a&&a.words)},_doProcessBlock:function(g,a){this._mode.processBlock(g,a)},_doFinalize:function(){var g=this.cfg.padding;if(this._xformMode==this._ENC_XFORM_MODE){g.pad(this._data,this.blockSize);var a=this._process(!0)}else a=this._process(!0),g.unpad(a);return a},blockSize:4});var s=d.CipherParams=b.extend({init:function(g){this.mixIn(g)},toString:function(g){return(g||this.formatter).stringify(this)}}),g=(c.format={}).OpenSSL={stringify:function(g){var f=g.ciphertext;g= -g.salt;return(g?a.create([1398893684,1701076831]).concat(g).concat(f):f).toString(k)},parse:function(g){g=k.parse(g);var f=g.words;if(1398893684==f[0]&&1701076831==f[1]){var b=a.create(f.slice(2,4));f.splice(0,4);g.sigBytes-=16}return s.create({ciphertext:g,salt:b})}},u=d.SerializableCipher=b.extend({cfg:b.extend({format:g}),encrypt:function(g,a,f,b){b=this.cfg.extend(b);var d=g.createEncryptor(f,b);a=d.finalize(a);d=d.cfg;return s.create({ciphertext:a,key:f,iv:d.iv,algorithm:g,mode:d.mode,padding:d.padding, -blockSize:g.blockSize,formatter:b.format})},decrypt:function(g,a,f,b){b=this.cfg.extend(b);a=this._parse(a,b.format);return g.createDecryptor(f,b).finalize(a.ciphertext)},_parse:function(g,a){return"string"==typeof g?a.parse(g,this):g}}),c=(c.kdf={}).OpenSSL={execute:function(g,f,b,d){d||(d=a.random(8));g=m.create({keySize:f+b}).compute(g,d);b=a.create(g.words.slice(f),4*b);g.sigBytes=4*f;return s.create({key:g,iv:b,salt:d})}},Q=d.PasswordBasedCipher=u.extend({cfg:u.cfg.extend({kdf:c}),encrypt:function(g, -a,f,b){b=this.cfg.extend(b);f=b.kdf.execute(f,g.keySize,g.ivSize);b.iv=f.iv;g=u.encrypt.call(this,g,a,f.key,b);g.mixIn(f);return g},decrypt:function(g,a,f,b){b=this.cfg.extend(b);a=this._parse(a,b.format);f=b.kdf.execute(f,g.keySize,g.ivSize,a.salt);b.iv=f.iv;return u.decrypt.call(this,g,a,f.key,b)}})}();(function(){var e=y,c=e.lib.BlockCipher,d=e.algo,b=[],a=[],f=[],k=[],m=[],p=[],g=[],q=[],t=[],s=[];(function(){for(var d=[],e=0;256>e;e++)d[e]=128>e?e<<1:e<<1^283;for(var c=0,h=0,e=0;256>e;e++){var u= -h^h<<1^h<<2^h<<3^h<<4,u=u>>>8^u&255^99;b[c]=u;a[u]=c;var l=d[c],n=d[l],F=d[n],A=257*d[u]^16843008*u;f[c]=A<<24|A>>>8;k[c]=A<<16|A>>>16;m[c]=A<<8|A>>>24;p[c]=A;A=16843009*F^65537*n^257*l^16843008*c;g[u]=A<<24|A>>>8;q[u]=A<<16|A>>>16;t[u]=A<<8|A>>>24;s[u]=A;c?(c=l^d[d[d[F^l]]],h^=d[d[h]]):c=h=1}})();var u=[0,1,2,4,8,16,32,64,128,27,54],d=d.AES=c.extend({_doReset:function(){for(var a=this._key,f=a.words,d=a.sigBytes/4,a=4*((this._nRounds=d+6)+1),e=this._keySchedule=[],c=0;c>>24]<<24|b[k>>>16&255]<<16|b[k>>>8&255]<<8|b[k&255]):(k=k<<8|k>>>24,k=b[k>>>24]<<24|b[k>>>16&255]<<16|b[k>>>8&255]<<8|b[k&255],k^=u[c/d|0]<<24);e[c]=e[c-d]^k}f=this._invKeySchedule=[];for(d=0;dd||4>=c?k:g[b[k>>>24]]^q[b[k>>>16&255]]^t[b[k>>>8&255]]^s[b[k&255]]},encryptBlock:function(g,a){this._doCryptBlock(g,a,this._keySchedule,f,k,m,p,b)},decryptBlock:function(f,b){var d=f[b+1];f[b+1]=f[b+3];f[b+3]=d;this._doCryptBlock(f,b,this._invKeySchedule, -g,q,t,s,a);d=f[b+1];f[b+1]=f[b+3];f[b+3]=d},_doCryptBlock:function(g,a,f,b,d,q,e,c){for(var k=this._nRounds,t=g[a]^f[0],h=g[a+1]^f[1],m=g[a+2]^f[2],p=g[a+3]^f[3],s=4,u=1;u>>24]^d[h>>>16&255]^q[m>>>8&255]^e[p&255]^f[s++],n=b[h>>>24]^d[m>>>16&255]^q[p>>>8&255]^e[t&255]^f[s++],r=b[m>>>24]^d[p>>>16&255]^q[t>>>8&255]^e[h&255]^f[s++],p=b[p>>>24]^d[t>>>16&255]^q[h>>>8&255]^e[m&255]^f[s++],t=l,h=n,m=r;l=(c[t>>>24]<<24|c[h>>>16&255]<<16|c[m>>>8&255]<<8|c[p&255])^f[s++];n=(c[h>>>24]<<24|c[m>>> -16&255]<<16|c[p>>>8&255]<<8|c[t&255])^f[s++];r=(c[m>>>24]<<24|c[p>>>16&255]<<16|c[t>>>8&255]<<8|c[h&255])^f[s++];p=(c[p>>>24]<<24|c[t>>>16&255]<<16|c[h>>>8&255]<<8|c[m&255])^f[s++];g[a]=l;g[a+1]=n;g[a+2]=r;g[a+3]=p},keySize:8});e.AES=c._createHelper(d)})();(function(){if("undefined"!==typeof ArrayBuffer){var e=y.lib.WordArray,c=e.init;(e.init=function(d){if(d instanceof ArrayBuffer)d=new Uint8Array(d);else if(d instanceof Int8Array||"undefined"!==typeof Uint8ClampedArray&&d instanceof Uint8ClampedArray|| +f);g.call(this,a,f,d);this._prevBlock=q}});return a}(),s=(c.pad={}).Pkcs7={pad:function(g,f){for(var b=4*f,b=b-g.sigBytes%b,d=b<<24|b<<16|b<<8|b,q=[],e=0;e>>2]&255}};d.BlockCipher=p.extend({cfg:p.cfg.extend({mode:g,padding:s}),reset:function(){p.reset.call(this);var g=this.cfg,a=g.iv,g=g.mode;if(this._xformMode==this._ENC_XFORM_MODE)var f=g.createEncryptor;else f=g.createDecryptor,this._minBufferSize= +1;this._mode=f.call(g,this,a&&a.words)},_doProcessBlock:function(g,a){this._mode.processBlock(g,a)},_doFinalize:function(){var g=this.cfg.padding;if(this._xformMode==this._ENC_XFORM_MODE){g.pad(this._data,this.blockSize);var a=this._process(!0)}else a=this._process(!0),g.unpad(a);return a},blockSize:4});var t=d.CipherParams=b.extend({init:function(g){this.mixIn(g)},toString:function(g){return(g||this.formatter).stringify(this)}}),g=(c.format={}).OpenSSL={stringify:function(g){var f=g.ciphertext;g= +g.salt;return(g?a.create([1398893684,1701076831]).concat(g).concat(f):f).toString(k)},parse:function(g){g=k.parse(g);var f=g.words;if(1398893684==f[0]&&1701076831==f[1]){var b=a.create(f.slice(2,4));f.splice(0,4);g.sigBytes-=16}return t.create({ciphertext:g,salt:b})}},u=d.SerializableCipher=b.extend({cfg:b.extend({format:g}),encrypt:function(g,a,f,b){b=this.cfg.extend(b);var d=g.createEncryptor(f,b);a=d.finalize(a);d=d.cfg;return t.create({ciphertext:a,key:f,iv:d.iv,algorithm:g,mode:d.mode,padding:d.padding, +blockSize:g.blockSize,formatter:b.format})},decrypt:function(g,a,f,b){b=this.cfg.extend(b);a=this._parse(a,b.format);return g.createDecryptor(f,b).finalize(a.ciphertext)},_parse:function(g,a){return"string"==typeof g?a.parse(g,this):g}}),c=(c.kdf={}).OpenSSL={execute:function(g,f,b,d){d||(d=a.random(8));g=m.create({keySize:f+b}).compute(g,d);b=a.create(g.words.slice(f),4*b);g.sigBytes=4*f;return t.create({key:g,iv:b,salt:d})}},Q=d.PasswordBasedCipher=u.extend({cfg:u.cfg.extend({kdf:c}),encrypt:function(g, +a,f,b){b=this.cfg.extend(b);f=b.kdf.execute(f,g.keySize,g.ivSize);b.iv=f.iv;g=u.encrypt.call(this,g,a,f.key,b);g.mixIn(f);return g},decrypt:function(g,a,f,b){b=this.cfg.extend(b);a=this._parse(a,b.format);f=b.kdf.execute(f,g.keySize,g.ivSize,a.salt);b.iv=f.iv;return u.decrypt.call(this,g,a,f.key,b)}})}();(function(){var e=y,c=e.lib.BlockCipher,d=e.algo,b=[],a=[],f=[],k=[],m=[],p=[],g=[],q=[],s=[],t=[];(function(){for(var d=[],e=0;256>e;e++)d[e]=128>e?e<<1:e<<1^283;for(var c=0,h=0,e=0;256>e;e++){var u= +h^h<<1^h<<2^h<<3^h<<4,u=u>>>8^u&255^99;b[c]=u;a[u]=c;var l=d[c],n=d[l],F=d[n],A=257*d[u]^16843008*u;f[c]=A<<24|A>>>8;k[c]=A<<16|A>>>16;m[c]=A<<8|A>>>24;p[c]=A;A=16843009*F^65537*n^257*l^16843008*c;g[u]=A<<24|A>>>8;q[u]=A<<16|A>>>16;s[u]=A<<8|A>>>24;t[u]=A;c?(c=l^d[d[d[F^l]]],h^=d[d[h]]):c=h=1}})();var u=[0,1,2,4,8,16,32,64,128,27,54],d=d.AES=c.extend({_doReset:function(){for(var a=this._key,f=a.words,d=a.sigBytes/4,a=4*((this._nRounds=d+6)+1),e=this._keySchedule=[],c=0;c>>24]<<24|b[k>>>16&255]<<16|b[k>>>8&255]<<8|b[k&255]):(k=k<<8|k>>>24,k=b[k>>>24]<<24|b[k>>>16&255]<<16|b[k>>>8&255]<<8|b[k&255],k^=u[c/d|0]<<24);e[c]=e[c-d]^k}f=this._invKeySchedule=[];for(d=0;dd||4>=c?k:g[b[k>>>24]]^q[b[k>>>16&255]]^s[b[k>>>8&255]]^t[b[k&255]]},encryptBlock:function(g,a){this._doCryptBlock(g,a,this._keySchedule,f,k,m,p,b)},decryptBlock:function(f,b){var d=f[b+1];f[b+1]=f[b+3];f[b+3]=d;this._doCryptBlock(f,b,this._invKeySchedule, +g,q,s,t,a);d=f[b+1];f[b+1]=f[b+3];f[b+3]=d},_doCryptBlock:function(g,a,f,b,d,q,e,c){for(var k=this._nRounds,s=g[a]^f[0],h=g[a+1]^f[1],m=g[a+2]^f[2],p=g[a+3]^f[3],t=4,u=1;u>>24]^d[h>>>16&255]^q[m>>>8&255]^e[p&255]^f[t++],n=b[h>>>24]^d[m>>>16&255]^q[p>>>8&255]^e[s&255]^f[t++],v=b[m>>>24]^d[p>>>16&255]^q[s>>>8&255]^e[h&255]^f[t++],p=b[p>>>24]^d[s>>>16&255]^q[h>>>8&255]^e[m&255]^f[t++],s=l,h=n,m=v;l=(c[s>>>24]<<24|c[h>>>16&255]<<16|c[m>>>8&255]<<8|c[p&255])^f[t++];n=(c[h>>>24]<<24|c[m>>> +16&255]<<16|c[p>>>8&255]<<8|c[s&255])^f[t++];v=(c[m>>>24]<<24|c[p>>>16&255]<<16|c[s>>>8&255]<<8|c[h&255])^f[t++];p=(c[p>>>24]<<24|c[s>>>16&255]<<16|c[h>>>8&255]<<8|c[m&255])^f[t++];g[a]=l;g[a+1]=n;g[a+2]=v;g[a+3]=p},keySize:8});e.AES=c._createHelper(d)})();(function(){if("undefined"!==typeof ArrayBuffer){var e=y.lib.WordArray,c=e.init;(e.init=function(d){if(d instanceof ArrayBuffer)d=new Uint8Array(d);else if(d instanceof Int8Array||"undefined"!==typeof Uint8ClampedArray&&d instanceof Uint8ClampedArray|| d instanceof Int16Array||d instanceof Uint16Array||d instanceof Int32Array||d instanceof Uint32Array||"undefined"!==typeof Float32Array&&d instanceof Float32Array||"undefined"!==typeof Float64Array&&d instanceof Float64Array)d=new Uint8Array(d.buffer,d.byteOffset,d.byteLength);if(d instanceof Uint8Array){for(var b=d.byteLength,a=[],f=0;f>>2]|=d[f]<<24-f%4*8;c.call(this,a,b)}else c.apply(this,arguments)}).prototype=e}})();var M=function(){function e(){}function h(){this.iv=this.key=this.mode= -this.keyLength=this.algorithm=null}function d(g){this.algorithm=g.algorithm+"-"+String(g.keyLength)+"-"+g.mode;var a=this.cjsAlgorithm=g.algorithm.toUpperCase().replace(/-\d+$/,""),f=this.key=r.toWordArray(g.key);g=this.iv=r.toWordArray(g.iv);this.encryptCipher=y.algo[a].createEncryptor(f,{iv:g});this.blockLengthWords=g.words.length}var b=y.lib.WordArray,a,f=window.crypto||window.msCrypto;if(window.Uint32Array&&f&&f.getRandomValues){var k=new Uint32Array(4);a=function(g,a){var b=g/4,b=4==b?k:new Uint32Array(b); -f.getRandomValues(b);a(null,r.toWordArray(b))}}else a=function(g,a){console.log("Ably.Crypto.generateRandom(): WARNING: using insecure Math.random() to generate key or iv; see http://ably.io/documentation for how to fix this");for(var f=g/4,d=Array(f),e=0;e>>2]>>>24-p%4*8&255;return b}throw Error("BufferUtils.toArrayBuffer expected a buffer");};d.toWordArray=function(a){return e(a)? -a:b.create(a)};d.base64Encode=function(a){if(c(a)){var b="";a=new Uint8Array(a);for(var d=a.byteLength,p=d%3,d=d-p,g,q,t,s,u=0;u>18,q=(s&258048)>>12,t=(s&4032)>>6,s&=63,b+="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"[g]+"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"[q]+"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"[t]+"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"[s]; -1==p?(s=a[d],b+="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"[(s&252)>>2]+"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"[(s&3)<<4]+"=="):2==p&&(s=a[d]<<8|a[d+1],b+="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"[(s&64512)>>10]+"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"[(s&1008)>>4]+"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"[(s&15)<<2]+"=");return b}if(e(a))return y.enc.Base64.stringify(a)}; +a:b.create(a)};d.base64Encode=function(a){if(c(a)){var b="";a=new Uint8Array(a);for(var d=a.byteLength,p=d%3,d=d-p,g,q,s,t,u=0;u>18,q=(t&258048)>>12,s=(t&4032)>>6,t&=63,b+="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"[g]+"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"[q]+"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"[s]+"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"[t]; +1==p?(t=a[d],b+="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"[(t&252)>>2]+"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"[(t&3)<<4]+"=="):2==p&&(t=a[d]<<8|a[d+1],b+="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"[(t&64512)>>10]+"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"[(t&1008)>>4]+"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"[(t&15)<<2]+"=");return b}if(e(a))return y.enc.Base64.stringify(a)}; d.base64Decode=function(f){if(a){f=window.atob(f);for(var b=f.length,d=new Uint8Array(b),e=0;e>2,m=(m&3)<<4|p>>4,t=(p&15)<<2|g>>6,s=g&63;isNaN(p)?t=s=64:isNaN(g)&&(s=64);f.append(d.charAt(q)+d.charAt(m)+d.charAt(t)+d.charAt(s))}return f.toString()},decode:function(a){var f=new e;for(a=new d(a);a.moveNext();){var b=a.current;if(128>b)f.append(String.fromCharCode(b));else if(191b){a.moveNext();var c=a.current;f.append(String.fromCharCode((b& +encode:function(a){var f=new e,d=b.codex;for(a=new c(a);a.moveNext();){var m=a.current;a.moveNext();var p=a.current;a.moveNext();var g=a.current,q=m>>2,m=(m&3)<<4|p>>4,s=(p&15)<<2|g>>6,t=g&63;isNaN(p)?s=t=64:isNaN(g)&&(t=64);f.append(d.charAt(q)+d.charAt(m)+d.charAt(s)+d.charAt(t))}return f.toString()},decode:function(a){var f=new e;for(a=new d(a);a.moveNext();){var b=a.current;if(128>b)f.append(String.fromCharCode(b));else if(191b){a.moveNext();var c=a.current;f.append(String.fromCharCode((b& 31)<<6|c&63))}else a.moveNext(),c=a.current,a.moveNext(),f.append(String.fromCharCode((b&15)<<12|(c&63)<<6|a.current&63))}return f.toString()}};c.prototype={current:Number.NaN,moveNext:function(){if(0=this._input.length-1)return this.current=Number.NaN,!1;var a=this._input.charCodeAt(++this._index);13==a&&10==this._input.charCodeAt(this._index+1)&&(a=10,this._index+=2);128>a?this.current=a:(127a?this.current= a>>6|192:(this.current=a>>12|224,this._buffer.push(a>>6&63|128)),this._buffer.push(a&63|128));return!0}};d.prototype={current:64,moveNext:function(){if(0=this._input.length-1)return this.current=64,!1;var a=b.codex.indexOf(this._input.charAt(++this._index)),f=b.codex.indexOf(this._input.charAt(++this._index)),d=b.codex.indexOf(this._input.charAt(++this._index)),e=b.codex.indexOf(this._input.charAt(++this._index)),c=(d& 3)<<6|e;this.current=a<<2|f>>4;64!=d&&this._buffer.push((f&15)<<4|d>>2);64!=e&&this._buffer.push(c);return!0}};return b}(),O=function(){function e(){}e.addListener=function(e,d,b){e.addEventListener?e.addEventListener(d,b,!1):e.attachEvent("on"+d,function(){b.apply(e,arguments)})};e.removeListener=function(e,d,b){e.removeEventListener?e.removeEventListener(d,b,!1):e.detachEvent("on"+d,function(){b.apply(e,arguments)})};e.addMessageListener=function(c,d){e.addListener(c,"message",d)};e.removeMessageListener= -function(c,d){e.removeListener(c,"message",d)};e.addUnloadListener=function(c){e.addListener(window,"unload",c)};return e}();(function(e){this.msgpack=e()}).call(this,function(){function e(g,a,f){for(var b=0,d=f.length;be)g.setUint8(a++,e>>>0&127|0);else if(2048>e)g.setUint8(a++,e>>>6&31|192),g.setUint8(a++,e>>>0&63|128);else if(65536>e)g.setUint8(a++,e>>>12&15|224),g.setUint8(a++,e>>>6&63|128),g.setUint8(a++,e>>>0&63|128);else if(1114112>e)g.setUint8(a++,e>>> -18&7|240),g.setUint8(a++,e>>>12&63|128),g.setUint8(a++,e>>>6&63|128),g.setUint8(a++,e>>>0&63|128);else throw Error("bad codepoint "+e);}}function c(g,a,f){var b="",d=a;for(a+=f;dd)a+=1;else if(2048>d)a+=2;else if(65536>d)a+=3;else if(1114112>d)a+=4;else throw Error("bad codepoint "+d);}return a}function b(g,a){this.offset=a||0;this.view=g}function a(g,a){return Object.keys(g).filter(function(f){f=g[f];return(!a||void 0!==f&&null!==f)&&("function"!==typeof f||!!f.toJSON)})}function f(g,b,c, +function(c,d){e.removeListener(c,"message",d)};e.addUnloadListener=function(c){e.addListener(window,"unload",c)};return e}();(function(e){this.msgpack=e()}).call(this,function(){function e(g,a,b){for(var f=0,d=b.length;fe)g.setUint8(a++,e>>>0&127|0);else if(2048>e)g.setUint8(a++,e>>>6&31|192),g.setUint8(a++,e>>>0&63|128);else if(65536>e)g.setUint8(a++,e>>>12&15|224),g.setUint8(a++,e>>>6&63|128),g.setUint8(a++,e>>>0&63|128);else if(1114112>e)g.setUint8(a++,e>>> +18&7|240),g.setUint8(a++,e>>>12&63|128),g.setUint8(a++,e>>>6&63|128),g.setUint8(a++,e>>>0&63|128);else throw Error("bad codepoint "+e);}}function c(g,a,b){var f="",d=a;for(a+=b;dd)a+=1;else if(2048>d)a+=2;else if(65536>d)a+=3;else if(1114112>d)a+=4;else throw Error("bad codepoint "+d);}return a}function b(g,a){this.offset=a||0;this.view=g}function a(g,a){return Object.keys(g).filter(function(b){b=g[b];return(!a||void 0!==b&&null!==b)&&("function"!==typeof b||!!b.toJSON)})}function f(g,b,c, k){var h=typeof g;if("string"===h){var m=d(g);if(32>m)return b.setUint8(c,m|160),e(b,c+1,g),1+m;if(256>m)return b.setUint8(c,217),b.setUint8(c+1,m),e(b,c+2,g),2+m;if(65536>m)return b.setUint8(c,218),b.setUint16(c+1,m),e(b,c+3,g),3+m;if(4294967296>m)return b.setUint8(c,219),b.setUint32(c+1,m),e(b,c+5,g),5+m}if(g instanceof ArrayBuffer){m=g.byteLength;if(256>m)return b.setUint8(c,196),b.setUint8(c+1,m),(new Uint8Array(b.buffer)).set(new Uint8Array(g),c+2),2+m;if(65536>m)return b.setUint8(c,197),b.setUint16(c+ 1,m),(new Uint8Array(b.buffer)).set(new Uint8Array(g),c+3),3+m;if(4294967296>m)return b.setUint8(c,198),b.setUint32(c+1,m),(new Uint8Array(b.buffer)).set(new Uint8Array(g),c+5),5+m}if("number"===h){if(Math.floor(g)!==g)return b.setUint8(c,203),b.setFloat64(c+1,g),9;if(0<=g){if(128>g)return b.setUint8(c,g),1;if(256>g)return b.setUint8(c,204),b.setUint8(c+1,g),2;if(65536>g)return b.setUint8(c,205),b.setUint16(c+1,g),3;if(4294967296>g)return b.setUint8(c,206),b.setUint32(c+1,g),5;if(1.8446744073709552E19> g)return b.setUint8(c,207),c+=1,1.8446744073709552E19>g?(b.setUint32(c,Math.floor(g*p)),b.setInt32(c+4,g&-1)):(b.setUint32(c,4294967295),b.setUint32(c+4,4294967295)),9;throw Error("Number too big 0x"+g.toString(16));}if(-32<=g)return b.setInt8(c,g),1;if(-128<=g)return b.setUint8(c,208),b.setInt8(c+1,g),2;if(-32768<=g)return b.setUint8(c,209),b.setInt16(c+1,g),3;if(-2147483648<=g)return b.setUint8(c,210),b.setInt32(c+1,g),5;if(-9223372036854775808<=g)return b.setUint8(c,211),c+=1,0x7fffffffffffffff> g?(b.setInt32(c,Math.floor(g*p)),b.setInt32(c+4,g&-1)):(b.setUint32(c,2147483647),b.setUint32(c+4,2147483647)),9;throw Error("Number too small -0x"+(-g).toString(16).substr(1));}if("undefined"===h){if(k)return 0;b.setUint8(c,212);b.setUint8(c+1,0);b.setUint8(c+2,0);return 3}if(null===g){if(k)return 0;b.setUint8(c,192);return 1}if("boolean"===h)return b.setUint8(c,g?195:194),1;if("function"===typeof g.toJSON)return f(g.toJSON(),b,c,k);if("object"===h){var h=0,l=Array.isArray(g);if(l)m=g.length;else var H= a(g,k),m=H.length;16>m?(b.setUint8(c,m|(l?144:128)),h=1):65536>m?(b.setUint8(c,l?220:222),b.setUint16(c+1,m),h=3):4294967296>m&&(b.setUint8(c,l?221:223),b.setUint32(c+1,m),h=5);if(l)for(l=0;lc)return 1+c;if(256>c)return 2+c;if(65536>c)return 3+c;if(4294967296>c)return 5+c}if(g instanceof ArrayBuffer){c=g.byteLength;if(256>c)return 2+c;if(65536>c)return 3+c;if(4294967296>c)return 5+c}if("number"===f){if(Math.floor(g)!==g)return 9;if(0<=g){if(128>g)return 1;if(256>g)return 2;if(65536>g)return 3;if(4294967296>g)return 5;if(1.8446744073709552E19>g)return 9;throw Error("Number too big 0x"+g.toString(16));}if(-32<=g)return 1;if(-128<=g)return 2;if(-32768<=g)return 3;if(-2147483648<=g)return 5;if(-9223372036854775808<=g)return 9;throw Error("Number too small -0x"+g.toString(16).substr(1)); -}if("boolean"===f)return 1;if(null===g)return b?0:1;if(void 0===g)return b?0:3;if("function"===typeof g.toJSON)return k(g.toJSON(),b);if("object"===f){f=0;if(Array.isArray(g))for(var c=g.length,e=0;ec)return 1+f;if(65536>c)return 3+f;if(4294967296>c)return 5+f;throw Error("Array or object too long 0x"+c.toString(16));}if("function"===f)return 0;throw Error("Unknown type "+f);}var m={inspect:function(a){if(void 0=== -a)return"undefined";var b,f;a instanceof ArrayBuffer?(f="ArrayBuffer",b=new DataView(a)):a instanceof DataView&&(f="DataView",b=a);if(!b)return JSON.stringify(a);for(var d=[],c=0;c"}};m.utf8Write=e;m.utf8Read=c;m.utf8ByteCount=d;m.encode=function(a,b){var d=k(a,b);if(0!=d){var d=new ArrayBuffer(d),c=new DataView(d);f(a,c,0,b);return d}};m.decode=function(a){var f= -new DataView(a),f=new b(f),d=f.parse();if(f.offset!==a.byteLength)throw Error(a.byteLength-f.offset+" trailing bytes");return d};var p=1/4294967296;b.prototype.map=function(a){for(var b={},f=0;fc)return 1+f;if(65536>c)return 3+f;if(4294967296>c)return 5+f;throw Error("Array or object too long 0x"+c.toString(16));}if("function"===f)return 0;throw Error("Unknown type "+f);}var m={inspect:function(g){if(void 0=== +g)return"undefined";var a,b;g instanceof ArrayBuffer?(b="ArrayBuffer",a=new DataView(g)):g instanceof DataView&&(b="DataView",a=g);if(!a)return JSON.stringify(g);for(var f=[],d=0;d"}};m.utf8Write=e;m.utf8Read=c;m.utf8ByteCount=d;m.encode=function(g,a){var b=k(g,a);if(0!=b){var b=new ArrayBuffer(b),d=new DataView(b);f(g,d,0,a);return b}};m.decode=function(g){var a= +new DataView(g),a=new b(a),f=a.parse();if(a.offset!==g.byteLength)throw Error(g.byteLength-a.offset+" trailing bytes");return f};var p=1/4294967296;b.prototype.map=function(a){for(var b={},f=0;f=f?null:a.slice(0,f).join("/"),c.data=m}}};e.fromResponseBody=function(d,b,a,f){a&&(d="msgpack"==a?h.decode(d):JSON.parse(String(d)));for(a=0;a=f?null:a.slice(0,f).join("/"),c.data=m}}};e.fromResponseBody=function(d,b,a,f){a&&(d="msgpack"==a?h.decode(d):JSON.parse(String(d)));for(a=0;aa.code:500>a.statusCode};e.prototype.getConnectParams=function(a){a=a?l.prototypicalClone(a):{};var c=this.options;switch(this.mode){case "upgrade":a.upgrade=this.connectionKey;break;case "resume":a.resume= +d.disconnectAllTransports())})}}var d="undefined"!==typeof N&&N.read,b="undefined"!==typeof N&&N.create,a="undefined"!==typeof N&&N.erase,f=r.Action,k=$.PendingMessage,m=function(){},p=function(a){var c=[40140],b=[80015,80017,80030];return a.code?l.arrIn(c,a.code)?!1:l.arrIn(b,a.code)?!0:4E4<=a.code&&5E4>a.code:500>a.statusCode};e.prototype.getConnectParams=function(a){a=a?l.prototypicalClone(a):{};var c=this.options;switch(this.mode){case "upgrade":a.upgrade=this.connectionKey;break;case "resume":a.resume= this.connectionKey;void 0!==this.connectionSerial&&(a.connection_serial=this.connectionSerial);break;case "recover":if(!0===c.recover){var b=d("ably-connection-key"),f=d("ably-connection-serial");null!==b&&null!==f&&(a.recover=b,a.connection_serial=f)}else if(b=c.recover.match(/^(\w+):(\w+)$/))a.recover=b[1],a.connection_serial=b[2]}void 0!==c.clientId&&(a.clientId=c.clientId);!1===c.echoMessages&&(a.echo="false");void 0!==this.format&&(a.format=this.format);void 0!==this.stream&&(a.stream=this.stream); return a};l.inherits(h,w);h.httpTransports={};h.transports={};h.prototype.chooseTransport=function(a){c.logAction(c.LOG_MAJOR,"ConnectionManager.chooseTransport()","");if(this.activeProtocol)c.logAction(c.LOG_MINOR,"ConnectionManager.chooseTransport()","Transport already established"),a(null);else{var b=this.connectionKey?"resume":this.options.recover?"recover":"clean",f=new e(this.options,null,b,this.connectionKey,this.connectionSerial);c.logAction(c.LOG_MINOR,"ConnectionManager.chooseTransport()", "Transport recovery mode = "+b+("clean"==b?"":"; connectionKey = "+this.connectionKey+"; connectionSerial = "+this.connectionSerial));var d=this;this.httpTransports.length?this.chooseHttpTransport(f,function(b,k){if(b)c.logAction(c.LOG_ERROR,"ConnectionManager.chooseTransport()","Unexpected error establishing transport; err = "+l.inspectError(b)),a(b);else if(c.logAction(c.LOG_MINOR,"ConnectionManager.chooseTransport()","Establishing http transport: "+k),a(null,k),d.upgradeTransports.length)k.once("connected", @@ -111,7 +111,7 @@ c.logAction(c.LOG_MINOR,"ConnectionManager.scheduleTransportActivation()","Sendi f);d&&c.logAction(c.LOG_MICRO,"ConnectionManager.activateTransport()","connectionId = "+d);e&&c.logAction(c.LOG_MICRO,"ConnectionManager.activateTransport()","clientId = "+e);var k=this.state;if(k!=this.states.closing&&k!=this.states.closed){l.arrDeleteValue(this.pendingTransports,a);var h=this.activeProtocol;this.activeProtocol=new $(a);this.host=a.params.host;b&&this.connectionKey!=b&&this.setConnection(d,b,f);if(e){if(this.realtime.clientId&&this.realtime.clientId!=e){b=new x("Unexpected mismatch between expected and received clientId", 40102,401);c.logAction(c.LOG_ERROR,"ConnectionManager.activateTransport()","Unexpected mismatch between expected and received clientId");a.abort(b);return}this.realtime.clientId=e}this.emit("transport.active",a,b,a.params);k!==this.states.connected&&this.notifyState({state:"connected"});h&&h.finish();for(a=0;ah||300<=h?(c=c&&c.error,c||(c=Error(String(res)),c.statusCode=h),a(c)):a(null,c,e,!0)}}}function b(a){var b=[];if(a)for(var c in a)b.push(c+"="+a[c]);return b.join("&")}function a(a,f,d,e){return function(h,l,s,u){h?c.logAction(c.LOG_MICRO,"Resource."+f+"()","Received Error; "+(d+(e?"?":"")+b(e))+"; Error: "+ -JSON.stringify(h)):c.logAction(c.LOG_MICRO,"Resource."+f+"()","Received; "+(d+(e?"?":"")+b(e))+"; Headers: "+b(s)+"; Body: "+JSON.stringify(l));a&&a(h,l,s,u)}}var f="object"==typeof window?window.Ably.msgpack:(void 0)("msgpack-js");e.get=function(f,e,p,g,q,l){function s(a,d){c.shouldLog(c.LOG_MICRO)&&c.logAction(c.LOG_MICRO,"Resource.get()","Sending; "+(e+(d?"?":"")+b(d)));z.get(f,e,a,d,function(a,b,c,d){a&&40140==a.code?f.auth.authorise({force:!0},null,function(a){a?l(a):h(f,p,g,l,s)}):l(a,b,c,d)})} -c.shouldLog(c.LOG_MICRO)&&(l=a(l,"get",e,g));q&&(l=l&&d(l,q),(g=g||{}).envelope=q);h(f,p,g,l,s)};e.post=function(e,m,p,g,q,l,s){function u(a,d){if(c.shouldLog(c.LOG_MICRO)){var l=p;if(0<(a["content-type"]||"").indexOf("msgpack"))try{p=f.decode(p)}catch(t){c.logAction(c.LOG_MICRO,"Resource.post()","Sending MsgPack Decoding Error: "+JSON.stringify(t))}c.logAction(c.LOG_MICRO,"Resource.post()","Sending; "+(m+(d?"?":"")+b(d))+"; Body: "+l)}z.post(e,m,a,p,d,function(a,b,c,f){a&&40140==a.code?e.auth.authorise({force:!0}, -null,function(a){a?s(a):h(e,g,q,s,u)}):s(a,b,c,f)})}c.shouldLog(c.LOG_MICRO)&&(s=a(s,"post",m,q));l&&(s=d(s,l),q.envelope=l);h(e,g,q,s,u)};return e}(),R=function(){function e(c,b,a,f,e){this.rest=c;this.path=b;this.headers=a;this.envelope=f;this.bodyHandler=e}function h(c,b,a){this.resource=c;this.items=b;var f=this;"first"in a&&(this.first=function(c){f.get(a.first,c)});"current"in a&&(this.current=function(c){f.get(a.current,c)});"next"in a&&(this.next=function(c){f.get(a.next,c)})}e.prototype.get= -function(c,b){var a=this;X.get(a.rest,a.path,a.headers,c,a.envelope,function(c,d,e,h){a.handlePage(c,d,e,h,b)})};e.prototype.handlePage=function(d,b,a,f,e){if(d)c.logAction(c.LOG_ERROR,"PaginatedResource.get()","Unexpected error getting resource: err = "+JSON.stringify(d)),e(d);else{var m,p,g;try{m=this.bodyHandler(b,a,f)}catch(q){e(q);return}if(a&&(p=a.Link||a.link)){d=p;"string"==typeof d&&(d=d.split(","));b={};for(a=0;a;\s*rel="(\w+)"$/))&&(p=(p=f[1].match(/^\.\/(\w+)\?(.*)$/))&& -l.parseQueryString(p[2]))&&(b[f[2]]=p);g=b}e(null,new h(this,m,g))}};h.prototype.get=function(c,b){var a=this.resource;X.get(a.rest,a.path,a.headers,c,a.envelope,function(c,d,e,h){a.handlePage(c,d,e,h,b)})};return e}(),ea=function(){function e(){}function h(a){if(!a)return"";"string"==typeof a&&(a=JSON.parse(a));var c={},b=l.keysArray(a,!0);if(!b)return"";b.sort();for(var f=0;fthis.getTimestamp()){if(!a||!a.force){c.logAction(c.LOG_MINOR,"Auth.getToken()","using cached token; expires = "+d.expires);f(null,d);return}}else c.logAction(c.LOG_MINOR,"Auth.getToken()","deleting expired token"), -this.tokenDetails=null}var e=this;this.requestToken(a,b,function(a,b){a?f(a):f(null,e.tokenDetails=b)})};d.prototype.requestToken=function(a,b,d){"function"!=typeof a||d?"function"!=typeof b||d||(d=b,b=a,a=null):(d=a,a=b=null);a=l.mixin(l.copy(this.rest.options),a);b=b||l.copy(this.tokenParams);d=d||e;var k=a.format||"json",m,u=this.rest;if(a.authCallback)c.logAction(c.LOG_MINOR,"Auth.requestToken()","using token auth with auth_callback"),m=a.authCallback;else if(a.authUrl)c.logAction(c.LOG_MINOR, -"Auth.requestToken()","using token auth with auth_url"),a.authParams||(m=a.authUrl.indexOf("?"),-1h||300<=h?(c=c&&c.error,c||(c=Error(String(res)),c.statusCode=h),a(c)):a(null,c,e,!0)}}}function b(a){var b=[];if(a)for(var c in a)b.push(c+"="+a[c]);return b.join("&")}function a(a,f,d,g){return function(e,h,l,u){e?c.logAction(c.LOG_MICRO,"Resource."+f+"()","Received Error; "+(d+(g?"?":"")+b(g))+"; Error: "+ +JSON.stringify(e)):c.logAction(c.LOG_MICRO,"Resource."+f+"()","Received; "+(d+(g?"?":"")+b(g))+"; Headers: "+b(l)+"; Body: "+(v.isBuffer(h)?h.toString():h));a&&a(e,h,l,u)}}var f="object"==typeof window?window.Ably.msgpack:(void 0)("msgpack-js");e.get=function(f,e,p,g,q,l){function t(a,d){c.shouldLog(c.LOG_MICRO)&&c.logAction(c.LOG_MICRO,"Resource.get()","Sending; "+(e+(d?"?":"")+b(d)));z.get(f,e,a,d,function(a,b,c,d){a&&40140==a.code?f.auth.authorise(null,{force:!0},function(a){a?l(a):h(f,p,g,l,t)}): +l(a,b,c,d)})}c.shouldLog(c.LOG_MICRO)&&(l=a(l,"get",e,g));q&&(l=l&&d(l,q),(g=g||{}).envelope=q);h(f,p,g,l,t)};e.post=function(e,m,p,g,q,l,t){function u(a,d){if(c.shouldLog(c.LOG_MICRO)){var l=p;if(0<(a["content-type"]||"").indexOf("msgpack"))try{p=f.decode(p)}catch(s){c.logAction(c.LOG_MICRO,"Resource.post()","Sending MsgPack Decoding Error: "+JSON.stringify(s))}c.logAction(c.LOG_MICRO,"Resource.post()","Sending; "+(m+(d?"?":"")+b(d))+"; Body: "+l)}z.post(e,m,a,p,d,function(a,b,c,f){a&&40140==a.code? +e.auth.authorise(null,{force:!0},function(a){a?t(a):h(e,g,q,t,u)}):t(a,b,c,f)})}c.shouldLog(c.LOG_MICRO)&&(t=a(t,"post",m,q));l&&(t=d(t,l),q.envelope=l);h(e,g,q,t,u)};return e}(),R=function(){function e(c,b,a,f,e){this.rest=c;this.path=b;this.headers=a;this.envelope=f;this.bodyHandler=e}function h(c,b,a){this.resource=c;this.items=b;var f=this;"first"in a&&(this.first=function(b){f.get(a.first,b)});"current"in a&&(this.current=function(b){f.get(a.current,b)});"next"in a&&(this.next=function(b){f.get(a.next, +b)})}e.prototype.get=function(c,b){var a=this;X.get(a.rest,a.path,a.headers,c,a.envelope,function(c,d,e,h){a.handlePage(c,d,e,h,b)})};e.prototype.handlePage=function(d,b,a,f,e){if(d)c.logAction(c.LOG_ERROR,"PaginatedResource.get()","Unexpected error getting resource: err = "+JSON.stringify(d)),e(d);else{var m,p,g;try{m=this.bodyHandler(b,a,f)}catch(q){e(q);return}if(a&&(p=a.Link||a.link)){d=p;"string"==typeof d&&(d=d.split(","));b={};for(a=0;a;\s*rel="(\w+)"$/))&& +(p=(p=f[1].match(/^\.\/(\w+)\?(.*)$/))&&l.parseQueryString(p[2]))&&(b[f[2]]=p);g=b}e(null,new h(this,m,g))}};h.prototype.get=function(c,b){var a=this.resource;X.get(a.rest,a.path,a.headers,c,a.envelope,function(c,d,e,h){a.handlePage(c,d,e,h,b)})};return e}(),ea=function(){function e(){}function h(a){if(!a)return"";"string"==typeof a&&(a=JSON.parse(a));var b={},c=l.keysArray(a,!0);if(!c)return"";c.sort();for(var f=0;fthis.getTimestamp()){if(!b||!b.force){c.logAction(c.LOG_MINOR,"Auth.getToken()","using cached token; expires = "+d.expires);f(null,d);return}}else c.logAction(c.LOG_MINOR,"Auth.getToken()","deleting expired token"), +this.tokenDetails=null}var e=this;this.requestToken(a,b,function(a,b){a?f(a):f(null,e.tokenDetails=b)})};d.prototype.requestToken=function(a,b,d){"function"!=typeof a||d?"function"!=typeof b||d||(d=b,b=null):(d=a,b=a=null);b=l.mixin(l.copy(this.rest.options),b);a=a||l.copy(this.tokenParams);d=d||e;var k=b.format||"json",m,u=this.rest;if(b.authCallback)c.logAction(c.LOG_MINOR,"Auth.requestToken()","using token auth with auth_callback"),m=b.authCallback;else if(b.authUrl)c.logAction(c.LOG_MINOR,"Auth.requestToken()", +"using token auth with auth_url"),b.authParams||(m=b.authUrl.indexOf("?"),-1d)&&0!==g.status)if(void 0===v&&(v=g.status,1223===v&&(v=204),clearTimeout(c),x=400>v,204==v?h.complete():w=3==h.requestMode&&x),3==d&&w)a();else if(4==d)if(w)b();else a:{try{var e=g.getResponseHeader&&g.getResponseHeader("content-type"),f=e?"application/json"== -e:"text"==g.responseType;G=f?g.responseText:g.response;if(!G){204!=status&&(k=Error("Incomplete response body from server"),k.statusCode=400,h.complete(k));break a}f&&(G=JSON.parse(String(G)),z=!0)}catch(l){var k=Error("Malformed response body from server: "+l.message);k.statusCode=400;h.complete(k);break a}x?h.complete(null,G,e&&{"content-type":e},z):(k=G.error,k||(k=Error("Error response received from server: "+v),k.statusCode=v),h.complete(k))}};g.send(d)};d.prototype.dispose=function(){var b= +0==this.requestMode?n.sendTimeout:n.recvTimeout),d=this.body,e=d?"POST":"GET",f=this.headers,g=this.xhr=new XMLHttpRequest,h=this,k=f.accept,m="text";k?"application/json"!=k&&(m="arraybuffer"):f.accept="application/json";d&&"application/json"==(f["content-type"]||(f["content-type"]="application/json"))&&"string"!=typeof d&&(d=JSON.stringify(d));g.open(e,this.uri,!0);g.responseType=m;"authorization"in f&&(g.withCredentials="true");for(var p in f)g.setRequestHeader(p,f[p]);var v=g.onerror=function(a){a.code= +8E4;h.complete(a)};g.onabort=function(){var a=Error("Request cancelled");a.statusCode=400;v(a)};g.ontimeout=function(){var a=Error("Request timed out");a.statusCode=408;v(a)};var w,r,G,x,y=0,z=!1;g.onreadystatechange=function(){var d=g.readyState;if(!(3>d)&&0!==g.status)if(void 0===r&&(r=g.status,1223===r&&(r=204),clearTimeout(c),x=400>r,204==r?h.complete():w=3==h.requestMode&&x),3==d&&w)a();else if(4==d)if(w)b();else a:{try{var e=g.getResponseHeader&&g.getResponseHeader("content-type"),f=e?"application/json"== +e:"text"==g.responseType;G=f?g.responseText:g.response;if(!G){204!=status&&(k=Error("Incomplete response body from server"),k.statusCode=400,h.complete(k));break a}f&&(G=JSON.parse(String(G)),z=!0)}catch(l){var k=Error("Malformed response body from server: "+l.message);k.statusCode=400;h.complete(k);break a}x?h.complete(null,G,e&&{"content-type":e},z):(k=G.error,k||(k=Error("Error response received from server: "+r),k.statusCode=r),h.complete(k))}};g.send(d)};d.prototype.dispose=function(){var b= this.xhr;if(b){b.onreadystatechange=b.onerror=b.onabort=b.ontimeout=a;this.xhr=null;var c=this.timer;c&&(clearTimeout(c),this.timer=null);this.requestComplete||b.abort()}delete k[this.id]};l.inherits(b,d);b.prototype.exec=function(){function a(){clearTimeout(e);if(r=h.responseText){var b=r.length-1;if("\n"==r[b]||(b=-1\n\n \n