From f45dbbfb386c19e4883771d768c14537cdc6b485 Mon Sep 17 00:00:00 2001 From: Manuel Fernando Date: Mon, 27 Nov 2017 11:29:44 -0500 Subject: [PATCH 01/13] add missing flow types (#116) --- src/core/components/deduping_manager.js | 9 +++++---- src/core/components/subscription_manager.js | 2 ++ src/core/pubnub-common.js | 4 +++- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/core/components/deduping_manager.js b/src/core/components/deduping_manager.js index 22a1ecd73..53f57605b 100644 --- a/src/core/components/deduping_manager.js +++ b/src/core/components/deduping_manager.js @@ -1,9 +1,10 @@ /* @flow */ import Config from '../components/config'; +import { SubscribeMessage } from '../flow_interfaces'; type DedupingManagerConsturct = { - config: Config, + config: Config, } const hashCode = (payload) => { @@ -27,17 +28,17 @@ export default class { this._config = config; } - getKey(message) { + getKey(message: SubscribeMessage) { const hashedPayload = hashCode(JSON.stringify(message.payload)).toString(); const timetoken = message.publishMetaData.publishTimetoken; return `${timetoken}-${hashedPayload}`; } - isDuplicate(message) { + isDuplicate(message: SubscribeMessage) { return this.hashHistory.includes(this.getKey(message)); } - addEntry(message) { + addEntry(message: SubscribeMessage) { if (this.hashHistory.length >= this._config.maximumCacheSize) { this.hashHistory.shift(); } diff --git a/src/core/components/subscription_manager.js b/src/core/components/subscription_manager.js index 9d4f6e410..bc03871b4 100644 --- a/src/core/components/subscription_manager.js +++ b/src/core/components/subscription_manager.js @@ -74,6 +74,8 @@ export default class { _pendingChannelGroupSubscriptions: Array; // + _dedupingManager: DedupingManager; + constructor({ subscribeEndpoint, leaveEndpoint, heartbeatEndpoint, setStateEndpoint, timeEndpoint, config, crypto, listenerManager }: SubscriptionManagerConsturct) { this._listenerManager = listenerManager; this._config = config; diff --git a/src/core/pubnub-common.js b/src/core/pubnub-common.js index 9a630c56c..83a012017 100644 --- a/src/core/pubnub-common.js +++ b/src/core/pubnub-common.js @@ -52,7 +52,7 @@ export default class { fire: Function; history: Function; - deleteHistory: Function; + deleteMessages: Function; fetchMessages: Function; // @@ -96,6 +96,8 @@ export default class { getFilterExpression: Function; setFilterExpression: Function; + setHeartbeatInterval: Function; + encrypt: Function; decrypt: Function; From 96544ecda0f4f55f3a9f8b7cb2148d6f7fbf0dc7 Mon Sep 17 00:00:00 2001 From: Manuel Fernando Date: Mon, 27 Nov 2017 11:30:25 -0500 Subject: [PATCH 02/13] upgrade superagent to v3.8.1 (#115) --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 3ef6de09d..d9aece5ed 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,7 @@ "dependencies": { "agentkeepalive": "^3.1.0", "lil-uuid": "^0.1.1", - "superagent": "^2.3.0", + "superagent": "^3.8.1", "superagent-proxy": "^1.0.2" }, "noAnalyze": false, @@ -90,4 +90,4 @@ "engine": { "node": ">=0.8" } -} \ No newline at end of file +} From b9f220991faee951b38030ce61171e48c221c939 Mon Sep 17 00:00:00 2001 From: Manuel Fernando Date: Mon, 4 Dec 2017 14:34:47 -0500 Subject: [PATCH 03/13] Thomasconner add nativescript support (#117) * Add NativeScript support * Add tests for NativeScript * Replace React-Native with NativeScript in NativeScript tests * Fix support for nativescript * Add tasks for to gulpfile for nativescript * Create dist for nativescript * Update .gitignore for nativescript * Remove NativeScript dist bundle * Use NativeScript http module * Remove some Gulp tasks related to NativeScript * Update compiled modules * Update dist bundles * Replace all uses of uuid with lil-uuid * Fix error detection for NartiveScript network module * Check if abort is a function before calling it Some platforms don't return an object that contains an abort function to cancel network requests. This change checks if an abort function is available before calling it. * Update all the builds * add entry point to app with Native Script * resolve eslint issues * add operation delete to native script * remove multi-spaces --- package.json | 1 + src/core/components/subscription_manager.js | 4 +- src/nativescript/index.js | 16 +++++ src/networking/modules/nativescript.js | 76 +++++++++++++++++++++ 4 files changed, 96 insertions(+), 1 deletion(-) create mode 100644 src/nativescript/index.js create mode 100644 src/networking/modules/nativescript.js diff --git a/package.json b/package.json index d9aece5ed..c5597d10e 100644 --- a/package.json +++ b/package.json @@ -9,6 +9,7 @@ }, "main": "./lib/node/index.js", "react-native": "./lib/react_native/index.js", + "nativescript": "./lib/nativescript/index.js", "browser": "./dist/web/pubnub.min.js", "repository": { "type": "git", diff --git a/src/core/components/subscription_manager.js b/src/core/components/subscription_manager.js index bc03871b4..544d55309 100644 --- a/src/core/components/subscription_manager.js +++ b/src/core/components/subscription_manager.js @@ -497,7 +497,9 @@ export default class { _stopSubscribeLoop() { if (this._subscribeCall) { - this._subscribeCall.abort(); + if (typeof this._subscribeCall.abort === 'function') { + this._subscribeCall.abort(); + } this._subscribeCall = null; } } diff --git a/src/nativescript/index.js b/src/nativescript/index.js new file mode 100644 index 000000000..3e12b1b58 --- /dev/null +++ b/src/nativescript/index.js @@ -0,0 +1,16 @@ +/* @flow */ + +import PubNubCore from '../core/pubnub-common'; +import Networking from '../networking'; +import Database from '../db/common'; +import { del, get, post } from '../networking/modules/nativescript'; +import { InternalSetupStruct } from '../core/flow_interfaces'; + +export default class extends PubNubCore { + constructor(setup: InternalSetupStruct) { + setup.db = new Database(); + setup.networking = new Networking({ del, get, post }); + setup.sdkFamily = 'NativeScript'; + super(setup); + } +} diff --git a/src/networking/modules/nativescript.js b/src/networking/modules/nativescript.js new file mode 100644 index 000000000..89eabd301 --- /dev/null +++ b/src/networking/modules/nativescript.js @@ -0,0 +1,76 @@ +/* @flow */ + +import { request as HttpRequest } from 'http'; +import { EndpointDefinition, StatusAnnouncement } from '../../core/flow_interfaces'; +import { buildUrl } from '../utils'; + +function log(url, qs, res) { + let _pickLogger = () => { + if (console && console.log) return console; // eslint-disable-line no-console + return console; + }; + + let start = new Date().getTime(); + let timestamp = new Date().toISOString(); + let logger = _pickLogger(); + logger.log('<<<<<'); // eslint-disable-line no-console + logger.log(`[${timestamp}]`, '\n', url, '\n', qs); // eslint-disable-line no-console + logger.log('-----'); // eslint-disable-line no-console + + let now = new Date().getTime(); + let elapsed = now - start; + let timestampDone = new Date().toISOString(); + + logger.log('>>>>>>'); // eslint-disable-line no-console + logger.log(`[${timestampDone} / ${elapsed}]`, '\n', url, '\n', qs, '\n', res); // eslint-disable-line no-console + logger.log('-----'); // eslint-disable-line no-console +} + +function xdr(method: string, url: string, params: Object, body: string, endpoint: EndpointDefinition, callback: Function): void { + let status: StatusAnnouncement = {}; + status.operation = endpoint.operation; + + // $FlowFixMe + return HttpRequest({ + method, + url: buildUrl(url, params), + content: body, + timeout: endpoint.timeout + }).then((response) => { + status.error = false; + + if (response.statusCode) { + status.statusCode = response.statusCode; + } + + return response.content.toJSON(); + }).then((response) => { + let resp = response; + + if (this._config.logVerbosity) { + log(url, params, resp); + } + + callback(status, resp); + }).catch((e) => { + status.error = true; + status.errorData = e; + status.category = this._detectErrorCategory(e); + callback(status, null); + }); +} + +export function get(params: Object, endpoint: EndpointDefinition, callback: Function) { + let url = this.getStandardOrigin() + endpoint.url; + return xdr.call(this, 'GET', url, params, '', endpoint, callback); +} + +export function post(params: Object, body: string, endpoint: EndpointDefinition, callback: Function) { + let url = this.getStandardOrigin() + endpoint.url; + return xdr.call(this, 'POST', url, params, body, endpoint, callback); +} + +export function del(params: Object, endpoint: EndpointDefinition, callback: Function) { + let url = this.getStandardOrigin() + endpoint.url; + return xdr.call(this, 'DELETE', url, params, {}, endpoint, callback); +} From d501af91b0ed10b84cb9c212d5a3515678a18897 Mon Sep 17 00:00:00 2001 From: manuelfernando Date: Tue, 5 Dec 2017 15:54:44 -0500 Subject: [PATCH 04/13] replace empty body for the function delete in Native Script --- src/networking/modules/nativescript.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/networking/modules/nativescript.js b/src/networking/modules/nativescript.js index 89eabd301..957608b30 100644 --- a/src/networking/modules/nativescript.js +++ b/src/networking/modules/nativescript.js @@ -72,5 +72,5 @@ export function post(params: Object, body: string, endpoint: EndpointDefinition, export function del(params: Object, endpoint: EndpointDefinition, callback: Function) { let url = this.getStandardOrigin() + endpoint.url; - return xdr.call(this, 'DELETE', url, params, {}, endpoint, callback); + return xdr.call(this, 'DELETE', url, params, '', endpoint, callback); } From 6e58db1f209fcf87cb2b444e61715ddf0a202db7 Mon Sep 17 00:00:00 2001 From: manuelfernando Date: Tue, 5 Dec 2017 16:24:28 -0500 Subject: [PATCH 05/13] v4.19.0 --- .pubnub.yml | 11 ++- CHANGELOG.md | 19 ++++ README.md | 4 +- dist/titanium/pubnub.js | 10 ++- dist/titanium/pubnub.min.js | 6 +- dist/web/pubnub.js | 10 ++- dist/web/pubnub.min.js | 4 +- lib/core/components/config.js | 2 +- lib/core/components/config.js.map | 2 +- lib/core/components/deduping_manager.js | 2 + lib/core/components/deduping_manager.js.map | 2 +- lib/core/components/subscription_manager.js | 4 +- .../components/subscription_manager.js.map | 2 +- lib/core/pubnub-common.js.map | 2 +- lib/nativescript/index.js | 48 ++++++++++ lib/nativescript/index.js.map | 1 + lib/networking/modules/nativescript.js | 87 +++++++++++++++++++ lib/networking/modules/nativescript.js.map | 1 + package.json | 2 +- src/core/components/config.js | 2 +- 20 files changed, 199 insertions(+), 22 deletions(-) create mode 100644 lib/nativescript/index.js create mode 100644 lib/nativescript/index.js.map create mode 100644 lib/networking/modules/nativescript.js create mode 100644 lib/networking/modules/nativescript.js.map diff --git a/.pubnub.yml b/.pubnub.yml index d029319e0..7e76c33fb 100644 --- a/.pubnub.yml +++ b/.pubnub.yml @@ -1,11 +1,20 @@ name: javascript -version: 4.18.0 +version: 4.19.0 schema: 1 scm: github.com/pubnub/javascript files: - dist/web/pubnub.js - dist/web/pubnub.min.js changelog: + - version: v4.19.0 + date: 2017-12-05 + changes: + - type: feature + text: add support for Native Script + - type: improvement + text: add missing flow types + - type: improvement + text: upgrade superagent to ^3.8.1 - version: v4.18.0 date: 2017-11-20 changes: diff --git a/CHANGELOG.md b/CHANGELOG.md index 1e60a8815..8fc34c47c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,21 @@ +## [v4.19.0](https://github.com/pubnub/javascript/tree/v4.19.0) + December-05-2017 + + + [Full Changelog](https://github.com/pubnub/javascript/compare/v4.18.0...v4.19.0) + + +- ⭐ add support for Native Script + + +- 🌟 add missing flow types + + +- 🌟 upgrade superagent to ^3.8.1 + + + ## [v4.18.0](https://github.com/pubnub/javascript/tree/v4.18.0) November-20-2017 @@ -7,6 +24,8 @@ - ⭐ keepAlive is now initialized globally instead of per-call, allowing better connection reuse + + - 🌟 added sdkName configuration parameter which allow completely override pnsdk in request query diff --git a/README.md b/README.md index a0cc8883e..63d7daa02 100644 --- a/README.md +++ b/README.md @@ -19,5 +19,5 @@ please use the [master_3x](https://github.com/pubnub/javascript/tree/master_3x) - If you **need help** or have a **general question**, contact ## CDN Links -* https://cdn.pubnub.com/sdk/javascript/pubnub.4.18.0.min.js -* https://cdn.pubnub.com/sdk/javascript/pubnub.4.18.0.js +* https://cdn.pubnub.com/sdk/javascript/pubnub.4.19.0.min.js +* https://cdn.pubnub.com/sdk/javascript/pubnub.4.19.0.js diff --git a/dist/titanium/pubnub.js b/dist/titanium/pubnub.js index d4e461ad0..7bdae07ca 100644 --- a/dist/titanium/pubnub.js +++ b/dist/titanium/pubnub.js @@ -1,4 +1,4 @@ -/*! 4.18.0 / Consumer */ +/*! 4.19.0 / Consumer */ (function webpackUniversalModuleDefinition(root, factory) { if(typeof exports === 'object' && typeof module === 'object') module.exports = factory(); @@ -573,7 +573,7 @@ return /******/ (function(modules) { // webpackBootstrap }, { key: 'getVersion', value: function getVersion() { - return '4.18.0'; + return '4.19.0'; } }, { key: '_decideUUID', @@ -1829,7 +1829,9 @@ return /******/ (function(modules) { // webpackBootstrap key: '_stopSubscribeLoop', value: function _stopSubscribeLoop() { if (this._subscribeCall) { - this._subscribeCall.abort(); + if (typeof this._subscribeCall.abort === 'function') { + this._subscribeCall.abort(); + } this._subscribeCall = null; } } @@ -2144,6 +2146,8 @@ return /******/ (function(modules) { // webpackBootstrap var _config2 = _interopRequireDefault(_config); + var _flow_interfaces = __webpack_require__(5); + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } diff --git a/dist/titanium/pubnub.min.js b/dist/titanium/pubnub.min.js index 95e6b90be..d05b9b942 100644 --- a/dist/titanium/pubnub.min.js +++ b/dist/titanium/pubnub.min.js @@ -1,3 +1,3 @@ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.PubNub=t():e.PubNub=t()}(this,function(){return function(e){function t(r){if(n[r])return n[r].exports;var i=n[r]={exports:{},id:r,loaded:!1};return e[r].call(i.exports,i,i.exports,t),i.loaded=!0,i.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var a=n(1),u=r(a),c=n(39),l=r(c),f=n(40),h=r(f),d=n(41),p=(n(5),function(e){function t(e){return i(this,t),e.db=new h.default,e.sdkFamily="TitaniumSDK",e.networking=new l.default({del:d.del,get:d.get,post:d.post}),o(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e))}return s(t,e),t}(u.default));t.default=p,e.exports=t.default},function(e,t,n){"use strict";function r(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}function i(e){return e&&e.__esModule?e:{default:e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var s=function(){function e(e,t){for(var n=0;n>>2]|=(n[i>>>2]>>>24-i%4*8&255)<<24-(r+i)%4*8;else if(65535>>2]=n[i>>>2];else t.push.apply(t,n);return this.sigBytes+=e,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=o.clone.call(this);return e.words=this.words.slice(0),e},random:function(t){for(var n=[],r=0;r>>2]>>>24-r%4*8&255;n.push((i>>>4).toString(16)),n.push((15&i).toString(16))}return n.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 s.init(n,t/2)}},c=a.Latin1={stringify:function(e){var t=e.words;e=e.sigBytes;for(var n=[],r=0;r>>2]>>>24-r%4*8&255));return n.join("")},parse:function(e){for(var t=e.length,n=[],r=0;r>>2]|=(255&e.charCodeAt(r))<<24-r%4*8;return new s.init(n,t)}},l=a.Utf8={stringify:function(e){try{return decodeURIComponent(escape(c.stringify(e)))}catch(e){throw Error("Malformed UTF-8 data")}},parse:function(e){return c.parse(unescape(encodeURIComponent(e)))}},f=r.BufferedBlockAlgorithm=o.extend({reset:function(){this._data=new s.init,this._nDataBytes=0},_append:function(e){"string"==typeof e&&(e=l.parse(e)),this._data.concat(e),this._nDataBytes+=e.sigBytes},_process:function(t){var n=this._data,r=n.words,i=n.sigBytes,o=this.blockSize,a=i/(4*o),a=t?e.ceil(a):e.max((0|a)-this._minBufferSize,0);if(t=a*o,i=e.min(4*t,i),t){for(var u=0;ul;){var f;e:{f=c;for(var h=e.sqrt(f),d=2;d<=h;d++)if(!(f%d)){f=!1;break e}f=!0}f&&(8>l&&(s[l]=u(e.pow(c,.5))),a[l]=u(e.pow(c,1/3)),l++),c++}var p=[],r=r.SHA256=o.extend({_doReset:function(){this._hash=new i.init(s.slice(0))},_doProcessBlock:function(e,t){for(var n=this._hash.words,r=n[0],i=n[1],o=n[2],s=n[3],u=n[4],c=n[5],l=n[6],f=n[7],h=0;64>h;h++){if(16>h)p[h]=0|e[t+h];else{var d=p[h-15],g=p[h-2];p[h]=((d<<25|d>>>7)^(d<<14|d>>>18)^d>>>3)+p[h-7]+((g<<15|g>>>17)^(g<<13|g>>>19)^g>>>10)+p[h-16]}d=f+((u<<26|u>>>6)^(u<<21|u>>>11)^(u<<7|u>>>25))+(u&c^~u&l)+a[h]+p[h],g=((r<<30|r>>>2)^(r<<19|r>>>13)^(r<<10|r>>>22))+(r&i^r&o^i&o),f=l,l=c,c=u,u=s+d|0,s=o,o=i,i=r,r=d+g|0}n[0]=n[0]+r|0,n[1]=n[1]+i|0,n[2]=n[2]+o|0,n[3]=n[3]+s|0,n[4]=n[4]+u|0,n[5]=n[5]+c|0,n[6]=n[6]+l|0,n[7]=n[7]+f|0},_doFinalize:function(){var t=this._data,n=t.words,r=8*this._nDataBytes,i=8*t.sigBytes;return n[i>>>5]|=128<<24-i%32,n[14+(i+64>>>9<<4)]=e.floor(r/4294967296),n[15+(i+64>>>9<<4)]=r,t.sigBytes=4*n.length,this._process(),this._hash},clone:function(){var e=o.clone.call(this);return e._hash=this._hash.clone(),e}});t.SHA256=o._createHelper(r),t.HmacSHA256=o._createHmacHelper(r)}(Math),function(){var e=n,t=e.enc.Utf8;e.algo.HMAC=e.lib.Base.extend({init:function(e,n){e=this._hasher=new e.init,"string"==typeof n&&(n=t.parse(n));var r=e.blockSize,i=4*r;n.sigBytes>i&&(n=e.finalize(n)),n.clamp();for(var o=this._oKey=n.clone(),s=this._iKey=n.clone(),a=o.words,u=s.words,c=0;c>>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;4>s&&i+.75*s>>6*(3-s)&63));if(t=r.charAt(64))for(;e.length%4;)e.push(t);return e.join("")},parse:function(e){var n=e.length,r=this._map,i=r.charAt(64);i&&-1!=(i=e.indexOf(i))&&(n=i);for(var i=[],o=0,s=0;s>>6-s%4*2;i[o>>>2]|=(a|u)<<24-o%4*8,o++}return t.create(i,o)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="}}(),function(e){function t(e,t,n,r,i,o,s){return((e=e+(t&n|~t&r)+i+s)<>>32-o)+t}function r(e,t,n,r,i,o,s){return((e=e+(t&r|n&~r)+i+s)<>>32-o)+t}function i(e,t,n,r,i,o,s){return((e=e+(t^n^r)+i+s)<>>32-o)+t}function o(e,t,n,r,i,o,s){return((e=e+(n^(t|~r))+i+s)<>>32-o)+t}for(var s=n,a=s.lib,u=a.WordArray,c=a.Hasher,a=s.algo,l=[],f=0;64>f;f++)l[f]=4294967296*e.abs(e.sin(f+1))|0;a=a.MD5=c.extend({_doReset:function(){this._hash=new u.init([1732584193,4023233417,2562383102,271733878])},_doProcessBlock:function(e,n){for(var s=0;16>s;s++){var a=n+s,u=e[a];e[a]=16711935&(u<<8|u>>>24)|4278255360&(u<<24|u>>>8)}var s=this._hash.words,a=e[n+0],u=e[n+1],c=e[n+2],f=e[n+3],h=e[n+4],d=e[n+5],p=e[n+6],g=e[n+7],y=e[n+8],b=e[n+9],v=e[n+10],_=e[n+11],m=e[n+12],k=e[n+13],P=e[n+14],S=e[n+15],O=s[0],M=s[1],T=s[2],C=s[3],O=t(O,M,T,C,a,7,l[0]),C=t(C,O,M,T,u,12,l[1]),T=t(T,C,O,M,c,17,l[2]),M=t(M,T,C,O,f,22,l[3]),O=t(O,M,T,C,h,7,l[4]),C=t(C,O,M,T,d,12,l[5]),T=t(T,C,O,M,p,17,l[6]),M=t(M,T,C,O,g,22,l[7]),O=t(O,M,T,C,y,7,l[8]),C=t(C,O,M,T,b,12,l[9]),T=t(T,C,O,M,v,17,l[10]),M=t(M,T,C,O,_,22,l[11]),O=t(O,M,T,C,m,7,l[12]),C=t(C,O,M,T,k,12,l[13]),T=t(T,C,O,M,P,17,l[14]),M=t(M,T,C,O,S,22,l[15]),O=r(O,M,T,C,u,5,l[16]),C=r(C,O,M,T,p,9,l[17]),T=r(T,C,O,M,_,14,l[18]),M=r(M,T,C,O,a,20,l[19]),O=r(O,M,T,C,d,5,l[20]),C=r(C,O,M,T,v,9,l[21]),T=r(T,C,O,M,S,14,l[22]),M=r(M,T,C,O,h,20,l[23]),O=r(O,M,T,C,b,5,l[24]),C=r(C,O,M,T,P,9,l[25]),T=r(T,C,O,M,f,14,l[26]),M=r(M,T,C,O,y,20,l[27]),O=r(O,M,T,C,k,5,l[28]),C=r(C,O,M,T,c,9,l[29]),T=r(T,C,O,M,g,14,l[30]),M=r(M,T,C,O,m,20,l[31]),O=i(O,M,T,C,d,4,l[32]),C=i(C,O,M,T,y,11,l[33]),T=i(T,C,O,M,_,16,l[34]),M=i(M,T,C,O,P,23,l[35]),O=i(O,M,T,C,u,4,l[36]),C=i(C,O,M,T,h,11,l[37]),T=i(T,C,O,M,g,16,l[38]),M=i(M,T,C,O,v,23,l[39]),O=i(O,M,T,C,k,4,l[40]),C=i(C,O,M,T,a,11,l[41]),T=i(T,C,O,M,f,16,l[42]),M=i(M,T,C,O,p,23,l[43]),O=i(O,M,T,C,b,4,l[44]),C=i(C,O,M,T,m,11,l[45]),T=i(T,C,O,M,S,16,l[46]),M=i(M,T,C,O,c,23,l[47]),O=o(O,M,T,C,a,6,l[48]),C=o(C,O,M,T,g,10,l[49]),T=o(T,C,O,M,P,15,l[50]),M=o(M,T,C,O,d,21,l[51]),O=o(O,M,T,C,m,6,l[52]),C=o(C,O,M,T,f,10,l[53]),T=o(T,C,O,M,v,15,l[54]),M=o(M,T,C,O,u,21,l[55]),O=o(O,M,T,C,y,6,l[56]),C=o(C,O,M,T,S,10,l[57]),T=o(T,C,O,M,p,15,l[58]),M=o(M,T,C,O,k,21,l[59]),O=o(O,M,T,C,h,6,l[60]),C=o(C,O,M,T,_,10,l[61]),T=o(T,C,O,M,c,15,l[62]),M=o(M,T,C,O,b,21,l[63]);s[0]=s[0]+O|0,s[1]=s[1]+M|0,s[2]=s[2]+T|0,s[3]=s[3]+C|0},_doFinalize:function(){var t=this._data,n=t.words,r=8*this._nDataBytes,i=8*t.sigBytes;n[i>>>5]|=128<<24-i%32;var o=e.floor(r/4294967296);for(n[15+(i+64>>>9<<4)]=16711935&(o<<8|o>>>24)|4278255360&(o<<24|o>>>8),n[14+(i+64>>>9<<4)]=16711935&(r<<8|r>>>24)|4278255360&(r<<24|r>>>8),t.sigBytes=4*(n.length+1),this._process(),t=this._hash,n=t.words,r=0;4>r;r++)i=n[r],n[r]=16711935&(i<<8|i>>>24)|4278255360&(i<<24|i>>>8);return t},clone:function(){var e=c.clone.call(this);return e._hash=this._hash.clone(),e}}),s.MD5=c._createHelper(a),s.HmacMD5=c._createHmacHelper(a)}(Math),function(){var e=n,t=e.lib,r=t.Base,i=t.WordArray,t=e.algo,o=t.EvpKDF=r.extend({cfg:r.extend({keySize:4,hasher:t.MD5,iterations:1}),init:function(e){this.cfg=this.cfg.extend(e)},compute:function(e,t){for(var n=this.cfg,r=n.hasher.create(),o=i.create(),s=o.words,a=n.keySize,n=n.iterations;s.length>>2]}},r.BlockCipher=c.extend({cfg:c.cfg.extend({mode:l,padding:h}),reset:function(){c.reset.call(this);var e=this.cfg,t=e.iv,e=e.mode;if(this._xformMode==this._ENC_XFORM_MODE)var n=e.createEncryptor;else n=e.createDecryptor,this._minBufferSize=1;this._mode=n.call(e,this,t&&t.words)},_doProcessBlock:function(e,t){this._mode.processBlock(e,t)},_doFinalize:function(){var e=this.cfg.padding;if(this._xformMode==this._ENC_XFORM_MODE){e.pad(this._data,this.blockSize);var t=this._process(!0)}else t=this._process(!0),e.unpad(t);return t},blockSize:4});var d=r.CipherParams=i.extend({init:function(e){this.mixIn(e)},toString:function(e){return(e||this.formatter).stringify(this)}}),l=(t.format={}).OpenSSL={stringify:function(e){var t=e.ciphertext;return e=e.salt,(e?o.create([1398893684,1701076831]).concat(e).concat(t):t).toString(a)},parse:function(e){e=a.parse(e);var t=e.words;if(1398893684==t[0]&&1701076831==t[1]){var n=o.create(t.slice(2,4));t.splice(0,4),e.sigBytes-=16}return d.create({ciphertext:e,salt:n})}},p=r.SerializableCipher=i.extend({cfg:i.extend({format:l}),encrypt:function(e,t,n,r){r=this.cfg.extend(r);var i=e.createEncryptor(n,r);return t=i.finalize(t),i=i.cfg,d.create({ciphertext:t,key:n,iv:i.iv,algorithm:e,mode:i.mode,padding:i.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}}),t=(t.kdf={}).OpenSSL={execute:function(e,t,n,r){return r||(r=o.random(8)),e=u.create({keySize:t+n}).compute(e,r),n=o.create(e.words.slice(t),4*n),e.sigBytes=4*t,d.create({key:e,iv:n,salt:r})}},g=r.PasswordBasedCipher=p.extend({cfg:p.cfg.extend({kdf:t}),encrypt:function(e,t,n,r){return r=this.cfg.extend(r),n=r.kdf.execute(n,e.keySize,e.ivSize),r.iv=n.iv,e=p.encrypt.call(this,e,t,n.key,r),e.mixIn(n),e},decrypt:function(e,t,n,r){return r=this.cfg.extend(r),t=this._parse(t,r.format),n=r.kdf.execute(n,e.keySize,e.ivSize,t.salt),r.iv=n.iv,p.decrypt.call(this,e,t,n.key,r)}})}(),function(){for(var e=n,t=e.lib.BlockCipher,r=e.algo,i=[],o=[],s=[],a=[],u=[],c=[],l=[],f=[],h=[],d=[],p=[],g=0;256>g;g++)p[g]=128>g?g<<1:g<<1^283;for(var y=0,b=0,g=0;256>g;g++){var v=b^b<<1^b<<2^b<<3^b<<4,v=v>>>8^255&v^99;i[y]=v,o[v]=y;var _=p[y],m=p[_],k=p[m],P=257*p[v]^16843008*v;s[y]=P<<24|P>>>8,a[y]=P<<16|P>>>16,u[y]=P<<8|P>>>24,c[y]=P,P=16843009*k^65537*m^257*_^16843008*y,l[v]=P<<24|P>>>8,f[v]=P<<16|P>>>16,h[v]=P<<8|P>>>24,d[v]=P,y?(y=_^p[p[p[k^_]]],b^=p[p[b]]):y=b=1}var S=[0,1,2,4,8,16,32,64,128,27,54],r=r.AES=t.extend({_doReset:function(){for(var e=this._key,t=e.words,n=e.sigBytes/4,e=4*((this._nRounds=n+6)+1),r=this._keySchedule=[],o=0;o>>24]<<24|i[s>>>16&255]<<16|i[s>>>8&255]<<8|i[255&s]):(s=s<<8|s>>>24,s=i[s>>>24]<<24|i[s>>>16&255]<<16|i[s>>>8&255]<<8|i[255&s],s^=S[o/n|0]<<24),r[o]=r[o-n]^s}for(t=this._invKeySchedule=[],n=0;nn||4>=o?s:l[i[s>>>24]]^f[i[s>>>16&255]]^h[i[s>>>8&255]]^d[i[255&s]]},encryptBlock:function(e,t){this._doCryptBlock(e,t,this._keySchedule,s,a,u,c,i)},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,h,d,o),n=e[t+1],e[t+1]=e[t+3],e[t+3]=n},_doCryptBlock:function(e,t,n,r,i,o,s,a){for(var u=this._nRounds,c=e[t]^n[0],l=e[t+1]^n[1],f=e[t+2]^n[2],h=e[t+3]^n[3],d=4,p=1;p>>24]^i[l>>>16&255]^o[f>>>8&255]^s[255&h]^n[d++],y=r[l>>>24]^i[f>>>16&255]^o[h>>>8&255]^s[255&c]^n[d++],b=r[f>>>24]^i[h>>>16&255]^o[c>>>8&255]^s[255&l]^n[d++],h=r[h>>>24]^i[c>>>16&255]^o[l>>>8&255]^s[255&f]^n[d++],c=g,l=y,f=b;g=(a[c>>>24]<<24|a[l>>>16&255]<<16|a[f>>>8&255]<<8|a[255&h])^n[d++],y=(a[l>>>24]<<24|a[f>>>16&255]<<16|a[h>>>8&255]<<8|a[255&c])^n[d++],b=(a[f>>>24]<<24|a[h>>>16&255]<<16|a[c>>>8&255]<<8|a[255&l])^n[d++],h=(a[h>>>24]<<24|a[c>>>16&255]<<16|a[l>>>8&255]<<8|a[255&f])^n[d++],e[t]=g,e[t+1]=y,e[t+2]=b,e[t+3]=h},keySize:8});e.AES=t._createHelper(r)}(),n.mode.ECB=function(){var e=n.lib.BlockCipherMode.extend();return e.Encryptor=e.extend({processBlock:function(e,t){this._cipher.encryptBlock(e,t)}}),e.Decryptor=e.extend({processBlock:function(e,t){this._cipher.decryptBlock(e,t)}}),e}(),e.exports=n},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e,t){for(var n=0;n=s){var u={};u.category=y.default.PNRequestMessageCountExceededCategory,u.operation=e.operation,this._listenerManager.announceStatus(u)}i.forEach(function(e){var t=e.channel,r=e.subscriptionMatch,i=e.publishMetaData;if(t===r&&(r=null),a){if(n._dedupingManager.isDuplicate(e))return;n._dedupingManager.addEntry(e)}if(p.default.endsWith(e.channel,"-pnpres")){var o={};o.channel=null,o.subscription=null,o.actualChannel=null!=r?t:null,o.subscribedChannel=null!=r?r:t,t&&(o.channel=t.substring(0,t.lastIndexOf("-pnpres"))),r&&(o.subscription=r.substring(0,r.lastIndexOf("-pnpres"))),o.action=e.payload.action,o.state=e.payload.data,o.timetoken=i.publishTimetoken,o.occupancy=e.payload.occupancy,o.uuid=e.payload.uuid,o.timestamp=e.payload.timestamp,e.payload.join&&(o.join=e.payload.join),e.payload.leave&&(o.leave=e.payload.leave),e.payload.timeout&&(o.timeout=e.payload.timeout),n._listenerManager.announcePresence(o)}else{var s={};s.channel=null,s.subscription=null,s.actualChannel=null!=r?t:null,s.subscribedChannel=null!=r?r:t,s.channel=t,s.subscription=r,s.timetoken=i.publishTimetoken,s.publisher=e.issuingClientId,e.userMetadata&&(s.userMetadata=e.userMetadata),n._config.cipherKey?s.message=n._crypto.decrypt(e.payload):s.message=e.payload,n._listenerManager.announceMessage(s)}}),this._region=t.metadata.region,this._startSubscribeLoop()}},{key:"_stopSubscribeLoop",value:function(){this._subscribeCall&&(this._subscribeCall.abort(),this._subscribeCall=null)}}]),e}();t.default=b,e.exports=t.default},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n=this._config.maximumCacheSize&&this.hashHistory.shift(),this.hashHistory.push(this.getKey(e))}},{key:"clearHistory",value:function(){this.hashHistory=[]}}]),e}();t.default=a,e.exports=t.default},function(e,t){"use strict";function n(e){var t=[];return Object.keys(e).forEach(function(e){return t.push(e)}),t}function r(e){return encodeURIComponent(e).replace(/[!~*'()]/g,function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()})}function i(e){return n(e).sort()}function o(e){return i(e).map(function(t){return t+"="+r(e[t])}).join("&")}function s(e,t){return-1!==e.indexOf(t,this.length-t.length)}function a(){var e=void 0,t=void 0;return{promise:new Promise(function(n,r){e=n,t=r}),reject:t,fulfill:e}}e.exports={signPamFromParams:o,endsWith:s,createPromise:a,encodeString:r}},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function a(e,t){return e.type=t,e.error=!0,e}function u(e){return a({message:e},"validationError")}function c(e,t,n){return e.usePost&&e.usePost(t,n)?e.postURL(t,n):e.getURL(t,n)}function l(e){if(e.sdkName)return e.sdkName;var t="PubNub-JS-"+e.sdkFamily;return e.partnerId&&(t+="-"+e.partnerId),t+="/"+e.getVersion()}function f(e,t,n){var r=e.config,i=e.crypto;n.timestamp=Math.floor((new Date).getTime()/1e3);var o=r.subscribeKey+"\n"+r.publishKey+"\n"+t+"\n";o+=g.default.signPamFromParams(n);var s=i.HMACSHA256(o);s=s.replace(/\+/g,"-"),s=s.replace(/\//g,"_"),n.signature=s}Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){var n=e.networking,r=e.config,i=null,o=null,s={};t.getOperation()===v.default.PNTimeOperation||t.getOperation()===v.default.PNChannelGroupsOperation?i=arguments.length<=2?void 0:arguments[2]:(s=arguments.length<=2?void 0:arguments[2],i=arguments.length<=3?void 0:arguments[3]),"undefined"==typeof Promise||i||(o=g.default.createPromise());var a=t.validateParams(e,s);if(!a){var h=t.prepareParams(e,s),p=c(t,e,s),y=void 0,b={url:p,operation:t.getOperation(),timeout:t.getRequestTimeout(e)};h.uuid=r.UUID,h.pnsdk=l(r),r.useInstanceId&&(h.instanceid=r.instanceId),r.useRequestId&&(h.requestid=d.default.createUUID()),t.isAuthSupported()&&r.getAuthKey()&&(h.auth=r.getAuthKey()),r.secretKey&&f(e,p,h);var m=function(n,r){if(n.error)return void(i?i(n):o&&o.reject(new _("PubNub call failed, check status for details",n)));var a=t.handleResponse(e,r,s);i?i(n,a):o&&o.fulfill(a)};if(t.usePost&&t.usePost(e,s)){var k=t.postPayload(e,s);y=n.POST(h,k,b,m)}else y=t.useDelete&&t.useDelete()?n.DELETE(h,b,m):n.GET(h,b,m);return t.getOperation()===v.default.PNSubscribeOperation?y:o?o.promise:void 0}return i?i(u(a)):o?(o.reject(new _("Validation failed, check status for details",u(a))),o.promise):void 0};var h=n(3),d=r(h),p=(n(5),n(15)),g=r(p),y=n(2),b=(r(y),n(13)),v=r(b),_=function(e){function t(e,n){i(this,t);var r=o(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return r.name=r.constructor.name,r.status=n,r.message=e,r}return s(t,e),t}(Error);e.exports=t.default},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return h.default.PNAddChannelsToGroupOperation}function o(e,t){var n=t.channels,r=t.channelGroup,i=e.config;return r?n&&0!==n.length?i.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channels":"Missing Channel Group"}function s(e,t){var n=t.channelGroup;return"/v1/channel-registration/sub-key/"+e.config.subscribeKey+"/channel-group/"+p.default.encodeString(n)}function a(e){return e.config.getTransactionTimeout()}function u(){return!0}function c(e,t){var n=t.channels;return{add:(void 0===n?[]:n).join(",")}}function l(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=o,t.getURL=s,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var f=(n(5),n(13)),h=r(f),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return h.default.PNRemoveChannelsFromGroupOperation}function o(e,t){var n=t.channels,r=t.channelGroup,i=e.config;return r?n&&0!==n.length?i.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channels":"Missing Channel Group"}function s(e,t){var n=t.channelGroup;return"/v1/channel-registration/sub-key/"+e.config.subscribeKey+"/channel-group/"+p.default.encodeString(n)}function a(e){return e.config.getTransactionTimeout()}function u(){return!0}function c(e,t){var n=t.channels;return{remove:(void 0===n?[]:n).join(",")}}function l(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=o,t.getURL=s,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var f=(n(5),n(13)),h=r(f),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return h.default.PNRemoveGroupOperation}function o(e,t){var n=t.channelGroup,r=e.config;return n?r.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channel Group"}function s(e,t){var n=t.channelGroup;return"/v1/channel-registration/sub-key/"+e.config.subscribeKey+"/channel-group/"+p.default.encodeString(n)+"/remove"}function a(){return!0}function u(e){return e.config.getTransactionTimeout()}function c(){return{}}function l(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=o,t.getURL=s,t.isAuthSupported=a,t.getRequestTimeout=u,t.prepareParams=c,t.handleResponse=l;var f=(n(5),n(13)),h=r(f),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(){return f.default.PNChannelGroupsOperation}function i(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function o(e){return"/v1/channel-registration/sub-key/"+e.config.subscribeKey+"/channel-group"}function s(e){return e.config.getTransactionTimeout()}function a(){return!0}function u(){return{}}function c(e,t){return{groups:t.payload.groups}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=o,t.getRequestTimeout=s,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),f=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return h.default.PNChannelsForGroupOperation}function o(e,t){var n=t.channelGroup,r=e.config;return n?r.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channel Group"}function s(e,t){var n=t.channelGroup;return"/v1/channel-registration/sub-key/"+e.config.subscribeKey+"/channel-group/"+p.default.encodeString(n)}function a(e){return e.config.getTransactionTimeout()}function u(){return!0}function c(){return{}}function l(e,t){return{channels:t.payload.channels}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=o,t.getURL=s,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var f=(n(5),n(13)),h=r(f),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(){return f.default.PNPushNotificationEnabledChannelsOperation}function i(e,t){var n=t.device,r=t.pushGateway,i=t.channels,o=e.config;return n?r?i&&0!==i.length?o.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channels":"Missing GW Type (pushGateway: gcm or apns)":"Missing Device ID (device)"}function o(e,t){var n=t.device;return"/v1/push/sub-key/"+e.config.subscribeKey+"/devices/"+n}function s(e){return e.config.getTransactionTimeout()}function a(){return!0}function u(e,t){var n=t.pushGateway,r=t.channels;return{type:n,add:(void 0===r?[]:r).join(",")}}function c(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=o,t.getRequestTimeout=s,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),f=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(){return f.default.PNPushNotificationEnabledChannelsOperation}function i(e,t){var n=t.device,r=t.pushGateway,i=t.channels,o=e.config;return n?r?i&&0!==i.length?o.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channels":"Missing GW Type (pushGateway: gcm or apns)":"Missing Device ID (device)"}function o(e,t){var n=t.device;return"/v1/push/sub-key/"+e.config.subscribeKey+"/devices/"+n}function s(e){return e.config.getTransactionTimeout()}function a(){return!0}function u(e,t){var n=t.pushGateway,r=t.channels;return{type:n,remove:(void 0===r?[]:r).join(",")}}function c(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=o,t.getRequestTimeout=s,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),f=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(){return f.default.PNPushNotificationEnabledChannelsOperation}function i(e,t){var n=t.device,r=t.pushGateway,i=e.config;return n?r?i.subscribeKey?void 0:"Missing Subscribe Key":"Missing GW Type (pushGateway: gcm or apns)":"Missing Device ID (device)"}function o(e,t){var n=t.device;return"/v1/push/sub-key/"+e.config.subscribeKey+"/devices/"+n}function s(e){return e.config.getTransactionTimeout()}function a(){return!0}function u(e,t){return{type:t.pushGateway}}function c(e,t){return{channels:t}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=o,t.getRequestTimeout=s,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),f=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(){return f.default.PNRemoveAllPushNotificationsOperation}function i(e,t){var n=t.device,r=t.pushGateway,i=e.config;return n?r?i.subscribeKey?void 0:"Missing Subscribe Key":"Missing GW Type (pushGateway: gcm or apns)":"Missing Device ID (device)"}function o(e,t){var n=t.device;return"/v1/push/sub-key/"+e.config.subscribeKey+"/devices/"+n+"/remove"}function s(e){return e.config.getTransactionTimeout()}function a(){return!0}function u(e,t){return{type:t.pushGateway}}function c(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=o,t.getRequestTimeout=s,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),f=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return h.default.PNUnsubscribeOperation}function o(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function s(e,t){var n=e.config,r=t.channels,i=void 0===r?[]:r,o=i.length>0?i.join(","):",";return"/v2/presence/sub-key/"+n.subscribeKey+"/channel/"+p.default.encodeString(o)+"/leave"}function a(e){return e.config.getTransactionTimeout()}function u(){return!0}function c(e,t){var n=t.channelGroups,r=void 0===n?[]:n,i={};return r.length>0&&(i["channel-group"]=r.join(",")),i}function l(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=o,t.getURL=s,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var f=(n(5),n(13)),h=r(f),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(){return f.default.PNWhereNowOperation}function i(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function o(e,t){var n=e.config,r=t.uuid,i=void 0===r?n.UUID:r;return"/v2/presence/sub-key/"+n.subscribeKey+"/uuid/"+i}function s(e){return e.config.getTransactionTimeout()}function a(){return!0}function u(){return{}}function c(e,t){return t.payload?{channels:t.payload.channels}:{channels:[]}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=o,t.getRequestTimeout=s,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),f=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return h.default.PNHeartbeatOperation}function o(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function s(e,t){var n=e.config,r=t.channels,i=void 0===r?[]:r,o=i.length>0?i.join(","):",";return"/v2/presence/sub-key/"+n.subscribeKey+"/channel/"+p.default.encodeString(o)+"/heartbeat"}function a(){return!0}function u(e){return e.config.getTransactionTimeout()}function c(e,t){var n=t.channelGroups,r=void 0===n?[]:n,i=t.state,o=void 0===i?{}:i,s=e.config,a={};return r.length>0&&(a["channel-group"]=r.join(",")),a.state=JSON.stringify(o),a.heartbeat=s.getPresenceTimeout(),a}function l(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=o,t.getURL=s,t.isAuthSupported=a,t.getRequestTimeout=u,t.prepareParams=c,t.handleResponse=l;var f=(n(5),n(13)),h=r(f),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return h.default.PNGetStateOperation}function o(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function s(e,t){var n=e.config,r=t.uuid,i=void 0===r?n.UUID:r,o=t.channels,s=void 0===o?[]:o,a=s.length>0?s.join(","):",";return"/v2/presence/sub-key/"+n.subscribeKey+"/channel/"+p.default.encodeString(a)+"/uuid/"+i}function a(e){return e.config.getTransactionTimeout()}function u(){return!0}function c(e,t){var n=t.channelGroups,r=void 0===n?[]:n,i={};return r.length>0&&(i["channel-group"]=r.join(",")),i}function l(e,t,n){var r=n.channels,i=void 0===r?[]:r,o=n.channelGroups,s=void 0===o?[]:o,a={};return 1===i.length&&0===s.length?a[i[0]]=t.payload:a=t.payload,{channels:a}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=o,t.getURL=s,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var f=(n(5),n(13)),h=r(f),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return h.default.PNSetStateOperation}function o(e,t){var n=e.config,r=t.state,i=t.channels,o=void 0===i?[]:i,s=t.channelGroups,a=void 0===s?[]:s;return r?n.subscribeKey?0===o.length&&0===a.length?"Please provide a list of channels and/or channel-groups":void 0:"Missing Subscribe Key":"Missing State"}function s(e,t){var n=e.config,r=t.channels,i=void 0===r?[]:r,o=i.length>0?i.join(","):",";return"/v2/presence/sub-key/"+n.subscribeKey+"/channel/"+p.default.encodeString(o)+"/uuid/"+n.UUID+"/data"}function a(e){return e.config.getTransactionTimeout()}function u(){return!0}function c(e,t){var n=t.state,r=t.channelGroups,i=void 0===r?[]:r,o={};return o.state=JSON.stringify(n),i.length>0&&(o["channel-group"]=i.join(",")),o}function l(e,t){return{state:t.payload}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=o,t.getURL=s,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var f=(n(5),n(13)),h=r(f),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return h.default.PNHereNowOperation}function o(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function s(e,t){var n=e.config,r=t.channels,i=void 0===r?[]:r,o=t.channelGroups,s=void 0===o?[]:o,a="/v2/presence/sub-key/"+n.subscribeKey;if(i.length>0||s.length>0){var u=i.length>0?i.join(","):",";a+="/channel/"+p.default.encodeString(u)}return a}function a(e){return e.config.getTransactionTimeout()}function u(){return!0}function c(e,t){var n=t.channelGroups,r=void 0===n?[]:n,i=t.includeUUIDs,o=void 0===i||i,s=t.includeState,a=void 0!==s&&s,u={};return o||(u.disable_uuids=1),a&&(u.state=1),r.length>0&&(u["channel-group"]=r.join(",")),u}function l(e,t,n){var r=n.channels,i=void 0===r?[]:r,o=n.channelGroups,s=void 0===o?[]:o,a=n.includeUUIDs,u=void 0===a||a,c=n.includeState,l=void 0!==c&&c;return i.length>1||s.length>0||0===s.length&&0===i.length?function(){var e={};return e.totalChannels=t.payload.total_channels,e.totalOccupancy=t.payload.total_occupancy,e.channels={},Object.keys(t.payload.channels).forEach(function(n){var r=t.payload.channels[n],i=[];return e.channels[n]={occupants:i,name:n,occupancy:r.occupancy},u&&r.uuids.forEach(function(e){l?i.push({state:e.state,uuid:e.uuid}):i.push({state:null,uuid:e})}),e}),e}():function(){var e={},n=[];return e.totalChannels=1,e.totalOccupancy=t.occupancy,e.channels={},e.channels[i[0]]={occupants:n,name:i[0],occupancy:t.occupancy},u&&t.uuids&&t.uuids.forEach(function(e){l?n.push({state:e.state,uuid:e.uuid}):n.push({state:null,uuid:e})}),e}()}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=o,t.getURL=s,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var f=(n(5),n(13)),h=r(f),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(){return f.default.PNAccessManagerAudit}function i(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function o(e){return"/v2/auth/audit/sub-key/"+e.config.subscribeKey}function s(e){return e.config.getTransactionTimeout()}function a(){return!1}function u(e,t){var n=t.channel,r=t.channelGroup,i=t.authKeys,o=void 0===i?[]:i,s={};return n&&(s.channel=n),r&&(s["channel-group"]=r),o.length>0&&(s.auth=o.join(",")),s}function c(e,t){return t.payload}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=o,t.getRequestTimeout=s,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),f=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(){return f.default.PNAccessManagerGrant}function i(e){var t=e.config;return t.subscribeKey?t.publishKey?t.secretKey?void 0:"Missing Secret Key":"Missing Publish Key":"Missing Subscribe Key"}function o(e){return"/v2/auth/grant/sub-key/"+e.config.subscribeKey}function s(e){return e.config.getTransactionTimeout()}function a(){return!1}function u(e,t){var n=t.channels,r=void 0===n?[]:n,i=t.channelGroups,o=void 0===i?[]:i,s=t.ttl,a=t.read,u=void 0!==a&&a,c=t.write,l=void 0!==c&&c,f=t.manage,h=void 0!==f&&f,d=t.authKeys,p=void 0===d?[]:d,g={};return g.r=u?"1":"0",g.w=l?"1":"0",g.m=h?"1":"0",r.length>0&&(g.channel=r.join(",")),o.length>0&&(g["channel-group"]=o.join(",")),p.length>0&&(g.auth=p.join(",")),(s||0===s)&&(g.ttl=s),g}function c(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=o,t.getRequestTimeout=s,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),f=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){var n=e.crypto,r=e.config,i=JSON.stringify(t);return r.cipherKey&&(i=n.encrypt(i),i=JSON.stringify(i)),i}function o(){return b.default.PNPublishOperation}function s(e,t){var n=e.config,r=t.message;return t.channel?r?n.subscribeKey?void 0:"Missing Subscribe Key":"Missing Message":"Missing Channel"}function a(e,t){var n=t.sendByPost;return void 0!==n&&n}function u(e,t){var n=e.config,r=t.channel,o=t.message,s=i(e,o);return"/publish/"+n.publishKey+"/"+n.subscribeKey+"/0/"+_.default.encodeString(r)+"/0/"+_.default.encodeString(s)}function c(e,t){var n=e.config,r=t.channel;return"/publish/"+n.publishKey+"/"+n.subscribeKey+"/0/"+_.default.encodeString(r)+"/0"}function l(e){return e.config.getTransactionTimeout()}function f(){return!0}function h(e,t){return i(e,t.message)}function d(e,t){var n=t.meta,r=t.replicate,i=void 0===r||r,o=t.storeInHistory,s=t.ttl,a={};return null!=o&&(a.store=o?"1":"0"),s&&(a.ttl=s),!1===i&&(a.norep="true"),n&&"object"===(void 0===n?"undefined":g(n))&&(a.meta=JSON.stringify(n)),a}function p(e,t){return{timetoken:t[2]}}Object.defineProperty(t,"__esModule",{value:!0});var g="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};t.getOperation=o,t.validateParams=s,t.usePost=a,t.getURL=u,t.postURL=c,t.getRequestTimeout=l,t.isAuthSupported=f,t.postPayload=h, -t.prepareParams=d,t.handleResponse=p;var y=(n(5),n(13)),b=r(y),v=n(15),_=r(v)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){var n=e.config,r=e.crypto;if(!n.cipherKey)return t;try{return r.decrypt(t)}catch(e){return t}}function o(){return d.default.PNHistoryOperation}function s(e,t){var n=t.channel,r=e.config;return n?r.subscribeKey?void 0:"Missing Subscribe Key":"Missing channel"}function a(e,t){var n=t.channel;return"/v2/history/sub-key/"+e.config.subscribeKey+"/channel/"+g.default.encodeString(n)}function u(e){return e.config.getTransactionTimeout()}function c(){return!0}function l(e,t){var n=t.start,r=t.end,i=t.reverse,o=t.count,s=void 0===o?100:o,a=t.stringifiedTimeToken,u=void 0!==a&&a,c={include_token:"true"};return c.count=s,n&&(c.start=n),r&&(c.end=r),u&&(c.string_message_token="true"),null!=i&&(c.reverse=i.toString()),c}function f(e,t){var n={messages:[],startTimeToken:t[1],endTimeToken:t[2]};return t[0].forEach(function(t){var r={timetoken:t.timetoken,entry:i(e,t.message)};n.messages.push(r)}),n}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=o,t.validateParams=s,t.getURL=a,t.getRequestTimeout=u,t.isAuthSupported=c,t.prepareParams=l,t.handleResponse=f;var h=(n(5),n(13)),d=r(h),p=n(15),g=r(p)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return d.default.PNDeleteMessagesOperation}function o(e,t){var n=t.channel,r=e.config;return n?r.subscribeKey?void 0:"Missing Subscribe Key":"Missing channel"}function s(){return!0}function a(e,t){var n=t.channel,r=t.start,i=t.end,o=e.config,s="";return r&&(s="?start="+r),i&&(s+=(""!==s?"&":"?")+"end="+i),"/v3/history/sub-key/"+o.subscribeKey+"/channel/"+g.default.encodeString(n)+s}function u(e){return e.config.getTransactionTimeout()}function c(){return!0}function l(e,t){var n=t.start,r=t.end,i={};return n&&(i.start=n),r&&(i.end=r),{}}function f(e,t){return t.payload}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=o,t.useDelete=s,t.getURL=a,t.getRequestTimeout=u,t.isAuthSupported=c,t.prepareParams=l,t.handleResponse=f;var h=(n(5),n(13)),d=r(h),p=n(15),g=r(p)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){var n=e.config,r=e.crypto;if(!n.cipherKey)return t;try{return r.decrypt(t)}catch(e){return t}}function o(){return d.default.PNFetchMessagesOperation}function s(e,t){var n=t.channels,r=e.config;return n&&0!==n.length?r.subscribeKey?void 0:"Missing Subscribe Key":"Missing channels"}function a(e,t){var n=t.channels,r=void 0===n?[]:n,i=e.config,o=r.length>0?r.join(","):",";return"/v3/history/sub-key/"+i.subscribeKey+"/channel/"+g.default.encodeString(o)}function u(e){return e.config.getTransactionTimeout()}function c(){return!0}function l(e,t){var n=t.start,r=t.end,i=t.count,o={};return i&&(o.max=i),n&&(o.start=n),r&&(o.end=r),o}function f(e,t){var n={channels:{}};return Object.keys(t.channels||{}).forEach(function(r){n.channels[r]=[],(t.channels[r]||[]).forEach(function(t){var o={};o.channel=r,o.subscription=null,o.timetoken=t.timetoken,o.message=i(e,t.message),n.channels[r].push(o)})}),n}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=o,t.validateParams=s,t.getURL=a,t.getRequestTimeout=u,t.isAuthSupported=c,t.prepareParams=l,t.handleResponse=f;var h=(n(5),n(13)),d=r(h),p=n(15),g=r(p)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return h.default.PNSubscribeOperation}function o(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function s(e,t){var n=e.config,r=t.channels,i=void 0===r?[]:r,o=i.length>0?i.join(","):",";return"/v2/subscribe/"+n.subscribeKey+"/"+p.default.encodeString(o)+"/0"}function a(e){return e.config.getSubscribeTimeout()}function u(){return!0}function c(e,t){var n=e.config,r=t.channelGroups,i=void 0===r?[]:r,o=t.timetoken,s=t.filterExpression,a=t.region,u={heartbeat:n.getPresenceTimeout()};return i.length>0&&(u["channel-group"]=i.join(",")),s&&s.length>0&&(u["filter-expr"]=s),o&&(u.tt=o),a&&(u.tr=a),u}function l(e,t){var n=[];t.m.forEach(function(e){var t={publishTimetoken:e.p.t,region:e.p.r},r={shard:parseInt(e.a,10),subscriptionMatch:e.b,channel:e.c,payload:e.d,flags:e.f,issuingClientId:e.i,subscribeKey:e.k,originationTimetoken:e.o,userMetadata:e.u,publishMetaData:t};n.push(r)});var r={timetoken:t.t.t,region:t.t.r};return{messages:n,metadata:r}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=o,t.getURL=s,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var f=(n(5),n(13)),h=r(f),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e,t){for(var n=0;n=this._maxSubDomain&&(this._currentSubDomain=1),e=this._currentSubDomain.toString(),this._providedFQDN.replace("pubsub","ps"+e)}},{key:"shiftStandardOrigin",value:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return this._standardOrigin=this.nextOrigin(e),this._standardOrigin}},{key:"getStandardOrigin",value:function(){return this._standardOrigin}},{key:"POST",value:function(e,t,n,r){return this._modules.post(e,t,n,r)}},{key:"GET",value:function(e,t,n){return this._modules.get(e,t,n)}},{key:"DELETE",value:function(e,t,n){return this._modules.del(e,t,n)}},{key:"_detectErrorCategory",value:function(e){if("ENOTFOUND"===e.code)return u.default.PNNetworkIssuesCategory;if("ECONNREFUSED"===e.code)return u.default.PNNetworkIssuesCategory;if("ECONNRESET"===e.code)return u.default.PNNetworkIssuesCategory;if("EAI_AGAIN"===e.code)return u.default.PNNetworkIssuesCategory;if(0===e.status||e.hasOwnProperty("status")&&void 0===e.status)return u.default.PNNetworkIssuesCategory;if(e.timeout)return u.default.PNTimeoutCategory;if(e.response){if(e.response.badRequest)return u.default.PNBadRequestCategory;if(e.response.forbidden)return u.default.PNAccessDeniedCategory}return u.default.PNUnknownCategory}}]),e}());t.default=c,e.exports=t.default},function(e,t){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var r=function(){function e(e,t){for(var n=0;n>>>>>"),o.log("["+u+" / "+a+"]","\n",e,"\n",t,"\n",n),o.log("-----")}function i(){return"mobileweb"===Ti.Platform.osname?new XMLHttpRequest:Ti.Network.createHTTPClient()}function o(e){"mobileweb"!==Ti.Platform.osname&&this._config.keepAlive&&(e.enableKeepAlive=!0)}function s(e,t,n,i,s,a,u){var c=this,f={};f.operation=a.operation,e.open(t,(0,l.buildUrl)(n,i),!0),o.call(this,e),e.onload=function(){f.error=!1,e.status&&(f.statusCode=e.status);var t=JSON.parse(e.responseText);return c._config.logVerbosity&&r(n,i,e.responseText),u(f,t)},e.onerror=function(e){return f.error=!0,f.errorData=e.error,f.category=c._detectErrorCategory(e.error),u(f,null)},e.timeout="android"===Ti.Platform.osname?2147483647:1/0,e.send(s)}function a(e,t,n){var r=i(),o=this.getStandardOrigin()+t.url;return s.call(this,r,"GET",o,e,{},t,n)}function u(e,t,n,r){var o=i(),a=this.getStandardOrigin()+n.url;return s.call(this,o,"POST",a,e,JSON.parse(t),n,r)}function c(e,t,n){var r=i(),o=this.getStandardOrigin()+t.url;return s.call(this,r,"DELETE",o,e,{},t,n)}Object.defineProperty(t,"__esModule",{value:!0}),t.get=a,t.post=u,t.del=c;var l=(n(5),n(42))},function(e,t){"use strict";function n(e,t,r){null!=r?Array.isArray(r)?r.forEach(function(r){n(e,t,r)}):"object"===(void 0===r?"undefined":i(r))?Object.keys(r).forEach(function(i){n(e,t+"["+i+"]",r[i])}):e.push(encodeURIComponent(t)+"="+encodeURIComponent(r)):null===r&&e.push(encodeURIComponent(""+encodeURIComponent(t)))}function r(e,t){var r=[];return Object.keys(t).forEach(function(e){n(r,e,t[e])}),e+"?"+r.join("&")}Object.defineProperty(t,"__esModule",{value:!0});var i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};t.encodedKeyValuePair=n,t.buildUrl=r}])}); \ No newline at end of file +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.PubNub=t():e.PubNub=t()}(this,function(){return function(e){function t(r){if(n[r])return n[r].exports;var i=n[r]={exports:{},id:r,loaded:!1};return e[r].call(i.exports,i,i.exports,t),i.loaded=!0,i.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var a=n(1),u=r(a),c=n(39),l=r(c),f=n(40),h=r(f),d=n(41),p=(n(5),function(e){function t(e){return i(this,t),e.db=new h.default,e.sdkFamily="TitaniumSDK",e.networking=new l.default({del:d.del,get:d.get,post:d.post}),o(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e))}return s(t,e),t}(u.default));t.default=p,e.exports=t.default},function(e,t,n){"use strict";function r(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}function i(e){return e&&e.__esModule?e:{default:e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var s=function(){function e(e,t){for(var n=0;n>>2]|=(n[i>>>2]>>>24-i%4*8&255)<<24-(r+i)%4*8;else if(65535>>2]=n[i>>>2];else t.push.apply(t,n);return this.sigBytes+=e,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=o.clone.call(this);return e.words=this.words.slice(0),e},random:function(t){for(var n=[],r=0;r>>2]>>>24-r%4*8&255;n.push((i>>>4).toString(16)),n.push((15&i).toString(16))}return n.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 s.init(n,t/2)}},c=a.Latin1={stringify:function(e){var t=e.words;e=e.sigBytes;for(var n=[],r=0;r>>2]>>>24-r%4*8&255));return n.join("")},parse:function(e){for(var t=e.length,n=[],r=0;r>>2]|=(255&e.charCodeAt(r))<<24-r%4*8;return new s.init(n,t)}},l=a.Utf8={stringify:function(e){try{return decodeURIComponent(escape(c.stringify(e)))}catch(e){throw Error("Malformed UTF-8 data")}},parse:function(e){return c.parse(unescape(encodeURIComponent(e)))}},f=r.BufferedBlockAlgorithm=o.extend({reset:function(){this._data=new s.init,this._nDataBytes=0},_append:function(e){"string"==typeof e&&(e=l.parse(e)),this._data.concat(e),this._nDataBytes+=e.sigBytes},_process:function(t){var n=this._data,r=n.words,i=n.sigBytes,o=this.blockSize,a=i/(4*o),a=t?e.ceil(a):e.max((0|a)-this._minBufferSize,0);if(t=a*o,i=e.min(4*t,i),t){for(var u=0;ul;){var f;e:{f=c;for(var h=e.sqrt(f),d=2;d<=h;d++)if(!(f%d)){f=!1;break e}f=!0}f&&(8>l&&(s[l]=u(e.pow(c,.5))),a[l]=u(e.pow(c,1/3)),l++),c++}var p=[],r=r.SHA256=o.extend({_doReset:function(){this._hash=new i.init(s.slice(0))},_doProcessBlock:function(e,t){for(var n=this._hash.words,r=n[0],i=n[1],o=n[2],s=n[3],u=n[4],c=n[5],l=n[6],f=n[7],h=0;64>h;h++){if(16>h)p[h]=0|e[t+h];else{var d=p[h-15],g=p[h-2];p[h]=((d<<25|d>>>7)^(d<<14|d>>>18)^d>>>3)+p[h-7]+((g<<15|g>>>17)^(g<<13|g>>>19)^g>>>10)+p[h-16]}d=f+((u<<26|u>>>6)^(u<<21|u>>>11)^(u<<7|u>>>25))+(u&c^~u&l)+a[h]+p[h],g=((r<<30|r>>>2)^(r<<19|r>>>13)^(r<<10|r>>>22))+(r&i^r&o^i&o),f=l,l=c,c=u,u=s+d|0,s=o,o=i,i=r,r=d+g|0}n[0]=n[0]+r|0,n[1]=n[1]+i|0,n[2]=n[2]+o|0,n[3]=n[3]+s|0,n[4]=n[4]+u|0,n[5]=n[5]+c|0,n[6]=n[6]+l|0,n[7]=n[7]+f|0},_doFinalize:function(){var t=this._data,n=t.words,r=8*this._nDataBytes,i=8*t.sigBytes;return n[i>>>5]|=128<<24-i%32,n[14+(i+64>>>9<<4)]=e.floor(r/4294967296),n[15+(i+64>>>9<<4)]=r,t.sigBytes=4*n.length,this._process(),this._hash},clone:function(){var e=o.clone.call(this);return e._hash=this._hash.clone(),e}});t.SHA256=o._createHelper(r),t.HmacSHA256=o._createHmacHelper(r)}(Math),function(){var e=n,t=e.enc.Utf8;e.algo.HMAC=e.lib.Base.extend({init:function(e,n){e=this._hasher=new e.init,"string"==typeof n&&(n=t.parse(n));var r=e.blockSize,i=4*r;n.sigBytes>i&&(n=e.finalize(n)),n.clamp();for(var o=this._oKey=n.clone(),s=this._iKey=n.clone(),a=o.words,u=s.words,c=0;c>>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;4>s&&i+.75*s>>6*(3-s)&63));if(t=r.charAt(64))for(;e.length%4;)e.push(t);return e.join("")},parse:function(e){var n=e.length,r=this._map,i=r.charAt(64);i&&-1!=(i=e.indexOf(i))&&(n=i);for(var i=[],o=0,s=0;s>>6-s%4*2;i[o>>>2]|=(a|u)<<24-o%4*8,o++}return t.create(i,o)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="}}(),function(e){function t(e,t,n,r,i,o,s){return((e=e+(t&n|~t&r)+i+s)<>>32-o)+t}function r(e,t,n,r,i,o,s){return((e=e+(t&r|n&~r)+i+s)<>>32-o)+t}function i(e,t,n,r,i,o,s){return((e=e+(t^n^r)+i+s)<>>32-o)+t}function o(e,t,n,r,i,o,s){return((e=e+(n^(t|~r))+i+s)<>>32-o)+t}for(var s=n,a=s.lib,u=a.WordArray,c=a.Hasher,a=s.algo,l=[],f=0;64>f;f++)l[f]=4294967296*e.abs(e.sin(f+1))|0;a=a.MD5=c.extend({_doReset:function(){this._hash=new u.init([1732584193,4023233417,2562383102,271733878])},_doProcessBlock:function(e,n){for(var s=0;16>s;s++){var a=n+s,u=e[a];e[a]=16711935&(u<<8|u>>>24)|4278255360&(u<<24|u>>>8)}var s=this._hash.words,a=e[n+0],u=e[n+1],c=e[n+2],f=e[n+3],h=e[n+4],d=e[n+5],p=e[n+6],g=e[n+7],y=e[n+8],b=e[n+9],v=e[n+10],_=e[n+11],m=e[n+12],k=e[n+13],P=e[n+14],S=e[n+15],O=s[0],M=s[1],T=s[2],C=s[3],O=t(O,M,T,C,a,7,l[0]),C=t(C,O,M,T,u,12,l[1]),T=t(T,C,O,M,c,17,l[2]),M=t(M,T,C,O,f,22,l[3]),O=t(O,M,T,C,h,7,l[4]),C=t(C,O,M,T,d,12,l[5]),T=t(T,C,O,M,p,17,l[6]),M=t(M,T,C,O,g,22,l[7]),O=t(O,M,T,C,y,7,l[8]),C=t(C,O,M,T,b,12,l[9]),T=t(T,C,O,M,v,17,l[10]),M=t(M,T,C,O,_,22,l[11]),O=t(O,M,T,C,m,7,l[12]),C=t(C,O,M,T,k,12,l[13]),T=t(T,C,O,M,P,17,l[14]),M=t(M,T,C,O,S,22,l[15]),O=r(O,M,T,C,u,5,l[16]),C=r(C,O,M,T,p,9,l[17]),T=r(T,C,O,M,_,14,l[18]),M=r(M,T,C,O,a,20,l[19]),O=r(O,M,T,C,d,5,l[20]),C=r(C,O,M,T,v,9,l[21]),T=r(T,C,O,M,S,14,l[22]),M=r(M,T,C,O,h,20,l[23]),O=r(O,M,T,C,b,5,l[24]),C=r(C,O,M,T,P,9,l[25]),T=r(T,C,O,M,f,14,l[26]),M=r(M,T,C,O,y,20,l[27]),O=r(O,M,T,C,k,5,l[28]),C=r(C,O,M,T,c,9,l[29]),T=r(T,C,O,M,g,14,l[30]),M=r(M,T,C,O,m,20,l[31]),O=i(O,M,T,C,d,4,l[32]),C=i(C,O,M,T,y,11,l[33]),T=i(T,C,O,M,_,16,l[34]),M=i(M,T,C,O,P,23,l[35]),O=i(O,M,T,C,u,4,l[36]),C=i(C,O,M,T,h,11,l[37]),T=i(T,C,O,M,g,16,l[38]),M=i(M,T,C,O,v,23,l[39]),O=i(O,M,T,C,k,4,l[40]),C=i(C,O,M,T,a,11,l[41]),T=i(T,C,O,M,f,16,l[42]),M=i(M,T,C,O,p,23,l[43]),O=i(O,M,T,C,b,4,l[44]),C=i(C,O,M,T,m,11,l[45]),T=i(T,C,O,M,S,16,l[46]),M=i(M,T,C,O,c,23,l[47]),O=o(O,M,T,C,a,6,l[48]),C=o(C,O,M,T,g,10,l[49]),T=o(T,C,O,M,P,15,l[50]),M=o(M,T,C,O,d,21,l[51]),O=o(O,M,T,C,m,6,l[52]),C=o(C,O,M,T,f,10,l[53]),T=o(T,C,O,M,v,15,l[54]),M=o(M,T,C,O,u,21,l[55]),O=o(O,M,T,C,y,6,l[56]),C=o(C,O,M,T,S,10,l[57]),T=o(T,C,O,M,p,15,l[58]),M=o(M,T,C,O,k,21,l[59]),O=o(O,M,T,C,h,6,l[60]),C=o(C,O,M,T,_,10,l[61]),T=o(T,C,O,M,c,15,l[62]),M=o(M,T,C,O,b,21,l[63]);s[0]=s[0]+O|0,s[1]=s[1]+M|0,s[2]=s[2]+T|0,s[3]=s[3]+C|0},_doFinalize:function(){var t=this._data,n=t.words,r=8*this._nDataBytes,i=8*t.sigBytes;n[i>>>5]|=128<<24-i%32;var o=e.floor(r/4294967296);for(n[15+(i+64>>>9<<4)]=16711935&(o<<8|o>>>24)|4278255360&(o<<24|o>>>8),n[14+(i+64>>>9<<4)]=16711935&(r<<8|r>>>24)|4278255360&(r<<24|r>>>8),t.sigBytes=4*(n.length+1),this._process(),t=this._hash,n=t.words,r=0;4>r;r++)i=n[r],n[r]=16711935&(i<<8|i>>>24)|4278255360&(i<<24|i>>>8);return t},clone:function(){var e=c.clone.call(this);return e._hash=this._hash.clone(),e}}),s.MD5=c._createHelper(a),s.HmacMD5=c._createHmacHelper(a)}(Math),function(){var e=n,t=e.lib,r=t.Base,i=t.WordArray,t=e.algo,o=t.EvpKDF=r.extend({cfg:r.extend({keySize:4,hasher:t.MD5,iterations:1}),init:function(e){this.cfg=this.cfg.extend(e)},compute:function(e,t){for(var n=this.cfg,r=n.hasher.create(),o=i.create(),s=o.words,a=n.keySize,n=n.iterations;s.length>>2]}},r.BlockCipher=c.extend({cfg:c.cfg.extend({mode:l,padding:h}),reset:function(){c.reset.call(this);var e=this.cfg,t=e.iv,e=e.mode;if(this._xformMode==this._ENC_XFORM_MODE)var n=e.createEncryptor;else n=e.createDecryptor,this._minBufferSize=1;this._mode=n.call(e,this,t&&t.words)},_doProcessBlock:function(e,t){this._mode.processBlock(e,t)},_doFinalize:function(){var e=this.cfg.padding;if(this._xformMode==this._ENC_XFORM_MODE){e.pad(this._data,this.blockSize);var t=this._process(!0)}else t=this._process(!0),e.unpad(t);return t},blockSize:4});var d=r.CipherParams=i.extend({init:function(e){this.mixIn(e)},toString:function(e){return(e||this.formatter).stringify(this)}}),l=(t.format={}).OpenSSL={stringify:function(e){var t=e.ciphertext;return e=e.salt,(e?o.create([1398893684,1701076831]).concat(e).concat(t):t).toString(a)},parse:function(e){e=a.parse(e);var t=e.words;if(1398893684==t[0]&&1701076831==t[1]){var n=o.create(t.slice(2,4));t.splice(0,4),e.sigBytes-=16}return d.create({ciphertext:e,salt:n})}},p=r.SerializableCipher=i.extend({cfg:i.extend({format:l}),encrypt:function(e,t,n,r){r=this.cfg.extend(r);var i=e.createEncryptor(n,r);return t=i.finalize(t),i=i.cfg,d.create({ciphertext:t,key:n,iv:i.iv,algorithm:e,mode:i.mode,padding:i.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}}),t=(t.kdf={}).OpenSSL={execute:function(e,t,n,r){return r||(r=o.random(8)),e=u.create({keySize:t+n}).compute(e,r),n=o.create(e.words.slice(t),4*n),e.sigBytes=4*t,d.create({key:e,iv:n,salt:r})}},g=r.PasswordBasedCipher=p.extend({cfg:p.cfg.extend({kdf:t}),encrypt:function(e,t,n,r){return r=this.cfg.extend(r),n=r.kdf.execute(n,e.keySize,e.ivSize),r.iv=n.iv,e=p.encrypt.call(this,e,t,n.key,r),e.mixIn(n),e},decrypt:function(e,t,n,r){return r=this.cfg.extend(r),t=this._parse(t,r.format),n=r.kdf.execute(n,e.keySize,e.ivSize,t.salt),r.iv=n.iv,p.decrypt.call(this,e,t,n.key,r)}})}(),function(){for(var e=n,t=e.lib.BlockCipher,r=e.algo,i=[],o=[],s=[],a=[],u=[],c=[],l=[],f=[],h=[],d=[],p=[],g=0;256>g;g++)p[g]=128>g?g<<1:g<<1^283;for(var y=0,b=0,g=0;256>g;g++){var v=b^b<<1^b<<2^b<<3^b<<4,v=v>>>8^255&v^99;i[y]=v,o[v]=y;var _=p[y],m=p[_],k=p[m],P=257*p[v]^16843008*v;s[y]=P<<24|P>>>8,a[y]=P<<16|P>>>16,u[y]=P<<8|P>>>24,c[y]=P,P=16843009*k^65537*m^257*_^16843008*y,l[v]=P<<24|P>>>8,f[v]=P<<16|P>>>16,h[v]=P<<8|P>>>24,d[v]=P,y?(y=_^p[p[p[k^_]]],b^=p[p[b]]):y=b=1}var S=[0,1,2,4,8,16,32,64,128,27,54],r=r.AES=t.extend({_doReset:function(){for(var e=this._key,t=e.words,n=e.sigBytes/4,e=4*((this._nRounds=n+6)+1),r=this._keySchedule=[],o=0;o>>24]<<24|i[s>>>16&255]<<16|i[s>>>8&255]<<8|i[255&s]):(s=s<<8|s>>>24,s=i[s>>>24]<<24|i[s>>>16&255]<<16|i[s>>>8&255]<<8|i[255&s],s^=S[o/n|0]<<24),r[o]=r[o-n]^s}for(t=this._invKeySchedule=[],n=0;nn||4>=o?s:l[i[s>>>24]]^f[i[s>>>16&255]]^h[i[s>>>8&255]]^d[i[255&s]]},encryptBlock:function(e,t){this._doCryptBlock(e,t,this._keySchedule,s,a,u,c,i)},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,h,d,o),n=e[t+1],e[t+1]=e[t+3],e[t+3]=n},_doCryptBlock:function(e,t,n,r,i,o,s,a){for(var u=this._nRounds,c=e[t]^n[0],l=e[t+1]^n[1],f=e[t+2]^n[2],h=e[t+3]^n[3],d=4,p=1;p>>24]^i[l>>>16&255]^o[f>>>8&255]^s[255&h]^n[d++],y=r[l>>>24]^i[f>>>16&255]^o[h>>>8&255]^s[255&c]^n[d++],b=r[f>>>24]^i[h>>>16&255]^o[c>>>8&255]^s[255&l]^n[d++],h=r[h>>>24]^i[c>>>16&255]^o[l>>>8&255]^s[255&f]^n[d++],c=g,l=y,f=b;g=(a[c>>>24]<<24|a[l>>>16&255]<<16|a[f>>>8&255]<<8|a[255&h])^n[d++],y=(a[l>>>24]<<24|a[f>>>16&255]<<16|a[h>>>8&255]<<8|a[255&c])^n[d++],b=(a[f>>>24]<<24|a[h>>>16&255]<<16|a[c>>>8&255]<<8|a[255&l])^n[d++],h=(a[h>>>24]<<24|a[c>>>16&255]<<16|a[l>>>8&255]<<8|a[255&f])^n[d++],e[t]=g,e[t+1]=y,e[t+2]=b,e[t+3]=h},keySize:8});e.AES=t._createHelper(r)}(),n.mode.ECB=function(){var e=n.lib.BlockCipherMode.extend();return e.Encryptor=e.extend({processBlock:function(e,t){this._cipher.encryptBlock(e,t)}}),e.Decryptor=e.extend({processBlock:function(e,t){this._cipher.decryptBlock(e,t)}}),e}(),e.exports=n},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e,t){for(var n=0;n=s){var u={};u.category=y.default.PNRequestMessageCountExceededCategory,u.operation=e.operation,this._listenerManager.announceStatus(u)}i.forEach(function(e){var t=e.channel,r=e.subscriptionMatch,i=e.publishMetaData;if(t===r&&(r=null),a){if(n._dedupingManager.isDuplicate(e))return;n._dedupingManager.addEntry(e)}if(p.default.endsWith(e.channel,"-pnpres")){var o={};o.channel=null,o.subscription=null,o.actualChannel=null!=r?t:null,o.subscribedChannel=null!=r?r:t,t&&(o.channel=t.substring(0,t.lastIndexOf("-pnpres"))),r&&(o.subscription=r.substring(0,r.lastIndexOf("-pnpres"))),o.action=e.payload.action,o.state=e.payload.data,o.timetoken=i.publishTimetoken,o.occupancy=e.payload.occupancy,o.uuid=e.payload.uuid,o.timestamp=e.payload.timestamp,e.payload.join&&(o.join=e.payload.join),e.payload.leave&&(o.leave=e.payload.leave),e.payload.timeout&&(o.timeout=e.payload.timeout),n._listenerManager.announcePresence(o)}else{var s={};s.channel=null,s.subscription=null,s.actualChannel=null!=r?t:null,s.subscribedChannel=null!=r?r:t,s.channel=t,s.subscription=r,s.timetoken=i.publishTimetoken,s.publisher=e.issuingClientId,e.userMetadata&&(s.userMetadata=e.userMetadata),n._config.cipherKey?s.message=n._crypto.decrypt(e.payload):s.message=e.payload,n._listenerManager.announceMessage(s)}}),this._region=t.metadata.region,this._startSubscribeLoop()}},{key:"_stopSubscribeLoop",value:function(){this._subscribeCall&&("function"==typeof this._subscribeCall.abort&&this._subscribeCall.abort(),this._subscribeCall=null)}}]),e}();t.default=b,e.exports=t.default},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n=this._config.maximumCacheSize&&this.hashHistory.shift(),this.hashHistory.push(this.getKey(e))}},{key:"clearHistory",value:function(){this.hashHistory=[]}}]),e}();t.default=a,e.exports=t.default},function(e,t){"use strict";function n(e){var t=[];return Object.keys(e).forEach(function(e){return t.push(e)}),t}function r(e){return encodeURIComponent(e).replace(/[!~*'()]/g,function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()})}function i(e){return n(e).sort()}function o(e){return i(e).map(function(t){return t+"="+r(e[t])}).join("&")}function s(e,t){return-1!==e.indexOf(t,this.length-t.length)}function a(){var e=void 0,t=void 0;return{promise:new Promise(function(n,r){e=n,t=r}),reject:t,fulfill:e}}e.exports={signPamFromParams:o,endsWith:s,createPromise:a,encodeString:r}},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function a(e,t){return e.type=t,e.error=!0,e}function u(e){return a({message:e},"validationError")}function c(e,t,n){return e.usePost&&e.usePost(t,n)?e.postURL(t,n):e.getURL(t,n)}function l(e){if(e.sdkName)return e.sdkName;var t="PubNub-JS-"+e.sdkFamily;return e.partnerId&&(t+="-"+e.partnerId),t+="/"+e.getVersion()}function f(e,t,n){var r=e.config,i=e.crypto;n.timestamp=Math.floor((new Date).getTime()/1e3);var o=r.subscribeKey+"\n"+r.publishKey+"\n"+t+"\n";o+=g.default.signPamFromParams(n);var s=i.HMACSHA256(o);s=s.replace(/\+/g,"-"),s=s.replace(/\//g,"_"),n.signature=s}Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){var n=e.networking,r=e.config,i=null,o=null,s={};t.getOperation()===v.default.PNTimeOperation||t.getOperation()===v.default.PNChannelGroupsOperation?i=arguments.length<=2?void 0:arguments[2]:(s=arguments.length<=2?void 0:arguments[2],i=arguments.length<=3?void 0:arguments[3]),"undefined"==typeof Promise||i||(o=g.default.createPromise());var a=t.validateParams(e,s);if(!a){var h=t.prepareParams(e,s),p=c(t,e,s),y=void 0,b={url:p,operation:t.getOperation(),timeout:t.getRequestTimeout(e)};h.uuid=r.UUID,h.pnsdk=l(r),r.useInstanceId&&(h.instanceid=r.instanceId),r.useRequestId&&(h.requestid=d.default.createUUID()),t.isAuthSupported()&&r.getAuthKey()&&(h.auth=r.getAuthKey()),r.secretKey&&f(e,p,h);var m=function(n,r){if(n.error)return void(i?i(n):o&&o.reject(new _("PubNub call failed, check status for details",n)));var a=t.handleResponse(e,r,s);i?i(n,a):o&&o.fulfill(a)};if(t.usePost&&t.usePost(e,s)){var k=t.postPayload(e,s);y=n.POST(h,k,b,m)}else y=t.useDelete&&t.useDelete()?n.DELETE(h,b,m):n.GET(h,b,m);return t.getOperation()===v.default.PNSubscribeOperation?y:o?o.promise:void 0}return i?i(u(a)):o?(o.reject(new _("Validation failed, check status for details",u(a))),o.promise):void 0};var h=n(3),d=r(h),p=(n(5),n(15)),g=r(p),y=n(2),b=(r(y),n(13)),v=r(b),_=function(e){function t(e,n){i(this,t);var r=o(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return r.name=r.constructor.name,r.status=n,r.message=e,r}return s(t,e),t}(Error);e.exports=t.default},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return h.default.PNAddChannelsToGroupOperation}function o(e,t){var n=t.channels,r=t.channelGroup,i=e.config;return r?n&&0!==n.length?i.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channels":"Missing Channel Group"}function s(e,t){var n=t.channelGroup;return"/v1/channel-registration/sub-key/"+e.config.subscribeKey+"/channel-group/"+p.default.encodeString(n)}function a(e){return e.config.getTransactionTimeout()}function u(){return!0}function c(e,t){var n=t.channels;return{add:(void 0===n?[]:n).join(",")}}function l(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=o,t.getURL=s,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var f=(n(5),n(13)),h=r(f),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return h.default.PNRemoveChannelsFromGroupOperation}function o(e,t){var n=t.channels,r=t.channelGroup,i=e.config;return r?n&&0!==n.length?i.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channels":"Missing Channel Group"}function s(e,t){var n=t.channelGroup;return"/v1/channel-registration/sub-key/"+e.config.subscribeKey+"/channel-group/"+p.default.encodeString(n)}function a(e){return e.config.getTransactionTimeout()}function u(){return!0}function c(e,t){var n=t.channels;return{remove:(void 0===n?[]:n).join(",")}}function l(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=o,t.getURL=s,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var f=(n(5),n(13)),h=r(f),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return h.default.PNRemoveGroupOperation}function o(e,t){var n=t.channelGroup,r=e.config;return n?r.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channel Group"}function s(e,t){var n=t.channelGroup;return"/v1/channel-registration/sub-key/"+e.config.subscribeKey+"/channel-group/"+p.default.encodeString(n)+"/remove"}function a(){return!0}function u(e){return e.config.getTransactionTimeout()}function c(){return{}}function l(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=o,t.getURL=s,t.isAuthSupported=a,t.getRequestTimeout=u,t.prepareParams=c,t.handleResponse=l;var f=(n(5),n(13)),h=r(f),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(){return f.default.PNChannelGroupsOperation}function i(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function o(e){return"/v1/channel-registration/sub-key/"+e.config.subscribeKey+"/channel-group"}function s(e){return e.config.getTransactionTimeout()}function a(){return!0}function u(){return{}}function c(e,t){return{groups:t.payload.groups}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=o,t.getRequestTimeout=s,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),f=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return h.default.PNChannelsForGroupOperation}function o(e,t){var n=t.channelGroup,r=e.config;return n?r.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channel Group"}function s(e,t){var n=t.channelGroup;return"/v1/channel-registration/sub-key/"+e.config.subscribeKey+"/channel-group/"+p.default.encodeString(n)}function a(e){return e.config.getTransactionTimeout()}function u(){return!0}function c(){return{}}function l(e,t){return{channels:t.payload.channels}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=o,t.getURL=s,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var f=(n(5),n(13)),h=r(f),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(){return f.default.PNPushNotificationEnabledChannelsOperation}function i(e,t){var n=t.device,r=t.pushGateway,i=t.channels,o=e.config;return n?r?i&&0!==i.length?o.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channels":"Missing GW Type (pushGateway: gcm or apns)":"Missing Device ID (device)"}function o(e,t){var n=t.device;return"/v1/push/sub-key/"+e.config.subscribeKey+"/devices/"+n}function s(e){return e.config.getTransactionTimeout()}function a(){return!0}function u(e,t){var n=t.pushGateway,r=t.channels;return{type:n,add:(void 0===r?[]:r).join(",")}}function c(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=o,t.getRequestTimeout=s,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),f=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(){return f.default.PNPushNotificationEnabledChannelsOperation}function i(e,t){var n=t.device,r=t.pushGateway,i=t.channels,o=e.config;return n?r?i&&0!==i.length?o.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channels":"Missing GW Type (pushGateway: gcm or apns)":"Missing Device ID (device)"}function o(e,t){var n=t.device;return"/v1/push/sub-key/"+e.config.subscribeKey+"/devices/"+n}function s(e){return e.config.getTransactionTimeout()}function a(){return!0}function u(e,t){var n=t.pushGateway,r=t.channels;return{type:n,remove:(void 0===r?[]:r).join(",")}}function c(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=o,t.getRequestTimeout=s,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),f=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(){return f.default.PNPushNotificationEnabledChannelsOperation}function i(e,t){var n=t.device,r=t.pushGateway,i=e.config;return n?r?i.subscribeKey?void 0:"Missing Subscribe Key":"Missing GW Type (pushGateway: gcm or apns)":"Missing Device ID (device)"}function o(e,t){var n=t.device;return"/v1/push/sub-key/"+e.config.subscribeKey+"/devices/"+n}function s(e){return e.config.getTransactionTimeout()}function a(){return!0}function u(e,t){return{type:t.pushGateway}}function c(e,t){return{channels:t}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=o,t.getRequestTimeout=s,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),f=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(){return f.default.PNRemoveAllPushNotificationsOperation}function i(e,t){var n=t.device,r=t.pushGateway,i=e.config;return n?r?i.subscribeKey?void 0:"Missing Subscribe Key":"Missing GW Type (pushGateway: gcm or apns)":"Missing Device ID (device)"}function o(e,t){var n=t.device;return"/v1/push/sub-key/"+e.config.subscribeKey+"/devices/"+n+"/remove"}function s(e){return e.config.getTransactionTimeout()}function a(){return!0}function u(e,t){return{type:t.pushGateway}}function c(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=o,t.getRequestTimeout=s,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),f=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return h.default.PNUnsubscribeOperation}function o(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function s(e,t){var n=e.config,r=t.channels,i=void 0===r?[]:r,o=i.length>0?i.join(","):",";return"/v2/presence/sub-key/"+n.subscribeKey+"/channel/"+p.default.encodeString(o)+"/leave"}function a(e){return e.config.getTransactionTimeout()}function u(){return!0}function c(e,t){var n=t.channelGroups,r=void 0===n?[]:n,i={};return r.length>0&&(i["channel-group"]=r.join(",")),i}function l(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=o,t.getURL=s,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var f=(n(5),n(13)),h=r(f),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(){return f.default.PNWhereNowOperation}function i(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function o(e,t){var n=e.config,r=t.uuid,i=void 0===r?n.UUID:r;return"/v2/presence/sub-key/"+n.subscribeKey+"/uuid/"+i}function s(e){return e.config.getTransactionTimeout()}function a(){return!0}function u(){return{}}function c(e,t){return t.payload?{channels:t.payload.channels}:{channels:[]}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=o,t.getRequestTimeout=s,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),f=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return h.default.PNHeartbeatOperation}function o(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function s(e,t){var n=e.config,r=t.channels,i=void 0===r?[]:r,o=i.length>0?i.join(","):",";return"/v2/presence/sub-key/"+n.subscribeKey+"/channel/"+p.default.encodeString(o)+"/heartbeat"}function a(){return!0}function u(e){return e.config.getTransactionTimeout()}function c(e,t){var n=t.channelGroups,r=void 0===n?[]:n,i=t.state,o=void 0===i?{}:i,s=e.config,a={};return r.length>0&&(a["channel-group"]=r.join(",")),a.state=JSON.stringify(o),a.heartbeat=s.getPresenceTimeout(),a}function l(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=o,t.getURL=s,t.isAuthSupported=a,t.getRequestTimeout=u,t.prepareParams=c,t.handleResponse=l;var f=(n(5),n(13)),h=r(f),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return h.default.PNGetStateOperation}function o(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function s(e,t){var n=e.config,r=t.uuid,i=void 0===r?n.UUID:r,o=t.channels,s=void 0===o?[]:o,a=s.length>0?s.join(","):",";return"/v2/presence/sub-key/"+n.subscribeKey+"/channel/"+p.default.encodeString(a)+"/uuid/"+i}function a(e){return e.config.getTransactionTimeout()}function u(){return!0}function c(e,t){var n=t.channelGroups,r=void 0===n?[]:n,i={};return r.length>0&&(i["channel-group"]=r.join(",")),i}function l(e,t,n){var r=n.channels,i=void 0===r?[]:r,o=n.channelGroups,s=void 0===o?[]:o,a={};return 1===i.length&&0===s.length?a[i[0]]=t.payload:a=t.payload,{channels:a}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=o,t.getURL=s,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var f=(n(5),n(13)),h=r(f),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return h.default.PNSetStateOperation}function o(e,t){var n=e.config,r=t.state,i=t.channels,o=void 0===i?[]:i,s=t.channelGroups,a=void 0===s?[]:s;return r?n.subscribeKey?0===o.length&&0===a.length?"Please provide a list of channels and/or channel-groups":void 0:"Missing Subscribe Key":"Missing State"}function s(e,t){var n=e.config,r=t.channels,i=void 0===r?[]:r,o=i.length>0?i.join(","):",";return"/v2/presence/sub-key/"+n.subscribeKey+"/channel/"+p.default.encodeString(o)+"/uuid/"+n.UUID+"/data"}function a(e){return e.config.getTransactionTimeout()}function u(){return!0}function c(e,t){var n=t.state,r=t.channelGroups,i=void 0===r?[]:r,o={};return o.state=JSON.stringify(n),i.length>0&&(o["channel-group"]=i.join(",")),o}function l(e,t){return{state:t.payload}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=o,t.getURL=s,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var f=(n(5),n(13)),h=r(f),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return h.default.PNHereNowOperation}function o(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function s(e,t){var n=e.config,r=t.channels,i=void 0===r?[]:r,o=t.channelGroups,s=void 0===o?[]:o,a="/v2/presence/sub-key/"+n.subscribeKey;if(i.length>0||s.length>0){var u=i.length>0?i.join(","):",";a+="/channel/"+p.default.encodeString(u)}return a}function a(e){return e.config.getTransactionTimeout()}function u(){return!0}function c(e,t){var n=t.channelGroups,r=void 0===n?[]:n,i=t.includeUUIDs,o=void 0===i||i,s=t.includeState,a=void 0!==s&&s,u={};return o||(u.disable_uuids=1),a&&(u.state=1),r.length>0&&(u["channel-group"]=r.join(",")),u}function l(e,t,n){var r=n.channels,i=void 0===r?[]:r,o=n.channelGroups,s=void 0===o?[]:o,a=n.includeUUIDs,u=void 0===a||a,c=n.includeState,l=void 0!==c&&c;return i.length>1||s.length>0||0===s.length&&0===i.length?function(){var e={};return e.totalChannels=t.payload.total_channels,e.totalOccupancy=t.payload.total_occupancy,e.channels={},Object.keys(t.payload.channels).forEach(function(n){var r=t.payload.channels[n],i=[];return e.channels[n]={occupants:i,name:n,occupancy:r.occupancy},u&&r.uuids.forEach(function(e){l?i.push({state:e.state,uuid:e.uuid}):i.push({state:null,uuid:e})}),e}),e}():function(){var e={},n=[];return e.totalChannels=1,e.totalOccupancy=t.occupancy,e.channels={},e.channels[i[0]]={occupants:n,name:i[0],occupancy:t.occupancy},u&&t.uuids&&t.uuids.forEach(function(e){l?n.push({state:e.state,uuid:e.uuid}):n.push({state:null,uuid:e})}),e}()}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=o,t.getURL=s,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var f=(n(5),n(13)),h=r(f),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(){return f.default.PNAccessManagerAudit}function i(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function o(e){return"/v2/auth/audit/sub-key/"+e.config.subscribeKey}function s(e){return e.config.getTransactionTimeout()}function a(){return!1}function u(e,t){var n=t.channel,r=t.channelGroup,i=t.authKeys,o=void 0===i?[]:i,s={};return n&&(s.channel=n),r&&(s["channel-group"]=r),o.length>0&&(s.auth=o.join(",")),s}function c(e,t){return t.payload}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=o,t.getRequestTimeout=s,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),f=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(){return f.default.PNAccessManagerGrant}function i(e){var t=e.config;return t.subscribeKey?t.publishKey?t.secretKey?void 0:"Missing Secret Key":"Missing Publish Key":"Missing Subscribe Key"}function o(e){return"/v2/auth/grant/sub-key/"+e.config.subscribeKey}function s(e){return e.config.getTransactionTimeout()}function a(){return!1}function u(e,t){var n=t.channels,r=void 0===n?[]:n,i=t.channelGroups,o=void 0===i?[]:i,s=t.ttl,a=t.read,u=void 0!==a&&a,c=t.write,l=void 0!==c&&c,f=t.manage,h=void 0!==f&&f,d=t.authKeys,p=void 0===d?[]:d,g={};return g.r=u?"1":"0",g.w=l?"1":"0",g.m=h?"1":"0",r.length>0&&(g.channel=r.join(",")),o.length>0&&(g["channel-group"]=o.join(",")),p.length>0&&(g.auth=p.join(",")),(s||0===s)&&(g.ttl=s),g}function c(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=o,t.getRequestTimeout=s,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),f=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){var n=e.crypto,r=e.config,i=JSON.stringify(t);return r.cipherKey&&(i=n.encrypt(i),i=JSON.stringify(i)),i}function o(){return b.default.PNPublishOperation}function s(e,t){var n=e.config,r=t.message;return t.channel?r?n.subscribeKey?void 0:"Missing Subscribe Key":"Missing Message":"Missing Channel"}function a(e,t){var n=t.sendByPost;return void 0!==n&&n}function u(e,t){var n=e.config,r=t.channel,o=t.message,s=i(e,o);return"/publish/"+n.publishKey+"/"+n.subscribeKey+"/0/"+_.default.encodeString(r)+"/0/"+_.default.encodeString(s)}function c(e,t){var n=e.config,r=t.channel;return"/publish/"+n.publishKey+"/"+n.subscribeKey+"/0/"+_.default.encodeString(r)+"/0"}function l(e){return e.config.getTransactionTimeout()}function f(){return!0}function h(e,t){return i(e,t.message)}function d(e,t){var n=t.meta,r=t.replicate,i=void 0===r||r,o=t.storeInHistory,s=t.ttl,a={};return null!=o&&(a.store=o?"1":"0"),s&&(a.ttl=s),!1===i&&(a.norep="true"),n&&"object"===(void 0===n?"undefined":g(n))&&(a.meta=JSON.stringify(n)),a}function p(e,t){return{timetoken:t[2]}}Object.defineProperty(t,"__esModule",{value:!0});var g="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};t.getOperation=o,t.validateParams=s,t.usePost=a,t.getURL=u,t.postURL=c,t.getRequestTimeout=l, +t.isAuthSupported=f,t.postPayload=h,t.prepareParams=d,t.handleResponse=p;var y=(n(5),n(13)),b=r(y),v=n(15),_=r(v)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){var n=e.config,r=e.crypto;if(!n.cipherKey)return t;try{return r.decrypt(t)}catch(e){return t}}function o(){return d.default.PNHistoryOperation}function s(e,t){var n=t.channel,r=e.config;return n?r.subscribeKey?void 0:"Missing Subscribe Key":"Missing channel"}function a(e,t){var n=t.channel;return"/v2/history/sub-key/"+e.config.subscribeKey+"/channel/"+g.default.encodeString(n)}function u(e){return e.config.getTransactionTimeout()}function c(){return!0}function l(e,t){var n=t.start,r=t.end,i=t.reverse,o=t.count,s=void 0===o?100:o,a=t.stringifiedTimeToken,u=void 0!==a&&a,c={include_token:"true"};return c.count=s,n&&(c.start=n),r&&(c.end=r),u&&(c.string_message_token="true"),null!=i&&(c.reverse=i.toString()),c}function f(e,t){var n={messages:[],startTimeToken:t[1],endTimeToken:t[2]};return t[0].forEach(function(t){var r={timetoken:t.timetoken,entry:i(e,t.message)};n.messages.push(r)}),n}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=o,t.validateParams=s,t.getURL=a,t.getRequestTimeout=u,t.isAuthSupported=c,t.prepareParams=l,t.handleResponse=f;var h=(n(5),n(13)),d=r(h),p=n(15),g=r(p)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return d.default.PNDeleteMessagesOperation}function o(e,t){var n=t.channel,r=e.config;return n?r.subscribeKey?void 0:"Missing Subscribe Key":"Missing channel"}function s(){return!0}function a(e,t){var n=t.channel,r=t.start,i=t.end,o=e.config,s="";return r&&(s="?start="+r),i&&(s+=(""!==s?"&":"?")+"end="+i),"/v3/history/sub-key/"+o.subscribeKey+"/channel/"+g.default.encodeString(n)+s}function u(e){return e.config.getTransactionTimeout()}function c(){return!0}function l(e,t){var n=t.start,r=t.end,i={};return n&&(i.start=n),r&&(i.end=r),{}}function f(e,t){return t.payload}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=o,t.useDelete=s,t.getURL=a,t.getRequestTimeout=u,t.isAuthSupported=c,t.prepareParams=l,t.handleResponse=f;var h=(n(5),n(13)),d=r(h),p=n(15),g=r(p)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){var n=e.config,r=e.crypto;if(!n.cipherKey)return t;try{return r.decrypt(t)}catch(e){return t}}function o(){return d.default.PNFetchMessagesOperation}function s(e,t){var n=t.channels,r=e.config;return n&&0!==n.length?r.subscribeKey?void 0:"Missing Subscribe Key":"Missing channels"}function a(e,t){var n=t.channels,r=void 0===n?[]:n,i=e.config,o=r.length>0?r.join(","):",";return"/v3/history/sub-key/"+i.subscribeKey+"/channel/"+g.default.encodeString(o)}function u(e){return e.config.getTransactionTimeout()}function c(){return!0}function l(e,t){var n=t.start,r=t.end,i=t.count,o={};return i&&(o.max=i),n&&(o.start=n),r&&(o.end=r),o}function f(e,t){var n={channels:{}};return Object.keys(t.channels||{}).forEach(function(r){n.channels[r]=[],(t.channels[r]||[]).forEach(function(t){var o={};o.channel=r,o.subscription=null,o.timetoken=t.timetoken,o.message=i(e,t.message),n.channels[r].push(o)})}),n}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=o,t.validateParams=s,t.getURL=a,t.getRequestTimeout=u,t.isAuthSupported=c,t.prepareParams=l,t.handleResponse=f;var h=(n(5),n(13)),d=r(h),p=n(15),g=r(p)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return h.default.PNSubscribeOperation}function o(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function s(e,t){var n=e.config,r=t.channels,i=void 0===r?[]:r,o=i.length>0?i.join(","):",";return"/v2/subscribe/"+n.subscribeKey+"/"+p.default.encodeString(o)+"/0"}function a(e){return e.config.getSubscribeTimeout()}function u(){return!0}function c(e,t){var n=e.config,r=t.channelGroups,i=void 0===r?[]:r,o=t.timetoken,s=t.filterExpression,a=t.region,u={heartbeat:n.getPresenceTimeout()};return i.length>0&&(u["channel-group"]=i.join(",")),s&&s.length>0&&(u["filter-expr"]=s),o&&(u.tt=o),a&&(u.tr=a),u}function l(e,t){var n=[];t.m.forEach(function(e){var t={publishTimetoken:e.p.t,region:e.p.r},r={shard:parseInt(e.a,10),subscriptionMatch:e.b,channel:e.c,payload:e.d,flags:e.f,issuingClientId:e.i,subscribeKey:e.k,originationTimetoken:e.o,userMetadata:e.u,publishMetaData:t};n.push(r)});var r={timetoken:t.t.t,region:t.t.r};return{messages:n,metadata:r}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=o,t.getURL=s,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var f=(n(5),n(13)),h=r(f),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e,t){for(var n=0;n=this._maxSubDomain&&(this._currentSubDomain=1),e=this._currentSubDomain.toString(),this._providedFQDN.replace("pubsub","ps"+e)}},{key:"shiftStandardOrigin",value:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return this._standardOrigin=this.nextOrigin(e),this._standardOrigin}},{key:"getStandardOrigin",value:function(){return this._standardOrigin}},{key:"POST",value:function(e,t,n,r){return this._modules.post(e,t,n,r)}},{key:"GET",value:function(e,t,n){return this._modules.get(e,t,n)}},{key:"DELETE",value:function(e,t,n){return this._modules.del(e,t,n)}},{key:"_detectErrorCategory",value:function(e){if("ENOTFOUND"===e.code)return u.default.PNNetworkIssuesCategory;if("ECONNREFUSED"===e.code)return u.default.PNNetworkIssuesCategory;if("ECONNRESET"===e.code)return u.default.PNNetworkIssuesCategory;if("EAI_AGAIN"===e.code)return u.default.PNNetworkIssuesCategory;if(0===e.status||e.hasOwnProperty("status")&&void 0===e.status)return u.default.PNNetworkIssuesCategory;if(e.timeout)return u.default.PNTimeoutCategory;if(e.response){if(e.response.badRequest)return u.default.PNBadRequestCategory;if(e.response.forbidden)return u.default.PNAccessDeniedCategory}return u.default.PNUnknownCategory}}]),e}());t.default=c,e.exports=t.default},function(e,t){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var r=function(){function e(e,t){for(var n=0;n>>>>>"),o.log("["+u+" / "+a+"]","\n",e,"\n",t,"\n",n),o.log("-----")}function i(){return"mobileweb"===Ti.Platform.osname?new XMLHttpRequest:Ti.Network.createHTTPClient()}function o(e){"mobileweb"!==Ti.Platform.osname&&this._config.keepAlive&&(e.enableKeepAlive=!0)}function s(e,t,n,i,s,a,u){var c=this,f={};f.operation=a.operation,e.open(t,(0,l.buildUrl)(n,i),!0),o.call(this,e),e.onload=function(){f.error=!1,e.status&&(f.statusCode=e.status);var t=JSON.parse(e.responseText);return c._config.logVerbosity&&r(n,i,e.responseText),u(f,t)},e.onerror=function(e){return f.error=!0,f.errorData=e.error,f.category=c._detectErrorCategory(e.error),u(f,null)},e.timeout="android"===Ti.Platform.osname?2147483647:1/0,e.send(s)}function a(e,t,n){var r=i(),o=this.getStandardOrigin()+t.url;return s.call(this,r,"GET",o,e,{},t,n)}function u(e,t,n,r){var o=i(),a=this.getStandardOrigin()+n.url;return s.call(this,o,"POST",a,e,JSON.parse(t),n,r)}function c(e,t,n){var r=i(),o=this.getStandardOrigin()+t.url;return s.call(this,r,"DELETE",o,e,{},t,n)}Object.defineProperty(t,"__esModule",{value:!0}),t.get=a,t.post=u,t.del=c;var l=(n(5),n(42))},function(e,t){"use strict";function n(e,t,r){null!=r?Array.isArray(r)?r.forEach(function(r){n(e,t,r)}):"object"===(void 0===r?"undefined":i(r))?Object.keys(r).forEach(function(i){n(e,t+"["+i+"]",r[i])}):e.push(encodeURIComponent(t)+"="+encodeURIComponent(r)):null===r&&e.push(encodeURIComponent(""+encodeURIComponent(t)))}function r(e,t){var r=[];return Object.keys(t).forEach(function(e){n(r,e,t[e])}),e+"?"+r.join("&")}Object.defineProperty(t,"__esModule",{value:!0});var i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};t.encodedKeyValuePair=n,t.buildUrl=r}])}); \ No newline at end of file diff --git a/dist/web/pubnub.js b/dist/web/pubnub.js index 0c7fb6f8c..7f9006846 100644 --- a/dist/web/pubnub.js +++ b/dist/web/pubnub.js @@ -1,4 +1,4 @@ -/*! 4.18.0 / Consumer */ +/*! 4.19.0 / Consumer */ (function webpackUniversalModuleDefinition(root, factory) { if(typeof exports === 'object' && typeof module === 'object') module.exports = factory(); @@ -595,7 +595,7 @@ return /******/ (function(modules) { // webpackBootstrap }, { key: 'getVersion', value: function getVersion() { - return '4.18.0'; + return '4.19.0'; } }, { key: '_decideUUID', @@ -1851,7 +1851,9 @@ return /******/ (function(modules) { // webpackBootstrap key: '_stopSubscribeLoop', value: function _stopSubscribeLoop() { if (this._subscribeCall) { - this._subscribeCall.abort(); + if (typeof this._subscribeCall.abort === 'function') { + this._subscribeCall.abort(); + } this._subscribeCall = null; } } @@ -2166,6 +2168,8 @@ return /******/ (function(modules) { // webpackBootstrap var _config2 = _interopRequireDefault(_config); + var _flow_interfaces = __webpack_require__(5); + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } diff --git a/dist/web/pubnub.min.js b/dist/web/pubnub.min.js index 9cb29faa0..d7317b09a 100644 --- a/dist/web/pubnub.min.js +++ b/dist/web/pubnub.min.js @@ -1,3 +1,3 @@ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.PubNub=t():e.PubNub=t()}(this,function(){return function(e){function t(r){if(n[r])return n[r].exports;var i=n[r]={exports:{},id:r,loaded:!1};return e[r].call(i.exports,i,i.exports,t),i.loaded=!0,i.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function o(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function a(e){if(!navigator||!navigator.sendBeacon)return!1;navigator.sendBeacon(e)}Object.defineProperty(t,"__esModule",{value:!0});var u=n(1),c=r(u),l=n(39),h=r(l),f=n(40),d=r(f),p=n(41),g=(n(5),function(e){function t(e){i(this,t);var n=e.listenToBrowserNetworkEvents,r=void 0===n||n;e.db=d.default,e.sdkFamily="Web",e.networking=new h.default({del:p.del,get:p.get,post:p.post,sendBeacon:a});var o=s(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return r&&(window.addEventListener("offline",function(){o.networkDownDetected()}),window.addEventListener("online",function(){o.networkUpDetected()})),o}return o(t,e),t}(c.default));t.default=g,e.exports=t.default},function(e,t,n){"use strict";function r(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}function i(e){return e&&e.__esModule?e:{default:e}}function s(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e,t){for(var n=0;n>>2]|=(n[i>>>2]>>>24-i%4*8&255)<<24-(r+i)%4*8;else if(65535>>2]=n[i>>>2];else t.push.apply(t,n);return this.sigBytes+=e,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=s.clone.call(this);return e.words=this.words.slice(0),e},random:function(t){for(var n=[],r=0;r>>2]>>>24-r%4*8&255;n.push((i>>>4).toString(16)),n.push((15&i).toString(16))}return n.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 o.init(n,t/2)}},c=a.Latin1={stringify:function(e){var t=e.words;e=e.sigBytes;for(var n=[],r=0;r>>2]>>>24-r%4*8&255));return n.join("")},parse:function(e){for(var t=e.length,n=[],r=0;r>>2]|=(255&e.charCodeAt(r))<<24-r%4*8;return new o.init(n,t)}},l=a.Utf8={stringify:function(e){try{return decodeURIComponent(escape(c.stringify(e)))}catch(e){throw Error("Malformed UTF-8 data")}},parse:function(e){return c.parse(unescape(encodeURIComponent(e)))}},h=r.BufferedBlockAlgorithm=s.extend({reset:function(){this._data=new o.init,this._nDataBytes=0},_append:function(e){"string"==typeof e&&(e=l.parse(e)),this._data.concat(e),this._nDataBytes+=e.sigBytes},_process:function(t){var n=this._data,r=n.words,i=n.sigBytes,s=this.blockSize,a=i/(4*s),a=t?e.ceil(a):e.max((0|a)-this._minBufferSize,0);if(t=a*s,i=e.min(4*t,i),t){for(var u=0;ul;){var h;e:{h=c;for(var f=e.sqrt(h),d=2;d<=f;d++)if(!(h%d)){h=!1;break e}h=!0}h&&(8>l&&(o[l]=u(e.pow(c,.5))),a[l]=u(e.pow(c,1/3)),l++),c++}var p=[],r=r.SHA256=s.extend({_doReset:function(){this._hash=new i.init(o.slice(0))},_doProcessBlock:function(e,t){for(var n=this._hash.words,r=n[0],i=n[1],s=n[2],o=n[3],u=n[4],c=n[5],l=n[6],h=n[7],f=0;64>f;f++){if(16>f)p[f]=0|e[t+f];else{var d=p[f-15],g=p[f-2];p[f]=((d<<25|d>>>7)^(d<<14|d>>>18)^d>>>3)+p[f-7]+((g<<15|g>>>17)^(g<<13|g>>>19)^g>>>10)+p[f-16]}d=h+((u<<26|u>>>6)^(u<<21|u>>>11)^(u<<7|u>>>25))+(u&c^~u&l)+a[f]+p[f],g=((r<<30|r>>>2)^(r<<19|r>>>13)^(r<<10|r>>>22))+(r&i^r&s^i&s),h=l,l=c,c=u,u=o+d|0,o=s,s=i,i=r,r=d+g|0}n[0]=n[0]+r|0,n[1]=n[1]+i|0,n[2]=n[2]+s|0,n[3]=n[3]+o|0,n[4]=n[4]+u|0,n[5]=n[5]+c|0,n[6]=n[6]+l|0,n[7]=n[7]+h|0},_doFinalize:function(){var t=this._data,n=t.words,r=8*this._nDataBytes,i=8*t.sigBytes;return n[i>>>5]|=128<<24-i%32,n[14+(i+64>>>9<<4)]=e.floor(r/4294967296),n[15+(i+64>>>9<<4)]=r,t.sigBytes=4*n.length,this._process(),this._hash},clone:function(){var e=s.clone.call(this);return e._hash=this._hash.clone(),e}});t.SHA256=s._createHelper(r),t.HmacSHA256=s._createHmacHelper(r)}(Math),function(){var e=n,t=e.enc.Utf8;e.algo.HMAC=e.lib.Base.extend({init:function(e,n){e=this._hasher=new e.init,"string"==typeof n&&(n=t.parse(n));var r=e.blockSize,i=4*r;n.sigBytes>i&&(n=e.finalize(n)),n.clamp();for(var s=this._oKey=n.clone(),o=this._iKey=n.clone(),a=s.words,u=o.words,c=0;c>>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,o=0;4>o&&i+.75*o>>6*(3-o)&63));if(t=r.charAt(64))for(;e.length%4;)e.push(t);return e.join("")},parse:function(e){var n=e.length,r=this._map,i=r.charAt(64);i&&-1!=(i=e.indexOf(i))&&(n=i);for(var i=[],s=0,o=0;o>>6-o%4*2;i[s>>>2]|=(a|u)<<24-s%4*8,s++}return t.create(i,s)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="}}(),function(e){function t(e,t,n,r,i,s,o){return((e=e+(t&n|~t&r)+i+o)<>>32-s)+t}function r(e,t,n,r,i,s,o){return((e=e+(t&r|n&~r)+i+o)<>>32-s)+t}function i(e,t,n,r,i,s,o){return((e=e+(t^n^r)+i+o)<>>32-s)+t}function s(e,t,n,r,i,s,o){return((e=e+(n^(t|~r))+i+o)<>>32-s)+t}for(var o=n,a=o.lib,u=a.WordArray,c=a.Hasher,a=o.algo,l=[],h=0;64>h;h++)l[h]=4294967296*e.abs(e.sin(h+1))|0;a=a.MD5=c.extend({_doReset:function(){this._hash=new u.init([1732584193,4023233417,2562383102,271733878])},_doProcessBlock:function(e,n){for(var o=0;16>o;o++){var a=n+o,u=e[a];e[a]=16711935&(u<<8|u>>>24)|4278255360&(u<<24|u>>>8)}var o=this._hash.words,a=e[n+0],u=e[n+1],c=e[n+2],h=e[n+3],f=e[n+4],d=e[n+5],p=e[n+6],g=e[n+7],y=e[n+8],b=e[n+9],v=e[n+10],_=e[n+11],m=e[n+12],k=e[n+13],P=e[n+14],S=e[n+15],O=o[0],w=o[1],T=o[2],M=o[3],O=t(O,w,T,M,a,7,l[0]),M=t(M,O,w,T,u,12,l[1]),T=t(T,M,O,w,c,17,l[2]),w=t(w,T,M,O,h,22,l[3]),O=t(O,w,T,M,f,7,l[4]),M=t(M,O,w,T,d,12,l[5]),T=t(T,M,O,w,p,17,l[6]),w=t(w,T,M,O,g,22,l[7]),O=t(O,w,T,M,y,7,l[8]),M=t(M,O,w,T,b,12,l[9]),T=t(T,M,O,w,v,17,l[10]),w=t(w,T,M,O,_,22,l[11]),O=t(O,w,T,M,m,7,l[12]),M=t(M,O,w,T,k,12,l[13]),T=t(T,M,O,w,P,17,l[14]),w=t(w,T,M,O,S,22,l[15]),O=r(O,w,T,M,u,5,l[16]),M=r(M,O,w,T,p,9,l[17]),T=r(T,M,O,w,_,14,l[18]),w=r(w,T,M,O,a,20,l[19]),O=r(O,w,T,M,d,5,l[20]),M=r(M,O,w,T,v,9,l[21]),T=r(T,M,O,w,S,14,l[22]),w=r(w,T,M,O,f,20,l[23]),O=r(O,w,T,M,b,5,l[24]),M=r(M,O,w,T,P,9,l[25]),T=r(T,M,O,w,h,14,l[26]),w=r(w,T,M,O,y,20,l[27]),O=r(O,w,T,M,k,5,l[28]),M=r(M,O,w,T,c,9,l[29]),T=r(T,M,O,w,g,14,l[30]),w=r(w,T,M,O,m,20,l[31]),O=i(O,w,T,M,d,4,l[32]),M=i(M,O,w,T,y,11,l[33]),T=i(T,M,O,w,_,16,l[34]),w=i(w,T,M,O,P,23,l[35]),O=i(O,w,T,M,u,4,l[36]),M=i(M,O,w,T,f,11,l[37]),T=i(T,M,O,w,g,16,l[38]),w=i(w,T,M,O,v,23,l[39]),O=i(O,w,T,M,k,4,l[40]),M=i(M,O,w,T,a,11,l[41]),T=i(T,M,O,w,h,16,l[42]),w=i(w,T,M,O,p,23,l[43]),O=i(O,w,T,M,b,4,l[44]),M=i(M,O,w,T,m,11,l[45]),T=i(T,M,O,w,S,16,l[46]),w=i(w,T,M,O,c,23,l[47]),O=s(O,w,T,M,a,6,l[48]),M=s(M,O,w,T,g,10,l[49]),T=s(T,M,O,w,P,15,l[50]),w=s(w,T,M,O,d,21,l[51]),O=s(O,w,T,M,m,6,l[52]),M=s(M,O,w,T,h,10,l[53]),T=s(T,M,O,w,v,15,l[54]),w=s(w,T,M,O,u,21,l[55]),O=s(O,w,T,M,y,6,l[56]),M=s(M,O,w,T,S,10,l[57]),T=s(T,M,O,w,p,15,l[58]),w=s(w,T,M,O,k,21,l[59]),O=s(O,w,T,M,f,6,l[60]),M=s(M,O,w,T,_,10,l[61]),T=s(T,M,O,w,c,15,l[62]),w=s(w,T,M,O,b,21,l[63]);o[0]=o[0]+O|0,o[1]=o[1]+w|0,o[2]=o[2]+T|0,o[3]=o[3]+M|0},_doFinalize:function(){var t=this._data,n=t.words,r=8*this._nDataBytes,i=8*t.sigBytes;n[i>>>5]|=128<<24-i%32;var s=e.floor(r/4294967296);for(n[15+(i+64>>>9<<4)]=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),n[14+(i+64>>>9<<4)]=16711935&(r<<8|r>>>24)|4278255360&(r<<24|r>>>8),t.sigBytes=4*(n.length+1),this._process(),t=this._hash,n=t.words,r=0;4>r;r++)i=n[r],n[r]=16711935&(i<<8|i>>>24)|4278255360&(i<<24|i>>>8);return t},clone:function(){var e=c.clone.call(this);return e._hash=this._hash.clone(),e}}),o.MD5=c._createHelper(a),o.HmacMD5=c._createHmacHelper(a)}(Math),function(){var e=n,t=e.lib,r=t.Base,i=t.WordArray,t=e.algo,s=t.EvpKDF=r.extend({cfg:r.extend({keySize:4,hasher:t.MD5,iterations:1}),init:function(e){this.cfg=this.cfg.extend(e)},compute:function(e,t){for(var n=this.cfg,r=n.hasher.create(),s=i.create(),o=s.words,a=n.keySize,n=n.iterations;o.length>>2]}},r.BlockCipher=c.extend({cfg:c.cfg.extend({mode:l,padding:f}),reset:function(){c.reset.call(this);var e=this.cfg,t=e.iv,e=e.mode;if(this._xformMode==this._ENC_XFORM_MODE)var n=e.createEncryptor;else n=e.createDecryptor,this._minBufferSize=1;this._mode=n.call(e,this,t&&t.words)},_doProcessBlock:function(e,t){this._mode.processBlock(e,t)},_doFinalize:function(){var e=this.cfg.padding;if(this._xformMode==this._ENC_XFORM_MODE){e.pad(this._data,this.blockSize);var t=this._process(!0)}else t=this._process(!0),e.unpad(t);return t},blockSize:4});var d=r.CipherParams=i.extend({init:function(e){this.mixIn(e)},toString:function(e){return(e||this.formatter).stringify(this)}}),l=(t.format={}).OpenSSL={stringify:function(e){var t=e.ciphertext;return e=e.salt,(e?s.create([1398893684,1701076831]).concat(e).concat(t):t).toString(a)},parse:function(e){e=a.parse(e);var t=e.words;if(1398893684==t[0]&&1701076831==t[1]){var n=s.create(t.slice(2,4));t.splice(0,4),e.sigBytes-=16}return d.create({ciphertext:e,salt:n})}},p=r.SerializableCipher=i.extend({cfg:i.extend({format:l}),encrypt:function(e,t,n,r){r=this.cfg.extend(r);var i=e.createEncryptor(n,r);return t=i.finalize(t),i=i.cfg,d.create({ciphertext:t,key:n,iv:i.iv,algorithm:e,mode:i.mode,padding:i.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}}),t=(t.kdf={}).OpenSSL={execute:function(e,t,n,r){return r||(r=s.random(8)),e=u.create({keySize:t+n}).compute(e,r),n=s.create(e.words.slice(t),4*n),e.sigBytes=4*t,d.create({key:e,iv:n,salt:r})}},g=r.PasswordBasedCipher=p.extend({cfg:p.cfg.extend({kdf:t}),encrypt:function(e,t,n,r){return r=this.cfg.extend(r),n=r.kdf.execute(n,e.keySize,e.ivSize),r.iv=n.iv,e=p.encrypt.call(this,e,t,n.key,r),e.mixIn(n),e},decrypt:function(e,t,n,r){return r=this.cfg.extend(r),t=this._parse(t,r.format),n=r.kdf.execute(n,e.keySize,e.ivSize,t.salt),r.iv=n.iv,p.decrypt.call(this,e,t,n.key,r)}})}(),function(){for(var e=n,t=e.lib.BlockCipher,r=e.algo,i=[],s=[],o=[],a=[],u=[],c=[],l=[],h=[],f=[],d=[],p=[],g=0;256>g;g++)p[g]=128>g?g<<1:g<<1^283;for(var y=0,b=0,g=0;256>g;g++){var v=b^b<<1^b<<2^b<<3^b<<4,v=v>>>8^255&v^99;i[y]=v,s[v]=y;var _=p[y],m=p[_],k=p[m],P=257*p[v]^16843008*v;o[y]=P<<24|P>>>8,a[y]=P<<16|P>>>16,u[y]=P<<8|P>>>24,c[y]=P,P=16843009*k^65537*m^257*_^16843008*y,l[v]=P<<24|P>>>8,h[v]=P<<16|P>>>16,f[v]=P<<8|P>>>24,d[v]=P,y?(y=_^p[p[p[k^_]]],b^=p[p[b]]):y=b=1}var S=[0,1,2,4,8,16,32,64,128,27,54],r=r.AES=t.extend({_doReset:function(){for(var e=this._key,t=e.words,n=e.sigBytes/4,e=4*((this._nRounds=n+6)+1),r=this._keySchedule=[],s=0;s>>24]<<24|i[o>>>16&255]<<16|i[o>>>8&255]<<8|i[255&o]):(o=o<<8|o>>>24,o=i[o>>>24]<<24|i[o>>>16&255]<<16|i[o>>>8&255]<<8|i[255&o],o^=S[s/n|0]<<24),r[s]=r[s-n]^o}for(t=this._invKeySchedule=[],n=0;nn||4>=s?o:l[i[o>>>24]]^h[i[o>>>16&255]]^f[i[o>>>8&255]]^d[i[255&o]]},encryptBlock:function(e,t){this._doCryptBlock(e,t,this._keySchedule,o,a,u,c,i)},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,h,f,d,s),n=e[t+1],e[t+1]=e[t+3],e[t+3]=n},_doCryptBlock:function(e,t,n,r,i,s,o,a){for(var u=this._nRounds,c=e[t]^n[0],l=e[t+1]^n[1],h=e[t+2]^n[2],f=e[t+3]^n[3],d=4,p=1;p>>24]^i[l>>>16&255]^s[h>>>8&255]^o[255&f]^n[d++],y=r[l>>>24]^i[h>>>16&255]^s[f>>>8&255]^o[255&c]^n[d++],b=r[h>>>24]^i[f>>>16&255]^s[c>>>8&255]^o[255&l]^n[d++],f=r[f>>>24]^i[c>>>16&255]^s[l>>>8&255]^o[255&h]^n[d++],c=g,l=y,h=b;g=(a[c>>>24]<<24|a[l>>>16&255]<<16|a[h>>>8&255]<<8|a[255&f])^n[d++],y=(a[l>>>24]<<24|a[h>>>16&255]<<16|a[f>>>8&255]<<8|a[255&c])^n[d++],b=(a[h>>>24]<<24|a[f>>>16&255]<<16|a[c>>>8&255]<<8|a[255&l])^n[d++],f=(a[f>>>24]<<24|a[c>>>16&255]<<16|a[l>>>8&255]<<8|a[255&h])^n[d++],e[t]=g,e[t+1]=y,e[t+2]=b,e[t+3]=f},keySize:8});e.AES=t._createHelper(r)}(),n.mode.ECB=function(){var e=n.lib.BlockCipherMode.extend();return e.Encryptor=e.extend({processBlock:function(e,t){this._cipher.encryptBlock(e,t)}}),e.Decryptor=e.extend({processBlock:function(e,t){this._cipher.decryptBlock(e,t)}}),e}(),e.exports=n},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var s=function(){function e(e,t){for(var n=0;n=o){var u={};u.category=y.default.PNRequestMessageCountExceededCategory,u.operation=e.operation,this._listenerManager.announceStatus(u)}i.forEach(function(e){var t=e.channel,r=e.subscriptionMatch,i=e.publishMetaData;if(t===r&&(r=null),a){if(n._dedupingManager.isDuplicate(e))return;n._dedupingManager.addEntry(e)}if(p.default.endsWith(e.channel,"-pnpres")){var s={};s.channel=null,s.subscription=null,s.actualChannel=null!=r?t:null,s.subscribedChannel=null!=r?r:t,t&&(s.channel=t.substring(0,t.lastIndexOf("-pnpres"))),r&&(s.subscription=r.substring(0,r.lastIndexOf("-pnpres"))),s.action=e.payload.action,s.state=e.payload.data,s.timetoken=i.publishTimetoken,s.occupancy=e.payload.occupancy,s.uuid=e.payload.uuid,s.timestamp=e.payload.timestamp,e.payload.join&&(s.join=e.payload.join),e.payload.leave&&(s.leave=e.payload.leave),e.payload.timeout&&(s.timeout=e.payload.timeout),n._listenerManager.announcePresence(s)}else{var o={};o.channel=null,o.subscription=null,o.actualChannel=null!=r?t:null,o.subscribedChannel=null!=r?r:t,o.channel=t,o.subscription=r,o.timetoken=i.publishTimetoken,o.publisher=e.issuingClientId,e.userMetadata&&(o.userMetadata=e.userMetadata),n._config.cipherKey?o.message=n._crypto.decrypt(e.payload):o.message=e.payload,n._listenerManager.announceMessage(o)}}),this._region=t.metadata.region,this._startSubscribeLoop()}},{key:"_stopSubscribeLoop",value:function(){this._subscribeCall&&(this._subscribeCall.abort(),this._subscribeCall=null)}}]),e}();t.default=b,e.exports=t.default},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n=this._config.maximumCacheSize&&this.hashHistory.shift(),this.hashHistory.push(this.getKey(e))}},{key:"clearHistory",value:function(){this.hashHistory=[]}}]),e}();t.default=a,e.exports=t.default},function(e,t){"use strict";function n(e){var t=[];return Object.keys(e).forEach(function(e){return t.push(e)}),t}function r(e){return encodeURIComponent(e).replace(/[!~*'()]/g,function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()})}function i(e){return n(e).sort()}function s(e){return i(e).map(function(t){return t+"="+r(e[t])}).join("&")}function o(e,t){return-1!==e.indexOf(t,this.length-t.length)}function a(){var e=void 0,t=void 0;return{promise:new Promise(function(n,r){e=n,t=r}),reject:t,fulfill:e}}e.exports={signPamFromParams:s,endsWith:o,createPromise:a,encodeString:r}},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function o(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function a(e,t){return e.type=t,e.error=!0,e}function u(e){return a({message:e},"validationError")}function c(e,t,n){return e.usePost&&e.usePost(t,n)?e.postURL(t,n):e.getURL(t,n)}function l(e){if(e.sdkName)return e.sdkName;var t="PubNub-JS-"+e.sdkFamily;return e.partnerId&&(t+="-"+e.partnerId),t+="/"+e.getVersion()}function h(e,t,n){var r=e.config,i=e.crypto;n.timestamp=Math.floor((new Date).getTime()/1e3);var s=r.subscribeKey+"\n"+r.publishKey+"\n"+t+"\n";s+=g.default.signPamFromParams(n);var o=i.HMACSHA256(s);o=o.replace(/\+/g,"-"),o=o.replace(/\//g,"_"),n.signature=o}Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){var n=e.networking,r=e.config,i=null,s=null,o={};t.getOperation()===v.default.PNTimeOperation||t.getOperation()===v.default.PNChannelGroupsOperation?i=arguments.length<=2?void 0:arguments[2]:(o=arguments.length<=2?void 0:arguments[2],i=arguments.length<=3?void 0:arguments[3]),"undefined"==typeof Promise||i||(s=g.default.createPromise());var a=t.validateParams(e,o);if(!a){var f=t.prepareParams(e,o),p=c(t,e,o),y=void 0,b={url:p,operation:t.getOperation(),timeout:t.getRequestTimeout(e)};f.uuid=r.UUID,f.pnsdk=l(r),r.useInstanceId&&(f.instanceid=r.instanceId),r.useRequestId&&(f.requestid=d.default.createUUID()),t.isAuthSupported()&&r.getAuthKey()&&(f.auth=r.getAuthKey()),r.secretKey&&h(e,p,f);var m=function(n,r){if(n.error)return void(i?i(n):s&&s.reject(new _("PubNub call failed, check status for details",n)));var a=t.handleResponse(e,r,o);i?i(n,a):s&&s.fulfill(a)};if(t.usePost&&t.usePost(e,o)){var k=t.postPayload(e,o);y=n.POST(f,k,b,m)}else y=t.useDelete&&t.useDelete()?n.DELETE(f,b,m):n.GET(f,b,m);return t.getOperation()===v.default.PNSubscribeOperation?y:s?s.promise:void 0}return i?i(u(a)):s?(s.reject(new _("Validation failed, check status for details",u(a))),s.promise):void 0};var f=n(3),d=r(f),p=(n(5),n(15)),g=r(p),y=n(2),b=(r(y),n(13)),v=r(b),_=function(e){function t(e,n){i(this,t);var r=s(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return r.name=r.constructor.name,r.status=n,r.message=e,r}return o(t,e),t}(Error);e.exports=t.default},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return f.default.PNAddChannelsToGroupOperation}function s(e,t){var n=t.channels,r=t.channelGroup,i=e.config;return r?n&&0!==n.length?i.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channels":"Missing Channel Group"}function o(e,t){var n=t.channelGroup;return"/v1/channel-registration/sub-key/"+e.config.subscribeKey+"/channel-group/"+p.default.encodeString(n)}function a(e){return e.config.getTransactionTimeout()}function u(){return!0}function c(e,t){var n=t.channels;return{add:(void 0===n?[]:n).join(",")}}function l(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=s,t.getURL=o,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var h=(n(5),n(13)),f=r(h),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return f.default.PNRemoveChannelsFromGroupOperation}function s(e,t){var n=t.channels,r=t.channelGroup,i=e.config;return r?n&&0!==n.length?i.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channels":"Missing Channel Group"}function o(e,t){var n=t.channelGroup;return"/v1/channel-registration/sub-key/"+e.config.subscribeKey+"/channel-group/"+p.default.encodeString(n)}function a(e){return e.config.getTransactionTimeout()}function u(){return!0}function c(e,t){var n=t.channels;return{remove:(void 0===n?[]:n).join(",")}}function l(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=s,t.getURL=o,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var h=(n(5),n(13)),f=r(h),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return f.default.PNRemoveGroupOperation}function s(e,t){var n=t.channelGroup,r=e.config;return n?r.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channel Group"}function o(e,t){var n=t.channelGroup;return"/v1/channel-registration/sub-key/"+e.config.subscribeKey+"/channel-group/"+p.default.encodeString(n)+"/remove"}function a(){return!0}function u(e){return e.config.getTransactionTimeout()}function c(){return{}}function l(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=s,t.getURL=o,t.isAuthSupported=a,t.getRequestTimeout=u,t.prepareParams=c,t.handleResponse=l;var h=(n(5),n(13)),f=r(h),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(){return h.default.PNChannelGroupsOperation}function i(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function s(e){return"/v1/channel-registration/sub-key/"+e.config.subscribeKey+"/channel-group"}function o(e){return e.config.getTransactionTimeout()}function a(){return!0}function u(){return{}}function c(e,t){return{groups:t.payload.groups}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=s,t.getRequestTimeout=o,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),h=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return f.default.PNChannelsForGroupOperation}function s(e,t){var n=t.channelGroup,r=e.config;return n?r.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channel Group"}function o(e,t){var n=t.channelGroup;return"/v1/channel-registration/sub-key/"+e.config.subscribeKey+"/channel-group/"+p.default.encodeString(n)}function a(e){return e.config.getTransactionTimeout()}function u(){return!0}function c(){return{}}function l(e,t){return{channels:t.payload.channels}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=s,t.getURL=o,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var h=(n(5),n(13)),f=r(h),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(){return h.default.PNPushNotificationEnabledChannelsOperation}function i(e,t){var n=t.device,r=t.pushGateway,i=t.channels,s=e.config;return n?r?i&&0!==i.length?s.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channels":"Missing GW Type (pushGateway: gcm or apns)":"Missing Device ID (device)"}function s(e,t){var n=t.device;return"/v1/push/sub-key/"+e.config.subscribeKey+"/devices/"+n}function o(e){return e.config.getTransactionTimeout()}function a(){return!0}function u(e,t){var n=t.pushGateway,r=t.channels;return{type:n,add:(void 0===r?[]:r).join(",")}}function c(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=s,t.getRequestTimeout=o,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),h=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(){return h.default.PNPushNotificationEnabledChannelsOperation}function i(e,t){var n=t.device,r=t.pushGateway,i=t.channels,s=e.config;return n?r?i&&0!==i.length?s.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channels":"Missing GW Type (pushGateway: gcm or apns)":"Missing Device ID (device)"}function s(e,t){var n=t.device;return"/v1/push/sub-key/"+e.config.subscribeKey+"/devices/"+n}function o(e){return e.config.getTransactionTimeout()}function a(){return!0}function u(e,t){var n=t.pushGateway,r=t.channels;return{type:n,remove:(void 0===r?[]:r).join(",")}}function c(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=s,t.getRequestTimeout=o,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),h=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(){return h.default.PNPushNotificationEnabledChannelsOperation}function i(e,t){var n=t.device,r=t.pushGateway,i=e.config;return n?r?i.subscribeKey?void 0:"Missing Subscribe Key":"Missing GW Type (pushGateway: gcm or apns)":"Missing Device ID (device)"}function s(e,t){var n=t.device;return"/v1/push/sub-key/"+e.config.subscribeKey+"/devices/"+n}function o(e){return e.config.getTransactionTimeout()}function a(){return!0}function u(e,t){return{type:t.pushGateway}}function c(e,t){return{channels:t}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=s,t.getRequestTimeout=o,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),h=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(){return h.default.PNRemoveAllPushNotificationsOperation}function i(e,t){var n=t.device,r=t.pushGateway,i=e.config;return n?r?i.subscribeKey?void 0:"Missing Subscribe Key":"Missing GW Type (pushGateway: gcm or apns)":"Missing Device ID (device)"}function s(e,t){var n=t.device;return"/v1/push/sub-key/"+e.config.subscribeKey+"/devices/"+n+"/remove"}function o(e){return e.config.getTransactionTimeout()}function a(){return!0}function u(e,t){return{type:t.pushGateway}}function c(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=s,t.getRequestTimeout=o,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),h=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return f.default.PNUnsubscribeOperation}function s(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function o(e,t){var n=e.config,r=t.channels,i=void 0===r?[]:r,s=i.length>0?i.join(","):",";return"/v2/presence/sub-key/"+n.subscribeKey+"/channel/"+p.default.encodeString(s)+"/leave"}function a(e){return e.config.getTransactionTimeout()}function u(){return!0}function c(e,t){var n=t.channelGroups,r=void 0===n?[]:n,i={};return r.length>0&&(i["channel-group"]=r.join(",")),i}function l(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=s,t.getURL=o,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var h=(n(5),n(13)),f=r(h),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(){return h.default.PNWhereNowOperation}function i(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function s(e,t){var n=e.config,r=t.uuid,i=void 0===r?n.UUID:r;return"/v2/presence/sub-key/"+n.subscribeKey+"/uuid/"+i}function o(e){return e.config.getTransactionTimeout()}function a(){return!0}function u(){return{}}function c(e,t){return t.payload?{channels:t.payload.channels}:{channels:[]}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=s,t.getRequestTimeout=o,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),h=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return f.default.PNHeartbeatOperation}function s(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function o(e,t){var n=e.config,r=t.channels,i=void 0===r?[]:r,s=i.length>0?i.join(","):",";return"/v2/presence/sub-key/"+n.subscribeKey+"/channel/"+p.default.encodeString(s)+"/heartbeat"}function a(){return!0}function u(e){return e.config.getTransactionTimeout()}function c(e,t){var n=t.channelGroups,r=void 0===n?[]:n,i=t.state,s=void 0===i?{}:i,o=e.config,a={};return r.length>0&&(a["channel-group"]=r.join(",")),a.state=JSON.stringify(s),a.heartbeat=o.getPresenceTimeout(),a}function l(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=s,t.getURL=o,t.isAuthSupported=a,t.getRequestTimeout=u,t.prepareParams=c,t.handleResponse=l;var h=(n(5),n(13)),f=r(h),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return f.default.PNGetStateOperation}function s(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function o(e,t){var n=e.config,r=t.uuid,i=void 0===r?n.UUID:r,s=t.channels,o=void 0===s?[]:s,a=o.length>0?o.join(","):",";return"/v2/presence/sub-key/"+n.subscribeKey+"/channel/"+p.default.encodeString(a)+"/uuid/"+i}function a(e){return e.config.getTransactionTimeout()}function u(){return!0}function c(e,t){var n=t.channelGroups,r=void 0===n?[]:n,i={};return r.length>0&&(i["channel-group"]=r.join(",")),i}function l(e,t,n){var r=n.channels,i=void 0===r?[]:r,s=n.channelGroups,o=void 0===s?[]:s,a={};return 1===i.length&&0===o.length?a[i[0]]=t.payload:a=t.payload,{channels:a}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=s,t.getURL=o,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var h=(n(5),n(13)),f=r(h),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return f.default.PNSetStateOperation}function s(e,t){var n=e.config,r=t.state,i=t.channels,s=void 0===i?[]:i,o=t.channelGroups,a=void 0===o?[]:o;return r?n.subscribeKey?0===s.length&&0===a.length?"Please provide a list of channels and/or channel-groups":void 0:"Missing Subscribe Key":"Missing State"}function o(e,t){var n=e.config,r=t.channels,i=void 0===r?[]:r,s=i.length>0?i.join(","):",";return"/v2/presence/sub-key/"+n.subscribeKey+"/channel/"+p.default.encodeString(s)+"/uuid/"+n.UUID+"/data"}function a(e){return e.config.getTransactionTimeout()}function u(){return!0}function c(e,t){var n=t.state,r=t.channelGroups,i=void 0===r?[]:r,s={};return s.state=JSON.stringify(n),i.length>0&&(s["channel-group"]=i.join(",")),s}function l(e,t){return{state:t.payload}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=s,t.getURL=o,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var h=(n(5),n(13)),f=r(h),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return f.default.PNHereNowOperation}function s(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function o(e,t){var n=e.config,r=t.channels,i=void 0===r?[]:r,s=t.channelGroups,o=void 0===s?[]:s,a="/v2/presence/sub-key/"+n.subscribeKey;if(i.length>0||o.length>0){var u=i.length>0?i.join(","):",";a+="/channel/"+p.default.encodeString(u)}return a}function a(e){return e.config.getTransactionTimeout()}function u(){return!0}function c(e,t){var n=t.channelGroups,r=void 0===n?[]:n,i=t.includeUUIDs,s=void 0===i||i,o=t.includeState,a=void 0!==o&&o,u={};return s||(u.disable_uuids=1),a&&(u.state=1),r.length>0&&(u["channel-group"]=r.join(",")),u}function l(e,t,n){var r=n.channels,i=void 0===r?[]:r,s=n.channelGroups,o=void 0===s?[]:s,a=n.includeUUIDs,u=void 0===a||a,c=n.includeState,l=void 0!==c&&c;return i.length>1||o.length>0||0===o.length&&0===i.length?function(){var e={};return e.totalChannels=t.payload.total_channels,e.totalOccupancy=t.payload.total_occupancy,e.channels={},Object.keys(t.payload.channels).forEach(function(n){var r=t.payload.channels[n],i=[];return e.channels[n]={occupants:i,name:n,occupancy:r.occupancy},u&&r.uuids.forEach(function(e){l?i.push({state:e.state,uuid:e.uuid}):i.push({state:null,uuid:e})}),e}),e}():function(){var e={},n=[];return e.totalChannels=1,e.totalOccupancy=t.occupancy,e.channels={},e.channels[i[0]]={occupants:n,name:i[0],occupancy:t.occupancy},u&&t.uuids&&t.uuids.forEach(function(e){l?n.push({state:e.state,uuid:e.uuid}):n.push({state:null,uuid:e})}),e}()}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=s,t.getURL=o,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var h=(n(5),n(13)),f=r(h),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(){return h.default.PNAccessManagerAudit}function i(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function s(e){return"/v2/auth/audit/sub-key/"+e.config.subscribeKey}function o(e){return e.config.getTransactionTimeout()}function a(){return!1}function u(e,t){var n=t.channel,r=t.channelGroup,i=t.authKeys,s=void 0===i?[]:i,o={};return n&&(o.channel=n),r&&(o["channel-group"]=r),s.length>0&&(o.auth=s.join(",")),o}function c(e,t){return t.payload}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=s,t.getRequestTimeout=o,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),h=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(){return h.default.PNAccessManagerGrant}function i(e){var t=e.config;return t.subscribeKey?t.publishKey?t.secretKey?void 0:"Missing Secret Key":"Missing Publish Key":"Missing Subscribe Key"}function s(e){return"/v2/auth/grant/sub-key/"+e.config.subscribeKey}function o(e){return e.config.getTransactionTimeout()}function a(){return!1}function u(e,t){var n=t.channels,r=void 0===n?[]:n,i=t.channelGroups,s=void 0===i?[]:i,o=t.ttl,a=t.read,u=void 0!==a&&a,c=t.write,l=void 0!==c&&c,h=t.manage,f=void 0!==h&&h,d=t.authKeys,p=void 0===d?[]:d,g={};return g.r=u?"1":"0",g.w=l?"1":"0",g.m=f?"1":"0",r.length>0&&(g.channel=r.join(",")),s.length>0&&(g["channel-group"]=s.join(",")),p.length>0&&(g.auth=p.join(",")),(o||0===o)&&(g.ttl=o),g}function c(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=s,t.getRequestTimeout=o,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),h=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){var n=e.crypto,r=e.config,i=JSON.stringify(t);return r.cipherKey&&(i=n.encrypt(i),i=JSON.stringify(i)),i}function s(){return b.default.PNPublishOperation}function o(e,t){var n=e.config,r=t.message;return t.channel?r?n.subscribeKey?void 0:"Missing Subscribe Key":"Missing Message":"Missing Channel"}function a(e,t){var n=t.sendByPost;return void 0!==n&&n}function u(e,t){var n=e.config,r=t.channel,s=t.message,o=i(e,s);return"/publish/"+n.publishKey+"/"+n.subscribeKey+"/0/"+_.default.encodeString(r)+"/0/"+_.default.encodeString(o)}function c(e,t){var n=e.config,r=t.channel;return"/publish/"+n.publishKey+"/"+n.subscribeKey+"/0/"+_.default.encodeString(r)+"/0"}function l(e){return e.config.getTransactionTimeout()}function h(){return!0}function f(e,t){return i(e,t.message)}function d(e,t){var n=t.meta,r=t.replicate,i=void 0===r||r,s=t.storeInHistory,o=t.ttl,a={};return null!=s&&(a.store=s?"1":"0"),o&&(a.ttl=o),!1===i&&(a.norep="true"),n&&"object"===(void 0===n?"undefined":g(n))&&(a.meta=JSON.stringify(n)),a}function p(e,t){return{timetoken:t[2]}}Object.defineProperty(t,"__esModule",{value:!0}) +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.PubNub=t():e.PubNub=t()}(this,function(){return function(e){function t(r){if(n[r])return n[r].exports;var i=n[r]={exports:{},id:r,loaded:!1};return e[r].call(i.exports,i,i.exports,t),i.loaded=!0,i.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function o(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function a(e){if(!navigator||!navigator.sendBeacon)return!1;navigator.sendBeacon(e)}Object.defineProperty(t,"__esModule",{value:!0});var u=n(1),c=r(u),l=n(39),h=r(l),f=n(40),d=r(f),p=n(41),g=(n(5),function(e){function t(e){i(this,t);var n=e.listenToBrowserNetworkEvents,r=void 0===n||n;e.db=d.default,e.sdkFamily="Web",e.networking=new h.default({del:p.del,get:p.get,post:p.post,sendBeacon:a});var o=s(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return r&&(window.addEventListener("offline",function(){o.networkDownDetected()}),window.addEventListener("online",function(){o.networkUpDetected()})),o}return o(t,e),t}(c.default));t.default=g,e.exports=t.default},function(e,t,n){"use strict";function r(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}function i(e){return e&&e.__esModule?e:{default:e}}function s(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e,t){for(var n=0;n>>2]|=(n[i>>>2]>>>24-i%4*8&255)<<24-(r+i)%4*8;else if(65535>>2]=n[i>>>2];else t.push.apply(t,n);return this.sigBytes+=e,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=s.clone.call(this);return e.words=this.words.slice(0),e},random:function(t){for(var n=[],r=0;r>>2]>>>24-r%4*8&255;n.push((i>>>4).toString(16)),n.push((15&i).toString(16))}return n.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 o.init(n,t/2)}},c=a.Latin1={stringify:function(e){var t=e.words;e=e.sigBytes;for(var n=[],r=0;r>>2]>>>24-r%4*8&255));return n.join("")},parse:function(e){for(var t=e.length,n=[],r=0;r>>2]|=(255&e.charCodeAt(r))<<24-r%4*8;return new o.init(n,t)}},l=a.Utf8={stringify:function(e){try{return decodeURIComponent(escape(c.stringify(e)))}catch(e){throw Error("Malformed UTF-8 data")}},parse:function(e){return c.parse(unescape(encodeURIComponent(e)))}},h=r.BufferedBlockAlgorithm=s.extend({reset:function(){this._data=new o.init,this._nDataBytes=0},_append:function(e){"string"==typeof e&&(e=l.parse(e)),this._data.concat(e),this._nDataBytes+=e.sigBytes},_process:function(t){var n=this._data,r=n.words,i=n.sigBytes,s=this.blockSize,a=i/(4*s),a=t?e.ceil(a):e.max((0|a)-this._minBufferSize,0);if(t=a*s,i=e.min(4*t,i),t){for(var u=0;ul;){var h;e:{h=c;for(var f=e.sqrt(h),d=2;d<=f;d++)if(!(h%d)){h=!1;break e}h=!0}h&&(8>l&&(o[l]=u(e.pow(c,.5))),a[l]=u(e.pow(c,1/3)),l++),c++}var p=[],r=r.SHA256=s.extend({_doReset:function(){this._hash=new i.init(o.slice(0))},_doProcessBlock:function(e,t){for(var n=this._hash.words,r=n[0],i=n[1],s=n[2],o=n[3],u=n[4],c=n[5],l=n[6],h=n[7],f=0;64>f;f++){if(16>f)p[f]=0|e[t+f];else{var d=p[f-15],g=p[f-2];p[f]=((d<<25|d>>>7)^(d<<14|d>>>18)^d>>>3)+p[f-7]+((g<<15|g>>>17)^(g<<13|g>>>19)^g>>>10)+p[f-16]}d=h+((u<<26|u>>>6)^(u<<21|u>>>11)^(u<<7|u>>>25))+(u&c^~u&l)+a[f]+p[f],g=((r<<30|r>>>2)^(r<<19|r>>>13)^(r<<10|r>>>22))+(r&i^r&s^i&s),h=l,l=c,c=u,u=o+d|0,o=s,s=i,i=r,r=d+g|0}n[0]=n[0]+r|0,n[1]=n[1]+i|0,n[2]=n[2]+s|0,n[3]=n[3]+o|0,n[4]=n[4]+u|0,n[5]=n[5]+c|0,n[6]=n[6]+l|0,n[7]=n[7]+h|0},_doFinalize:function(){var t=this._data,n=t.words,r=8*this._nDataBytes,i=8*t.sigBytes;return n[i>>>5]|=128<<24-i%32,n[14+(i+64>>>9<<4)]=e.floor(r/4294967296),n[15+(i+64>>>9<<4)]=r,t.sigBytes=4*n.length,this._process(),this._hash},clone:function(){var e=s.clone.call(this);return e._hash=this._hash.clone(),e}});t.SHA256=s._createHelper(r),t.HmacSHA256=s._createHmacHelper(r)}(Math),function(){var e=n,t=e.enc.Utf8;e.algo.HMAC=e.lib.Base.extend({init:function(e,n){e=this._hasher=new e.init,"string"==typeof n&&(n=t.parse(n));var r=e.blockSize,i=4*r;n.sigBytes>i&&(n=e.finalize(n)),n.clamp();for(var s=this._oKey=n.clone(),o=this._iKey=n.clone(),a=s.words,u=o.words,c=0;c>>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,o=0;4>o&&i+.75*o>>6*(3-o)&63));if(t=r.charAt(64))for(;e.length%4;)e.push(t);return e.join("")},parse:function(e){var n=e.length,r=this._map,i=r.charAt(64);i&&-1!=(i=e.indexOf(i))&&(n=i);for(var i=[],s=0,o=0;o>>6-o%4*2;i[s>>>2]|=(a|u)<<24-s%4*8,s++}return t.create(i,s)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="}}(),function(e){function t(e,t,n,r,i,s,o){return((e=e+(t&n|~t&r)+i+o)<>>32-s)+t}function r(e,t,n,r,i,s,o){return((e=e+(t&r|n&~r)+i+o)<>>32-s)+t}function i(e,t,n,r,i,s,o){return((e=e+(t^n^r)+i+o)<>>32-s)+t}function s(e,t,n,r,i,s,o){return((e=e+(n^(t|~r))+i+o)<>>32-s)+t}for(var o=n,a=o.lib,u=a.WordArray,c=a.Hasher,a=o.algo,l=[],h=0;64>h;h++)l[h]=4294967296*e.abs(e.sin(h+1))|0;a=a.MD5=c.extend({_doReset:function(){this._hash=new u.init([1732584193,4023233417,2562383102,271733878])},_doProcessBlock:function(e,n){for(var o=0;16>o;o++){var a=n+o,u=e[a];e[a]=16711935&(u<<8|u>>>24)|4278255360&(u<<24|u>>>8)}var o=this._hash.words,a=e[n+0],u=e[n+1],c=e[n+2],h=e[n+3],f=e[n+4],d=e[n+5],p=e[n+6],g=e[n+7],y=e[n+8],b=e[n+9],v=e[n+10],_=e[n+11],m=e[n+12],k=e[n+13],P=e[n+14],S=e[n+15],O=o[0],w=o[1],T=o[2],M=o[3],O=t(O,w,T,M,a,7,l[0]),M=t(M,O,w,T,u,12,l[1]),T=t(T,M,O,w,c,17,l[2]),w=t(w,T,M,O,h,22,l[3]),O=t(O,w,T,M,f,7,l[4]),M=t(M,O,w,T,d,12,l[5]),T=t(T,M,O,w,p,17,l[6]),w=t(w,T,M,O,g,22,l[7]),O=t(O,w,T,M,y,7,l[8]),M=t(M,O,w,T,b,12,l[9]),T=t(T,M,O,w,v,17,l[10]),w=t(w,T,M,O,_,22,l[11]),O=t(O,w,T,M,m,7,l[12]),M=t(M,O,w,T,k,12,l[13]),T=t(T,M,O,w,P,17,l[14]),w=t(w,T,M,O,S,22,l[15]),O=r(O,w,T,M,u,5,l[16]),M=r(M,O,w,T,p,9,l[17]),T=r(T,M,O,w,_,14,l[18]),w=r(w,T,M,O,a,20,l[19]),O=r(O,w,T,M,d,5,l[20]),M=r(M,O,w,T,v,9,l[21]),T=r(T,M,O,w,S,14,l[22]),w=r(w,T,M,O,f,20,l[23]),O=r(O,w,T,M,b,5,l[24]),M=r(M,O,w,T,P,9,l[25]),T=r(T,M,O,w,h,14,l[26]),w=r(w,T,M,O,y,20,l[27]),O=r(O,w,T,M,k,5,l[28]),M=r(M,O,w,T,c,9,l[29]),T=r(T,M,O,w,g,14,l[30]),w=r(w,T,M,O,m,20,l[31]),O=i(O,w,T,M,d,4,l[32]),M=i(M,O,w,T,y,11,l[33]),T=i(T,M,O,w,_,16,l[34]),w=i(w,T,M,O,P,23,l[35]),O=i(O,w,T,M,u,4,l[36]),M=i(M,O,w,T,f,11,l[37]),T=i(T,M,O,w,g,16,l[38]),w=i(w,T,M,O,v,23,l[39]),O=i(O,w,T,M,k,4,l[40]),M=i(M,O,w,T,a,11,l[41]),T=i(T,M,O,w,h,16,l[42]),w=i(w,T,M,O,p,23,l[43]),O=i(O,w,T,M,b,4,l[44]),M=i(M,O,w,T,m,11,l[45]),T=i(T,M,O,w,S,16,l[46]),w=i(w,T,M,O,c,23,l[47]),O=s(O,w,T,M,a,6,l[48]),M=s(M,O,w,T,g,10,l[49]),T=s(T,M,O,w,P,15,l[50]),w=s(w,T,M,O,d,21,l[51]),O=s(O,w,T,M,m,6,l[52]),M=s(M,O,w,T,h,10,l[53]),T=s(T,M,O,w,v,15,l[54]),w=s(w,T,M,O,u,21,l[55]),O=s(O,w,T,M,y,6,l[56]),M=s(M,O,w,T,S,10,l[57]),T=s(T,M,O,w,p,15,l[58]),w=s(w,T,M,O,k,21,l[59]),O=s(O,w,T,M,f,6,l[60]),M=s(M,O,w,T,_,10,l[61]),T=s(T,M,O,w,c,15,l[62]),w=s(w,T,M,O,b,21,l[63]);o[0]=o[0]+O|0,o[1]=o[1]+w|0,o[2]=o[2]+T|0,o[3]=o[3]+M|0},_doFinalize:function(){var t=this._data,n=t.words,r=8*this._nDataBytes,i=8*t.sigBytes;n[i>>>5]|=128<<24-i%32;var s=e.floor(r/4294967296);for(n[15+(i+64>>>9<<4)]=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),n[14+(i+64>>>9<<4)]=16711935&(r<<8|r>>>24)|4278255360&(r<<24|r>>>8),t.sigBytes=4*(n.length+1),this._process(),t=this._hash,n=t.words,r=0;4>r;r++)i=n[r],n[r]=16711935&(i<<8|i>>>24)|4278255360&(i<<24|i>>>8);return t},clone:function(){var e=c.clone.call(this);return e._hash=this._hash.clone(),e}}),o.MD5=c._createHelper(a),o.HmacMD5=c._createHmacHelper(a)}(Math),function(){var e=n,t=e.lib,r=t.Base,i=t.WordArray,t=e.algo,s=t.EvpKDF=r.extend({cfg:r.extend({keySize:4,hasher:t.MD5,iterations:1}),init:function(e){this.cfg=this.cfg.extend(e)},compute:function(e,t){for(var n=this.cfg,r=n.hasher.create(),s=i.create(),o=s.words,a=n.keySize,n=n.iterations;o.length>>2]}},r.BlockCipher=c.extend({cfg:c.cfg.extend({mode:l,padding:f}),reset:function(){c.reset.call(this);var e=this.cfg,t=e.iv,e=e.mode;if(this._xformMode==this._ENC_XFORM_MODE)var n=e.createEncryptor;else n=e.createDecryptor,this._minBufferSize=1;this._mode=n.call(e,this,t&&t.words)},_doProcessBlock:function(e,t){this._mode.processBlock(e,t)},_doFinalize:function(){var e=this.cfg.padding;if(this._xformMode==this._ENC_XFORM_MODE){e.pad(this._data,this.blockSize);var t=this._process(!0)}else t=this._process(!0),e.unpad(t);return t},blockSize:4});var d=r.CipherParams=i.extend({init:function(e){this.mixIn(e)},toString:function(e){return(e||this.formatter).stringify(this)}}),l=(t.format={}).OpenSSL={stringify:function(e){var t=e.ciphertext;return e=e.salt,(e?s.create([1398893684,1701076831]).concat(e).concat(t):t).toString(a)},parse:function(e){e=a.parse(e);var t=e.words;if(1398893684==t[0]&&1701076831==t[1]){var n=s.create(t.slice(2,4));t.splice(0,4),e.sigBytes-=16}return d.create({ciphertext:e,salt:n})}},p=r.SerializableCipher=i.extend({cfg:i.extend({format:l}),encrypt:function(e,t,n,r){r=this.cfg.extend(r);var i=e.createEncryptor(n,r);return t=i.finalize(t),i=i.cfg,d.create({ciphertext:t,key:n,iv:i.iv,algorithm:e,mode:i.mode,padding:i.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}}),t=(t.kdf={}).OpenSSL={execute:function(e,t,n,r){return r||(r=s.random(8)),e=u.create({keySize:t+n}).compute(e,r),n=s.create(e.words.slice(t),4*n),e.sigBytes=4*t,d.create({key:e,iv:n,salt:r})}},g=r.PasswordBasedCipher=p.extend({cfg:p.cfg.extend({kdf:t}),encrypt:function(e,t,n,r){return r=this.cfg.extend(r),n=r.kdf.execute(n,e.keySize,e.ivSize),r.iv=n.iv,e=p.encrypt.call(this,e,t,n.key,r),e.mixIn(n),e},decrypt:function(e,t,n,r){return r=this.cfg.extend(r),t=this._parse(t,r.format),n=r.kdf.execute(n,e.keySize,e.ivSize,t.salt),r.iv=n.iv,p.decrypt.call(this,e,t,n.key,r)}})}(),function(){for(var e=n,t=e.lib.BlockCipher,r=e.algo,i=[],s=[],o=[],a=[],u=[],c=[],l=[],h=[],f=[],d=[],p=[],g=0;256>g;g++)p[g]=128>g?g<<1:g<<1^283;for(var y=0,b=0,g=0;256>g;g++){var v=b^b<<1^b<<2^b<<3^b<<4,v=v>>>8^255&v^99;i[y]=v,s[v]=y;var _=p[y],m=p[_],k=p[m],P=257*p[v]^16843008*v;o[y]=P<<24|P>>>8,a[y]=P<<16|P>>>16,u[y]=P<<8|P>>>24,c[y]=P,P=16843009*k^65537*m^257*_^16843008*y,l[v]=P<<24|P>>>8,h[v]=P<<16|P>>>16,f[v]=P<<8|P>>>24,d[v]=P,y?(y=_^p[p[p[k^_]]],b^=p[p[b]]):y=b=1}var S=[0,1,2,4,8,16,32,64,128,27,54],r=r.AES=t.extend({_doReset:function(){for(var e=this._key,t=e.words,n=e.sigBytes/4,e=4*((this._nRounds=n+6)+1),r=this._keySchedule=[],s=0;s>>24]<<24|i[o>>>16&255]<<16|i[o>>>8&255]<<8|i[255&o]):(o=o<<8|o>>>24,o=i[o>>>24]<<24|i[o>>>16&255]<<16|i[o>>>8&255]<<8|i[255&o],o^=S[s/n|0]<<24),r[s]=r[s-n]^o}for(t=this._invKeySchedule=[],n=0;nn||4>=s?o:l[i[o>>>24]]^h[i[o>>>16&255]]^f[i[o>>>8&255]]^d[i[255&o]]},encryptBlock:function(e,t){this._doCryptBlock(e,t,this._keySchedule,o,a,u,c,i)},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,h,f,d,s),n=e[t+1],e[t+1]=e[t+3],e[t+3]=n},_doCryptBlock:function(e,t,n,r,i,s,o,a){for(var u=this._nRounds,c=e[t]^n[0],l=e[t+1]^n[1],h=e[t+2]^n[2],f=e[t+3]^n[3],d=4,p=1;p>>24]^i[l>>>16&255]^s[h>>>8&255]^o[255&f]^n[d++],y=r[l>>>24]^i[h>>>16&255]^s[f>>>8&255]^o[255&c]^n[d++],b=r[h>>>24]^i[f>>>16&255]^s[c>>>8&255]^o[255&l]^n[d++],f=r[f>>>24]^i[c>>>16&255]^s[l>>>8&255]^o[255&h]^n[d++],c=g,l=y,h=b;g=(a[c>>>24]<<24|a[l>>>16&255]<<16|a[h>>>8&255]<<8|a[255&f])^n[d++],y=(a[l>>>24]<<24|a[h>>>16&255]<<16|a[f>>>8&255]<<8|a[255&c])^n[d++],b=(a[h>>>24]<<24|a[f>>>16&255]<<16|a[c>>>8&255]<<8|a[255&l])^n[d++],f=(a[f>>>24]<<24|a[c>>>16&255]<<16|a[l>>>8&255]<<8|a[255&h])^n[d++],e[t]=g,e[t+1]=y,e[t+2]=b,e[t+3]=f},keySize:8});e.AES=t._createHelper(r)}(),n.mode.ECB=function(){var e=n.lib.BlockCipherMode.extend();return e.Encryptor=e.extend({processBlock:function(e,t){this._cipher.encryptBlock(e,t)}}),e.Decryptor=e.extend({processBlock:function(e,t){this._cipher.decryptBlock(e,t)}}),e}(),e.exports=n},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var s=function(){function e(e,t){for(var n=0;n=o){var u={};u.category=y.default.PNRequestMessageCountExceededCategory,u.operation=e.operation,this._listenerManager.announceStatus(u)}i.forEach(function(e){var t=e.channel,r=e.subscriptionMatch,i=e.publishMetaData;if(t===r&&(r=null),a){if(n._dedupingManager.isDuplicate(e))return;n._dedupingManager.addEntry(e)}if(p.default.endsWith(e.channel,"-pnpres")){var s={};s.channel=null,s.subscription=null,s.actualChannel=null!=r?t:null,s.subscribedChannel=null!=r?r:t,t&&(s.channel=t.substring(0,t.lastIndexOf("-pnpres"))),r&&(s.subscription=r.substring(0,r.lastIndexOf("-pnpres"))),s.action=e.payload.action,s.state=e.payload.data,s.timetoken=i.publishTimetoken,s.occupancy=e.payload.occupancy,s.uuid=e.payload.uuid,s.timestamp=e.payload.timestamp,e.payload.join&&(s.join=e.payload.join),e.payload.leave&&(s.leave=e.payload.leave),e.payload.timeout&&(s.timeout=e.payload.timeout),n._listenerManager.announcePresence(s)}else{var o={};o.channel=null,o.subscription=null,o.actualChannel=null!=r?t:null,o.subscribedChannel=null!=r?r:t,o.channel=t,o.subscription=r,o.timetoken=i.publishTimetoken,o.publisher=e.issuingClientId,e.userMetadata&&(o.userMetadata=e.userMetadata),n._config.cipherKey?o.message=n._crypto.decrypt(e.payload):o.message=e.payload,n._listenerManager.announceMessage(o)}}),this._region=t.metadata.region,this._startSubscribeLoop()}},{key:"_stopSubscribeLoop",value:function(){this._subscribeCall&&("function"==typeof this._subscribeCall.abort&&this._subscribeCall.abort(),this._subscribeCall=null)}}]),e}();t.default=b,e.exports=t.default},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n=this._config.maximumCacheSize&&this.hashHistory.shift(),this.hashHistory.push(this.getKey(e))}},{key:"clearHistory",value:function(){this.hashHistory=[]}}]),e}();t.default=a,e.exports=t.default},function(e,t){"use strict";function n(e){var t=[];return Object.keys(e).forEach(function(e){return t.push(e)}),t}function r(e){return encodeURIComponent(e).replace(/[!~*'()]/g,function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()})}function i(e){return n(e).sort()}function s(e){return i(e).map(function(t){return t+"="+r(e[t])}).join("&")}function o(e,t){return-1!==e.indexOf(t,this.length-t.length)}function a(){var e=void 0,t=void 0;return{promise:new Promise(function(n,r){e=n,t=r}),reject:t,fulfill:e}}e.exports={signPamFromParams:s,endsWith:o,createPromise:a,encodeString:r}},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function o(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function a(e,t){return e.type=t,e.error=!0,e}function u(e){return a({message:e},"validationError")}function c(e,t,n){return e.usePost&&e.usePost(t,n)?e.postURL(t,n):e.getURL(t,n)}function l(e){if(e.sdkName)return e.sdkName;var t="PubNub-JS-"+e.sdkFamily;return e.partnerId&&(t+="-"+e.partnerId),t+="/"+e.getVersion()}function h(e,t,n){var r=e.config,i=e.crypto;n.timestamp=Math.floor((new Date).getTime()/1e3);var s=r.subscribeKey+"\n"+r.publishKey+"\n"+t+"\n";s+=g.default.signPamFromParams(n);var o=i.HMACSHA256(s);o=o.replace(/\+/g,"-"),o=o.replace(/\//g,"_"),n.signature=o}Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){var n=e.networking,r=e.config,i=null,s=null,o={};t.getOperation()===v.default.PNTimeOperation||t.getOperation()===v.default.PNChannelGroupsOperation?i=arguments.length<=2?void 0:arguments[2]:(o=arguments.length<=2?void 0:arguments[2],i=arguments.length<=3?void 0:arguments[3]),"undefined"==typeof Promise||i||(s=g.default.createPromise());var a=t.validateParams(e,o);if(!a){var f=t.prepareParams(e,o),p=c(t,e,o),y=void 0,b={url:p,operation:t.getOperation(),timeout:t.getRequestTimeout(e)};f.uuid=r.UUID,f.pnsdk=l(r),r.useInstanceId&&(f.instanceid=r.instanceId),r.useRequestId&&(f.requestid=d.default.createUUID()),t.isAuthSupported()&&r.getAuthKey()&&(f.auth=r.getAuthKey()),r.secretKey&&h(e,p,f);var m=function(n,r){if(n.error)return void(i?i(n):s&&s.reject(new _("PubNub call failed, check status for details",n)));var a=t.handleResponse(e,r,o);i?i(n,a):s&&s.fulfill(a)};if(t.usePost&&t.usePost(e,o)){var k=t.postPayload(e,o);y=n.POST(f,k,b,m)}else y=t.useDelete&&t.useDelete()?n.DELETE(f,b,m):n.GET(f,b,m);return t.getOperation()===v.default.PNSubscribeOperation?y:s?s.promise:void 0}return i?i(u(a)):s?(s.reject(new _("Validation failed, check status for details",u(a))),s.promise):void 0};var f=n(3),d=r(f),p=(n(5),n(15)),g=r(p),y=n(2),b=(r(y),n(13)),v=r(b),_=function(e){function t(e,n){i(this,t);var r=s(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return r.name=r.constructor.name,r.status=n,r.message=e,r}return o(t,e),t}(Error);e.exports=t.default},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return f.default.PNAddChannelsToGroupOperation}function s(e,t){var n=t.channels,r=t.channelGroup,i=e.config;return r?n&&0!==n.length?i.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channels":"Missing Channel Group"}function o(e,t){var n=t.channelGroup;return"/v1/channel-registration/sub-key/"+e.config.subscribeKey+"/channel-group/"+p.default.encodeString(n)}function a(e){return e.config.getTransactionTimeout()}function u(){return!0}function c(e,t){var n=t.channels;return{add:(void 0===n?[]:n).join(",")}}function l(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=s,t.getURL=o,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var h=(n(5),n(13)),f=r(h),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return f.default.PNRemoveChannelsFromGroupOperation}function s(e,t){var n=t.channels,r=t.channelGroup,i=e.config;return r?n&&0!==n.length?i.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channels":"Missing Channel Group"}function o(e,t){var n=t.channelGroup;return"/v1/channel-registration/sub-key/"+e.config.subscribeKey+"/channel-group/"+p.default.encodeString(n)}function a(e){return e.config.getTransactionTimeout()}function u(){return!0}function c(e,t){var n=t.channels;return{remove:(void 0===n?[]:n).join(",")}}function l(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=s,t.getURL=o,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var h=(n(5),n(13)),f=r(h),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return f.default.PNRemoveGroupOperation}function s(e,t){var n=t.channelGroup,r=e.config;return n?r.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channel Group"}function o(e,t){var n=t.channelGroup;return"/v1/channel-registration/sub-key/"+e.config.subscribeKey+"/channel-group/"+p.default.encodeString(n)+"/remove"}function a(){return!0}function u(e){return e.config.getTransactionTimeout()}function c(){return{}}function l(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=s,t.getURL=o,t.isAuthSupported=a,t.getRequestTimeout=u,t.prepareParams=c,t.handleResponse=l;var h=(n(5),n(13)),f=r(h),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(){return h.default.PNChannelGroupsOperation}function i(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function s(e){return"/v1/channel-registration/sub-key/"+e.config.subscribeKey+"/channel-group"}function o(e){return e.config.getTransactionTimeout()}function a(){return!0}function u(){return{}}function c(e,t){return{groups:t.payload.groups}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=s,t.getRequestTimeout=o,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),h=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return f.default.PNChannelsForGroupOperation}function s(e,t){var n=t.channelGroup,r=e.config;return n?r.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channel Group"}function o(e,t){var n=t.channelGroup;return"/v1/channel-registration/sub-key/"+e.config.subscribeKey+"/channel-group/"+p.default.encodeString(n)}function a(e){return e.config.getTransactionTimeout()}function u(){return!0}function c(){return{}}function l(e,t){return{channels:t.payload.channels}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=s,t.getURL=o,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var h=(n(5),n(13)),f=r(h),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(){return h.default.PNPushNotificationEnabledChannelsOperation}function i(e,t){var n=t.device,r=t.pushGateway,i=t.channels,s=e.config;return n?r?i&&0!==i.length?s.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channels":"Missing GW Type (pushGateway: gcm or apns)":"Missing Device ID (device)"}function s(e,t){var n=t.device;return"/v1/push/sub-key/"+e.config.subscribeKey+"/devices/"+n}function o(e){return e.config.getTransactionTimeout()}function a(){return!0}function u(e,t){var n=t.pushGateway,r=t.channels;return{type:n,add:(void 0===r?[]:r).join(",")}}function c(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=s,t.getRequestTimeout=o,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),h=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(){return h.default.PNPushNotificationEnabledChannelsOperation}function i(e,t){var n=t.device,r=t.pushGateway,i=t.channels,s=e.config;return n?r?i&&0!==i.length?s.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channels":"Missing GW Type (pushGateway: gcm or apns)":"Missing Device ID (device)"}function s(e,t){var n=t.device;return"/v1/push/sub-key/"+e.config.subscribeKey+"/devices/"+n}function o(e){return e.config.getTransactionTimeout()}function a(){return!0}function u(e,t){var n=t.pushGateway,r=t.channels;return{type:n,remove:(void 0===r?[]:r).join(",")}}function c(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=s,t.getRequestTimeout=o,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),h=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(){return h.default.PNPushNotificationEnabledChannelsOperation}function i(e,t){var n=t.device,r=t.pushGateway,i=e.config;return n?r?i.subscribeKey?void 0:"Missing Subscribe Key":"Missing GW Type (pushGateway: gcm or apns)":"Missing Device ID (device)"}function s(e,t){var n=t.device;return"/v1/push/sub-key/"+e.config.subscribeKey+"/devices/"+n}function o(e){return e.config.getTransactionTimeout()}function a(){return!0}function u(e,t){return{type:t.pushGateway}}function c(e,t){return{channels:t}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=s,t.getRequestTimeout=o,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),h=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(){return h.default.PNRemoveAllPushNotificationsOperation}function i(e,t){var n=t.device,r=t.pushGateway,i=e.config;return n?r?i.subscribeKey?void 0:"Missing Subscribe Key":"Missing GW Type (pushGateway: gcm or apns)":"Missing Device ID (device)"}function s(e,t){var n=t.device;return"/v1/push/sub-key/"+e.config.subscribeKey+"/devices/"+n+"/remove"}function o(e){return e.config.getTransactionTimeout()}function a(){return!0}function u(e,t){return{type:t.pushGateway}}function c(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=s,t.getRequestTimeout=o,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),h=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return f.default.PNUnsubscribeOperation}function s(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function o(e,t){var n=e.config,r=t.channels,i=void 0===r?[]:r,s=i.length>0?i.join(","):",";return"/v2/presence/sub-key/"+n.subscribeKey+"/channel/"+p.default.encodeString(s)+"/leave"}function a(e){return e.config.getTransactionTimeout()}function u(){return!0}function c(e,t){var n=t.channelGroups,r=void 0===n?[]:n,i={};return r.length>0&&(i["channel-group"]=r.join(",")),i}function l(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=s,t.getURL=o,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var h=(n(5),n(13)),f=r(h),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(){return h.default.PNWhereNowOperation}function i(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function s(e,t){var n=e.config,r=t.uuid,i=void 0===r?n.UUID:r;return"/v2/presence/sub-key/"+n.subscribeKey+"/uuid/"+i}function o(e){return e.config.getTransactionTimeout()}function a(){return!0}function u(){return{}}function c(e,t){return t.payload?{channels:t.payload.channels}:{channels:[]}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=s,t.getRequestTimeout=o,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),h=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return f.default.PNHeartbeatOperation}function s(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function o(e,t){var n=e.config,r=t.channels,i=void 0===r?[]:r,s=i.length>0?i.join(","):",";return"/v2/presence/sub-key/"+n.subscribeKey+"/channel/"+p.default.encodeString(s)+"/heartbeat"}function a(){return!0}function u(e){return e.config.getTransactionTimeout()}function c(e,t){var n=t.channelGroups,r=void 0===n?[]:n,i=t.state,s=void 0===i?{}:i,o=e.config,a={};return r.length>0&&(a["channel-group"]=r.join(",")),a.state=JSON.stringify(s),a.heartbeat=o.getPresenceTimeout(),a}function l(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=s,t.getURL=o,t.isAuthSupported=a,t.getRequestTimeout=u,t.prepareParams=c,t.handleResponse=l;var h=(n(5),n(13)),f=r(h),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return f.default.PNGetStateOperation}function s(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function o(e,t){var n=e.config,r=t.uuid,i=void 0===r?n.UUID:r,s=t.channels,o=void 0===s?[]:s,a=o.length>0?o.join(","):",";return"/v2/presence/sub-key/"+n.subscribeKey+"/channel/"+p.default.encodeString(a)+"/uuid/"+i}function a(e){return e.config.getTransactionTimeout()}function u(){return!0}function c(e,t){var n=t.channelGroups,r=void 0===n?[]:n,i={};return r.length>0&&(i["channel-group"]=r.join(",")),i}function l(e,t,n){var r=n.channels,i=void 0===r?[]:r,s=n.channelGroups,o=void 0===s?[]:s,a={};return 1===i.length&&0===o.length?a[i[0]]=t.payload:a=t.payload,{channels:a}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=s,t.getURL=o,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var h=(n(5),n(13)),f=r(h),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return f.default.PNSetStateOperation}function s(e,t){var n=e.config,r=t.state,i=t.channels,s=void 0===i?[]:i,o=t.channelGroups,a=void 0===o?[]:o;return r?n.subscribeKey?0===s.length&&0===a.length?"Please provide a list of channels and/or channel-groups":void 0:"Missing Subscribe Key":"Missing State"}function o(e,t){var n=e.config,r=t.channels,i=void 0===r?[]:r,s=i.length>0?i.join(","):",";return"/v2/presence/sub-key/"+n.subscribeKey+"/channel/"+p.default.encodeString(s)+"/uuid/"+n.UUID+"/data"}function a(e){return e.config.getTransactionTimeout()}function u(){return!0}function c(e,t){var n=t.state,r=t.channelGroups,i=void 0===r?[]:r,s={};return s.state=JSON.stringify(n),i.length>0&&(s["channel-group"]=i.join(",")),s}function l(e,t){return{state:t.payload}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=s,t.getURL=o,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var h=(n(5),n(13)),f=r(h),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return f.default.PNHereNowOperation}function s(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function o(e,t){var n=e.config,r=t.channels,i=void 0===r?[]:r,s=t.channelGroups,o=void 0===s?[]:s,a="/v2/presence/sub-key/"+n.subscribeKey;if(i.length>0||o.length>0){var u=i.length>0?i.join(","):",";a+="/channel/"+p.default.encodeString(u)}return a}function a(e){return e.config.getTransactionTimeout()}function u(){return!0}function c(e,t){var n=t.channelGroups,r=void 0===n?[]:n,i=t.includeUUIDs,s=void 0===i||i,o=t.includeState,a=void 0!==o&&o,u={};return s||(u.disable_uuids=1),a&&(u.state=1),r.length>0&&(u["channel-group"]=r.join(",")),u}function l(e,t,n){var r=n.channels,i=void 0===r?[]:r,s=n.channelGroups,o=void 0===s?[]:s,a=n.includeUUIDs,u=void 0===a||a,c=n.includeState,l=void 0!==c&&c;return i.length>1||o.length>0||0===o.length&&0===i.length?function(){var e={};return e.totalChannels=t.payload.total_channels,e.totalOccupancy=t.payload.total_occupancy,e.channels={},Object.keys(t.payload.channels).forEach(function(n){var r=t.payload.channels[n],i=[];return e.channels[n]={occupants:i,name:n,occupancy:r.occupancy},u&&r.uuids.forEach(function(e){l?i.push({state:e.state,uuid:e.uuid}):i.push({state:null,uuid:e})}),e}),e}():function(){var e={},n=[];return e.totalChannels=1,e.totalOccupancy=t.occupancy,e.channels={},e.channels[i[0]]={occupants:n,name:i[0],occupancy:t.occupancy},u&&t.uuids&&t.uuids.forEach(function(e){l?n.push({state:e.state,uuid:e.uuid}):n.push({state:null,uuid:e})}),e}()}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=s,t.getURL=o,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var h=(n(5),n(13)),f=r(h),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(){return h.default.PNAccessManagerAudit}function i(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function s(e){return"/v2/auth/audit/sub-key/"+e.config.subscribeKey}function o(e){return e.config.getTransactionTimeout()}function a(){return!1}function u(e,t){var n=t.channel,r=t.channelGroup,i=t.authKeys,s=void 0===i?[]:i,o={};return n&&(o.channel=n),r&&(o["channel-group"]=r),s.length>0&&(o.auth=s.join(",")),o}function c(e,t){return t.payload}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=s,t.getRequestTimeout=o,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),h=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(){return h.default.PNAccessManagerGrant}function i(e){var t=e.config;return t.subscribeKey?t.publishKey?t.secretKey?void 0:"Missing Secret Key":"Missing Publish Key":"Missing Subscribe Key"}function s(e){return"/v2/auth/grant/sub-key/"+e.config.subscribeKey}function o(e){return e.config.getTransactionTimeout()}function a(){return!1}function u(e,t){var n=t.channels,r=void 0===n?[]:n,i=t.channelGroups,s=void 0===i?[]:i,o=t.ttl,a=t.read,u=void 0!==a&&a,c=t.write,l=void 0!==c&&c,h=t.manage,f=void 0!==h&&h,d=t.authKeys,p=void 0===d?[]:d,g={};return g.r=u?"1":"0",g.w=l?"1":"0",g.m=f?"1":"0",r.length>0&&(g.channel=r.join(",")),s.length>0&&(g["channel-group"]=s.join(",")),p.length>0&&(g.auth=p.join(",")),(o||0===o)&&(g.ttl=o),g}function c(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=s,t.getRequestTimeout=o,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),h=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){var n=e.crypto,r=e.config,i=JSON.stringify(t);return r.cipherKey&&(i=n.encrypt(i),i=JSON.stringify(i)),i}function s(){return b.default.PNPublishOperation}function o(e,t){var n=e.config,r=t.message;return t.channel?r?n.subscribeKey?void 0:"Missing Subscribe Key":"Missing Message":"Missing Channel"}function a(e,t){var n=t.sendByPost;return void 0!==n&&n}function u(e,t){var n=e.config,r=t.channel,s=t.message,o=i(e,s);return"/publish/"+n.publishKey+"/"+n.subscribeKey+"/0/"+_.default.encodeString(r)+"/0/"+_.default.encodeString(o)}function c(e,t){var n=e.config,r=t.channel;return"/publish/"+n.publishKey+"/"+n.subscribeKey+"/0/"+_.default.encodeString(r)+"/0"}function l(e){return e.config.getTransactionTimeout()}function h(){return!0}function f(e,t){return i(e,t.message)}function d(e,t){var n=t.meta,r=t.replicate,i=void 0===r||r,s=t.storeInHistory,o=t.ttl,a={};return null!=s&&(a.store=s?"1":"0"),o&&(a.ttl=o),!1===i&&(a.norep="true"),n&&"object"===(void 0===n?"undefined":g(n))&&(a.meta=JSON.stringify(n)),a}function p(e,t){return{timetoken:t[2]}}Object.defineProperty(t,"__esModule",{value:!0}) ;var g="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};t.getOperation=s,t.validateParams=o,t.usePost=a,t.getURL=u,t.postURL=c,t.getRequestTimeout=l,t.isAuthSupported=h,t.postPayload=f,t.prepareParams=d,t.handleResponse=p;var y=(n(5),n(13)),b=r(y),v=n(15),_=r(v)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){var n=e.config,r=e.crypto;if(!n.cipherKey)return t;try{return r.decrypt(t)}catch(e){return t}}function s(){return d.default.PNHistoryOperation}function o(e,t){var n=t.channel,r=e.config;return n?r.subscribeKey?void 0:"Missing Subscribe Key":"Missing channel"}function a(e,t){var n=t.channel;return"/v2/history/sub-key/"+e.config.subscribeKey+"/channel/"+g.default.encodeString(n)}function u(e){return e.config.getTransactionTimeout()}function c(){return!0}function l(e,t){var n=t.start,r=t.end,i=t.reverse,s=t.count,o=void 0===s?100:s,a=t.stringifiedTimeToken,u=void 0!==a&&a,c={include_token:"true"};return c.count=o,n&&(c.start=n),r&&(c.end=r),u&&(c.string_message_token="true"),null!=i&&(c.reverse=i.toString()),c}function h(e,t){var n={messages:[],startTimeToken:t[1],endTimeToken:t[2]};return t[0].forEach(function(t){var r={timetoken:t.timetoken,entry:i(e,t.message)};n.messages.push(r)}),n}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=s,t.validateParams=o,t.getURL=a,t.getRequestTimeout=u,t.isAuthSupported=c,t.prepareParams=l,t.handleResponse=h;var f=(n(5),n(13)),d=r(f),p=n(15),g=r(p)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return d.default.PNDeleteMessagesOperation}function s(e,t){var n=t.channel,r=e.config;return n?r.subscribeKey?void 0:"Missing Subscribe Key":"Missing channel"}function o(){return!0}function a(e,t){var n=t.channel,r=t.start,i=t.end,s=e.config,o="";return r&&(o="?start="+r),i&&(o+=(""!==o?"&":"?")+"end="+i),"/v3/history/sub-key/"+s.subscribeKey+"/channel/"+g.default.encodeString(n)+o}function u(e){return e.config.getTransactionTimeout()}function c(){return!0}function l(e,t){var n=t.start,r=t.end,i={};return n&&(i.start=n),r&&(i.end=r),{}}function h(e,t){return t.payload}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=s,t.useDelete=o,t.getURL=a,t.getRequestTimeout=u,t.isAuthSupported=c,t.prepareParams=l,t.handleResponse=h;var f=(n(5),n(13)),d=r(f),p=n(15),g=r(p)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){var n=e.config,r=e.crypto;if(!n.cipherKey)return t;try{return r.decrypt(t)}catch(e){return t}}function s(){return d.default.PNFetchMessagesOperation}function o(e,t){var n=t.channels,r=e.config;return n&&0!==n.length?r.subscribeKey?void 0:"Missing Subscribe Key":"Missing channels"}function a(e,t){var n=t.channels,r=void 0===n?[]:n,i=e.config,s=r.length>0?r.join(","):",";return"/v3/history/sub-key/"+i.subscribeKey+"/channel/"+g.default.encodeString(s)}function u(e){return e.config.getTransactionTimeout()}function c(){return!0}function l(e,t){var n=t.start,r=t.end,i=t.count,s={};return i&&(s.max=i),n&&(s.start=n),r&&(s.end=r),s}function h(e,t){var n={channels:{}};return Object.keys(t.channels||{}).forEach(function(r){n.channels[r]=[],(t.channels[r]||[]).forEach(function(t){var s={};s.channel=r,s.subscription=null,s.timetoken=t.timetoken,s.message=i(e,t.message),n.channels[r].push(s)})}),n}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=s,t.validateParams=o,t.getURL=a,t.getRequestTimeout=u,t.isAuthSupported=c,t.prepareParams=l,t.handleResponse=h;var f=(n(5),n(13)),d=r(f),p=n(15),g=r(p)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return f.default.PNSubscribeOperation}function s(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function o(e,t){var n=e.config,r=t.channels,i=void 0===r?[]:r,s=i.length>0?i.join(","):",";return"/v2/subscribe/"+n.subscribeKey+"/"+p.default.encodeString(s)+"/0"}function a(e){return e.config.getSubscribeTimeout()}function u(){return!0}function c(e,t){var n=e.config,r=t.channelGroups,i=void 0===r?[]:r,s=t.timetoken,o=t.filterExpression,a=t.region,u={heartbeat:n.getPresenceTimeout()};return i.length>0&&(u["channel-group"]=i.join(",")),o&&o.length>0&&(u["filter-expr"]=o),s&&(u.tt=s),a&&(u.tr=a),u}function l(e,t){var n=[];t.m.forEach(function(e){var t={publishTimetoken:e.p.t,region:e.p.r},r={shard:parseInt(e.a,10),subscriptionMatch:e.b,channel:e.c,payload:e.d,flags:e.f,issuingClientId:e.i,subscribeKey:e.k,originationTimetoken:e.o,userMetadata:e.u,publishMetaData:t};n.push(r)});var r={timetoken:t.t.t,region:t.t.r};return{messages:n,metadata:r}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=s,t.getURL=o,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var h=(n(5),n(13)),f=r(h),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var s=function(){function e(e,t){for(var n=0;n=this._maxSubDomain&&(this._currentSubDomain=1),e=this._currentSubDomain.toString(),this._providedFQDN.replace("pubsub","ps"+e)}},{key:"shiftStandardOrigin",value:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return this._standardOrigin=this.nextOrigin(e),this._standardOrigin}},{key:"getStandardOrigin",value:function(){return this._standardOrigin}},{key:"POST",value:function(e,t,n,r){return this._modules.post(e,t,n,r)}},{key:"GET",value:function(e,t,n){return this._modules.get(e,t,n)}},{key:"DELETE",value:function(e,t,n){return this._modules.del(e,t,n)}},{key:"_detectErrorCategory",value:function(e){if("ENOTFOUND"===e.code)return u.default.PNNetworkIssuesCategory;if("ECONNREFUSED"===e.code)return u.default.PNNetworkIssuesCategory;if("ECONNRESET"===e.code)return u.default.PNNetworkIssuesCategory;if("EAI_AGAIN"===e.code)return u.default.PNNetworkIssuesCategory;if(0===e.status||e.hasOwnProperty("status")&&void 0===e.status)return u.default.PNNetworkIssuesCategory;if(e.timeout)return u.default.PNTimeoutCategory;if(e.response){if(e.response.badRequest)return u.default.PNBadRequestCategory;if(e.response.forbidden)return u.default.PNAccessDeniedCategory}return u.default.PNUnknownCategory}}]),e}());t.default=c,e.exports=t.default},function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={get:function(e){try{return localStorage.getItem(e)}catch(e){return null}},set:function(e,t){try{return localStorage.setItem(e,t)}catch(e){return null}}},e.exports=t.default},function(e,t,n){"use strict";function r(e){var t=(new Date).getTime(),n=(new Date).toISOString(),r=function(){return console&&console.log?console:window&&window.console&&window.console.log?window.console:console}();r.log("<<<<<"),r.log("["+n+"]","\n",e.url,"\n",e.qs),r.log("-----"),e.on("response",function(n){var i=(new Date).getTime(),s=i-t,o=(new Date).toISOString();r.log(">>>>>>"),r.log("["+o+" / "+s+"]","\n",e.url,"\n",e.qs,"\n",n.text),r.log("-----")})}function i(e,t,n){var i=this;return this._config.logVerbosity&&(e=e.use(r)),this._config.proxy&&this._modules.proxy&&(e=this._modules.proxy.call(this,e)),this._config.keepAlive&&this._modules.keepAlive&&(e=this._modules.keepAlive(e)),e.timeout(t.timeout).end(function(e,r){var s={};if(s.error=null!==e,s.operation=t.operation,r&&r.status&&(s.statusCode=r.status),e)return s.errorData=e,s.category=i._detectErrorCategory(e),n(s,null);var o=JSON.parse(r.text);return o.error&&1===o.error&&o.status&&o.message&&o.service?(s.errorData=o,s.statusCode=o.status,s.error=!0,s.category=i._detectErrorCategory(s),n(s,null)):n(s,o)})}function s(e,t,n){var r=c.default.get(this.getStandardOrigin()+t.url).query(e);return i.call(this,r,t,n)}function o(e,t,n,r){var s=c.default.post(this.getStandardOrigin()+n.url).query(e).send(t);return i.call(this,s,n,r)}function a(e,t,n){var r=c.default.delete(this.getStandardOrigin()+t.url).query(e);return i.call(this,r,t,n)}Object.defineProperty(t,"__esModule",{value:!0}),t.get=s,t.post=o,t.del=a;var u=n(42),c=function(e){return e&&e.__esModule?e:{default:e}}(u);n(5)},function(e,t,n){function r(){}function i(e){if(!b(e))return e;var t=[];for(var n in e)s(t,n,e[n]);return t.join("&")}function s(e,t,n){if(null!=n)if(Array.isArray(n))n.forEach(function(n){s(e,t,n)});else if(b(n))for(var r in n)s(e,t+"["+r+"]",n[r]);else e.push(encodeURIComponent(t)+"="+encodeURIComponent(n));else null===n&&e.push(encodeURIComponent(t))}function o(e){for(var t,n,r={},i=e.split("&"),s=0,o=i.length;s=300)&&(r=new Error(t.statusText||"Unsuccessful HTTP response"),r.original=e,r.response=t,r.status=t.status)}catch(e){r=e}r?n.callback(r,t):n.callback(null,t)})}function d(e,t){var n=v("DELETE",e);return t&&n.end(t),n}var p;"undefined"!=typeof window?p=window:"undefined"!=typeof self?p=self:(console.warn("Using browser-only version of superagent in non-browser environment"),p=this);var g=n(43),y=n(44),b=n(45),v=e.exports=n(46).bind(null,f);v.getXHR=function(){if(!(!p.XMLHttpRequest||p.location&&"file:"==p.location.protocol&&p.ActiveXObject))return new XMLHttpRequest;try{return new ActiveXObject("Microsoft.XMLHTTP")}catch(e){}try{return new ActiveXObject("Msxml2.XMLHTTP.6.0")}catch(e){}try{return new ActiveXObject("Msxml2.XMLHTTP.3.0")}catch(e){}try{return new ActiveXObject("Msxml2.XMLHTTP")}catch(e){}throw Error("Browser-only verison of superagent could not find XHR")};var _="".trim?function(e){return e.trim()}:function(e){return e.replace(/(^\s*|\s*$)/g,"")};v.serializeObject=i,v.parseString=o,v.types={html:"text/html",json:"application/json",xml:"application/xml",urlencoded:"application/x-www-form-urlencoded",form:"application/x-www-form-urlencoded","form-data":"application/x-www-form-urlencoded"},v.serialize={"application/x-www-form-urlencoded":i,"application/json":JSON.stringify},v.parse={"application/x-www-form-urlencoded":o,"application/json":JSON.parse},h.prototype.get=function(e){return this.header[e.toLowerCase()]},h.prototype._setHeaderProperties=function(e){var t=this.header["content-type"]||"";this.type=c(t);var n=l(t);for(var r in n)this[r]=n[r]},h.prototype._parseBody=function(e){var t=v.parse[this.type];return!t&&u(this.type)&&(t=v.parse["application/json"]),t&&e&&(e.length||e instanceof Object)?t(e):null},h.prototype._setStatusProperties=function(e){1223===e&&(e=204);var t=e/100|0;this.status=this.statusCode=e,this.statusType=t,this.info=1==t,this.ok=2==t,this.clientError=4==t,this.serverError=5==t,this.error=(4==t||5==t)&&this.toError(),this.accepted=202==e,this.noContent=204==e,this.badRequest=400==e,this.unauthorized=401==e,this.notAcceptable=406==e,this.notFound=404==e,this.forbidden=403==e},h.prototype.toError=function(){var e=this.req,t=e.method,n=e.url,r="cannot "+t+" "+n+" ("+this.status+")",i=new Error(r);return i.status=this.status,i.method=t,i.url=n,i},v.Response=h,g(f.prototype);for(var m in y)f.prototype[m]=y[m];f.prototype.type=function(e){return this.set("Content-Type",v.types[e]||e),this},f.prototype.responseType=function(e){return this._responseType=e,this},f.prototype.accept=function(e){return this.set("Accept",v.types[e]||e),this},f.prototype.auth=function(e,t,n){switch(n||(n={type:"basic"}),n.type){case"basic":var r=btoa(e+":"+t);this.set("Authorization","Basic "+r);break;case"auto":this.username=e,this.password=t}return this},f.prototype.query=function(e){return"string"!=typeof e&&(e=i(e)),e&&this._query.push(e),this},f.prototype.attach=function(e,t,n){return this._getFormData().append(e,t,n||t.name),this},f.prototype._getFormData=function(){return this._formData||(this._formData=new p.FormData),this._formData},f.prototype.callback=function(e,t){var n=this._callback;this.clearTimeout(),n(e,t)},f.prototype.crossDomainError=function(){var e=new Error("Request has been terminated\nPossible causes: the network is offline, Origin is not allowed by Access-Control-Allow-Origin, the page is being unloaded, etc.");e.crossDomain=!0,e.status=this.status,e.method=this.method,e.url=this.url,this.callback(e)},f.prototype._timeoutError=function(){var e=this._timeout,t=new Error("timeout of "+e+"ms exceeded");t.timeout=e,this.callback(t)},f.prototype._appendQueryString=function(){var e=this._query.join("&");e&&(this.url+=~this.url.indexOf("?")?"&"+e:"?"+e)},f.prototype.end=function(e){var t=this,n=this.xhr=v.getXHR(),i=this._timeout,s=this._formData||this._data;this._callback=e||r,n.onreadystatechange=function(){if(4==n.readyState){var e;try{e=n.status}catch(t){e=0}if(0==e){if(t.timedout)return t._timeoutError();if(t._aborted)return;return t.crossDomainError()}t.emit("end")}};var o=function(e,n){n.total>0&&(n.percent=n.loaded/n.total*100),n.direction=e,t.emit("progress",n)};if(this.hasListeners("progress"))try{n.onprogress=o.bind(null,"download"),n.upload&&(n.upload.onprogress=o.bind(null,"upload"))}catch(e){}if(i&&!this._timer&&(this._timer=setTimeout(function(){t.timedout=!0,t.abort()},i)),this._appendQueryString(),this.username&&this.password?n.open(this.method,this.url,!0,this.username,this.password):n.open(this.method,this.url,!0),this._withCredentials&&(n.withCredentials=!0),"GET"!=this.method&&"HEAD"!=this.method&&"string"!=typeof s&&!this._isHost(s)){var a=this._header["content-type"],c=this._serializer||v.serialize[a?a.split(";")[0]:""];!c&&u(a)&&(c=v.serialize["application/json"]),c&&(s=c(s))}for(var l in this.header)null!=this.header[l]&&n.setRequestHeader(l,this.header[l]);return this._responseType&&(n.responseType=this._responseType),this.emit("request",this),n.send(void 0!==s?s:null),this},v.Request=f,v.get=function(e,t,n){var r=v("GET",e);return"function"==typeof t&&(n=t,t=null),t&&r.query(t),n&&r.end(n),r},v.head=function(e,t,n){var r=v("HEAD",e);return"function"==typeof t&&(n=t,t=null),t&&r.send(t),n&&r.end(n),r},v.options=function(e,t,n){var r=v("OPTIONS",e);return"function"==typeof t&&(n=t,t=null),t&&r.send(t),n&&r.end(n),r},v.del=d,v.delete=d,v.patch=function(e,t,n){var r=v("PATCH",e);return"function"==typeof t&&(n=t,t=null),t&&r.send(t),n&&r.end(n),r},v.post=function(e,t,n){var r=v("POST",e);return"function"==typeof t&&(n=t,t=null),t&&r.send(t),n&&r.end(n),r},v.put=function(e,t,n){var r=v("PUT",e);return"function"==typeof t&&(n=t,t=null),t&&r.send(t),n&&r.end(n),r}},function(e,t,n){function r(e){if(e)return i(e)}function i(e){for(var t in r.prototype)e[t]=r.prototype[t];return e}e.exports=r,r.prototype.on=r.prototype.addEventListener=function(e,t){return this._callbacks=this._callbacks||{},(this._callbacks["$"+e]=this._callbacks["$"+e]||[]).push(t),this},r.prototype.once=function(e,t){function n(){this.off(e,n),t.apply(this,arguments)}return n.fn=t,this.on(e,n),this},r.prototype.off=r.prototype.removeListener=r.prototype.removeAllListeners=r.prototype.removeEventListener=function(e,t){if(this._callbacks=this._callbacks||{},0==arguments.length)return this._callbacks={},this;var n=this._callbacks["$"+e];if(!n)return this;if(1==arguments.length)return delete this._callbacks["$"+e],this;for(var r,i=0;i\n useInstanceId: boolean;\n\n // if requestId config is true, the SDK will pass a unique request identifier with each request as request_id=\n useRequestId: boolean;\n\n // use connection keep-alive for http requests\n keepAlive: ?boolean;\n\n keepAliveSettings: ?KeepAliveStruct;\n\n // if autoNetworkDetection config is true, the SDK will emit NetworkUp and NetworkDown when there changes in the networking\n autoNetworkDetection: ?boolean;\n\n // alert when a heartbeat works out.\n announceSuccessfulHeartbeats: boolean;\n announceFailedHeartbeats: boolean;\n\n /*\n how long the server will wait before declaring that the client is gone.\n */\n _presenceTimeout: number;\n\n /*\n how often (in seconds) the client should announce its presence to server\n */\n _heartbeatInterval: number;\n\n /*\n how long to wait for the server when running the subscribe loop\n */\n _subscribeRequestTimeout: number;\n /*\n how long to wait for the server when making transactional requests\n */\n _transactionalRequestTimeout: number;\n /*\n use send beacon API when unsubscribing.\n https://developer.mozilla.org/en-US/docs/Web/API/Navigator/sendBeacon\n */\n _useSendBeacon: boolean;\n\n /*\n if set, the SDK will alert if more messages arrive in one subscribe than the theshold\n */\n requestMessageCountThreshold: number;\n\n /*\n Restore subscription list on disconnection.\n */\n restore: boolean;\n\n\n /*\n support for client deduping\n */\n dedupeOnSubscribe: boolean\n maximumCacheSize: number\n\n /*\n support customp encryption and decryption functions.\n */\n customEncrypt: Function // function to support custome encryption of messages\n customDecrypt: Function // function used to decrypt old version messages\n\n constructor({ setup, db } : ConfigConstructArgs) {\n this._db = db;\n\n this.instanceId = `pn-${uuidGenerator.createUUID()}`;\n this.secretKey = setup.secretKey || setup.secret_key;\n this.subscribeKey = setup.subscribeKey || setup.subscribe_key;\n this.publishKey = setup.publishKey || setup.publish_key;\n this.sdkName = setup.sdkName;\n this.sdkFamily = setup.sdkFamily;\n this.partnerId = setup.partnerId;\n this.setAuthKey(setup.authKey);\n this.setCipherKey(setup.cipherKey);\n\n this.setFilterExpression(setup.filterExpression);\n\n this.origin = setup.origin || 'pubsub.pndsn.com';\n this.secure = setup.ssl || false;\n this.restore = setup.restore || false;\n this.proxy = setup.proxy;\n this.keepAlive = setup.keepAlive;\n this.keepAliveSettings = setup.keepAliveSettings;\n this.autoNetworkDetection = setup.autoNetworkDetection || false;\n\n this.dedupeOnSubscribe = setup.dedupeOnSubscribe || false;\n this.maximumCacheSize = setup.maximumCacheSize || 100;\n\n this.customEncrypt = setup.customEncrypt;\n this.customDecrypt = setup.customDecrypt;\n\n // if location config exist and we are in https, force secure to true.\n if (typeof location !== 'undefined' && location.protocol === 'https:') {\n this.secure = true;\n }\n\n this.logVerbosity = setup.logVerbosity || false;\n this.suppressLeaveEvents = setup.suppressLeaveEvents || false;\n\n this.announceFailedHeartbeats = setup.announceFailedHeartbeats || true;\n this.announceSuccessfulHeartbeats = setup.announceSuccessfulHeartbeats || false;\n\n this.useInstanceId = setup.useInstanceId || false;\n this.useRequestId = setup.useRequestId || false;\n\n this.requestMessageCountThreshold = setup.requestMessageCountThreshold;\n\n // set timeout to how long a transaction request will wait for the server (default 15 seconds)\n this.setTransactionTimeout(setup.transactionalRequestTimeout || 15 * 1000);\n // set timeout to how long a subscribe event loop will run (default 310 seconds)\n this.setSubscribeTimeout(setup.subscribeRequestTimeout || 310 * 1000);\n // set config on beacon (https://developer.mozilla.org/en-US/docs/Web/API/Navigator/sendBeacon) usage\n this.setSendBeaconConfig(setup.useSendBeacon || true);\n // how long the SDK will report the client to be alive before issuing a timeout\n this.setPresenceTimeout(setup.presenceTimeout || 300);\n\n if (setup.heartbeatInterval != null) {\n this.setHeartbeatInterval(setup.heartbeatInterval);\n }\n\n this.setUUID(this._decideUUID(setup.uuid)); // UUID decision depends on subKey.\n }\n\n // exposed setters\n getAuthKey(): string { return this.authKey; }\n setAuthKey(val: string): this { this.authKey = val; return this; }\n setCipherKey(val: string): this { this.cipherKey = val; return this; }\n getUUID(): string { return this.UUID; }\n setUUID(val: string): this {\n if (this._db && this._db.set) this._db.set(`${this.subscribeKey}uuid`, val);\n this.UUID = val;\n return this;\n }\n\n getFilterExpression(): string { return this.filterExpression; }\n setFilterExpression(val: string): this { this.filterExpression = val; return this; }\n\n getPresenceTimeout(): number { return this._presenceTimeout; }\n setPresenceTimeout(val: number): this {\n this._presenceTimeout = val;\n this.setHeartbeatInterval((this._presenceTimeout / 2) - 1);\n return this;\n }\n\n getHeartbeatInterval(): number { return this._heartbeatInterval; }\n setHeartbeatInterval(val: number): this { this._heartbeatInterval = val; return this; }\n\n // deprecated setters.\n getSubscribeTimeout(): number { return this._subscribeRequestTimeout; }\n setSubscribeTimeout(val: number): this { this._subscribeRequestTimeout = val; return this; }\n\n getTransactionTimeout(): number { return this._transactionalRequestTimeout; }\n setTransactionTimeout(val: number): this { this._transactionalRequestTimeout = val; return this; }\n\n isSendBeaconEnabled(): boolean { return this._useSendBeacon; }\n setSendBeaconConfig(val: boolean): this { this._useSendBeacon = val; return this; }\n\n getVersion(): string {\n return '4.18.0';\n }\n\n _decideUUID(providedUUID: string): string {\n // if the uuid was provided by setup, use this UUID.\n if (providedUUID) {\n return providedUUID;\n }\n\n // if the database module is enabled and we have something saved, use this.\n if (this._db && this._db.get && this._db.get(`${this.subscribeKey}uuid`)) {\n return this._db.get(`${this.subscribeKey}uuid`);\n }\n\n // randomize the UUID and push to storage\n return `pn-${uuidGenerator.createUUID()}`;\n }\n}\n"]} \ No newline at end of file +{"version":3,"sources":["core/components/config.js"],"names":["setup","db","_db","instanceId","createUUID","secretKey","secret_key","subscribeKey","subscribe_key","publishKey","publish_key","sdkName","sdkFamily","partnerId","setAuthKey","authKey","setCipherKey","cipherKey","setFilterExpression","filterExpression","origin","secure","ssl","restore","proxy","keepAlive","keepAliveSettings","autoNetworkDetection","dedupeOnSubscribe","maximumCacheSize","customEncrypt","customDecrypt","location","protocol","logVerbosity","suppressLeaveEvents","announceFailedHeartbeats","announceSuccessfulHeartbeats","useInstanceId","useRequestId","requestMessageCountThreshold","setTransactionTimeout","transactionalRequestTimeout","setSubscribeTimeout","subscribeRequestTimeout","setSendBeaconConfig","useSendBeacon","setPresenceTimeout","presenceTimeout","heartbeatInterval","setHeartbeatInterval","setUUID","_decideUUID","uuid","val","UUID","set","_presenceTimeout","_heartbeatInterval","_subscribeRequestTimeout","_transactionalRequestTimeout","_useSendBeacon","providedUUID","get"],"mappings":"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","file":"config.js","sourcesContent":["/* @flow */\n/* global location */\n\nimport uuidGenerator from './uuid';\nimport { InternalSetupStruct, DatabaseInterface, KeepAliveStruct } from '../flow_interfaces';\n\ntype ConfigConstructArgs = {\n setup: InternalSetupStruct,\n db: DatabaseInterface\n}\n\nexport default class {\n\n _db: DatabaseInterface;\n\n subscribeKey: string;\n publishKey: string;\n secretKey: string;\n cipherKey: string;\n authKey: string;\n UUID: string;\n\n proxy: string;\n\n /*\n if _useInstanceId is true, this instanceId will be added to all requests\n */\n instanceId: string;\n\n /*\n If the SDK is running as part of another SDK built atop of it, allow a custom pnsdk with name and version.\n */\n sdkName: string;\n\n /*\n keep track of the SDK family for identifier generator\n */\n sdkFamily: string;\n\n /*\n If the SDK is operated by a partner, allow a custom pnsdk item for them.\n */\n partnerId: string;\n\n /*\n filter expression to pass along when subscribing.\n */\n filterExpression: string;\n /*\n configuration to supress leave events; when a presence leave is performed\n this configuration will disallow the leave event from happening\n */\n suppressLeaveEvents: boolean;\n\n /*\n use SSL for http requests?\n */\n secure: boolean;\n\n // Custom optional origin.\n origin: string;\n\n // log verbosity: true to output lots of info\n logVerbosity: boolean;\n\n // if instanceId config is true, the SDK will pass the unique instance identifier to the server as instanceId=\n useInstanceId: boolean;\n\n // if requestId config is true, the SDK will pass a unique request identifier with each request as request_id=\n useRequestId: boolean;\n\n // use connection keep-alive for http requests\n keepAlive: ?boolean;\n\n keepAliveSettings: ?KeepAliveStruct;\n\n // if autoNetworkDetection config is true, the SDK will emit NetworkUp and NetworkDown when there changes in the networking\n autoNetworkDetection: ?boolean;\n\n // alert when a heartbeat works out.\n announceSuccessfulHeartbeats: boolean;\n announceFailedHeartbeats: boolean;\n\n /*\n how long the server will wait before declaring that the client is gone.\n */\n _presenceTimeout: number;\n\n /*\n how often (in seconds) the client should announce its presence to server\n */\n _heartbeatInterval: number;\n\n /*\n how long to wait for the server when running the subscribe loop\n */\n _subscribeRequestTimeout: number;\n /*\n how long to wait for the server when making transactional requests\n */\n _transactionalRequestTimeout: number;\n /*\n use send beacon API when unsubscribing.\n https://developer.mozilla.org/en-US/docs/Web/API/Navigator/sendBeacon\n */\n _useSendBeacon: boolean;\n\n /*\n if set, the SDK will alert if more messages arrive in one subscribe than the theshold\n */\n requestMessageCountThreshold: number;\n\n /*\n Restore subscription list on disconnection.\n */\n restore: boolean;\n\n\n /*\n support for client deduping\n */\n dedupeOnSubscribe: boolean\n maximumCacheSize: number\n\n /*\n support customp encryption and decryption functions.\n */\n customEncrypt: Function // function to support custome encryption of messages\n customDecrypt: Function // function used to decrypt old version messages\n\n constructor({ setup, db } : ConfigConstructArgs) {\n this._db = db;\n\n this.instanceId = `pn-${uuidGenerator.createUUID()}`;\n this.secretKey = setup.secretKey || setup.secret_key;\n this.subscribeKey = setup.subscribeKey || setup.subscribe_key;\n this.publishKey = setup.publishKey || setup.publish_key;\n this.sdkName = setup.sdkName;\n this.sdkFamily = setup.sdkFamily;\n this.partnerId = setup.partnerId;\n this.setAuthKey(setup.authKey);\n this.setCipherKey(setup.cipherKey);\n\n this.setFilterExpression(setup.filterExpression);\n\n this.origin = setup.origin || 'pubsub.pndsn.com';\n this.secure = setup.ssl || false;\n this.restore = setup.restore || false;\n this.proxy = setup.proxy;\n this.keepAlive = setup.keepAlive;\n this.keepAliveSettings = setup.keepAliveSettings;\n this.autoNetworkDetection = setup.autoNetworkDetection || false;\n\n this.dedupeOnSubscribe = setup.dedupeOnSubscribe || false;\n this.maximumCacheSize = setup.maximumCacheSize || 100;\n\n this.customEncrypt = setup.customEncrypt;\n this.customDecrypt = setup.customDecrypt;\n\n // if location config exist and we are in https, force secure to true.\n if (typeof location !== 'undefined' && location.protocol === 'https:') {\n this.secure = true;\n }\n\n this.logVerbosity = setup.logVerbosity || false;\n this.suppressLeaveEvents = setup.suppressLeaveEvents || false;\n\n this.announceFailedHeartbeats = setup.announceFailedHeartbeats || true;\n this.announceSuccessfulHeartbeats = setup.announceSuccessfulHeartbeats || false;\n\n this.useInstanceId = setup.useInstanceId || false;\n this.useRequestId = setup.useRequestId || false;\n\n this.requestMessageCountThreshold = setup.requestMessageCountThreshold;\n\n // set timeout to how long a transaction request will wait for the server (default 15 seconds)\n this.setTransactionTimeout(setup.transactionalRequestTimeout || 15 * 1000);\n // set timeout to how long a subscribe event loop will run (default 310 seconds)\n this.setSubscribeTimeout(setup.subscribeRequestTimeout || 310 * 1000);\n // set config on beacon (https://developer.mozilla.org/en-US/docs/Web/API/Navigator/sendBeacon) usage\n this.setSendBeaconConfig(setup.useSendBeacon || true);\n // how long the SDK will report the client to be alive before issuing a timeout\n this.setPresenceTimeout(setup.presenceTimeout || 300);\n\n if (setup.heartbeatInterval != null) {\n this.setHeartbeatInterval(setup.heartbeatInterval);\n }\n\n this.setUUID(this._decideUUID(setup.uuid)); // UUID decision depends on subKey.\n }\n\n // exposed setters\n getAuthKey(): string { return this.authKey; }\n setAuthKey(val: string): this { this.authKey = val; return this; }\n setCipherKey(val: string): this { this.cipherKey = val; return this; }\n getUUID(): string { return this.UUID; }\n setUUID(val: string): this {\n if (this._db && this._db.set) this._db.set(`${this.subscribeKey}uuid`, val);\n this.UUID = val;\n return this;\n }\n\n getFilterExpression(): string { return this.filterExpression; }\n setFilterExpression(val: string): this { this.filterExpression = val; return this; }\n\n getPresenceTimeout(): number { return this._presenceTimeout; }\n setPresenceTimeout(val: number): this {\n this._presenceTimeout = val;\n this.setHeartbeatInterval((this._presenceTimeout / 2) - 1);\n return this;\n }\n\n getHeartbeatInterval(): number { return this._heartbeatInterval; }\n setHeartbeatInterval(val: number): this { this._heartbeatInterval = val; return this; }\n\n // deprecated setters.\n getSubscribeTimeout(): number { return this._subscribeRequestTimeout; }\n setSubscribeTimeout(val: number): this { this._subscribeRequestTimeout = val; return this; }\n\n getTransactionTimeout(): number { return this._transactionalRequestTimeout; }\n setTransactionTimeout(val: number): this { this._transactionalRequestTimeout = val; return this; }\n\n isSendBeaconEnabled(): boolean { return this._useSendBeacon; }\n setSendBeaconConfig(val: boolean): this { this._useSendBeacon = val; return this; }\n\n getVersion(): string {\n return '4.19.0';\n }\n\n _decideUUID(providedUUID: string): string {\n // if the uuid was provided by setup, use this UUID.\n if (providedUUID) {\n return providedUUID;\n }\n\n // if the database module is enabled and we have something saved, use this.\n if (this._db && this._db.get && this._db.get(`${this.subscribeKey}uuid`)) {\n return this._db.get(`${this.subscribeKey}uuid`);\n }\n\n // randomize the UUID and push to storage\n return `pn-${uuidGenerator.createUUID()}`;\n }\n}\n"]} \ No newline at end of file diff --git a/lib/core/components/deduping_manager.js b/lib/core/components/deduping_manager.js index 95cf08b5e..19bea34f6 100644 --- a/lib/core/components/deduping_manager.js +++ b/lib/core/components/deduping_manager.js @@ -10,6 +10,8 @@ var _config = require('../components/config'); var _config2 = _interopRequireDefault(_config); +var _flow_interfaces = require('../flow_interfaces'); + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } diff --git a/lib/core/components/deduping_manager.js.map b/lib/core/components/deduping_manager.js.map index 4b564417e..0db77db82 100644 --- a/lib/core/components/deduping_manager.js.map +++ b/lib/core/components/deduping_manager.js.map @@ -1 +1 @@ -{"version":3,"sources":["core/components/deduping_manager.js"],"names":["hashCode","payload","hash","length","i","character","charCodeAt","config","hashHistory","_config","message","hashedPayload","JSON","stringify","toString","timetoken","publishMetaData","publishTimetoken","includes","getKey","maximumCacheSize","shift","push"],"mappings":";;;;;;;;AAEA;;;;;;;;AAMA,IAAMA,WAAW,SAAXA,QAAW,CAACC,OAAD,EAAa;AAC5B,MAAIC,OAAO,CAAX;AACA,MAAID,QAAQE,MAAR,KAAmB,CAAvB,EAA0B,OAAOD,IAAP;AAC1B,OAAK,IAAIE,IAAI,CAAb,EAAgBA,IAAIH,QAAQE,MAA5B,EAAoCC,KAAK,CAAzC,EAA4C;AAC1C,QAAIC,YAAYJ,QAAQK,UAAR,CAAmBF,CAAnB,CAAhB;AACAF,WAAQ,CAACA,QAAQ,CAAT,IAAcA,IAAf,GAAuBG,SAA9B;AACAH,WAAOA,OAAOA,IAAd;AACD;AACD,SAAOA,IAAP;AACD,CATD;;;AAgBE,wBAAkD;AAAA,QAApCK,MAAoC,QAApCA,MAAoC;;AAAA;;AAChD,SAAKC,WAAL,GAAmB,EAAnB;AACA,SAAKC,OAAL,GAAeF,MAAf;AACD;;;;2BAEMG,O,EAAS;AACd,UAAMC,gBAAgBX,SAASY,KAAKC,SAAL,CAAeH,QAAQT,OAAvB,CAAT,EAA0Ca,QAA1C,EAAtB;AACA,UAAMC,YAAYL,QAAQM,eAAR,CAAwBC,gBAA1C;AACA,aAAUF,SAAV,SAAuBJ,aAAvB;AACD;;;gCAEWD,O,EAAS;AACnB,aAAO,KAAKF,WAAL,CAAiBU,QAAjB,CAA0B,KAAKC,MAAL,CAAYT,OAAZ,CAA1B,CAAP;AACD;;;6BAEQA,O,EAAS;AAChB,UAAI,KAAKF,WAAL,CAAiBL,MAAjB,IAA2B,KAAKM,OAAL,CAAaW,gBAA5C,EAA8D;AAC5D,aAAKZ,WAAL,CAAiBa,KAAjB;AACD;;AAED,WAAKb,WAAL,CAAiBc,IAAjB,CAAsB,KAAKH,MAAL,CAAYT,OAAZ,CAAtB;AACD;;;mCAEc;AACb,WAAKF,WAAL,GAAmB,EAAnB;AACD","file":"deduping_manager.js","sourcesContent":["/* @flow */\n\nimport Config from '../components/config';\n\ntype DedupingManagerConsturct = {\n config: Config,\n}\n\nconst hashCode = (payload) => {\n let hash = 0;\n if (payload.length === 0) return hash;\n for (let i = 0; i < payload.length; i += 1) {\n let character = payload.charCodeAt(i);\n hash = ((hash << 5) - hash) + character; // eslint-disable-line\n hash = hash & hash; // eslint-disable-line\n }\n return hash;\n};\n\nexport default class {\n\n _config: Config;\n hashHistory: Array;\n\n constructor({ config }: DedupingManagerConsturct) {\n this.hashHistory = [];\n this._config = config;\n }\n\n getKey(message) {\n const hashedPayload = hashCode(JSON.stringify(message.payload)).toString();\n const timetoken = message.publishMetaData.publishTimetoken;\n return `${timetoken}-${hashedPayload}`;\n }\n\n isDuplicate(message) {\n return this.hashHistory.includes(this.getKey(message));\n }\n\n addEntry(message) {\n if (this.hashHistory.length >= this._config.maximumCacheSize) {\n this.hashHistory.shift();\n }\n\n this.hashHistory.push(this.getKey(message));\n }\n\n clearHistory() {\n this.hashHistory = [];\n }\n\n}\n"]} \ No newline at end of file +{"version":3,"sources":["core/components/deduping_manager.js"],"names":["hashCode","payload","hash","length","i","character","charCodeAt","config","hashHistory","_config","message","hashedPayload","JSON","stringify","toString","timetoken","publishMetaData","publishTimetoken","includes","getKey","maximumCacheSize","shift","push"],"mappings":";;;;;;;;AAEA;;;;AACA;;;;;;AAMA,IAAMA,WAAW,SAAXA,QAAW,CAACC,OAAD,EAAa;AAC5B,MAAIC,OAAO,CAAX;AACA,MAAID,QAAQE,MAAR,KAAmB,CAAvB,EAA0B,OAAOD,IAAP;AAC1B,OAAK,IAAIE,IAAI,CAAb,EAAgBA,IAAIH,QAAQE,MAA5B,EAAoCC,KAAK,CAAzC,EAA4C;AAC1C,QAAIC,YAAYJ,QAAQK,UAAR,CAAmBF,CAAnB,CAAhB;AACAF,WAAQ,CAACA,QAAQ,CAAT,IAAcA,IAAf,GAAuBG,SAA9B;AACAH,WAAOA,OAAOA,IAAd;AACD;AACD,SAAOA,IAAP;AACD,CATD;;;AAgBE,wBAAkD;AAAA,QAApCK,MAAoC,QAApCA,MAAoC;;AAAA;;AAChD,SAAKC,WAAL,GAAmB,EAAnB;AACA,SAAKC,OAAL,GAAeF,MAAf;AACD;;;;2BAEMG,O,EAA2B;AAChC,UAAMC,gBAAgBX,SAASY,KAAKC,SAAL,CAAeH,QAAQT,OAAvB,CAAT,EAA0Ca,QAA1C,EAAtB;AACA,UAAMC,YAAYL,QAAQM,eAAR,CAAwBC,gBAA1C;AACA,aAAUF,SAAV,SAAuBJ,aAAvB;AACD;;;gCAEWD,O,EAA2B;AACrC,aAAO,KAAKF,WAAL,CAAiBU,QAAjB,CAA0B,KAAKC,MAAL,CAAYT,OAAZ,CAA1B,CAAP;AACD;;;6BAEQA,O,EAA2B;AAClC,UAAI,KAAKF,WAAL,CAAiBL,MAAjB,IAA2B,KAAKM,OAAL,CAAaW,gBAA5C,EAA8D;AAC5D,aAAKZ,WAAL,CAAiBa,KAAjB;AACD;;AAED,WAAKb,WAAL,CAAiBc,IAAjB,CAAsB,KAAKH,MAAL,CAAYT,OAAZ,CAAtB;AACD;;;mCAEc;AACb,WAAKF,WAAL,GAAmB,EAAnB;AACD","file":"deduping_manager.js","sourcesContent":["/* @flow */\n\nimport Config from '../components/config';\nimport { SubscribeMessage } from '../flow_interfaces';\n\ntype DedupingManagerConsturct = {\n config: Config,\n}\n\nconst hashCode = (payload) => {\n let hash = 0;\n if (payload.length === 0) return hash;\n for (let i = 0; i < payload.length; i += 1) {\n let character = payload.charCodeAt(i);\n hash = ((hash << 5) - hash) + character; // eslint-disable-line\n hash = hash & hash; // eslint-disable-line\n }\n return hash;\n};\n\nexport default class {\n\n _config: Config;\n hashHistory: Array;\n\n constructor({ config }: DedupingManagerConsturct) {\n this.hashHistory = [];\n this._config = config;\n }\n\n getKey(message: SubscribeMessage) {\n const hashedPayload = hashCode(JSON.stringify(message.payload)).toString();\n const timetoken = message.publishMetaData.publishTimetoken;\n return `${timetoken}-${hashedPayload}`;\n }\n\n isDuplicate(message: SubscribeMessage) {\n return this.hashHistory.includes(this.getKey(message));\n }\n\n addEntry(message: SubscribeMessage) {\n if (this.hashHistory.length >= this._config.maximumCacheSize) {\n this.hashHistory.shift();\n }\n\n this.hashHistory.push(this.getKey(message));\n }\n\n clearHistory() {\n this.hashHistory = [];\n }\n\n}\n"]} \ No newline at end of file diff --git a/lib/core/components/subscription_manager.js b/lib/core/components/subscription_manager.js index 23afc1b15..46149c7e4 100644 --- a/lib/core/components/subscription_manager.js +++ b/lib/core/components/subscription_manager.js @@ -510,7 +510,9 @@ var _class = function () { key: '_stopSubscribeLoop', value: function _stopSubscribeLoop() { if (this._subscribeCall) { - this._subscribeCall.abort(); + if (typeof this._subscribeCall.abort === 'function') { + this._subscribeCall.abort(); + } this._subscribeCall = null; } } diff --git a/lib/core/components/subscription_manager.js.map b/lib/core/components/subscription_manager.js.map index 00303cf5b..d42a06040 100644 --- a/lib/core/components/subscription_manager.js.map +++ b/lib/core/components/subscription_manager.js.map @@ -1 +1 @@ -{"version":3,"sources":["core/components/subscription_manager.js"],"names":["subscribeEndpoint","leaveEndpoint","heartbeatEndpoint","setStateEndpoint","timeEndpoint","config","crypto","listenerManager","_listenerManager","_config","_leaveEndpoint","_heartbeatEndpoint","_setStateEndpoint","_subscribeEndpoint","_crypto","_channels","_presenceChannels","_channelGroups","_presenceChannelGroups","_pendingChannelSubscriptions","_pendingChannelGroupSubscriptions","_currentTimetoken","_lastTimetoken","_storedTimetoken","_subscriptionStatusAnnounced","_isOnline","_reconnectionManager","_dedupingManager","args","callback","state","channels","channelGroups","forEach","channel","channelGroup","timetoken","withPresence","subscribeKey","console","log","push","reconnect","isOffline","actualChannels","actualChannelGroups","length","suppressLeaveEvents","status","affectedChannels","affectedChannelGroups","currentTimetoken","lastTimetoken","announceStatus","Object","keys","_region","stopPolling","adaptUnsubscribeChange","getSubscribedChannels","getSubscribedChannelGroups","_startSubscribeLoop","_registerHeartbeatTimer","_stopSubscribeLoop","_stopHeartbeatTimer","getHeartbeatInterval","_performHeartbeatLoop","_heartbeatTimer","setInterval","bind","clearInterval","presenceChannels","presenceChannelGroups","presenceState","channelState","channelGroupState","onHeartbeat","error","announceFailedHeartbeats","autoNetworkDetection","disconnect","announceNetworkDown","announceSuccessfulHeartbeats","subscribeArgs","filterExpression","region","_subscribeCall","_processSubscribeResponse","payload","category","PNTimeoutCategory","PNNetworkIssuesCategory","onReconnection","announceNetworkUp","reconnectedAnnounce","PNReconnectedCategory","operation","startPolling","PNBadRequestCategory","metadata","connectedAnnounce","PNConnectedCategory","subscribedChannels","messages","requestMessageCountThreshold","dedupeOnSubscribe","countAnnouncement","PNRequestMessageCountExceededCategory","message","subscriptionMatch","publishMetaData","isDuplicate","addEntry","endsWith","announce","subscription","actualChannel","subscribedChannel","substring","lastIndexOf","action","data","publishTimetoken","occupancy","uuid","timestamp","join","leave","timeout","announcePresence","publisher","issuingClientId","userMetadata","cipherKey","decrypt","announceMessage","abort"],"mappings":"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","file":"subscription_manager.js","sourcesContent":["/* @flow */\nimport Crypto from '../components/cryptography';\nimport Config from '../components/config';\nimport ListenerManager from '../components/listener_manager';\nimport ReconnectionManager from '../components/reconnection_manager';\nimport DedupingManager from '../components/deduping_manager';\nimport utils from '../utils';\nimport { MessageAnnouncement, SubscribeEnvelope, StatusAnnouncement, PresenceAnnouncement } from '../flow_interfaces';\nimport categoryConstants from '../constants/categories';\n\ntype SubscribeArgs = {\n channels: Array,\n channelGroups: Array,\n withPresence: ?boolean,\n timetoken: ?number\n}\n\ntype UnsubscribeArgs = {\n channels: Array,\n channelGroups: Array\n}\n\ntype StateArgs = {\n channels: Array,\n channelGroups: Array,\n state: Object\n}\n\ntype SubscriptionManagerConsturct = {\n leaveEndpoint: Function,\n subscribeEndpoint: Function,\n timeEndpoint: Function,\n heartbeatEndpoint: Function,\n setStateEndpoint: Function,\n config: Config,\n crypto: Crypto,\n listenerManager: ListenerManager\n}\n\nexport default class {\n\n _crypto: Crypto;\n _config: Config;\n _listenerManager: ListenerManager;\n _reconnectionManager: ReconnectionManager;\n\n _leaveEndpoint: Function;\n _heartbeatEndpoint: Function;\n _setStateEndpoint: Function;\n _subscribeEndpoint: Function;\n\n _channels: Object;\n _presenceChannels: Object;\n\n _channelGroups: Object;\n _presenceChannelGroups: Object;\n\n _currentTimetoken: number;\n _lastTimetoken: number;\n _storedTimetoken: ?number;\n\n _region: ?number;\n\n _subscribeCall: ?Object;\n _heartbeatTimer: ?number;\n\n _subscriptionStatusAnnounced: boolean;\n\n _autoNetworkDetection: boolean;\n _isOnline: boolean;\n\n // store pending connection elements\n _pendingChannelSubscriptions: Array;\n _pendingChannelGroupSubscriptions: Array;\n //\n\n constructor({ subscribeEndpoint, leaveEndpoint, heartbeatEndpoint, setStateEndpoint, timeEndpoint, config, crypto, listenerManager }: SubscriptionManagerConsturct) {\n this._listenerManager = listenerManager;\n this._config = config;\n\n this._leaveEndpoint = leaveEndpoint;\n this._heartbeatEndpoint = heartbeatEndpoint;\n this._setStateEndpoint = setStateEndpoint;\n this._subscribeEndpoint = subscribeEndpoint;\n\n this._crypto = crypto;\n\n this._channels = {};\n this._presenceChannels = {};\n\n this._channelGroups = {};\n this._presenceChannelGroups = {};\n\n this._pendingChannelSubscriptions = [];\n this._pendingChannelGroupSubscriptions = [];\n\n this._currentTimetoken = 0;\n this._lastTimetoken = 0;\n this._storedTimetoken = null;\n\n this._subscriptionStatusAnnounced = false;\n\n this._isOnline = true;\n\n this._reconnectionManager = new ReconnectionManager({ timeEndpoint });\n this._dedupingManager = new DedupingManager({ config });\n }\n\n adaptStateChange(args: StateArgs, callback: Function) {\n const { state, channels = [], channelGroups = [] } = args;\n\n channels.forEach((channel) => {\n if (channel in this._channels) this._channels[channel].state = state;\n });\n\n channelGroups.forEach((channelGroup) => {\n if (channelGroup in this._channelGroups) this._channelGroups[channelGroup].state = state;\n });\n\n return this._setStateEndpoint({ state, channels, channelGroups }, callback);\n }\n\n adaptSubscribeChange(args: SubscribeArgs) {\n const { timetoken, channels = [], channelGroups = [], withPresence = false } = args;\n\n if (!this._config.subscribeKey || this._config.subscribeKey === '') {\n if (console && console.log) console.log('subscribe key missing; aborting subscribe') //eslint-disable-line\n return;\n }\n\n if (timetoken) {\n this._lastTimetoken = this._currentTimetoken;\n this._currentTimetoken = timetoken;\n }\n\n // reset the current timetoken to get a connect event.\n if (this._currentTimetoken !== '0') {\n this._storedTimetoken = this._currentTimetoken;\n this._currentTimetoken = 0;\n }\n\n channels.forEach((channel: string) => {\n this._channels[channel] = { state: {} };\n if (withPresence) this._presenceChannels[channel] = {};\n\n this._pendingChannelSubscriptions.push(channel);\n });\n\n channelGroups.forEach((channelGroup: string) => {\n this._channelGroups[channelGroup] = { state: {} };\n if (withPresence) this._presenceChannelGroups[channelGroup] = {};\n\n this._pendingChannelGroupSubscriptions.push(channelGroup);\n });\n\n this._subscriptionStatusAnnounced = false;\n this.reconnect();\n }\n\n adaptUnsubscribeChange(args: UnsubscribeArgs, isOffline: boolean) {\n const { channels = [], channelGroups = [] } = args;\n\n // keep track of which channels and channel groups\n // we are going to unsubscribe from.\n const actualChannels = [];\n const actualChannelGroups = [];\n //\n\n channels.forEach((channel) => {\n if (channel in this._channels) {\n delete this._channels[channel];\n actualChannels.push(channel);\n }\n if (channel in this._presenceChannels) {\n delete this._presenceChannels[channel];\n actualChannels.push(channel);\n }\n });\n\n channelGroups.forEach((channelGroup) => {\n if (channelGroup in this._channelGroups) {\n delete this._channelGroups[channelGroup];\n actualChannelGroups.push(channelGroup);\n }\n if (channelGroup in this._presenceChannelGroups) {\n delete this._channelGroups[channelGroup];\n actualChannelGroups.push(channelGroup);\n }\n });\n\n // no-op if there are no channels and cg's to unsubscribe from.\n if (actualChannels.length === 0 && actualChannelGroups.length === 0) {\n return;\n }\n\n if (this._config.suppressLeaveEvents === false && !isOffline) {\n this._leaveEndpoint({ channels: actualChannels, channelGroups: actualChannelGroups }, (status) => {\n status.affectedChannels = actualChannels;\n status.affectedChannelGroups = actualChannelGroups;\n status.currentTimetoken = this._currentTimetoken;\n status.lastTimetoken = this._lastTimetoken;\n this._listenerManager.announceStatus(status);\n });\n }\n\n // if we have nothing to subscribe to, reset the timetoken.\n if (Object.keys(this._channels).length === 0 &&\n Object.keys(this._presenceChannels).length === 0 &&\n Object.keys(this._channelGroups).length === 0 &&\n Object.keys(this._presenceChannelGroups).length === 0) {\n this._lastTimetoken = 0;\n this._currentTimetoken = 0;\n this._storedTimetoken = null;\n this._region = null;\n this._reconnectionManager.stopPolling();\n }\n\n this.reconnect();\n }\n\n unsubscribeAll(isOffline: boolean) {\n this.adaptUnsubscribeChange({ channels: this.getSubscribedChannels(), channelGroups: this.getSubscribedChannelGroups() }, isOffline);\n }\n\n getSubscribedChannels(): Array {\n return Object.keys(this._channels);\n }\n\n getSubscribedChannelGroups(): Array {\n return Object.keys(this._channelGroups);\n }\n\n reconnect() {\n this._startSubscribeLoop();\n this._registerHeartbeatTimer();\n }\n\n disconnect() {\n this._stopSubscribeLoop();\n this._stopHeartbeatTimer();\n this._reconnectionManager.stopPolling();\n }\n\n _registerHeartbeatTimer() {\n this._stopHeartbeatTimer();\n\n // if the interval is 0, do not queue up heartbeating\n if (this._config.getHeartbeatInterval() === 0) {\n return;\n }\n\n this._performHeartbeatLoop();\n this._heartbeatTimer = setInterval(this._performHeartbeatLoop.bind(this), this._config.getHeartbeatInterval() * 1000);\n }\n\n _stopHeartbeatTimer() {\n if (this._heartbeatTimer) {\n clearInterval(this._heartbeatTimer);\n this._heartbeatTimer = null;\n }\n }\n\n _performHeartbeatLoop() {\n let presenceChannels = Object.keys(this._channels);\n let presenceChannelGroups = Object.keys(this._channelGroups);\n let presenceState = {};\n\n if (presenceChannels.length === 0 && presenceChannelGroups.length === 0) {\n return;\n }\n\n presenceChannels.forEach((channel) => {\n let channelState = this._channels[channel].state;\n if (Object.keys(channelState).length) presenceState[channel] = channelState;\n });\n\n presenceChannelGroups.forEach((channelGroup) => {\n let channelGroupState = this._channelGroups[channelGroup].state;\n if (Object.keys(channelGroupState).length) presenceState[channelGroup] = channelGroupState;\n });\n\n let onHeartbeat = (status: StatusAnnouncement) => {\n if (status.error && this._config.announceFailedHeartbeats) {\n this._listenerManager.announceStatus(status);\n }\n\n if (status.error && this._config.autoNetworkDetection && this._isOnline) {\n this._isOnline = false;\n this.disconnect();\n this._listenerManager.announceNetworkDown();\n this.reconnect();\n }\n\n if (!status.error && this._config.announceSuccessfulHeartbeats) {\n this._listenerManager.announceStatus(status);\n }\n };\n\n this._heartbeatEndpoint({\n channels: presenceChannels,\n channelGroups: presenceChannelGroups,\n state: presenceState }, onHeartbeat.bind(this));\n }\n\n _startSubscribeLoop() {\n this._stopSubscribeLoop();\n let channels = [];\n let channelGroups = [];\n\n Object.keys(this._channels).forEach(channel => channels.push(channel));\n Object.keys(this._presenceChannels).forEach(channel => channels.push(`${channel}-pnpres`));\n\n Object.keys(this._channelGroups).forEach(channelGroup => channelGroups.push(channelGroup));\n Object.keys(this._presenceChannelGroups).forEach(channelGroup => channelGroups.push(`${channelGroup}-pnpres`));\n\n if (channels.length === 0 && channelGroups.length === 0) {\n return;\n }\n\n const subscribeArgs = {\n channels,\n channelGroups,\n timetoken: this._currentTimetoken,\n filterExpression: this._config.filterExpression,\n region: this._region\n };\n\n this._subscribeCall = this._subscribeEndpoint(subscribeArgs, this._processSubscribeResponse.bind(this));\n }\n\n _processSubscribeResponse(status: StatusAnnouncement, payload: SubscribeEnvelope) {\n if (status.error) {\n // if we timeout from server, restart the loop.\n if (status.category === categoryConstants.PNTimeoutCategory) {\n this._startSubscribeLoop();\n } else if (status.category === categoryConstants.PNNetworkIssuesCategory) {\n // we lost internet connection, alert the reconnection manager and terminate all loops\n this.disconnect();\n\n if (status.error && this._config.autoNetworkDetection && this._isOnline) {\n this._isOnline = false;\n this._listenerManager.announceNetworkDown();\n }\n\n this._reconnectionManager.onReconnection(() => {\n if (this._config.autoNetworkDetection && !this._isOnline) {\n this._isOnline = true;\n this._listenerManager.announceNetworkUp();\n }\n this.reconnect();\n this._subscriptionStatusAnnounced = true;\n let reconnectedAnnounce: StatusAnnouncement = {\n category: categoryConstants.PNReconnectedCategory,\n operation: status.operation,\n lastTimetoken: this._lastTimetoken,\n currentTimetoken: this._currentTimetoken\n };\n this._listenerManager.announceStatus(reconnectedAnnounce);\n });\n\n this._reconnectionManager.startPolling();\n this._listenerManager.announceStatus(status);\n } else if (status.category === categoryConstants.PNBadRequestCategory) {\n this._stopHeartbeatTimer();\n this._listenerManager.announceStatus(status);\n } else {\n this._listenerManager.announceStatus(status);\n }\n\n return;\n }\n\n if (this._storedTimetoken) {\n this._currentTimetoken = this._storedTimetoken;\n this._storedTimetoken = null;\n } else {\n this._lastTimetoken = this._currentTimetoken;\n this._currentTimetoken = payload.metadata.timetoken;\n }\n\n if (!this._subscriptionStatusAnnounced) {\n let connectedAnnounce: StatusAnnouncement = {};\n connectedAnnounce.category = categoryConstants.PNConnectedCategory;\n connectedAnnounce.operation = status.operation;\n connectedAnnounce.affectedChannels = this._pendingChannelSubscriptions;\n connectedAnnounce.subscribedChannels = this.getSubscribedChannels();\n connectedAnnounce.affectedChannelGroups = this._pendingChannelGroupSubscriptions;\n connectedAnnounce.lastTimetoken = this._lastTimetoken;\n connectedAnnounce.currentTimetoken = this._currentTimetoken;\n this._subscriptionStatusAnnounced = true;\n this._listenerManager.announceStatus(connectedAnnounce);\n\n // clear the pending connections list\n this._pendingChannelSubscriptions = [];\n this._pendingChannelGroupSubscriptions = [];\n }\n\n let messages = payload.messages || [];\n let { requestMessageCountThreshold, dedupeOnSubscribe } = this._config;\n\n if (requestMessageCountThreshold && messages.length >= requestMessageCountThreshold) {\n let countAnnouncement: StatusAnnouncement = {};\n countAnnouncement.category = categoryConstants.PNRequestMessageCountExceededCategory;\n countAnnouncement.operation = status.operation;\n this._listenerManager.announceStatus(countAnnouncement);\n }\n\n messages.forEach((message) => {\n let channel = message.channel;\n let subscriptionMatch = message.subscriptionMatch;\n let publishMetaData = message.publishMetaData;\n\n if (channel === subscriptionMatch) {\n subscriptionMatch = null;\n }\n\n if (dedupeOnSubscribe) {\n if (this._dedupingManager.isDuplicate(message)) {\n return;\n } else {\n this._dedupingManager.addEntry(message);\n }\n }\n\n if (utils.endsWith(message.channel, '-pnpres')) {\n let announce: PresenceAnnouncement = {};\n announce.channel = null;\n announce.subscription = null;\n\n // deprecated -->\n announce.actualChannel = (subscriptionMatch != null) ? channel : null;\n announce.subscribedChannel = subscriptionMatch != null ? subscriptionMatch : channel;\n // <-- deprecated\n\n if (channel) {\n announce.channel = channel.substring(0, channel.lastIndexOf('-pnpres'));\n }\n\n if (subscriptionMatch) {\n announce.subscription = subscriptionMatch.substring(0, subscriptionMatch.lastIndexOf('-pnpres'));\n }\n\n announce.action = message.payload.action;\n announce.state = message.payload.data;\n announce.timetoken = publishMetaData.publishTimetoken;\n announce.occupancy = message.payload.occupancy;\n announce.uuid = message.payload.uuid;\n announce.timestamp = message.payload.timestamp;\n\n if (message.payload.join) {\n announce.join = message.payload.join;\n }\n\n if (message.payload.leave) {\n announce.leave = message.payload.leave;\n }\n\n if (message.payload.timeout) {\n announce.timeout = message.payload.timeout;\n }\n\n this._listenerManager.announcePresence(announce);\n } else {\n let announce: MessageAnnouncement = {};\n announce.channel = null;\n announce.subscription = null;\n\n // deprecated -->\n announce.actualChannel = (subscriptionMatch != null) ? channel : null;\n announce.subscribedChannel = subscriptionMatch != null ? subscriptionMatch : channel;\n // <-- deprecated\n\n announce.channel = channel;\n announce.subscription = subscriptionMatch;\n announce.timetoken = publishMetaData.publishTimetoken;\n announce.publisher = message.issuingClientId;\n\n if (message.userMetadata) {\n announce.userMetadata = message.userMetadata;\n }\n\n if (this._config.cipherKey) {\n announce.message = this._crypto.decrypt(message.payload);\n } else {\n announce.message = message.payload;\n }\n\n this._listenerManager.announceMessage(announce);\n }\n });\n\n this._region = payload.metadata.region;\n this._startSubscribeLoop();\n }\n\n _stopSubscribeLoop() {\n if (this._subscribeCall) {\n this._subscribeCall.abort();\n this._subscribeCall = null;\n }\n }\n\n}\n"]} \ No newline at end of file +{"version":3,"sources":["core/components/subscription_manager.js"],"names":["subscribeEndpoint","leaveEndpoint","heartbeatEndpoint","setStateEndpoint","timeEndpoint","config","crypto","listenerManager","_listenerManager","_config","_leaveEndpoint","_heartbeatEndpoint","_setStateEndpoint","_subscribeEndpoint","_crypto","_channels","_presenceChannels","_channelGroups","_presenceChannelGroups","_pendingChannelSubscriptions","_pendingChannelGroupSubscriptions","_currentTimetoken","_lastTimetoken","_storedTimetoken","_subscriptionStatusAnnounced","_isOnline","_reconnectionManager","_dedupingManager","args","callback","state","channels","channelGroups","forEach","channel","channelGroup","timetoken","withPresence","subscribeKey","console","log","push","reconnect","isOffline","actualChannels","actualChannelGroups","length","suppressLeaveEvents","status","affectedChannels","affectedChannelGroups","currentTimetoken","lastTimetoken","announceStatus","Object","keys","_region","stopPolling","adaptUnsubscribeChange","getSubscribedChannels","getSubscribedChannelGroups","_startSubscribeLoop","_registerHeartbeatTimer","_stopSubscribeLoop","_stopHeartbeatTimer","getHeartbeatInterval","_performHeartbeatLoop","_heartbeatTimer","setInterval","bind","clearInterval","presenceChannels","presenceChannelGroups","presenceState","channelState","channelGroupState","onHeartbeat","error","announceFailedHeartbeats","autoNetworkDetection","disconnect","announceNetworkDown","announceSuccessfulHeartbeats","subscribeArgs","filterExpression","region","_subscribeCall","_processSubscribeResponse","payload","category","PNTimeoutCategory","PNNetworkIssuesCategory","onReconnection","announceNetworkUp","reconnectedAnnounce","PNReconnectedCategory","operation","startPolling","PNBadRequestCategory","metadata","connectedAnnounce","PNConnectedCategory","subscribedChannels","messages","requestMessageCountThreshold","dedupeOnSubscribe","countAnnouncement","PNRequestMessageCountExceededCategory","message","subscriptionMatch","publishMetaData","isDuplicate","addEntry","endsWith","announce","subscription","actualChannel","subscribedChannel","substring","lastIndexOf","action","data","publishTimetoken","occupancy","uuid","timestamp","join","leave","timeout","announcePresence","publisher","issuingClientId","userMetadata","cipherKey","decrypt","announceMessage","abort"],"mappings":"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","file":"subscription_manager.js","sourcesContent":["/* @flow */\nimport Crypto from '../components/cryptography';\nimport Config from '../components/config';\nimport ListenerManager from '../components/listener_manager';\nimport ReconnectionManager from '../components/reconnection_manager';\nimport DedupingManager from '../components/deduping_manager';\nimport utils from '../utils';\nimport { MessageAnnouncement, SubscribeEnvelope, StatusAnnouncement, PresenceAnnouncement } from '../flow_interfaces';\nimport categoryConstants from '../constants/categories';\n\ntype SubscribeArgs = {\n channels: Array,\n channelGroups: Array,\n withPresence: ?boolean,\n timetoken: ?number\n}\n\ntype UnsubscribeArgs = {\n channels: Array,\n channelGroups: Array\n}\n\ntype StateArgs = {\n channels: Array,\n channelGroups: Array,\n state: Object\n}\n\ntype SubscriptionManagerConsturct = {\n leaveEndpoint: Function,\n subscribeEndpoint: Function,\n timeEndpoint: Function,\n heartbeatEndpoint: Function,\n setStateEndpoint: Function,\n config: Config,\n crypto: Crypto,\n listenerManager: ListenerManager\n}\n\nexport default class {\n\n _crypto: Crypto;\n _config: Config;\n _listenerManager: ListenerManager;\n _reconnectionManager: ReconnectionManager;\n\n _leaveEndpoint: Function;\n _heartbeatEndpoint: Function;\n _setStateEndpoint: Function;\n _subscribeEndpoint: Function;\n\n _channels: Object;\n _presenceChannels: Object;\n\n _channelGroups: Object;\n _presenceChannelGroups: Object;\n\n _currentTimetoken: number;\n _lastTimetoken: number;\n _storedTimetoken: ?number;\n\n _region: ?number;\n\n _subscribeCall: ?Object;\n _heartbeatTimer: ?number;\n\n _subscriptionStatusAnnounced: boolean;\n\n _autoNetworkDetection: boolean;\n _isOnline: boolean;\n\n // store pending connection elements\n _pendingChannelSubscriptions: Array;\n _pendingChannelGroupSubscriptions: Array;\n //\n\n _dedupingManager: DedupingManager;\n\n constructor({ subscribeEndpoint, leaveEndpoint, heartbeatEndpoint, setStateEndpoint, timeEndpoint, config, crypto, listenerManager }: SubscriptionManagerConsturct) {\n this._listenerManager = listenerManager;\n this._config = config;\n\n this._leaveEndpoint = leaveEndpoint;\n this._heartbeatEndpoint = heartbeatEndpoint;\n this._setStateEndpoint = setStateEndpoint;\n this._subscribeEndpoint = subscribeEndpoint;\n\n this._crypto = crypto;\n\n this._channels = {};\n this._presenceChannels = {};\n\n this._channelGroups = {};\n this._presenceChannelGroups = {};\n\n this._pendingChannelSubscriptions = [];\n this._pendingChannelGroupSubscriptions = [];\n\n this._currentTimetoken = 0;\n this._lastTimetoken = 0;\n this._storedTimetoken = null;\n\n this._subscriptionStatusAnnounced = false;\n\n this._isOnline = true;\n\n this._reconnectionManager = new ReconnectionManager({ timeEndpoint });\n this._dedupingManager = new DedupingManager({ config });\n }\n\n adaptStateChange(args: StateArgs, callback: Function) {\n const { state, channels = [], channelGroups = [] } = args;\n\n channels.forEach((channel) => {\n if (channel in this._channels) this._channels[channel].state = state;\n });\n\n channelGroups.forEach((channelGroup) => {\n if (channelGroup in this._channelGroups) this._channelGroups[channelGroup].state = state;\n });\n\n return this._setStateEndpoint({ state, channels, channelGroups }, callback);\n }\n\n adaptSubscribeChange(args: SubscribeArgs) {\n const { timetoken, channels = [], channelGroups = [], withPresence = false } = args;\n\n if (!this._config.subscribeKey || this._config.subscribeKey === '') {\n if (console && console.log) console.log('subscribe key missing; aborting subscribe') //eslint-disable-line\n return;\n }\n\n if (timetoken) {\n this._lastTimetoken = this._currentTimetoken;\n this._currentTimetoken = timetoken;\n }\n\n // reset the current timetoken to get a connect event.\n if (this._currentTimetoken !== '0') {\n this._storedTimetoken = this._currentTimetoken;\n this._currentTimetoken = 0;\n }\n\n channels.forEach((channel: string) => {\n this._channels[channel] = { state: {} };\n if (withPresence) this._presenceChannels[channel] = {};\n\n this._pendingChannelSubscriptions.push(channel);\n });\n\n channelGroups.forEach((channelGroup: string) => {\n this._channelGroups[channelGroup] = { state: {} };\n if (withPresence) this._presenceChannelGroups[channelGroup] = {};\n\n this._pendingChannelGroupSubscriptions.push(channelGroup);\n });\n\n this._subscriptionStatusAnnounced = false;\n this.reconnect();\n }\n\n adaptUnsubscribeChange(args: UnsubscribeArgs, isOffline: boolean) {\n const { channels = [], channelGroups = [] } = args;\n\n // keep track of which channels and channel groups\n // we are going to unsubscribe from.\n const actualChannels = [];\n const actualChannelGroups = [];\n //\n\n channels.forEach((channel) => {\n if (channel in this._channels) {\n delete this._channels[channel];\n actualChannels.push(channel);\n }\n if (channel in this._presenceChannels) {\n delete this._presenceChannels[channel];\n actualChannels.push(channel);\n }\n });\n\n channelGroups.forEach((channelGroup) => {\n if (channelGroup in this._channelGroups) {\n delete this._channelGroups[channelGroup];\n actualChannelGroups.push(channelGroup);\n }\n if (channelGroup in this._presenceChannelGroups) {\n delete this._channelGroups[channelGroup];\n actualChannelGroups.push(channelGroup);\n }\n });\n\n // no-op if there are no channels and cg's to unsubscribe from.\n if (actualChannels.length === 0 && actualChannelGroups.length === 0) {\n return;\n }\n\n if (this._config.suppressLeaveEvents === false && !isOffline) {\n this._leaveEndpoint({ channels: actualChannels, channelGroups: actualChannelGroups }, (status) => {\n status.affectedChannels = actualChannels;\n status.affectedChannelGroups = actualChannelGroups;\n status.currentTimetoken = this._currentTimetoken;\n status.lastTimetoken = this._lastTimetoken;\n this._listenerManager.announceStatus(status);\n });\n }\n\n // if we have nothing to subscribe to, reset the timetoken.\n if (Object.keys(this._channels).length === 0 &&\n Object.keys(this._presenceChannels).length === 0 &&\n Object.keys(this._channelGroups).length === 0 &&\n Object.keys(this._presenceChannelGroups).length === 0) {\n this._lastTimetoken = 0;\n this._currentTimetoken = 0;\n this._storedTimetoken = null;\n this._region = null;\n this._reconnectionManager.stopPolling();\n }\n\n this.reconnect();\n }\n\n unsubscribeAll(isOffline: boolean) {\n this.adaptUnsubscribeChange({ channels: this.getSubscribedChannels(), channelGroups: this.getSubscribedChannelGroups() }, isOffline);\n }\n\n getSubscribedChannels(): Array {\n return Object.keys(this._channels);\n }\n\n getSubscribedChannelGroups(): Array {\n return Object.keys(this._channelGroups);\n }\n\n reconnect() {\n this._startSubscribeLoop();\n this._registerHeartbeatTimer();\n }\n\n disconnect() {\n this._stopSubscribeLoop();\n this._stopHeartbeatTimer();\n this._reconnectionManager.stopPolling();\n }\n\n _registerHeartbeatTimer() {\n this._stopHeartbeatTimer();\n\n // if the interval is 0, do not queue up heartbeating\n if (this._config.getHeartbeatInterval() === 0) {\n return;\n }\n\n this._performHeartbeatLoop();\n this._heartbeatTimer = setInterval(this._performHeartbeatLoop.bind(this), this._config.getHeartbeatInterval() * 1000);\n }\n\n _stopHeartbeatTimer() {\n if (this._heartbeatTimer) {\n clearInterval(this._heartbeatTimer);\n this._heartbeatTimer = null;\n }\n }\n\n _performHeartbeatLoop() {\n let presenceChannels = Object.keys(this._channels);\n let presenceChannelGroups = Object.keys(this._channelGroups);\n let presenceState = {};\n\n if (presenceChannels.length === 0 && presenceChannelGroups.length === 0) {\n return;\n }\n\n presenceChannels.forEach((channel) => {\n let channelState = this._channels[channel].state;\n if (Object.keys(channelState).length) presenceState[channel] = channelState;\n });\n\n presenceChannelGroups.forEach((channelGroup) => {\n let channelGroupState = this._channelGroups[channelGroup].state;\n if (Object.keys(channelGroupState).length) presenceState[channelGroup] = channelGroupState;\n });\n\n let onHeartbeat = (status: StatusAnnouncement) => {\n if (status.error && this._config.announceFailedHeartbeats) {\n this._listenerManager.announceStatus(status);\n }\n\n if (status.error && this._config.autoNetworkDetection && this._isOnline) {\n this._isOnline = false;\n this.disconnect();\n this._listenerManager.announceNetworkDown();\n this.reconnect();\n }\n\n if (!status.error && this._config.announceSuccessfulHeartbeats) {\n this._listenerManager.announceStatus(status);\n }\n };\n\n this._heartbeatEndpoint({\n channels: presenceChannels,\n channelGroups: presenceChannelGroups,\n state: presenceState }, onHeartbeat.bind(this));\n }\n\n _startSubscribeLoop() {\n this._stopSubscribeLoop();\n let channels = [];\n let channelGroups = [];\n\n Object.keys(this._channels).forEach(channel => channels.push(channel));\n Object.keys(this._presenceChannels).forEach(channel => channels.push(`${channel}-pnpres`));\n\n Object.keys(this._channelGroups).forEach(channelGroup => channelGroups.push(channelGroup));\n Object.keys(this._presenceChannelGroups).forEach(channelGroup => channelGroups.push(`${channelGroup}-pnpres`));\n\n if (channels.length === 0 && channelGroups.length === 0) {\n return;\n }\n\n const subscribeArgs = {\n channels,\n channelGroups,\n timetoken: this._currentTimetoken,\n filterExpression: this._config.filterExpression,\n region: this._region\n };\n\n this._subscribeCall = this._subscribeEndpoint(subscribeArgs, this._processSubscribeResponse.bind(this));\n }\n\n _processSubscribeResponse(status: StatusAnnouncement, payload: SubscribeEnvelope) {\n if (status.error) {\n // if we timeout from server, restart the loop.\n if (status.category === categoryConstants.PNTimeoutCategory) {\n this._startSubscribeLoop();\n } else if (status.category === categoryConstants.PNNetworkIssuesCategory) {\n // we lost internet connection, alert the reconnection manager and terminate all loops\n this.disconnect();\n\n if (status.error && this._config.autoNetworkDetection && this._isOnline) {\n this._isOnline = false;\n this._listenerManager.announceNetworkDown();\n }\n\n this._reconnectionManager.onReconnection(() => {\n if (this._config.autoNetworkDetection && !this._isOnline) {\n this._isOnline = true;\n this._listenerManager.announceNetworkUp();\n }\n this.reconnect();\n this._subscriptionStatusAnnounced = true;\n let reconnectedAnnounce: StatusAnnouncement = {\n category: categoryConstants.PNReconnectedCategory,\n operation: status.operation,\n lastTimetoken: this._lastTimetoken,\n currentTimetoken: this._currentTimetoken\n };\n this._listenerManager.announceStatus(reconnectedAnnounce);\n });\n\n this._reconnectionManager.startPolling();\n this._listenerManager.announceStatus(status);\n } else if (status.category === categoryConstants.PNBadRequestCategory) {\n this._stopHeartbeatTimer();\n this._listenerManager.announceStatus(status);\n } else {\n this._listenerManager.announceStatus(status);\n }\n\n return;\n }\n\n if (this._storedTimetoken) {\n this._currentTimetoken = this._storedTimetoken;\n this._storedTimetoken = null;\n } else {\n this._lastTimetoken = this._currentTimetoken;\n this._currentTimetoken = payload.metadata.timetoken;\n }\n\n if (!this._subscriptionStatusAnnounced) {\n let connectedAnnounce: StatusAnnouncement = {};\n connectedAnnounce.category = categoryConstants.PNConnectedCategory;\n connectedAnnounce.operation = status.operation;\n connectedAnnounce.affectedChannels = this._pendingChannelSubscriptions;\n connectedAnnounce.subscribedChannels = this.getSubscribedChannels();\n connectedAnnounce.affectedChannelGroups = this._pendingChannelGroupSubscriptions;\n connectedAnnounce.lastTimetoken = this._lastTimetoken;\n connectedAnnounce.currentTimetoken = this._currentTimetoken;\n this._subscriptionStatusAnnounced = true;\n this._listenerManager.announceStatus(connectedAnnounce);\n\n // clear the pending connections list\n this._pendingChannelSubscriptions = [];\n this._pendingChannelGroupSubscriptions = [];\n }\n\n let messages = payload.messages || [];\n let { requestMessageCountThreshold, dedupeOnSubscribe } = this._config;\n\n if (requestMessageCountThreshold && messages.length >= requestMessageCountThreshold) {\n let countAnnouncement: StatusAnnouncement = {};\n countAnnouncement.category = categoryConstants.PNRequestMessageCountExceededCategory;\n countAnnouncement.operation = status.operation;\n this._listenerManager.announceStatus(countAnnouncement);\n }\n\n messages.forEach((message) => {\n let channel = message.channel;\n let subscriptionMatch = message.subscriptionMatch;\n let publishMetaData = message.publishMetaData;\n\n if (channel === subscriptionMatch) {\n subscriptionMatch = null;\n }\n\n if (dedupeOnSubscribe) {\n if (this._dedupingManager.isDuplicate(message)) {\n return;\n } else {\n this._dedupingManager.addEntry(message);\n }\n }\n\n if (utils.endsWith(message.channel, '-pnpres')) {\n let announce: PresenceAnnouncement = {};\n announce.channel = null;\n announce.subscription = null;\n\n // deprecated -->\n announce.actualChannel = (subscriptionMatch != null) ? channel : null;\n announce.subscribedChannel = subscriptionMatch != null ? subscriptionMatch : channel;\n // <-- deprecated\n\n if (channel) {\n announce.channel = channel.substring(0, channel.lastIndexOf('-pnpres'));\n }\n\n if (subscriptionMatch) {\n announce.subscription = subscriptionMatch.substring(0, subscriptionMatch.lastIndexOf('-pnpres'));\n }\n\n announce.action = message.payload.action;\n announce.state = message.payload.data;\n announce.timetoken = publishMetaData.publishTimetoken;\n announce.occupancy = message.payload.occupancy;\n announce.uuid = message.payload.uuid;\n announce.timestamp = message.payload.timestamp;\n\n if (message.payload.join) {\n announce.join = message.payload.join;\n }\n\n if (message.payload.leave) {\n announce.leave = message.payload.leave;\n }\n\n if (message.payload.timeout) {\n announce.timeout = message.payload.timeout;\n }\n\n this._listenerManager.announcePresence(announce);\n } else {\n let announce: MessageAnnouncement = {};\n announce.channel = null;\n announce.subscription = null;\n\n // deprecated -->\n announce.actualChannel = (subscriptionMatch != null) ? channel : null;\n announce.subscribedChannel = subscriptionMatch != null ? subscriptionMatch : channel;\n // <-- deprecated\n\n announce.channel = channel;\n announce.subscription = subscriptionMatch;\n announce.timetoken = publishMetaData.publishTimetoken;\n announce.publisher = message.issuingClientId;\n\n if (message.userMetadata) {\n announce.userMetadata = message.userMetadata;\n }\n\n if (this._config.cipherKey) {\n announce.message = this._crypto.decrypt(message.payload);\n } else {\n announce.message = message.payload;\n }\n\n this._listenerManager.announceMessage(announce);\n }\n });\n\n this._region = payload.metadata.region;\n this._startSubscribeLoop();\n }\n\n _stopSubscribeLoop() {\n if (this._subscribeCall) {\n if (typeof this._subscribeCall.abort === 'function') {\n this._subscribeCall.abort();\n }\n this._subscribeCall = null;\n }\n }\n\n}\n"]} \ No newline at end of file diff --git a/lib/core/pubnub-common.js.map b/lib/core/pubnub-common.js.map index 86b3b86b4..7324f2ed0 100644 --- a/lib/core/pubnub-common.js.map +++ b/lib/core/pubnub-common.js.map @@ -1 +1 @@ -{"version":3,"sources":["core/pubnub-common.js"],"names":["addChannelsChannelGroupConfig","removeChannelsChannelGroupConfig","deleteChannelGroupConfig","listChannelGroupsConfig","listChannelsInChannelGroupConfig","addPushChannelsConfig","removePushChannelsConfig","listPushChannelsConfig","removeDevicePushConfig","presenceLeaveEndpointConfig","presenceWhereNowEndpointConfig","presenceHeartbeatEndpointConfig","presenceGetStateConfig","presenceSetStateConfig","presenceHereNowConfig","auditEndpointConfig","grantEndpointConfig","publishEndpointConfig","historyEndpointConfig","deleteMessagesEndpointConfig","fetchMessagesEndpointConfig","timeEndpointConfig","subscribeEndpointConfig","setup","db","networking","config","_config","crypto","init","modules","timeEndpoint","bind","leaveEndpoint","heartbeatEndpoint","setStateEndpoint","subscribeEndpoint","listenerManager","_listenerManager","subscriptionManager","addListener","removeListener","removeAllListeners","channelGroups","listGroups","listChannels","addChannels","removeChannels","deleteGroup","push","deleteDevice","hereNow","whereNow","getState","setState","adaptStateChange","grant","audit","publish","fire","args","callback","replicate","storeInHistory","history","deleteMessages","fetchMessages","time","subscribe","adaptSubscribeChange","unsubscribe","adaptUnsubscribeChange","disconnect","reconnect","destroy","isOffline","unsubscribeAll","stop","getSubscribedChannels","getSubscribedChannelGroups","encrypt","decrypt","getAuthKey","setAuthKey","setCipherKey","getUUID","setUUID","getFilterExpression","setFilterExpression","setHeartbeatInterval","getVersion","announceNetworkDown","restore","announceNetworkUp","createUUID","OPERATIONS","CATEGORIES"],"mappings":"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","file":"pubnub-common.js","sourcesContent":["/* @flow */\n\nimport Config from './components/config';\nimport Crypto from './components/cryptography/index';\nimport SubscriptionManager from './components/subscription_manager';\nimport ListenerManager from './components/listener_manager';\n\nimport endpointCreator from './components/endpoint';\n\nimport * as addChannelsChannelGroupConfig from './endpoints/channel_groups/add_channels';\nimport * as removeChannelsChannelGroupConfig from './endpoints/channel_groups/remove_channels';\nimport * as deleteChannelGroupConfig from './endpoints/channel_groups/delete_group';\nimport * as listChannelGroupsConfig from './endpoints/channel_groups/list_groups';\nimport * as listChannelsInChannelGroupConfig from './endpoints/channel_groups/list_channels';\n\nimport * as addPushChannelsConfig from './endpoints/push/add_push_channels';\nimport * as removePushChannelsConfig from './endpoints/push/remove_push_channels';\nimport * as listPushChannelsConfig from './endpoints/push/list_push_channels';\nimport * as removeDevicePushConfig from './endpoints/push/remove_device';\n\nimport * as presenceLeaveEndpointConfig from './endpoints/presence/leave';\nimport * as presenceWhereNowEndpointConfig from './endpoints/presence/where_now';\nimport * as presenceHeartbeatEndpointConfig from './endpoints/presence/heartbeat';\nimport * as presenceGetStateConfig from './endpoints/presence/get_state';\nimport * as presenceSetStateConfig from './endpoints/presence/set_state';\nimport * as presenceHereNowConfig from './endpoints/presence/here_now';\n\nimport * as auditEndpointConfig from './endpoints/access_manager/audit';\nimport * as grantEndpointConfig from './endpoints/access_manager/grant';\n\nimport * as publishEndpointConfig from './endpoints/publish';\nimport * as historyEndpointConfig from './endpoints/history/get_history';\nimport * as deleteMessagesEndpointConfig from './endpoints/history/delete_messages';\nimport * as fetchMessagesEndpointConfig from './endpoints/fetch_messages';\nimport * as timeEndpointConfig from './endpoints/time';\nimport * as subscribeEndpointConfig from './endpoints/subscribe';\n\nimport OPERATIONS from './constants/operations';\nimport CATEGORIES from './constants/categories';\n\nimport { InternalSetupStruct } from './flow_interfaces';\nimport uuidGenerator from './components/uuid';\n\nexport default class {\n\n _config: Config;\n _listenerManager: ListenerManager;\n\n // tell flow about the mounted endpoint\n time: Function;\n publish: Function;\n fire: Function;\n\n history: Function;\n deleteHistory: Function;\n fetchMessages: Function;\n\n //\n channelGroups: Object;\n //\n push: Object;\n //\n hereNow: Function;\n whereNow: Function;\n getState: Function;\n setState: Function;\n //\n grant: Function;\n audit: Function;\n //\n subscribe: Function;\n unsubscribe: Function;\n unsubscribeAll: Function;\n\n disconnect: Function;\n reconnect: Function;\n\n\n destroy: Function;\n stop: Function;\n\n getSubscribedChannels: Function;\n getSubscribedChannelGroups: Function;\n\n addListener: Function;\n removeListener: Function;\n removeAllListeners: Function;\n\n getAuthKey: Function;\n setAuthKey: Function;\n\n setCipherKey: Function;\n setUUID: Function;\n getUUID: Function;\n\n getFilterExpression: Function;\n setFilterExpression: Function;\n\n encrypt: Function;\n decrypt: Function;\n\n //\n\n constructor(setup: InternalSetupStruct) {\n let { db, networking } = setup;\n\n const config = this._config = new Config({ setup, db });\n const crypto = new Crypto({ config });\n\n networking.init(config);\n\n let modules = { config, networking, crypto };\n\n const timeEndpoint = endpointCreator.bind(this, modules, timeEndpointConfig);\n const leaveEndpoint = endpointCreator.bind(this, modules, presenceLeaveEndpointConfig);\n const heartbeatEndpoint = endpointCreator.bind(this, modules, presenceHeartbeatEndpointConfig);\n const setStateEndpoint = endpointCreator.bind(this, modules, presenceSetStateConfig);\n const subscribeEndpoint = endpointCreator.bind(this, modules, subscribeEndpointConfig);\n\n // managers\n const listenerManager = this._listenerManager = new ListenerManager();\n\n const subscriptionManager = new SubscriptionManager({\n timeEndpoint,\n leaveEndpoint,\n heartbeatEndpoint,\n setStateEndpoint,\n subscribeEndpoint,\n crypto: modules.crypto,\n config: modules.config,\n listenerManager\n });\n\n this.addListener = listenerManager.addListener.bind(listenerManager);\n this.removeListener = listenerManager.removeListener.bind(listenerManager);\n this.removeAllListeners = listenerManager.removeAllListeners.bind(listenerManager);\n\n /* channel groups */\n this.channelGroups = {\n listGroups: endpointCreator.bind(this, modules, listChannelGroupsConfig),\n listChannels: endpointCreator.bind(this, modules, listChannelsInChannelGroupConfig),\n addChannels: endpointCreator.bind(this, modules, addChannelsChannelGroupConfig),\n removeChannels: endpointCreator.bind(this, modules, removeChannelsChannelGroupConfig),\n deleteGroup: endpointCreator.bind(this, modules, deleteChannelGroupConfig)\n };\n /* push */\n this.push = {\n addChannels: endpointCreator.bind(this, modules, addPushChannelsConfig),\n removeChannels: endpointCreator.bind(this, modules, removePushChannelsConfig),\n deleteDevice: endpointCreator.bind(this, modules, removeDevicePushConfig),\n listChannels: endpointCreator.bind(this, modules, listPushChannelsConfig)\n };\n /* presence */\n this.hereNow = endpointCreator.bind(this, modules, presenceHereNowConfig);\n this.whereNow = endpointCreator.bind(this, modules, presenceWhereNowEndpointConfig);\n this.getState = endpointCreator.bind(this, modules, presenceGetStateConfig);\n this.setState = subscriptionManager.adaptStateChange.bind(subscriptionManager);\n /* PAM */\n this.grant = endpointCreator.bind(this, modules, grantEndpointConfig);\n this.audit = endpointCreator.bind(this, modules, auditEndpointConfig);\n //\n this.publish = endpointCreator.bind(this, modules, publishEndpointConfig);\n\n this.fire = (args, callback) => {\n args.replicate = false;\n args.storeInHistory = false;\n return this.publish(args, callback);\n };\n\n this.history = endpointCreator.bind(this, modules, historyEndpointConfig);\n this.deleteMessages = endpointCreator.bind(this, modules, deleteMessagesEndpointConfig);\n this.fetchMessages = endpointCreator.bind(this, modules, fetchMessagesEndpointConfig);\n\n this.time = timeEndpoint;\n\n // subscription related methods\n this.subscribe = subscriptionManager.adaptSubscribeChange.bind(subscriptionManager);\n this.unsubscribe = subscriptionManager.adaptUnsubscribeChange.bind(subscriptionManager);\n this.disconnect = subscriptionManager.disconnect.bind(subscriptionManager);\n this.reconnect = subscriptionManager.reconnect.bind(subscriptionManager);\n\n this.destroy = (isOffline: boolean) => {\n subscriptionManager.unsubscribeAll(isOffline);\n subscriptionManager.disconnect();\n };\n\n // --- deprecated ------------------\n this.stop = this.destroy; // --------\n // --- deprecated ------------------\n\n this.unsubscribeAll = subscriptionManager.unsubscribeAll.bind(subscriptionManager);\n\n this.getSubscribedChannels = subscriptionManager.getSubscribedChannels.bind(subscriptionManager);\n this.getSubscribedChannelGroups = subscriptionManager.getSubscribedChannelGroups.bind(subscriptionManager);\n\n // mount crypto\n this.encrypt = crypto.encrypt.bind(crypto);\n this.decrypt = crypto.decrypt.bind(crypto);\n\n /* config */\n this.getAuthKey = modules.config.getAuthKey.bind(modules.config);\n this.setAuthKey = modules.config.setAuthKey.bind(modules.config);\n this.setCipherKey = modules.config.setCipherKey.bind(modules.config);\n this.getUUID = modules.config.getUUID.bind(modules.config);\n this.setUUID = modules.config.setUUID.bind(modules.config);\n this.getFilterExpression = modules.config.getFilterExpression.bind(modules.config);\n this.setFilterExpression = modules.config.setFilterExpression.bind(modules.config);\n\n this.setHeartbeatInterval = modules.config.setHeartbeatInterval.bind(modules.config);\n }\n\n\n getVersion(): string {\n return this._config.getVersion();\n }\n\n // network hooks to indicate network changes\n networkDownDetected() {\n this._listenerManager.announceNetworkDown();\n\n if (this._config.restore) {\n this.disconnect();\n } else {\n this.destroy(true);\n }\n }\n\n networkUpDetected() {\n this._listenerManager.announceNetworkUp();\n this.reconnect();\n }\n\n\n static generateUUID(): string {\n return uuidGenerator.createUUID();\n }\n\n static OPERATIONS = OPERATIONS;\n static CATEGORIES = CATEGORIES;\n\n}\n"]} \ No newline at end of file +{"version":3,"sources":["core/pubnub-common.js"],"names":["addChannelsChannelGroupConfig","removeChannelsChannelGroupConfig","deleteChannelGroupConfig","listChannelGroupsConfig","listChannelsInChannelGroupConfig","addPushChannelsConfig","removePushChannelsConfig","listPushChannelsConfig","removeDevicePushConfig","presenceLeaveEndpointConfig","presenceWhereNowEndpointConfig","presenceHeartbeatEndpointConfig","presenceGetStateConfig","presenceSetStateConfig","presenceHereNowConfig","auditEndpointConfig","grantEndpointConfig","publishEndpointConfig","historyEndpointConfig","deleteMessagesEndpointConfig","fetchMessagesEndpointConfig","timeEndpointConfig","subscribeEndpointConfig","setup","db","networking","config","_config","crypto","init","modules","timeEndpoint","bind","leaveEndpoint","heartbeatEndpoint","setStateEndpoint","subscribeEndpoint","listenerManager","_listenerManager","subscriptionManager","addListener","removeListener","removeAllListeners","channelGroups","listGroups","listChannels","addChannels","removeChannels","deleteGroup","push","deleteDevice","hereNow","whereNow","getState","setState","adaptStateChange","grant","audit","publish","fire","args","callback","replicate","storeInHistory","history","deleteMessages","fetchMessages","time","subscribe","adaptSubscribeChange","unsubscribe","adaptUnsubscribeChange","disconnect","reconnect","destroy","isOffline","unsubscribeAll","stop","getSubscribedChannels","getSubscribedChannelGroups","encrypt","decrypt","getAuthKey","setAuthKey","setCipherKey","getUUID","setUUID","getFilterExpression","setFilterExpression","setHeartbeatInterval","getVersion","announceNetworkDown","restore","announceNetworkUp","createUUID","OPERATIONS","CATEGORIES"],"mappings":"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","file":"pubnub-common.js","sourcesContent":["/* @flow */\n\nimport Config from './components/config';\nimport Crypto from './components/cryptography/index';\nimport SubscriptionManager from './components/subscription_manager';\nimport ListenerManager from './components/listener_manager';\n\nimport endpointCreator from './components/endpoint';\n\nimport * as addChannelsChannelGroupConfig from './endpoints/channel_groups/add_channels';\nimport * as removeChannelsChannelGroupConfig from './endpoints/channel_groups/remove_channels';\nimport * as deleteChannelGroupConfig from './endpoints/channel_groups/delete_group';\nimport * as listChannelGroupsConfig from './endpoints/channel_groups/list_groups';\nimport * as listChannelsInChannelGroupConfig from './endpoints/channel_groups/list_channels';\n\nimport * as addPushChannelsConfig from './endpoints/push/add_push_channels';\nimport * as removePushChannelsConfig from './endpoints/push/remove_push_channels';\nimport * as listPushChannelsConfig from './endpoints/push/list_push_channels';\nimport * as removeDevicePushConfig from './endpoints/push/remove_device';\n\nimport * as presenceLeaveEndpointConfig from './endpoints/presence/leave';\nimport * as presenceWhereNowEndpointConfig from './endpoints/presence/where_now';\nimport * as presenceHeartbeatEndpointConfig from './endpoints/presence/heartbeat';\nimport * as presenceGetStateConfig from './endpoints/presence/get_state';\nimport * as presenceSetStateConfig from './endpoints/presence/set_state';\nimport * as presenceHereNowConfig from './endpoints/presence/here_now';\n\nimport * as auditEndpointConfig from './endpoints/access_manager/audit';\nimport * as grantEndpointConfig from './endpoints/access_manager/grant';\n\nimport * as publishEndpointConfig from './endpoints/publish';\nimport * as historyEndpointConfig from './endpoints/history/get_history';\nimport * as deleteMessagesEndpointConfig from './endpoints/history/delete_messages';\nimport * as fetchMessagesEndpointConfig from './endpoints/fetch_messages';\nimport * as timeEndpointConfig from './endpoints/time';\nimport * as subscribeEndpointConfig from './endpoints/subscribe';\n\nimport OPERATIONS from './constants/operations';\nimport CATEGORIES from './constants/categories';\n\nimport { InternalSetupStruct } from './flow_interfaces';\nimport uuidGenerator from './components/uuid';\n\nexport default class {\n\n _config: Config;\n _listenerManager: ListenerManager;\n\n // tell flow about the mounted endpoint\n time: Function;\n publish: Function;\n fire: Function;\n\n history: Function;\n deleteMessages: Function;\n fetchMessages: Function;\n\n //\n channelGroups: Object;\n //\n push: Object;\n //\n hereNow: Function;\n whereNow: Function;\n getState: Function;\n setState: Function;\n //\n grant: Function;\n audit: Function;\n //\n subscribe: Function;\n unsubscribe: Function;\n unsubscribeAll: Function;\n\n disconnect: Function;\n reconnect: Function;\n\n\n destroy: Function;\n stop: Function;\n\n getSubscribedChannels: Function;\n getSubscribedChannelGroups: Function;\n\n addListener: Function;\n removeListener: Function;\n removeAllListeners: Function;\n\n getAuthKey: Function;\n setAuthKey: Function;\n\n setCipherKey: Function;\n setUUID: Function;\n getUUID: Function;\n\n getFilterExpression: Function;\n setFilterExpression: Function;\n\n setHeartbeatInterval: Function;\n\n encrypt: Function;\n decrypt: Function;\n\n //\n\n constructor(setup: InternalSetupStruct) {\n let { db, networking } = setup;\n\n const config = this._config = new Config({ setup, db });\n const crypto = new Crypto({ config });\n\n networking.init(config);\n\n let modules = { config, networking, crypto };\n\n const timeEndpoint = endpointCreator.bind(this, modules, timeEndpointConfig);\n const leaveEndpoint = endpointCreator.bind(this, modules, presenceLeaveEndpointConfig);\n const heartbeatEndpoint = endpointCreator.bind(this, modules, presenceHeartbeatEndpointConfig);\n const setStateEndpoint = endpointCreator.bind(this, modules, presenceSetStateConfig);\n const subscribeEndpoint = endpointCreator.bind(this, modules, subscribeEndpointConfig);\n\n // managers\n const listenerManager = this._listenerManager = new ListenerManager();\n\n const subscriptionManager = new SubscriptionManager({\n timeEndpoint,\n leaveEndpoint,\n heartbeatEndpoint,\n setStateEndpoint,\n subscribeEndpoint,\n crypto: modules.crypto,\n config: modules.config,\n listenerManager\n });\n\n this.addListener = listenerManager.addListener.bind(listenerManager);\n this.removeListener = listenerManager.removeListener.bind(listenerManager);\n this.removeAllListeners = listenerManager.removeAllListeners.bind(listenerManager);\n\n /* channel groups */\n this.channelGroups = {\n listGroups: endpointCreator.bind(this, modules, listChannelGroupsConfig),\n listChannels: endpointCreator.bind(this, modules, listChannelsInChannelGroupConfig),\n addChannels: endpointCreator.bind(this, modules, addChannelsChannelGroupConfig),\n removeChannels: endpointCreator.bind(this, modules, removeChannelsChannelGroupConfig),\n deleteGroup: endpointCreator.bind(this, modules, deleteChannelGroupConfig)\n };\n /* push */\n this.push = {\n addChannels: endpointCreator.bind(this, modules, addPushChannelsConfig),\n removeChannels: endpointCreator.bind(this, modules, removePushChannelsConfig),\n deleteDevice: endpointCreator.bind(this, modules, removeDevicePushConfig),\n listChannels: endpointCreator.bind(this, modules, listPushChannelsConfig)\n };\n /* presence */\n this.hereNow = endpointCreator.bind(this, modules, presenceHereNowConfig);\n this.whereNow = endpointCreator.bind(this, modules, presenceWhereNowEndpointConfig);\n this.getState = endpointCreator.bind(this, modules, presenceGetStateConfig);\n this.setState = subscriptionManager.adaptStateChange.bind(subscriptionManager);\n /* PAM */\n this.grant = endpointCreator.bind(this, modules, grantEndpointConfig);\n this.audit = endpointCreator.bind(this, modules, auditEndpointConfig);\n //\n this.publish = endpointCreator.bind(this, modules, publishEndpointConfig);\n\n this.fire = (args, callback) => {\n args.replicate = false;\n args.storeInHistory = false;\n return this.publish(args, callback);\n };\n\n this.history = endpointCreator.bind(this, modules, historyEndpointConfig);\n this.deleteMessages = endpointCreator.bind(this, modules, deleteMessagesEndpointConfig);\n this.fetchMessages = endpointCreator.bind(this, modules, fetchMessagesEndpointConfig);\n\n this.time = timeEndpoint;\n\n // subscription related methods\n this.subscribe = subscriptionManager.adaptSubscribeChange.bind(subscriptionManager);\n this.unsubscribe = subscriptionManager.adaptUnsubscribeChange.bind(subscriptionManager);\n this.disconnect = subscriptionManager.disconnect.bind(subscriptionManager);\n this.reconnect = subscriptionManager.reconnect.bind(subscriptionManager);\n\n this.destroy = (isOffline: boolean) => {\n subscriptionManager.unsubscribeAll(isOffline);\n subscriptionManager.disconnect();\n };\n\n // --- deprecated ------------------\n this.stop = this.destroy; // --------\n // --- deprecated ------------------\n\n this.unsubscribeAll = subscriptionManager.unsubscribeAll.bind(subscriptionManager);\n\n this.getSubscribedChannels = subscriptionManager.getSubscribedChannels.bind(subscriptionManager);\n this.getSubscribedChannelGroups = subscriptionManager.getSubscribedChannelGroups.bind(subscriptionManager);\n\n // mount crypto\n this.encrypt = crypto.encrypt.bind(crypto);\n this.decrypt = crypto.decrypt.bind(crypto);\n\n /* config */\n this.getAuthKey = modules.config.getAuthKey.bind(modules.config);\n this.setAuthKey = modules.config.setAuthKey.bind(modules.config);\n this.setCipherKey = modules.config.setCipherKey.bind(modules.config);\n this.getUUID = modules.config.getUUID.bind(modules.config);\n this.setUUID = modules.config.setUUID.bind(modules.config);\n this.getFilterExpression = modules.config.getFilterExpression.bind(modules.config);\n this.setFilterExpression = modules.config.setFilterExpression.bind(modules.config);\n\n this.setHeartbeatInterval = modules.config.setHeartbeatInterval.bind(modules.config);\n }\n\n\n getVersion(): string {\n return this._config.getVersion();\n }\n\n // network hooks to indicate network changes\n networkDownDetected() {\n this._listenerManager.announceNetworkDown();\n\n if (this._config.restore) {\n this.disconnect();\n } else {\n this.destroy(true);\n }\n }\n\n networkUpDetected() {\n this._listenerManager.announceNetworkUp();\n this.reconnect();\n }\n\n\n static generateUUID(): string {\n return uuidGenerator.createUUID();\n }\n\n static OPERATIONS = OPERATIONS;\n static CATEGORIES = CATEGORIES;\n\n}\n"]} \ No newline at end of file diff --git a/lib/nativescript/index.js b/lib/nativescript/index.js new file mode 100644 index 000000000..8b5d44522 --- /dev/null +++ b/lib/nativescript/index.js @@ -0,0 +1,48 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _pubnubCommon = require('../core/pubnub-common'); + +var _pubnubCommon2 = _interopRequireDefault(_pubnubCommon); + +var _networking = require('../networking'); + +var _networking2 = _interopRequireDefault(_networking); + +var _common = require('../db/common'); + +var _common2 = _interopRequireDefault(_common); + +var _nativescript = require('../networking/modules/nativescript'); + +var _flow_interfaces = require('../core/flow_interfaces'); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + +var _class = function (_PubNubCore) { + _inherits(_class, _PubNubCore); + + function _class(setup) { + _classCallCheck(this, _class); + + setup.db = new _common2.default(); + setup.networking = new _networking2.default({ del: _nativescript.del, get: _nativescript.get, post: _nativescript.post }); + setup.sdkFamily = 'NativeScript'; + return _possibleConstructorReturn(this, (_class.__proto__ || Object.getPrototypeOf(_class)).call(this, setup)); + } + + return _class; +}(_pubnubCommon2.default); + +exports.default = _class; +module.exports = exports['default']; +//# sourceMappingURL=index.js.map diff --git a/lib/nativescript/index.js.map b/lib/nativescript/index.js.map new file mode 100644 index 000000000..c4f717220 --- /dev/null +++ b/lib/nativescript/index.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["nativescript/index.js"],"names":["setup","db","networking","del","get","post","sdkFamily"],"mappings":";;;;;;AAEA;;;;AACA;;;;AACA;;;;AACA;;AACA;;;;;;;;;;;;;AAGE,kBAAYA,KAAZ,EAAwC;AAAA;;AACtCA,UAAMC,EAAN,GAAW,sBAAX;AACAD,UAAME,UAAN,GAAmB,yBAAe,EAAEC,sBAAF,EAAOC,sBAAP,EAAYC,wBAAZ,EAAf,CAAnB;AACAL,UAAMM,SAAN,GAAkB,cAAlB;AAHsC,2GAIhCN,KAJgC;AAKvC","file":"index.js","sourcesContent":["/* @flow */\n\nimport PubNubCore from '../core/pubnub-common';\nimport Networking from '../networking';\nimport Database from '../db/common';\nimport { del, get, post } from '../networking/modules/nativescript';\nimport { InternalSetupStruct } from '../core/flow_interfaces';\n\nexport default class extends PubNubCore {\n constructor(setup: InternalSetupStruct) {\n setup.db = new Database();\n setup.networking = new Networking({ del, get, post });\n setup.sdkFamily = 'NativeScript';\n super(setup);\n }\n}\n"]} \ No newline at end of file diff --git a/lib/networking/modules/nativescript.js b/lib/networking/modules/nativescript.js new file mode 100644 index 000000000..63c8cad14 --- /dev/null +++ b/lib/networking/modules/nativescript.js @@ -0,0 +1,87 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.get = get; +exports.post = post; +exports.del = del; + +var _http = require('http'); + +var _flow_interfaces = require('../../core/flow_interfaces'); + +var _utils = require('../utils'); + +function log(url, qs, res) { + var _pickLogger = function _pickLogger() { + if (console && console.log) return console; + return console; + }; + + var start = new Date().getTime(); + var timestamp = new Date().toISOString(); + var logger = _pickLogger(); + logger.log('<<<<<'); + logger.log('[' + timestamp + ']', '\n', url, '\n', qs); + logger.log('-----'); + + var now = new Date().getTime(); + var elapsed = now - start; + var timestampDone = new Date().toISOString(); + + logger.log('>>>>>>'); + logger.log('[' + timestampDone + ' / ' + elapsed + ']', '\n', url, '\n', qs, '\n', res); + logger.log('-----'); +} + +function xdr(method, url, params, body, endpoint, callback) { + var _this = this; + + var status = {}; + status.operation = endpoint.operation; + + return (0, _http.request)({ + method: method, + url: (0, _utils.buildUrl)(url, params), + content: body, + timeout: endpoint.timeout + }).then(function (response) { + status.error = false; + + if (response.statusCode) { + status.statusCode = response.statusCode; + } + + return response.content.toJSON(); + }).then(function (response) { + var resp = response; + + if (_this._config.logVerbosity) { + log(url, params, resp); + } + + callback(status, resp); + }).catch(function (e) { + status.error = true; + status.errorData = e; + status.category = _this._detectErrorCategory(e); + callback(status, null); + }); +} + +function get(params, endpoint, callback) { + var url = this.getStandardOrigin() + endpoint.url; + return xdr.call(this, 'GET', url, params, '', endpoint, callback); +} + +function post(params, body, endpoint, callback) { + var url = this.getStandardOrigin() + endpoint.url; + return xdr.call(this, 'POST', url, params, body, endpoint, callback); +} + +function del(params, endpoint, callback) { + var url = this.getStandardOrigin() + endpoint.url; + return xdr.call(this, 'DELETE', url, params, '', endpoint, callback); +} +//# sourceMappingURL=nativescript.js.map diff --git a/lib/networking/modules/nativescript.js.map b/lib/networking/modules/nativescript.js.map new file mode 100644 index 000000000..6e7f5e37f --- /dev/null +++ b/lib/networking/modules/nativescript.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["networking/modules/nativescript.js"],"names":["get","post","del","log","url","qs","res","_pickLogger","console","start","Date","getTime","timestamp","toISOString","logger","now","elapsed","timestampDone","xdr","method","params","body","endpoint","callback","status","operation","content","timeout","then","response","error","statusCode","toJSON","resp","_config","logVerbosity","catch","e","errorData","category","_detectErrorCategory","getStandardOrigin","call"],"mappings":"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","file":"nativescript.js","sourcesContent":["/* @flow */\n\nimport { request as HttpRequest } from 'http';\nimport { EndpointDefinition, StatusAnnouncement } from '../../core/flow_interfaces';\nimport { buildUrl } from '../utils';\n\nfunction log(url, qs, res) {\n let _pickLogger = () => {\n if (console && console.log) return console; // eslint-disable-line no-console\n return console;\n };\n\n let start = new Date().getTime();\n let timestamp = new Date().toISOString();\n let logger = _pickLogger();\n logger.log('<<<<<'); // eslint-disable-line no-console\n logger.log(`[${timestamp}]`, '\\n', url, '\\n', qs); // eslint-disable-line no-console\n logger.log('-----'); // eslint-disable-line no-console\n\n let now = new Date().getTime();\n let elapsed = now - start;\n let timestampDone = new Date().toISOString();\n\n logger.log('>>>>>>'); // eslint-disable-line no-console\n logger.log(`[${timestampDone} / ${elapsed}]`, '\\n', url, '\\n', qs, '\\n', res); // eslint-disable-line no-console\n logger.log('-----'); // eslint-disable-line no-console\n}\n\nfunction xdr(method: string, url: string, params: Object, body: string, endpoint: EndpointDefinition, callback: Function): void {\n let status: StatusAnnouncement = {};\n status.operation = endpoint.operation;\n\n // $FlowFixMe\n return HttpRequest({\n method,\n url: buildUrl(url, params),\n content: body,\n timeout: endpoint.timeout\n }).then((response) => {\n status.error = false;\n\n if (response.statusCode) {\n status.statusCode = response.statusCode;\n }\n\n return response.content.toJSON();\n }).then((response) => {\n let resp = response;\n\n if (this._config.logVerbosity) {\n log(url, params, resp);\n }\n\n callback(status, resp);\n }).catch((e) => {\n status.error = true;\n status.errorData = e;\n status.category = this._detectErrorCategory(e);\n callback(status, null);\n });\n}\n\nexport function get(params: Object, endpoint: EndpointDefinition, callback: Function) {\n let url = this.getStandardOrigin() + endpoint.url;\n return xdr.call(this, 'GET', url, params, '', endpoint, callback);\n}\n\nexport function post(params: Object, body: string, endpoint: EndpointDefinition, callback: Function) {\n let url = this.getStandardOrigin() + endpoint.url;\n return xdr.call(this, 'POST', url, params, body, endpoint, callback);\n}\n\nexport function del(params: Object, endpoint: EndpointDefinition, callback: Function) {\n let url = this.getStandardOrigin() + endpoint.url;\n return xdr.call(this, 'DELETE', url, params, '', endpoint, callback);\n}\n"]} \ No newline at end of file diff --git a/package.json b/package.json index c5597d10e..1957aa366 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "pubnub", - "version": "4.18.0", + "version": "4.19.0", "author": "PubNub ", "description": "Publish & Subscribe Real-time Messaging with PubNub", "bin": {}, diff --git a/src/core/components/config.js b/src/core/components/config.js index 473e43a78..4dad76eb8 100644 --- a/src/core/components/config.js +++ b/src/core/components/config.js @@ -224,7 +224,7 @@ export default class { setSendBeaconConfig(val: boolean): this { this._useSendBeacon = val; return this; } getVersion(): string { - return '4.18.0'; + return '4.19.0'; } _decideUUID(providedUUID: string): string { From 6a6d972418456ff87b0d785d5c033c25afc997f9 Mon Sep 17 00:00:00 2001 From: Manuel Fernando Date: Fri, 15 Dec 2017 11:02:07 -0500 Subject: [PATCH 06/13] add method setProxy for Nodejs (#120) --- src/core/components/config.js | 8 ++++++-- src/core/pubnub-common.js | 9 +++++++++ src/networking/index.js | 4 ++++ 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/src/core/components/config.js b/src/core/components/config.js index 4dad76eb8..de2005e86 100644 --- a/src/core/components/config.js +++ b/src/core/components/config.js @@ -2,7 +2,7 @@ /* global location */ import uuidGenerator from './uuid'; -import { InternalSetupStruct, DatabaseInterface, KeepAliveStruct } from '../flow_interfaces'; +import { InternalSetupStruct, DatabaseInterface, KeepAliveStruct, ProxyStruct } from '../flow_interfaces'; type ConfigConstructArgs = { setup: InternalSetupStruct, @@ -20,7 +20,7 @@ export default class { authKey: string; UUID: string; - proxy: string; + proxy: ProxyStruct; /* if _useInstanceId is true, this instanceId will be added to all requests @@ -210,6 +210,10 @@ export default class { return this; } + setProxy(proxy: ProxyStruct) { + this.proxy = proxy; + } + getHeartbeatInterval(): number { return this._heartbeatInterval; } setHeartbeatInterval(val: number): this { this._heartbeatInterval = val; return this; } diff --git a/src/core/pubnub-common.js b/src/core/pubnub-common.js index 83a012017..1e0ab9501 100644 --- a/src/core/pubnub-common.js +++ b/src/core/pubnub-common.js @@ -98,6 +98,8 @@ export default class { setHeartbeatInterval: Function; + setProxy: Function; + encrypt: Function; decrypt: Function; @@ -209,6 +211,13 @@ export default class { this.setFilterExpression = modules.config.setFilterExpression.bind(modules.config); this.setHeartbeatInterval = modules.config.setHeartbeatInterval.bind(modules.config); + + if (networking.hasModule('proxy')) { + this.setProxy = (proxy) => { + modules.config.setProxy(proxy); + this.reconnect(); + }; + } } diff --git a/src/networking/index.js b/src/networking/index.js index e78058170..ad41287fb 100644 --- a/src/networking/index.js +++ b/src/networking/index.js @@ -60,6 +60,10 @@ export default class { return this._providedFQDN.replace('pubsub', `ps${newSubDomain}`); } + hasModule(name: string) { + return name in this._modules; + } + // origin operations shiftStandardOrigin(failover: boolean = false): string { this._standardOrigin = this.nextOrigin(failover); From b6e781f7635661c3309c8f424246467ff31ec464 Mon Sep 17 00:00:00 2001 From: manuelfernando Date: Fri, 29 Dec 2017 07:56:11 -0500 Subject: [PATCH 07/13] set ssl to true for nodejs by default --- src/node/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/node/index.js b/src/node/index.js index 84e0cb4a6..875e3dc92 100755 --- a/src/node/index.js +++ b/src/node/index.js @@ -12,6 +12,7 @@ export default class extends PubNubCore { setup.db = new Database(); setup.networking = new Networking({ keepAlive, del, get, post, proxy }); setup.sdkFamily = 'Nodejs'; + setup.ssl = true; super(setup); } From 2e41aba49bbeb7bd59d0a2a19854eb7bc1b29247 Mon Sep 17 00:00:00 2001 From: Manuel Fernando Date: Wed, 3 Jan 2018 15:41:39 -0500 Subject: [PATCH 08/13] Heartbeat configs (#119) * isHeartbeatOnAllSubscriptions * remove isHeartbeatOnAllSubscriptions from the config * start only the heartbeat loop with heartbeatChannels and heartbeatChannelGroup --- src/core/components/subscription_manager.js | 141 ++++++++++++++++-- .../components/subscription_manager.test.js | 44 ++++++ 2 files changed, 169 insertions(+), 16 deletions(-) diff --git a/src/core/components/subscription_manager.js b/src/core/components/subscription_manager.js index 544d55309..23fb3d458 100644 --- a/src/core/components/subscription_manager.js +++ b/src/core/components/subscription_manager.js @@ -11,13 +11,17 @@ import categoryConstants from '../constants/categories'; type SubscribeArgs = { channels: Array, channelGroups: Array, + heartbeatChannels: Array, + heartbeatChannelGroups: Array, withPresence: ?boolean, timetoken: ?number } type UnsubscribeArgs = { channels: Array, - channelGroups: Array + channelGroups: Array, + heartbeatChannels: Array, + heartbeatChannelGroups: Array } type StateArgs = { @@ -52,6 +56,9 @@ export default class { _channels: Object; _presenceChannels: Object; + _heartbeatChannels: Object; + _heartbeatChannelGroups: Object; + _channelGroups: Object; _presenceChannelGroups: Object; @@ -72,6 +79,9 @@ export default class { // store pending connection elements _pendingChannelSubscriptions: Array; _pendingChannelGroupSubscriptions: Array; + + _pendingHeartbeatChannels: Array; + _pendingHeartbeatChannelGroups: Array; // _dedupingManager: DedupingManager; @@ -90,12 +100,18 @@ export default class { this._channels = {}; this._presenceChannels = {}; + this._heartbeatChannels = {}; + this._heartbeatChannelGroups = {}; + this._channelGroups = {}; this._presenceChannelGroups = {}; this._pendingChannelSubscriptions = []; this._pendingChannelGroupSubscriptions = []; + this._pendingHeartbeatChannels = []; + this._pendingHeartbeatChannelGroups = []; + this._currentTimetoken = 0; this._lastTimetoken = 0; this._storedTimetoken = null; @@ -123,7 +139,7 @@ export default class { } adaptSubscribeChange(args: SubscribeArgs) { - const { timetoken, channels = [], channelGroups = [], withPresence = false } = args; + const { timetoken, channels = [], channelGroups = [], heartbeatChannels = [], heartbeatChannelGroups = [], withPresence = false } = args; if (!this._config.subscribeKey || this._config.subscribeKey === '') { if (console && console.log) console.log('subscribe key missing; aborting subscribe') //eslint-disable-line @@ -141,10 +157,24 @@ export default class { this._currentTimetoken = 0; } + heartbeatChannels.forEach((channel: string) => { + this._heartbeatChannels[channel] = { state: {} }; + this._pendingHeartbeatChannels.push(channel); + }); + + heartbeatChannelGroups.forEach((channelGroup: string) => { + this._heartbeatChannelGroups[channelGroup] = { state: {} }; + this._pendingHeartbeatChannelGroups.push(channelGroup); + }); + channels.forEach((channel: string) => { this._channels[channel] = { state: {} }; if (withPresence) this._presenceChannels[channel] = {}; + if (!(channel in this._heartbeatChannels)) { + this._heartbeatChannels[channel] = this._channels[channel]; + } + this._pendingChannelSubscriptions.push(channel); }); @@ -152,6 +182,10 @@ export default class { this._channelGroups[channelGroup] = { state: {} }; if (withPresence) this._presenceChannelGroups[channelGroup] = {}; + if (!(channelGroup in this._heartbeatChannelGroups)) { + this._heartbeatChannelGroups[channelGroup] = this._channelGroups[channelGroup]; + } + this._pendingChannelGroupSubscriptions.push(channelGroup); }); @@ -160,14 +194,30 @@ export default class { } adaptUnsubscribeChange(args: UnsubscribeArgs, isOffline: boolean) { - const { channels = [], channelGroups = [] } = args; + const { channels = [], channelGroups = [], heartbeatChannels = [], heartbeatChannelGroups = [] } = args; // keep track of which channels and channel groups // we are going to unsubscribe from. const actualChannels = []; const actualChannelGroups = []; + const actualHeartbeatChannels = []; + const actualHeartbeatChannelGroups = []; // + heartbeatChannels.forEach((channel) => { + if (channel in this._heartbeatChannels) { + delete this._heartbeatChannels[channel]; + actualHeartbeatChannels.push(channel); + } + }); + + heartbeatChannelGroups.forEach((channelGroup) => { + if (channelGroup in this._heartbeatChannelGroups) { + delete this._heartbeatChannelGroups[channelGroup]; + actualHeartbeatChannelGroups.push(channelGroup); + } + }); + channels.forEach((channel) => { if (channel in this._channels) { delete this._channels[channel]; @@ -177,6 +227,9 @@ export default class { delete this._presenceChannels[channel]; actualChannels.push(channel); } + if (channel in this._heartbeatChannels) { + delete this._heartbeatChannels[channel]; + } }); channelGroups.forEach((channelGroup) => { @@ -188,17 +241,42 @@ export default class { delete this._channelGroups[channelGroup]; actualChannelGroups.push(channelGroup); } + + if (channelGroup in this._heartbeatChannelGroups) { + delete this._heartbeatChannelGroups[channelGroup]; + } }); // no-op if there are no channels and cg's to unsubscribe from. - if (actualChannels.length === 0 && actualChannelGroups.length === 0) { + if (actualChannels.length === 0 && actualChannelGroups.length === 0 && actualHeartbeatChannels.length === 0 && actualHeartbeatChannelGroups.length === 0) { return; } if (this._config.suppressLeaveEvents === false && !isOffline) { - this._leaveEndpoint({ channels: actualChannels, channelGroups: actualChannelGroups }, (status) => { + let _actualChannels = actualChannels.map(channel => channel); + let _actualChannelGroups = actualChannelGroups.map(channelGroup => channelGroup); + + actualHeartbeatChannels.forEach((channel) => { + if (!_actualChannels.includes(channel)) { + _actualChannels.push(channel); + } + }); + + actualHeartbeatChannelGroups.forEach((channelGroup) => { + if (!_actualChannelGroups.includes(channelGroup)) { + _actualChannelGroups.push(channelGroup); + } + }); + + this._leaveEndpoint({ channels: _actualChannels, channelGroups: _actualChannelGroups }, (status) => { status.affectedChannels = actualChannels; status.affectedChannelGroups = actualChannelGroups; + + if (heartbeatChannels.length > 0 || heartbeatChannelGroups.length > 0) { + status.affectedHeartbeatChannels = actualHeartbeatChannels; + status.affectedHeartbeatChannelGroups = actualHeartbeatChannelGroups; + } + status.currentTimetoken = this._currentTimetoken; status.lastTimetoken = this._lastTimetoken; this._listenerManager.announceStatus(status); @@ -221,7 +299,20 @@ export default class { } unsubscribeAll(isOffline: boolean) { - this.adaptUnsubscribeChange({ channels: this.getSubscribedChannels(), channelGroups: this.getSubscribedChannelGroups() }, isOffline); + this.adaptUnsubscribeChange({ + channels: this.getSubscribedChannels(), + channelGroups: this.getSubscribedChannelGroups(), + heartbeatChannels: this.getHeartbeatChannels(), + heartbeatChannelGroups: this.getHeartbeatChannelGroups() + }, isOffline); + } + + getHeartbeatChannels(): Array { + return Object.keys(this._heartbeatChannels); + } + + getHeartbeatChannelGroups(): Array { + return Object.keys(this._heartbeatChannelGroups); } getSubscribedChannels(): Array { @@ -263,21 +354,21 @@ export default class { } _performHeartbeatLoop() { - let presenceChannels = Object.keys(this._channels); - let presenceChannelGroups = Object.keys(this._channelGroups); + let heartbeatChannels = Object.keys(this._heartbeatChannels); + let heartbeatChannelGroups = Object.keys(this._heartbeatChannelGroups); let presenceState = {}; - if (presenceChannels.length === 0 && presenceChannelGroups.length === 0) { + if (heartbeatChannels.length === 0 && heartbeatChannelGroups.length === 0) { return; } - presenceChannels.forEach((channel) => { - let channelState = this._channels[channel].state; + heartbeatChannels.forEach((channel) => { + let channelState = this._heartbeatChannels[channel].state; if (Object.keys(channelState).length) presenceState[channel] = channelState; }); - presenceChannelGroups.forEach((channelGroup) => { - let channelGroupState = this._channelGroups[channelGroup].state; + heartbeatChannelGroups.forEach((channelGroup) => { + let channelGroupState = this._heartbeatChannelGroups[channelGroup].state; if (Object.keys(channelGroupState).length) presenceState[channelGroup] = channelGroupState; }); @@ -299,8 +390,8 @@ export default class { }; this._heartbeatEndpoint({ - channels: presenceChannels, - channelGroups: presenceChannelGroups, + channels: heartbeatChannels, + channelGroups: heartbeatChannelGroups, state: presenceState }, onHeartbeat.bind(this)); } @@ -308,6 +399,8 @@ export default class { this._stopSubscribeLoop(); let channels = []; let channelGroups = []; + let heartbeatChannels = []; + let heartbeatChannelGroups = []; Object.keys(this._channels).forEach(channel => channels.push(channel)); Object.keys(this._presenceChannels).forEach(channel => channels.push(`${channel}-pnpres`)); @@ -315,7 +408,10 @@ export default class { Object.keys(this._channelGroups).forEach(channelGroup => channelGroups.push(channelGroup)); Object.keys(this._presenceChannelGroups).forEach(channelGroup => channelGroups.push(`${channelGroup}-pnpres`)); - if (channels.length === 0 && channelGroups.length === 0) { + Object.keys(this._heartbeatChannels).forEach(channel => heartbeatChannels.push(channel)); + Object.keys(this._heartbeatChannelGroups).forEach(channelGroup => heartbeatChannelGroups.push(channelGroup)); + + if (channels.length === 0 && channelGroups.length === 0 && heartbeatChannels.length === 0 && heartbeatChannelGroups.length === 0) { return; } @@ -381,10 +477,21 @@ export default class { } if (!this._subscriptionStatusAnnounced) { + const conciliationChannels = this.getHeartbeatChannels().every(channel => this.getSubscribedChannels().includes(channel)); + const conciliationChannelGroups = this.getHeartbeatChannelGroups().every(channelGroup => this.getSubscribedChannelGroups().includes(channelGroup)); + let connectedAnnounce: StatusAnnouncement = {}; connectedAnnounce.category = categoryConstants.PNConnectedCategory; connectedAnnounce.operation = status.operation; connectedAnnounce.affectedChannels = this._pendingChannelSubscriptions; + + if (!conciliationChannels || !conciliationChannelGroups) { + connectedAnnounce.affectedHeartbeatChannels = this._pendingHeartbeatChannels; + connectedAnnounce.affectedHeartbeatChannelGroups = this._pendingHeartbeatChannelGroups; + connectedAnnounce.heartbeatChannels = this.getHeartbeatChannels(); + connectedAnnounce.heartbeatChannelGroups = this.getHeartbeatChannelGroups(); + } + connectedAnnounce.subscribedChannels = this.getSubscribedChannels(); connectedAnnounce.affectedChannelGroups = this._pendingChannelGroupSubscriptions; connectedAnnounce.lastTimetoken = this._lastTimetoken; @@ -395,6 +502,8 @@ export default class { // clear the pending connections list this._pendingChannelSubscriptions = []; this._pendingChannelGroupSubscriptions = []; + this._pendingHeartbeatChannels = []; + this._pendingHeartbeatChannelGroups = []; } let messages = payload.messages || []; diff --git a/test/integration/components/subscription_manager.test.js b/test/integration/components/subscription_manager.test.js index f0a0b6791..65323602f 100644 --- a/test/integration/components/subscription_manager.test.js +++ b/test/integration/components/subscription_manager.test.js @@ -222,6 +222,50 @@ describe('#components/subscription_manager', () => { pubnubWithPassingHeartbeats.subscribe({ channels: ['ch1', 'ch2'], withPresence: true }); }); + it('reports when heartbeats pass with heartbeatChannels', (done) => { + const scope = utils.createNock().get('/v2/presence/sub-key/mySubKey/channel/ch1%2Cch2/heartbeat') + .query({ pnsdk: `PubNub-JS-Nodejs/${pubnub.getVersion()}`, uuid: 'myUUID', heartbeat: 300, state: '{}' }) + .reply(200, '{"status": 200, "message": "OK", "service": "Presence"}'); + + pubnubWithPassingHeartbeats.addListener({ + status(statusPayload) { + if (statusPayload.operation !== PubNub.OPERATIONS.PNHeartbeatOperation) return; + + assert.equal(scope.isDone(), true); + assert.deepEqual({ + error: false, + operation: 'PNHeartbeatOperation', + statusCode: 200 + }, statusPayload); + done(); + } + }); + + pubnubWithPassingHeartbeats.subscribe({ heartbeatChannels: ['ch1', 'ch2'] }); + }); + + it('reports when heartbeats pass with heartbeatChannelGroups', (done) => { + const scope = utils.createNock().get('/v2/presence/sub-key/mySubKey/channel/%2C/heartbeat') + .query({ pnsdk: `PubNub-JS-Nodejs/${pubnub.getVersion()}`, uuid: 'myUUID', heartbeat: 300, state: '{}', 'channel-group': 'cg1' }) + .reply(200, '{"status": 200, "message": "OK", "service": "Presence"}'); + + pubnubWithPassingHeartbeats.addListener({ + status(statusPayload) { + if (statusPayload.operation !== PubNub.OPERATIONS.PNHeartbeatOperation) return; + + assert.equal(scope.isDone(), true); + assert.deepEqual({ + error: false, + operation: 'PNHeartbeatOperation', + statusCode: 200 + }, statusPayload); + done(); + } + }); + + pubnubWithPassingHeartbeats.subscribe({ heartbeatChannelGroups: ['cg1'] }); + }); + it('reports when the queue is beyond set threshold', (done) => { const scope = utils.createNock().get('/v2/subscribe/mySubKey/ch1%2Cch2%2Cch1-pnpres%2Cch2-pnpres/0') .query({ pnsdk: `PubNub-JS-Nodejs/${pubnub.getVersion()}`, uuid: 'myUUID', heartbeat: 300 }) From f3517b8cdd443ee8650ab1773b29d5a2eef7ca1e Mon Sep 17 00:00:00 2001 From: Max Presman Date: Thu, 4 Jan 2018 10:36:55 -0800 Subject: [PATCH 09/13] post merge fixes --- dist/titanium/pubnub.js | 204 ++++++++++++------ dist/titanium/pubnub.min.js | 6 +- dist/web/pubnub.js | 204 ++++++++++++------ dist/web/pubnub.min.js | 6 +- lib/core/components/config.js | 5 + lib/core/components/config.js.map | 2 +- lib/core/components/subscription_manager.js | 186 ++++++++++------ .../components/subscription_manager.js.map | 2 +- lib/core/pubnub-common.js | 8 + lib/core/pubnub-common.js.map | 2 +- lib/networking/index.js | 5 + lib/networking/index.js.map | 2 +- lib/node/index.js | 1 + lib/node/index.js.map | 2 +- src/core/components/subscription_manager.js | 163 ++++++-------- src/core/pubnub-common.js | 2 + .../components/subscription_manager.test.js | 4 +- 17 files changed, 509 insertions(+), 295 deletions(-) diff --git a/dist/titanium/pubnub.js b/dist/titanium/pubnub.js index 7bdae07ca..b26d35519 100644 --- a/dist/titanium/pubnub.js +++ b/dist/titanium/pubnub.js @@ -327,6 +327,7 @@ return /******/ (function(modules) { // webpackBootstrap this.time = timeEndpoint; this.subscribe = subscriptionManager.adaptSubscribeChange.bind(subscriptionManager); + this.presence = subscriptionManager.adaptPresenceChange.bind(subscriptionManager); this.unsubscribe = subscriptionManager.adaptUnsubscribeChange.bind(subscriptionManager); this.disconnect = subscriptionManager.disconnect.bind(subscriptionManager); this.reconnect = subscriptionManager.reconnect.bind(subscriptionManager); @@ -355,6 +356,13 @@ return /******/ (function(modules) { // webpackBootstrap this.setFilterExpression = modules.config.setFilterExpression.bind(modules.config); this.setHeartbeatInterval = modules.config.setHeartbeatInterval.bind(modules.config); + + if (networking.hasModule('proxy')) { + this.setProxy = function (proxy) { + modules.config.setProxy(proxy); + _this.reconnect(); + }; + } } _createClass(_class, [{ @@ -530,6 +538,11 @@ return /******/ (function(modules) { // webpackBootstrap this.setHeartbeatInterval(this._presenceTimeout / 2 - 1); return this; } + }, { + key: 'setProxy', + value: function setProxy(proxy) { + this.proxy = proxy; + } }, { key: 'getHeartbeatInterval', value: function getHeartbeatInterval() { @@ -1385,12 +1398,18 @@ return /******/ (function(modules) { // webpackBootstrap this._channels = {}; this._presenceChannels = {}; + this._heartbeatChannels = {}; + this._heartbeatChannelGroups = {}; + this._channelGroups = {}; this._presenceChannelGroups = {}; this._pendingChannelSubscriptions = []; this._pendingChannelGroupSubscriptions = []; + this._pendingHeartbeatChannels = []; + this._pendingHeartbeatChannelGroups = []; + this._currentTimetoken = 0; this._lastTimetoken = 0; this._storedTimetoken = null; @@ -1426,15 +1445,59 @@ return /******/ (function(modules) { // webpackBootstrap return this._setStateEndpoint({ state: state, channels: channels, channelGroups: channelGroups }, callback); } }, { - key: 'adaptSubscribeChange', - value: function adaptSubscribeChange(args) { + key: 'adaptPresenceChange', + value: function adaptPresenceChange(args) { var _this2 = this; - var timetoken = args.timetoken, + var connected = args.connected, _args$channels2 = args.channels, channels = _args$channels2 === undefined ? [] : _args$channels2, _args$channelGroups2 = args.channelGroups, - channelGroups = _args$channelGroups2 === undefined ? [] : _args$channelGroups2, + channelGroups = _args$channelGroups2 === undefined ? [] : _args$channelGroups2; + + + if (connected) { + channels.forEach(function (channel) { + _this2._heartbeatChannels[channel] = { state: {} }; + _this2._pendingHeartbeatChannels.push(channel); + }); + + channelGroups.forEach(function (channelGroup) { + _this2._heartbeatChannelGroups[channelGroup] = { state: {} }; + _this2._pendingHeartbeatChannelGroups.push(channelGroup); + }); + } else { + channels.forEach(function (channel) { + if (channel in _this2._heartbeatChannels) { + delete _this2._heartbeatChannels[channel]; + } + }); + + channelGroups.forEach(function (channelGroup) { + if (channelGroup in _this2._heartbeatChannelGroups) { + delete _this2._heartbeatChannelGroups[channelGroup]; + } + }); + + if (this._config.suppressLeaveEvents === false) { + this._leaveEndpoint({ channels: channels, channelGroups: channelGroups }, function (status) { + _this2._listenerManager.announceStatus(status); + }); + } + } + + this.reconnect(); + } + }, { + key: 'adaptSubscribeChange', + value: function adaptSubscribeChange(args) { + var _this3 = this; + + var timetoken = args.timetoken, + _args$channels3 = args.channels, + channels = _args$channels3 === undefined ? [] : _args$channels3, + _args$channelGroups3 = args.channelGroups, + channelGroups = _args$channelGroups3 === undefined ? [] : _args$channelGroups3, _args$withPresence = args.withPresence, withPresence = _args$withPresence === undefined ? false : _args$withPresence; @@ -1455,17 +1518,17 @@ return /******/ (function(modules) { // webpackBootstrap } channels.forEach(function (channel) { - _this2._channels[channel] = { state: {} }; - if (withPresence) _this2._presenceChannels[channel] = {}; + _this3._channels[channel] = { state: {} }; + if (withPresence) _this3._presenceChannels[channel] = {}; - _this2._pendingChannelSubscriptions.push(channel); + _this3._pendingChannelSubscriptions.push(channel); }); channelGroups.forEach(function (channelGroup) { - _this2._channelGroups[channelGroup] = { state: {} }; - if (withPresence) _this2._presenceChannelGroups[channelGroup] = {}; + _this3._channelGroups[channelGroup] = { state: {} }; + if (withPresence) _this3._presenceChannelGroups[channelGroup] = {}; - _this2._pendingChannelGroupSubscriptions.push(channelGroup); + _this3._pendingChannelGroupSubscriptions.push(channelGroup); }); this._subscriptionStatusAnnounced = false; @@ -1474,35 +1537,35 @@ return /******/ (function(modules) { // webpackBootstrap }, { key: 'adaptUnsubscribeChange', value: function adaptUnsubscribeChange(args, isOffline) { - var _this3 = this; + var _this4 = this; - var _args$channels3 = args.channels, - channels = _args$channels3 === undefined ? [] : _args$channels3, - _args$channelGroups3 = args.channelGroups, - channelGroups = _args$channelGroups3 === undefined ? [] : _args$channelGroups3; + var _args$channels4 = args.channels, + channels = _args$channels4 === undefined ? [] : _args$channels4, + _args$channelGroups4 = args.channelGroups, + channelGroups = _args$channelGroups4 === undefined ? [] : _args$channelGroups4; var actualChannels = []; var actualChannelGroups = []; channels.forEach(function (channel) { - if (channel in _this3._channels) { - delete _this3._channels[channel]; + if (channel in _this4._channels) { + delete _this4._channels[channel]; actualChannels.push(channel); } - if (channel in _this3._presenceChannels) { - delete _this3._presenceChannels[channel]; + if (channel in _this4._presenceChannels) { + delete _this4._presenceChannels[channel]; actualChannels.push(channel); } }); channelGroups.forEach(function (channelGroup) { - if (channelGroup in _this3._channelGroups) { - delete _this3._channelGroups[channelGroup]; + if (channelGroup in _this4._channelGroups) { + delete _this4._channelGroups[channelGroup]; actualChannelGroups.push(channelGroup); } - if (channelGroup in _this3._presenceChannelGroups) { - delete _this3._channelGroups[channelGroup]; + if (channelGroup in _this4._presenceChannelGroups) { + delete _this4._channelGroups[channelGroup]; actualChannelGroups.push(channelGroup); } }); @@ -1515,9 +1578,9 @@ return /******/ (function(modules) { // webpackBootstrap this._leaveEndpoint({ channels: actualChannels, channelGroups: actualChannelGroups }, function (status) { status.affectedChannels = actualChannels; status.affectedChannelGroups = actualChannelGroups; - status.currentTimetoken = _this3._currentTimetoken; - status.lastTimetoken = _this3._lastTimetoken; - _this3._listenerManager.announceStatus(status); + status.currentTimetoken = _this4._currentTimetoken; + status.lastTimetoken = _this4._lastTimetoken; + _this4._listenerManager.announceStatus(status); }); } @@ -1536,6 +1599,16 @@ return /******/ (function(modules) { // webpackBootstrap value: function unsubscribeAll(isOffline) { this.adaptUnsubscribeChange({ channels: this.getSubscribedChannels(), channelGroups: this.getSubscribedChannelGroups() }, isOffline); } + }, { + key: 'getHeartbeatChannels', + value: function getHeartbeatChannels() { + return Object.keys(this._heartbeatChannels); + } + }, { + key: 'getHeartbeatChannelGroups', + value: function getHeartbeatChannelGroups() { + return Object.keys(this._heartbeatChannelGroups); + } }, { key: 'getSubscribedChannels', value: function getSubscribedChannels() { @@ -1582,46 +1655,52 @@ return /******/ (function(modules) { // webpackBootstrap }, { key: '_performHeartbeatLoop', value: function _performHeartbeatLoop() { - var _this4 = this; + var _this5 = this; + + var heartbeatChannels = []; + heartbeatChannels = heartbeatChannels.concat(this.getHeartbeatChannels()); + heartbeatChannels = heartbeatChannels.concat(this.getSubscribedChannels()); + + var heartbeatChannelGroups = []; + heartbeatChannelGroups = heartbeatChannelGroups.concat(this.getHeartbeatChannelGroups()); + heartbeatChannelGroups = heartbeatChannelGroups.concat(this.getSubscribedChannelGroups()); - var presenceChannels = Object.keys(this._channels); - var presenceChannelGroups = Object.keys(this._channelGroups); var presenceState = {}; - if (presenceChannels.length === 0 && presenceChannelGroups.length === 0) { + if (heartbeatChannels.length === 0 && heartbeatChannelGroups.length === 0) { return; } - presenceChannels.forEach(function (channel) { - var channelState = _this4._channels[channel].state; + this.getSubscribedChannels().forEach(function (channel) { + var channelState = _this5._channels[channel].state; if (Object.keys(channelState).length) presenceState[channel] = channelState; }); - presenceChannelGroups.forEach(function (channelGroup) { - var channelGroupState = _this4._channelGroups[channelGroup].state; + this.getSubscribedChannelGroups().forEach(function (channelGroup) { + var channelGroupState = _this5._channelGroups[channelGroup].state; if (Object.keys(channelGroupState).length) presenceState[channelGroup] = channelGroupState; }); var onHeartbeat = function onHeartbeat(status) { - if (status.error && _this4._config.announceFailedHeartbeats) { - _this4._listenerManager.announceStatus(status); + if (status.error && _this5._config.announceFailedHeartbeats) { + _this5._listenerManager.announceStatus(status); } - if (status.error && _this4._config.autoNetworkDetection && _this4._isOnline) { - _this4._isOnline = false; - _this4.disconnect(); - _this4._listenerManager.announceNetworkDown(); - _this4.reconnect(); + if (status.error && _this5._config.autoNetworkDetection && _this5._isOnline) { + _this5._isOnline = false; + _this5.disconnect(); + _this5._listenerManager.announceNetworkDown(); + _this5.reconnect(); } - if (!status.error && _this4._config.announceSuccessfulHeartbeats) { - _this4._listenerManager.announceStatus(status); + if (!status.error && _this5._config.announceSuccessfulHeartbeats) { + _this5._listenerManager.announceStatus(status); } }; this._heartbeatEndpoint({ - channels: presenceChannels, - channelGroups: presenceChannelGroups, + channels: heartbeatChannels, + channelGroups: heartbeatChannelGroups, state: presenceState }, onHeartbeat.bind(this)); } }, { @@ -1662,7 +1741,7 @@ return /******/ (function(modules) { // webpackBootstrap }, { key: '_processSubscribeResponse', value: function _processSubscribeResponse(status, payload) { - var _this5 = this; + var _this6 = this; if (status.error) { if (status.category === _categories2.default.PNTimeoutCategory) { @@ -1676,19 +1755,19 @@ return /******/ (function(modules) { // webpackBootstrap } this._reconnectionManager.onReconnection(function () { - if (_this5._config.autoNetworkDetection && !_this5._isOnline) { - _this5._isOnline = true; - _this5._listenerManager.announceNetworkUp(); + if (_this6._config.autoNetworkDetection && !_this6._isOnline) { + _this6._isOnline = true; + _this6._listenerManager.announceNetworkUp(); } - _this5.reconnect(); - _this5._subscriptionStatusAnnounced = true; + _this6.reconnect(); + _this6._subscriptionStatusAnnounced = true; var reconnectedAnnounce = { category: _categories2.default.PNReconnectedCategory, operation: status.operation, - lastTimetoken: _this5._lastTimetoken, - currentTimetoken: _this5._currentTimetoken + lastTimetoken: _this6._lastTimetoken, + currentTimetoken: _this6._currentTimetoken }; - _this5._listenerManager.announceStatus(reconnectedAnnounce); + _this6._listenerManager.announceStatus(reconnectedAnnounce); }); this._reconnectionManager.startPolling(); @@ -1750,10 +1829,10 @@ return /******/ (function(modules) { // webpackBootstrap } if (dedupeOnSubscribe) { - if (_this5._dedupingManager.isDuplicate(message)) { + if (_this6._dedupingManager.isDuplicate(message)) { return; } else { - _this5._dedupingManager.addEntry(message); + _this6._dedupingManager.addEntry(message); } } @@ -1793,7 +1872,7 @@ return /******/ (function(modules) { // webpackBootstrap announce.timeout = message.payload.timeout; } - _this5._listenerManager.announcePresence(announce); + _this6._listenerManager.announcePresence(announce); } else { var _announce = {}; _announce.channel = null; @@ -1812,13 +1891,13 @@ return /******/ (function(modules) { // webpackBootstrap _announce.userMetadata = message.userMetadata; } - if (_this5._config.cipherKey) { - _announce.message = _this5._crypto.decrypt(message.payload); + if (_this6._config.cipherKey) { + _announce.message = _this6._crypto.decrypt(message.payload); } else { _announce.message = message.payload; } - _this5._listenerManager.announceMessage(_announce); + _this6._listenerManager.announceMessage(_announce); } }); @@ -4465,6 +4544,11 @@ return /******/ (function(modules) { // webpackBootstrap return this._providedFQDN.replace('pubsub', 'ps' + newSubDomain); } + }, { + key: 'hasModule', + value: function hasModule(name) { + return name in this._modules; + } }, { key: 'shiftStandardOrigin', value: function shiftStandardOrigin() { diff --git a/dist/titanium/pubnub.min.js b/dist/titanium/pubnub.min.js index d05b9b942..3bbc0cbda 100644 --- a/dist/titanium/pubnub.min.js +++ b/dist/titanium/pubnub.min.js @@ -1,3 +1,3 @@ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.PubNub=t():e.PubNub=t()}(this,function(){return function(e){function t(r){if(n[r])return n[r].exports;var i=n[r]={exports:{},id:r,loaded:!1};return e[r].call(i.exports,i,i.exports,t),i.loaded=!0,i.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var a=n(1),u=r(a),c=n(39),l=r(c),f=n(40),h=r(f),d=n(41),p=(n(5),function(e){function t(e){return i(this,t),e.db=new h.default,e.sdkFamily="TitaniumSDK",e.networking=new l.default({del:d.del,get:d.get,post:d.post}),o(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e))}return s(t,e),t}(u.default));t.default=p,e.exports=t.default},function(e,t,n){"use strict";function r(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}function i(e){return e&&e.__esModule?e:{default:e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var s=function(){function e(e,t){for(var n=0;n>>2]|=(n[i>>>2]>>>24-i%4*8&255)<<24-(r+i)%4*8;else if(65535>>2]=n[i>>>2];else t.push.apply(t,n);return this.sigBytes+=e,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=o.clone.call(this);return e.words=this.words.slice(0),e},random:function(t){for(var n=[],r=0;r>>2]>>>24-r%4*8&255;n.push((i>>>4).toString(16)),n.push((15&i).toString(16))}return n.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 s.init(n,t/2)}},c=a.Latin1={stringify:function(e){var t=e.words;e=e.sigBytes;for(var n=[],r=0;r>>2]>>>24-r%4*8&255));return n.join("")},parse:function(e){for(var t=e.length,n=[],r=0;r>>2]|=(255&e.charCodeAt(r))<<24-r%4*8;return new s.init(n,t)}},l=a.Utf8={stringify:function(e){try{return decodeURIComponent(escape(c.stringify(e)))}catch(e){throw Error("Malformed UTF-8 data")}},parse:function(e){return c.parse(unescape(encodeURIComponent(e)))}},f=r.BufferedBlockAlgorithm=o.extend({reset:function(){this._data=new s.init,this._nDataBytes=0},_append:function(e){"string"==typeof e&&(e=l.parse(e)),this._data.concat(e),this._nDataBytes+=e.sigBytes},_process:function(t){var n=this._data,r=n.words,i=n.sigBytes,o=this.blockSize,a=i/(4*o),a=t?e.ceil(a):e.max((0|a)-this._minBufferSize,0);if(t=a*o,i=e.min(4*t,i),t){for(var u=0;ul;){var f;e:{f=c;for(var h=e.sqrt(f),d=2;d<=h;d++)if(!(f%d)){f=!1;break e}f=!0}f&&(8>l&&(s[l]=u(e.pow(c,.5))),a[l]=u(e.pow(c,1/3)),l++),c++}var p=[],r=r.SHA256=o.extend({_doReset:function(){this._hash=new i.init(s.slice(0))},_doProcessBlock:function(e,t){for(var n=this._hash.words,r=n[0],i=n[1],o=n[2],s=n[3],u=n[4],c=n[5],l=n[6],f=n[7],h=0;64>h;h++){if(16>h)p[h]=0|e[t+h];else{var d=p[h-15],g=p[h-2];p[h]=((d<<25|d>>>7)^(d<<14|d>>>18)^d>>>3)+p[h-7]+((g<<15|g>>>17)^(g<<13|g>>>19)^g>>>10)+p[h-16]}d=f+((u<<26|u>>>6)^(u<<21|u>>>11)^(u<<7|u>>>25))+(u&c^~u&l)+a[h]+p[h],g=((r<<30|r>>>2)^(r<<19|r>>>13)^(r<<10|r>>>22))+(r&i^r&o^i&o),f=l,l=c,c=u,u=s+d|0,s=o,o=i,i=r,r=d+g|0}n[0]=n[0]+r|0,n[1]=n[1]+i|0,n[2]=n[2]+o|0,n[3]=n[3]+s|0,n[4]=n[4]+u|0,n[5]=n[5]+c|0,n[6]=n[6]+l|0,n[7]=n[7]+f|0},_doFinalize:function(){var t=this._data,n=t.words,r=8*this._nDataBytes,i=8*t.sigBytes;return n[i>>>5]|=128<<24-i%32,n[14+(i+64>>>9<<4)]=e.floor(r/4294967296),n[15+(i+64>>>9<<4)]=r,t.sigBytes=4*n.length,this._process(),this._hash},clone:function(){var e=o.clone.call(this);return e._hash=this._hash.clone(),e}});t.SHA256=o._createHelper(r),t.HmacSHA256=o._createHmacHelper(r)}(Math),function(){var e=n,t=e.enc.Utf8;e.algo.HMAC=e.lib.Base.extend({init:function(e,n){e=this._hasher=new e.init,"string"==typeof n&&(n=t.parse(n));var r=e.blockSize,i=4*r;n.sigBytes>i&&(n=e.finalize(n)),n.clamp();for(var o=this._oKey=n.clone(),s=this._iKey=n.clone(),a=o.words,u=s.words,c=0;c>>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;4>s&&i+.75*s>>6*(3-s)&63));if(t=r.charAt(64))for(;e.length%4;)e.push(t);return e.join("")},parse:function(e){var n=e.length,r=this._map,i=r.charAt(64);i&&-1!=(i=e.indexOf(i))&&(n=i);for(var i=[],o=0,s=0;s>>6-s%4*2;i[o>>>2]|=(a|u)<<24-o%4*8,o++}return t.create(i,o)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="}}(),function(e){function t(e,t,n,r,i,o,s){return((e=e+(t&n|~t&r)+i+s)<>>32-o)+t}function r(e,t,n,r,i,o,s){return((e=e+(t&r|n&~r)+i+s)<>>32-o)+t}function i(e,t,n,r,i,o,s){return((e=e+(t^n^r)+i+s)<>>32-o)+t}function o(e,t,n,r,i,o,s){return((e=e+(n^(t|~r))+i+s)<>>32-o)+t}for(var s=n,a=s.lib,u=a.WordArray,c=a.Hasher,a=s.algo,l=[],f=0;64>f;f++)l[f]=4294967296*e.abs(e.sin(f+1))|0;a=a.MD5=c.extend({_doReset:function(){this._hash=new u.init([1732584193,4023233417,2562383102,271733878])},_doProcessBlock:function(e,n){for(var s=0;16>s;s++){var a=n+s,u=e[a];e[a]=16711935&(u<<8|u>>>24)|4278255360&(u<<24|u>>>8)}var s=this._hash.words,a=e[n+0],u=e[n+1],c=e[n+2],f=e[n+3],h=e[n+4],d=e[n+5],p=e[n+6],g=e[n+7],y=e[n+8],b=e[n+9],v=e[n+10],_=e[n+11],m=e[n+12],k=e[n+13],P=e[n+14],S=e[n+15],O=s[0],M=s[1],T=s[2],C=s[3],O=t(O,M,T,C,a,7,l[0]),C=t(C,O,M,T,u,12,l[1]),T=t(T,C,O,M,c,17,l[2]),M=t(M,T,C,O,f,22,l[3]),O=t(O,M,T,C,h,7,l[4]),C=t(C,O,M,T,d,12,l[5]),T=t(T,C,O,M,p,17,l[6]),M=t(M,T,C,O,g,22,l[7]),O=t(O,M,T,C,y,7,l[8]),C=t(C,O,M,T,b,12,l[9]),T=t(T,C,O,M,v,17,l[10]),M=t(M,T,C,O,_,22,l[11]),O=t(O,M,T,C,m,7,l[12]),C=t(C,O,M,T,k,12,l[13]),T=t(T,C,O,M,P,17,l[14]),M=t(M,T,C,O,S,22,l[15]),O=r(O,M,T,C,u,5,l[16]),C=r(C,O,M,T,p,9,l[17]),T=r(T,C,O,M,_,14,l[18]),M=r(M,T,C,O,a,20,l[19]),O=r(O,M,T,C,d,5,l[20]),C=r(C,O,M,T,v,9,l[21]),T=r(T,C,O,M,S,14,l[22]),M=r(M,T,C,O,h,20,l[23]),O=r(O,M,T,C,b,5,l[24]),C=r(C,O,M,T,P,9,l[25]),T=r(T,C,O,M,f,14,l[26]),M=r(M,T,C,O,y,20,l[27]),O=r(O,M,T,C,k,5,l[28]),C=r(C,O,M,T,c,9,l[29]),T=r(T,C,O,M,g,14,l[30]),M=r(M,T,C,O,m,20,l[31]),O=i(O,M,T,C,d,4,l[32]),C=i(C,O,M,T,y,11,l[33]),T=i(T,C,O,M,_,16,l[34]),M=i(M,T,C,O,P,23,l[35]),O=i(O,M,T,C,u,4,l[36]),C=i(C,O,M,T,h,11,l[37]),T=i(T,C,O,M,g,16,l[38]),M=i(M,T,C,O,v,23,l[39]),O=i(O,M,T,C,k,4,l[40]),C=i(C,O,M,T,a,11,l[41]),T=i(T,C,O,M,f,16,l[42]),M=i(M,T,C,O,p,23,l[43]),O=i(O,M,T,C,b,4,l[44]),C=i(C,O,M,T,m,11,l[45]),T=i(T,C,O,M,S,16,l[46]),M=i(M,T,C,O,c,23,l[47]),O=o(O,M,T,C,a,6,l[48]),C=o(C,O,M,T,g,10,l[49]),T=o(T,C,O,M,P,15,l[50]),M=o(M,T,C,O,d,21,l[51]),O=o(O,M,T,C,m,6,l[52]),C=o(C,O,M,T,f,10,l[53]),T=o(T,C,O,M,v,15,l[54]),M=o(M,T,C,O,u,21,l[55]),O=o(O,M,T,C,y,6,l[56]),C=o(C,O,M,T,S,10,l[57]),T=o(T,C,O,M,p,15,l[58]),M=o(M,T,C,O,k,21,l[59]),O=o(O,M,T,C,h,6,l[60]),C=o(C,O,M,T,_,10,l[61]),T=o(T,C,O,M,c,15,l[62]),M=o(M,T,C,O,b,21,l[63]);s[0]=s[0]+O|0,s[1]=s[1]+M|0,s[2]=s[2]+T|0,s[3]=s[3]+C|0},_doFinalize:function(){var t=this._data,n=t.words,r=8*this._nDataBytes,i=8*t.sigBytes;n[i>>>5]|=128<<24-i%32;var o=e.floor(r/4294967296);for(n[15+(i+64>>>9<<4)]=16711935&(o<<8|o>>>24)|4278255360&(o<<24|o>>>8),n[14+(i+64>>>9<<4)]=16711935&(r<<8|r>>>24)|4278255360&(r<<24|r>>>8),t.sigBytes=4*(n.length+1),this._process(),t=this._hash,n=t.words,r=0;4>r;r++)i=n[r],n[r]=16711935&(i<<8|i>>>24)|4278255360&(i<<24|i>>>8);return t},clone:function(){var e=c.clone.call(this);return e._hash=this._hash.clone(),e}}),s.MD5=c._createHelper(a),s.HmacMD5=c._createHmacHelper(a)}(Math),function(){var e=n,t=e.lib,r=t.Base,i=t.WordArray,t=e.algo,o=t.EvpKDF=r.extend({cfg:r.extend({keySize:4,hasher:t.MD5,iterations:1}),init:function(e){this.cfg=this.cfg.extend(e)},compute:function(e,t){for(var n=this.cfg,r=n.hasher.create(),o=i.create(),s=o.words,a=n.keySize,n=n.iterations;s.length>>2]}},r.BlockCipher=c.extend({cfg:c.cfg.extend({mode:l,padding:h}),reset:function(){c.reset.call(this);var e=this.cfg,t=e.iv,e=e.mode;if(this._xformMode==this._ENC_XFORM_MODE)var n=e.createEncryptor;else n=e.createDecryptor,this._minBufferSize=1;this._mode=n.call(e,this,t&&t.words)},_doProcessBlock:function(e,t){this._mode.processBlock(e,t)},_doFinalize:function(){var e=this.cfg.padding;if(this._xformMode==this._ENC_XFORM_MODE){e.pad(this._data,this.blockSize);var t=this._process(!0)}else t=this._process(!0),e.unpad(t);return t},blockSize:4});var d=r.CipherParams=i.extend({init:function(e){this.mixIn(e)},toString:function(e){return(e||this.formatter).stringify(this)}}),l=(t.format={}).OpenSSL={stringify:function(e){var t=e.ciphertext;return e=e.salt,(e?o.create([1398893684,1701076831]).concat(e).concat(t):t).toString(a)},parse:function(e){e=a.parse(e);var t=e.words;if(1398893684==t[0]&&1701076831==t[1]){var n=o.create(t.slice(2,4));t.splice(0,4),e.sigBytes-=16}return d.create({ciphertext:e,salt:n})}},p=r.SerializableCipher=i.extend({cfg:i.extend({format:l}),encrypt:function(e,t,n,r){r=this.cfg.extend(r);var i=e.createEncryptor(n,r);return t=i.finalize(t),i=i.cfg,d.create({ciphertext:t,key:n,iv:i.iv,algorithm:e,mode:i.mode,padding:i.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}}),t=(t.kdf={}).OpenSSL={execute:function(e,t,n,r){return r||(r=o.random(8)),e=u.create({keySize:t+n}).compute(e,r),n=o.create(e.words.slice(t),4*n),e.sigBytes=4*t,d.create({key:e,iv:n,salt:r})}},g=r.PasswordBasedCipher=p.extend({cfg:p.cfg.extend({kdf:t}),encrypt:function(e,t,n,r){return r=this.cfg.extend(r),n=r.kdf.execute(n,e.keySize,e.ivSize),r.iv=n.iv,e=p.encrypt.call(this,e,t,n.key,r),e.mixIn(n),e},decrypt:function(e,t,n,r){return r=this.cfg.extend(r),t=this._parse(t,r.format),n=r.kdf.execute(n,e.keySize,e.ivSize,t.salt),r.iv=n.iv,p.decrypt.call(this,e,t,n.key,r)}})}(),function(){for(var e=n,t=e.lib.BlockCipher,r=e.algo,i=[],o=[],s=[],a=[],u=[],c=[],l=[],f=[],h=[],d=[],p=[],g=0;256>g;g++)p[g]=128>g?g<<1:g<<1^283;for(var y=0,b=0,g=0;256>g;g++){var v=b^b<<1^b<<2^b<<3^b<<4,v=v>>>8^255&v^99;i[y]=v,o[v]=y;var _=p[y],m=p[_],k=p[m],P=257*p[v]^16843008*v;s[y]=P<<24|P>>>8,a[y]=P<<16|P>>>16,u[y]=P<<8|P>>>24,c[y]=P,P=16843009*k^65537*m^257*_^16843008*y,l[v]=P<<24|P>>>8,f[v]=P<<16|P>>>16,h[v]=P<<8|P>>>24,d[v]=P,y?(y=_^p[p[p[k^_]]],b^=p[p[b]]):y=b=1}var S=[0,1,2,4,8,16,32,64,128,27,54],r=r.AES=t.extend({_doReset:function(){for(var e=this._key,t=e.words,n=e.sigBytes/4,e=4*((this._nRounds=n+6)+1),r=this._keySchedule=[],o=0;o>>24]<<24|i[s>>>16&255]<<16|i[s>>>8&255]<<8|i[255&s]):(s=s<<8|s>>>24,s=i[s>>>24]<<24|i[s>>>16&255]<<16|i[s>>>8&255]<<8|i[255&s],s^=S[o/n|0]<<24),r[o]=r[o-n]^s}for(t=this._invKeySchedule=[],n=0;nn||4>=o?s:l[i[s>>>24]]^f[i[s>>>16&255]]^h[i[s>>>8&255]]^d[i[255&s]]},encryptBlock:function(e,t){this._doCryptBlock(e,t,this._keySchedule,s,a,u,c,i)},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,h,d,o),n=e[t+1],e[t+1]=e[t+3],e[t+3]=n},_doCryptBlock:function(e,t,n,r,i,o,s,a){for(var u=this._nRounds,c=e[t]^n[0],l=e[t+1]^n[1],f=e[t+2]^n[2],h=e[t+3]^n[3],d=4,p=1;p>>24]^i[l>>>16&255]^o[f>>>8&255]^s[255&h]^n[d++],y=r[l>>>24]^i[f>>>16&255]^o[h>>>8&255]^s[255&c]^n[d++],b=r[f>>>24]^i[h>>>16&255]^o[c>>>8&255]^s[255&l]^n[d++],h=r[h>>>24]^i[c>>>16&255]^o[l>>>8&255]^s[255&f]^n[d++],c=g,l=y,f=b;g=(a[c>>>24]<<24|a[l>>>16&255]<<16|a[f>>>8&255]<<8|a[255&h])^n[d++],y=(a[l>>>24]<<24|a[f>>>16&255]<<16|a[h>>>8&255]<<8|a[255&c])^n[d++],b=(a[f>>>24]<<24|a[h>>>16&255]<<16|a[c>>>8&255]<<8|a[255&l])^n[d++],h=(a[h>>>24]<<24|a[c>>>16&255]<<16|a[l>>>8&255]<<8|a[255&f])^n[d++],e[t]=g,e[t+1]=y,e[t+2]=b,e[t+3]=h},keySize:8});e.AES=t._createHelper(r)}(),n.mode.ECB=function(){var e=n.lib.BlockCipherMode.extend();return e.Encryptor=e.extend({processBlock:function(e,t){this._cipher.encryptBlock(e,t)}}),e.Decryptor=e.extend({processBlock:function(e,t){this._cipher.decryptBlock(e,t)}}),e}(),e.exports=n},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e,t){for(var n=0;n=s){var u={};u.category=y.default.PNRequestMessageCountExceededCategory,u.operation=e.operation,this._listenerManager.announceStatus(u)}i.forEach(function(e){var t=e.channel,r=e.subscriptionMatch,i=e.publishMetaData;if(t===r&&(r=null),a){if(n._dedupingManager.isDuplicate(e))return;n._dedupingManager.addEntry(e)}if(p.default.endsWith(e.channel,"-pnpres")){var o={};o.channel=null,o.subscription=null,o.actualChannel=null!=r?t:null,o.subscribedChannel=null!=r?r:t,t&&(o.channel=t.substring(0,t.lastIndexOf("-pnpres"))),r&&(o.subscription=r.substring(0,r.lastIndexOf("-pnpres"))),o.action=e.payload.action,o.state=e.payload.data,o.timetoken=i.publishTimetoken,o.occupancy=e.payload.occupancy,o.uuid=e.payload.uuid,o.timestamp=e.payload.timestamp,e.payload.join&&(o.join=e.payload.join),e.payload.leave&&(o.leave=e.payload.leave),e.payload.timeout&&(o.timeout=e.payload.timeout),n._listenerManager.announcePresence(o)}else{var s={};s.channel=null,s.subscription=null,s.actualChannel=null!=r?t:null,s.subscribedChannel=null!=r?r:t,s.channel=t,s.subscription=r,s.timetoken=i.publishTimetoken,s.publisher=e.issuingClientId,e.userMetadata&&(s.userMetadata=e.userMetadata),n._config.cipherKey?s.message=n._crypto.decrypt(e.payload):s.message=e.payload,n._listenerManager.announceMessage(s)}}),this._region=t.metadata.region,this._startSubscribeLoop()}},{key:"_stopSubscribeLoop",value:function(){this._subscribeCall&&("function"==typeof this._subscribeCall.abort&&this._subscribeCall.abort(),this._subscribeCall=null)}}]),e}();t.default=b,e.exports=t.default},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n=this._config.maximumCacheSize&&this.hashHistory.shift(),this.hashHistory.push(this.getKey(e))}},{key:"clearHistory",value:function(){this.hashHistory=[]}}]),e}();t.default=a,e.exports=t.default},function(e,t){"use strict";function n(e){var t=[];return Object.keys(e).forEach(function(e){return t.push(e)}),t}function r(e){return encodeURIComponent(e).replace(/[!~*'()]/g,function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()})}function i(e){return n(e).sort()}function o(e){return i(e).map(function(t){return t+"="+r(e[t])}).join("&")}function s(e,t){return-1!==e.indexOf(t,this.length-t.length)}function a(){var e=void 0,t=void 0;return{promise:new Promise(function(n,r){e=n,t=r}),reject:t,fulfill:e}}e.exports={signPamFromParams:o,endsWith:s,createPromise:a,encodeString:r}},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function a(e,t){return e.type=t,e.error=!0,e}function u(e){return a({message:e},"validationError")}function c(e,t,n){return e.usePost&&e.usePost(t,n)?e.postURL(t,n):e.getURL(t,n)}function l(e){if(e.sdkName)return e.sdkName;var t="PubNub-JS-"+e.sdkFamily;return e.partnerId&&(t+="-"+e.partnerId),t+="/"+e.getVersion()}function f(e,t,n){var r=e.config,i=e.crypto;n.timestamp=Math.floor((new Date).getTime()/1e3);var o=r.subscribeKey+"\n"+r.publishKey+"\n"+t+"\n";o+=g.default.signPamFromParams(n);var s=i.HMACSHA256(o);s=s.replace(/\+/g,"-"),s=s.replace(/\//g,"_"),n.signature=s}Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){var n=e.networking,r=e.config,i=null,o=null,s={};t.getOperation()===v.default.PNTimeOperation||t.getOperation()===v.default.PNChannelGroupsOperation?i=arguments.length<=2?void 0:arguments[2]:(s=arguments.length<=2?void 0:arguments[2],i=arguments.length<=3?void 0:arguments[3]),"undefined"==typeof Promise||i||(o=g.default.createPromise());var a=t.validateParams(e,s);if(!a){var h=t.prepareParams(e,s),p=c(t,e,s),y=void 0,b={url:p,operation:t.getOperation(),timeout:t.getRequestTimeout(e)};h.uuid=r.UUID,h.pnsdk=l(r),r.useInstanceId&&(h.instanceid=r.instanceId),r.useRequestId&&(h.requestid=d.default.createUUID()),t.isAuthSupported()&&r.getAuthKey()&&(h.auth=r.getAuthKey()),r.secretKey&&f(e,p,h);var m=function(n,r){if(n.error)return void(i?i(n):o&&o.reject(new _("PubNub call failed, check status for details",n)));var a=t.handleResponse(e,r,s);i?i(n,a):o&&o.fulfill(a)};if(t.usePost&&t.usePost(e,s)){var k=t.postPayload(e,s);y=n.POST(h,k,b,m)}else y=t.useDelete&&t.useDelete()?n.DELETE(h,b,m):n.GET(h,b,m);return t.getOperation()===v.default.PNSubscribeOperation?y:o?o.promise:void 0}return i?i(u(a)):o?(o.reject(new _("Validation failed, check status for details",u(a))),o.promise):void 0};var h=n(3),d=r(h),p=(n(5),n(15)),g=r(p),y=n(2),b=(r(y),n(13)),v=r(b),_=function(e){function t(e,n){i(this,t);var r=o(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return r.name=r.constructor.name,r.status=n,r.message=e,r}return s(t,e),t}(Error);e.exports=t.default},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return h.default.PNAddChannelsToGroupOperation}function o(e,t){var n=t.channels,r=t.channelGroup,i=e.config;return r?n&&0!==n.length?i.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channels":"Missing Channel Group"}function s(e,t){var n=t.channelGroup;return"/v1/channel-registration/sub-key/"+e.config.subscribeKey+"/channel-group/"+p.default.encodeString(n)}function a(e){return e.config.getTransactionTimeout()}function u(){return!0}function c(e,t){var n=t.channels;return{add:(void 0===n?[]:n).join(",")}}function l(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=o,t.getURL=s,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var f=(n(5),n(13)),h=r(f),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return h.default.PNRemoveChannelsFromGroupOperation}function o(e,t){var n=t.channels,r=t.channelGroup,i=e.config;return r?n&&0!==n.length?i.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channels":"Missing Channel Group"}function s(e,t){var n=t.channelGroup;return"/v1/channel-registration/sub-key/"+e.config.subscribeKey+"/channel-group/"+p.default.encodeString(n)}function a(e){return e.config.getTransactionTimeout()}function u(){return!0}function c(e,t){var n=t.channels;return{remove:(void 0===n?[]:n).join(",")}}function l(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=o,t.getURL=s,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var f=(n(5),n(13)),h=r(f),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return h.default.PNRemoveGroupOperation}function o(e,t){var n=t.channelGroup,r=e.config;return n?r.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channel Group"}function s(e,t){var n=t.channelGroup;return"/v1/channel-registration/sub-key/"+e.config.subscribeKey+"/channel-group/"+p.default.encodeString(n)+"/remove"}function a(){return!0}function u(e){return e.config.getTransactionTimeout()}function c(){return{}}function l(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=o,t.getURL=s,t.isAuthSupported=a,t.getRequestTimeout=u,t.prepareParams=c,t.handleResponse=l;var f=(n(5),n(13)),h=r(f),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(){return f.default.PNChannelGroupsOperation}function i(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function o(e){return"/v1/channel-registration/sub-key/"+e.config.subscribeKey+"/channel-group"}function s(e){return e.config.getTransactionTimeout()}function a(){return!0}function u(){return{}}function c(e,t){return{groups:t.payload.groups}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=o,t.getRequestTimeout=s,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),f=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return h.default.PNChannelsForGroupOperation}function o(e,t){var n=t.channelGroup,r=e.config;return n?r.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channel Group"}function s(e,t){var n=t.channelGroup;return"/v1/channel-registration/sub-key/"+e.config.subscribeKey+"/channel-group/"+p.default.encodeString(n)}function a(e){return e.config.getTransactionTimeout()}function u(){return!0}function c(){return{}}function l(e,t){return{channels:t.payload.channels}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=o,t.getURL=s,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var f=(n(5),n(13)),h=r(f),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(){return f.default.PNPushNotificationEnabledChannelsOperation}function i(e,t){var n=t.device,r=t.pushGateway,i=t.channels,o=e.config;return n?r?i&&0!==i.length?o.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channels":"Missing GW Type (pushGateway: gcm or apns)":"Missing Device ID (device)"}function o(e,t){var n=t.device;return"/v1/push/sub-key/"+e.config.subscribeKey+"/devices/"+n}function s(e){return e.config.getTransactionTimeout()}function a(){return!0}function u(e,t){var n=t.pushGateway,r=t.channels;return{type:n,add:(void 0===r?[]:r).join(",")}}function c(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=o,t.getRequestTimeout=s,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),f=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(){return f.default.PNPushNotificationEnabledChannelsOperation}function i(e,t){var n=t.device,r=t.pushGateway,i=t.channels,o=e.config;return n?r?i&&0!==i.length?o.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channels":"Missing GW Type (pushGateway: gcm or apns)":"Missing Device ID (device)"}function o(e,t){var n=t.device;return"/v1/push/sub-key/"+e.config.subscribeKey+"/devices/"+n}function s(e){return e.config.getTransactionTimeout()}function a(){return!0}function u(e,t){var n=t.pushGateway,r=t.channels;return{type:n,remove:(void 0===r?[]:r).join(",")}}function c(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=o,t.getRequestTimeout=s,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),f=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(){return f.default.PNPushNotificationEnabledChannelsOperation}function i(e,t){var n=t.device,r=t.pushGateway,i=e.config;return n?r?i.subscribeKey?void 0:"Missing Subscribe Key":"Missing GW Type (pushGateway: gcm or apns)":"Missing Device ID (device)"}function o(e,t){var n=t.device;return"/v1/push/sub-key/"+e.config.subscribeKey+"/devices/"+n}function s(e){return e.config.getTransactionTimeout()}function a(){return!0}function u(e,t){return{type:t.pushGateway}}function c(e,t){return{channels:t}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=o,t.getRequestTimeout=s,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),f=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(){return f.default.PNRemoveAllPushNotificationsOperation}function i(e,t){var n=t.device,r=t.pushGateway,i=e.config;return n?r?i.subscribeKey?void 0:"Missing Subscribe Key":"Missing GW Type (pushGateway: gcm or apns)":"Missing Device ID (device)"}function o(e,t){var n=t.device;return"/v1/push/sub-key/"+e.config.subscribeKey+"/devices/"+n+"/remove"}function s(e){return e.config.getTransactionTimeout()}function a(){return!0}function u(e,t){return{type:t.pushGateway}}function c(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=o,t.getRequestTimeout=s,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),f=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return h.default.PNUnsubscribeOperation}function o(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function s(e,t){var n=e.config,r=t.channels,i=void 0===r?[]:r,o=i.length>0?i.join(","):",";return"/v2/presence/sub-key/"+n.subscribeKey+"/channel/"+p.default.encodeString(o)+"/leave"}function a(e){return e.config.getTransactionTimeout()}function u(){return!0}function c(e,t){var n=t.channelGroups,r=void 0===n?[]:n,i={};return r.length>0&&(i["channel-group"]=r.join(",")),i}function l(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=o,t.getURL=s,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var f=(n(5),n(13)),h=r(f),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(){return f.default.PNWhereNowOperation}function i(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function o(e,t){var n=e.config,r=t.uuid,i=void 0===r?n.UUID:r;return"/v2/presence/sub-key/"+n.subscribeKey+"/uuid/"+i}function s(e){return e.config.getTransactionTimeout()}function a(){return!0}function u(){return{}}function c(e,t){return t.payload?{channels:t.payload.channels}:{channels:[]}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=o,t.getRequestTimeout=s,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),f=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return h.default.PNHeartbeatOperation}function o(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function s(e,t){var n=e.config,r=t.channels,i=void 0===r?[]:r,o=i.length>0?i.join(","):",";return"/v2/presence/sub-key/"+n.subscribeKey+"/channel/"+p.default.encodeString(o)+"/heartbeat"}function a(){return!0}function u(e){return e.config.getTransactionTimeout()}function c(e,t){var n=t.channelGroups,r=void 0===n?[]:n,i=t.state,o=void 0===i?{}:i,s=e.config,a={};return r.length>0&&(a["channel-group"]=r.join(",")),a.state=JSON.stringify(o),a.heartbeat=s.getPresenceTimeout(),a}function l(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=o,t.getURL=s,t.isAuthSupported=a,t.getRequestTimeout=u,t.prepareParams=c,t.handleResponse=l;var f=(n(5),n(13)),h=r(f),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return h.default.PNGetStateOperation}function o(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function s(e,t){var n=e.config,r=t.uuid,i=void 0===r?n.UUID:r,o=t.channels,s=void 0===o?[]:o,a=s.length>0?s.join(","):",";return"/v2/presence/sub-key/"+n.subscribeKey+"/channel/"+p.default.encodeString(a)+"/uuid/"+i}function a(e){return e.config.getTransactionTimeout()}function u(){return!0}function c(e,t){var n=t.channelGroups,r=void 0===n?[]:n,i={};return r.length>0&&(i["channel-group"]=r.join(",")),i}function l(e,t,n){var r=n.channels,i=void 0===r?[]:r,o=n.channelGroups,s=void 0===o?[]:o,a={};return 1===i.length&&0===s.length?a[i[0]]=t.payload:a=t.payload,{channels:a}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=o,t.getURL=s,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var f=(n(5),n(13)),h=r(f),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return h.default.PNSetStateOperation}function o(e,t){var n=e.config,r=t.state,i=t.channels,o=void 0===i?[]:i,s=t.channelGroups,a=void 0===s?[]:s;return r?n.subscribeKey?0===o.length&&0===a.length?"Please provide a list of channels and/or channel-groups":void 0:"Missing Subscribe Key":"Missing State"}function s(e,t){var n=e.config,r=t.channels,i=void 0===r?[]:r,o=i.length>0?i.join(","):",";return"/v2/presence/sub-key/"+n.subscribeKey+"/channel/"+p.default.encodeString(o)+"/uuid/"+n.UUID+"/data"}function a(e){return e.config.getTransactionTimeout()}function u(){return!0}function c(e,t){var n=t.state,r=t.channelGroups,i=void 0===r?[]:r,o={};return o.state=JSON.stringify(n),i.length>0&&(o["channel-group"]=i.join(",")),o}function l(e,t){return{state:t.payload}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=o,t.getURL=s,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var f=(n(5),n(13)),h=r(f),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return h.default.PNHereNowOperation}function o(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function s(e,t){var n=e.config,r=t.channels,i=void 0===r?[]:r,o=t.channelGroups,s=void 0===o?[]:o,a="/v2/presence/sub-key/"+n.subscribeKey;if(i.length>0||s.length>0){var u=i.length>0?i.join(","):",";a+="/channel/"+p.default.encodeString(u)}return a}function a(e){return e.config.getTransactionTimeout()}function u(){return!0}function c(e,t){var n=t.channelGroups,r=void 0===n?[]:n,i=t.includeUUIDs,o=void 0===i||i,s=t.includeState,a=void 0!==s&&s,u={};return o||(u.disable_uuids=1),a&&(u.state=1),r.length>0&&(u["channel-group"]=r.join(",")),u}function l(e,t,n){var r=n.channels,i=void 0===r?[]:r,o=n.channelGroups,s=void 0===o?[]:o,a=n.includeUUIDs,u=void 0===a||a,c=n.includeState,l=void 0!==c&&c;return i.length>1||s.length>0||0===s.length&&0===i.length?function(){var e={};return e.totalChannels=t.payload.total_channels,e.totalOccupancy=t.payload.total_occupancy,e.channels={},Object.keys(t.payload.channels).forEach(function(n){var r=t.payload.channels[n],i=[];return e.channels[n]={occupants:i,name:n,occupancy:r.occupancy},u&&r.uuids.forEach(function(e){l?i.push({state:e.state,uuid:e.uuid}):i.push({state:null,uuid:e})}),e}),e}():function(){var e={},n=[];return e.totalChannels=1,e.totalOccupancy=t.occupancy,e.channels={},e.channels[i[0]]={occupants:n,name:i[0],occupancy:t.occupancy},u&&t.uuids&&t.uuids.forEach(function(e){l?n.push({state:e.state,uuid:e.uuid}):n.push({state:null,uuid:e})}),e}()}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=o,t.getURL=s,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var f=(n(5),n(13)),h=r(f),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(){return f.default.PNAccessManagerAudit}function i(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function o(e){return"/v2/auth/audit/sub-key/"+e.config.subscribeKey}function s(e){return e.config.getTransactionTimeout()}function a(){return!1}function u(e,t){var n=t.channel,r=t.channelGroup,i=t.authKeys,o=void 0===i?[]:i,s={};return n&&(s.channel=n),r&&(s["channel-group"]=r),o.length>0&&(s.auth=o.join(",")),s}function c(e,t){return t.payload}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=o,t.getRequestTimeout=s,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),f=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(){return f.default.PNAccessManagerGrant}function i(e){var t=e.config;return t.subscribeKey?t.publishKey?t.secretKey?void 0:"Missing Secret Key":"Missing Publish Key":"Missing Subscribe Key"}function o(e){return"/v2/auth/grant/sub-key/"+e.config.subscribeKey}function s(e){return e.config.getTransactionTimeout()}function a(){return!1}function u(e,t){var n=t.channels,r=void 0===n?[]:n,i=t.channelGroups,o=void 0===i?[]:i,s=t.ttl,a=t.read,u=void 0!==a&&a,c=t.write,l=void 0!==c&&c,f=t.manage,h=void 0!==f&&f,d=t.authKeys,p=void 0===d?[]:d,g={};return g.r=u?"1":"0",g.w=l?"1":"0",g.m=h?"1":"0",r.length>0&&(g.channel=r.join(",")),o.length>0&&(g["channel-group"]=o.join(",")),p.length>0&&(g.auth=p.join(",")),(s||0===s)&&(g.ttl=s),g}function c(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=o,t.getRequestTimeout=s,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),f=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){var n=e.crypto,r=e.config,i=JSON.stringify(t);return r.cipherKey&&(i=n.encrypt(i),i=JSON.stringify(i)),i}function o(){return b.default.PNPublishOperation}function s(e,t){var n=e.config,r=t.message;return t.channel?r?n.subscribeKey?void 0:"Missing Subscribe Key":"Missing Message":"Missing Channel"}function a(e,t){var n=t.sendByPost;return void 0!==n&&n}function u(e,t){var n=e.config,r=t.channel,o=t.message,s=i(e,o);return"/publish/"+n.publishKey+"/"+n.subscribeKey+"/0/"+_.default.encodeString(r)+"/0/"+_.default.encodeString(s)}function c(e,t){var n=e.config,r=t.channel;return"/publish/"+n.publishKey+"/"+n.subscribeKey+"/0/"+_.default.encodeString(r)+"/0"}function l(e){return e.config.getTransactionTimeout()}function f(){return!0}function h(e,t){return i(e,t.message)}function d(e,t){var n=t.meta,r=t.replicate,i=void 0===r||r,o=t.storeInHistory,s=t.ttl,a={};return null!=o&&(a.store=o?"1":"0"),s&&(a.ttl=s),!1===i&&(a.norep="true"),n&&"object"===(void 0===n?"undefined":g(n))&&(a.meta=JSON.stringify(n)),a}function p(e,t){return{timetoken:t[2]}}Object.defineProperty(t,"__esModule",{value:!0});var g="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};t.getOperation=o,t.validateParams=s,t.usePost=a,t.getURL=u,t.postURL=c,t.getRequestTimeout=l, -t.isAuthSupported=f,t.postPayload=h,t.prepareParams=d,t.handleResponse=p;var y=(n(5),n(13)),b=r(y),v=n(15),_=r(v)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){var n=e.config,r=e.crypto;if(!n.cipherKey)return t;try{return r.decrypt(t)}catch(e){return t}}function o(){return d.default.PNHistoryOperation}function s(e,t){var n=t.channel,r=e.config;return n?r.subscribeKey?void 0:"Missing Subscribe Key":"Missing channel"}function a(e,t){var n=t.channel;return"/v2/history/sub-key/"+e.config.subscribeKey+"/channel/"+g.default.encodeString(n)}function u(e){return e.config.getTransactionTimeout()}function c(){return!0}function l(e,t){var n=t.start,r=t.end,i=t.reverse,o=t.count,s=void 0===o?100:o,a=t.stringifiedTimeToken,u=void 0!==a&&a,c={include_token:"true"};return c.count=s,n&&(c.start=n),r&&(c.end=r),u&&(c.string_message_token="true"),null!=i&&(c.reverse=i.toString()),c}function f(e,t){var n={messages:[],startTimeToken:t[1],endTimeToken:t[2]};return t[0].forEach(function(t){var r={timetoken:t.timetoken,entry:i(e,t.message)};n.messages.push(r)}),n}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=o,t.validateParams=s,t.getURL=a,t.getRequestTimeout=u,t.isAuthSupported=c,t.prepareParams=l,t.handleResponse=f;var h=(n(5),n(13)),d=r(h),p=n(15),g=r(p)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return d.default.PNDeleteMessagesOperation}function o(e,t){var n=t.channel,r=e.config;return n?r.subscribeKey?void 0:"Missing Subscribe Key":"Missing channel"}function s(){return!0}function a(e,t){var n=t.channel,r=t.start,i=t.end,o=e.config,s="";return r&&(s="?start="+r),i&&(s+=(""!==s?"&":"?")+"end="+i),"/v3/history/sub-key/"+o.subscribeKey+"/channel/"+g.default.encodeString(n)+s}function u(e){return e.config.getTransactionTimeout()}function c(){return!0}function l(e,t){var n=t.start,r=t.end,i={};return n&&(i.start=n),r&&(i.end=r),{}}function f(e,t){return t.payload}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=o,t.useDelete=s,t.getURL=a,t.getRequestTimeout=u,t.isAuthSupported=c,t.prepareParams=l,t.handleResponse=f;var h=(n(5),n(13)),d=r(h),p=n(15),g=r(p)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){var n=e.config,r=e.crypto;if(!n.cipherKey)return t;try{return r.decrypt(t)}catch(e){return t}}function o(){return d.default.PNFetchMessagesOperation}function s(e,t){var n=t.channels,r=e.config;return n&&0!==n.length?r.subscribeKey?void 0:"Missing Subscribe Key":"Missing channels"}function a(e,t){var n=t.channels,r=void 0===n?[]:n,i=e.config,o=r.length>0?r.join(","):",";return"/v3/history/sub-key/"+i.subscribeKey+"/channel/"+g.default.encodeString(o)}function u(e){return e.config.getTransactionTimeout()}function c(){return!0}function l(e,t){var n=t.start,r=t.end,i=t.count,o={};return i&&(o.max=i),n&&(o.start=n),r&&(o.end=r),o}function f(e,t){var n={channels:{}};return Object.keys(t.channels||{}).forEach(function(r){n.channels[r]=[],(t.channels[r]||[]).forEach(function(t){var o={};o.channel=r,o.subscription=null,o.timetoken=t.timetoken,o.message=i(e,t.message),n.channels[r].push(o)})}),n}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=o,t.validateParams=s,t.getURL=a,t.getRequestTimeout=u,t.isAuthSupported=c,t.prepareParams=l,t.handleResponse=f;var h=(n(5),n(13)),d=r(h),p=n(15),g=r(p)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return h.default.PNSubscribeOperation}function o(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function s(e,t){var n=e.config,r=t.channels,i=void 0===r?[]:r,o=i.length>0?i.join(","):",";return"/v2/subscribe/"+n.subscribeKey+"/"+p.default.encodeString(o)+"/0"}function a(e){return e.config.getSubscribeTimeout()}function u(){return!0}function c(e,t){var n=e.config,r=t.channelGroups,i=void 0===r?[]:r,o=t.timetoken,s=t.filterExpression,a=t.region,u={heartbeat:n.getPresenceTimeout()};return i.length>0&&(u["channel-group"]=i.join(",")),s&&s.length>0&&(u["filter-expr"]=s),o&&(u.tt=o),a&&(u.tr=a),u}function l(e,t){var n=[];t.m.forEach(function(e){var t={publishTimetoken:e.p.t,region:e.p.r},r={shard:parseInt(e.a,10),subscriptionMatch:e.b,channel:e.c,payload:e.d,flags:e.f,issuingClientId:e.i,subscribeKey:e.k,originationTimetoken:e.o,userMetadata:e.u,publishMetaData:t};n.push(r)});var r={timetoken:t.t.t,region:t.t.r};return{messages:n,metadata:r}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=o,t.getURL=s,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var f=(n(5),n(13)),h=r(f),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e,t){for(var n=0;n=this._maxSubDomain&&(this._currentSubDomain=1),e=this._currentSubDomain.toString(),this._providedFQDN.replace("pubsub","ps"+e)}},{key:"shiftStandardOrigin",value:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return this._standardOrigin=this.nextOrigin(e),this._standardOrigin}},{key:"getStandardOrigin",value:function(){return this._standardOrigin}},{key:"POST",value:function(e,t,n,r){return this._modules.post(e,t,n,r)}},{key:"GET",value:function(e,t,n){return this._modules.get(e,t,n)}},{key:"DELETE",value:function(e,t,n){return this._modules.del(e,t,n)}},{key:"_detectErrorCategory",value:function(e){if("ENOTFOUND"===e.code)return u.default.PNNetworkIssuesCategory;if("ECONNREFUSED"===e.code)return u.default.PNNetworkIssuesCategory;if("ECONNRESET"===e.code)return u.default.PNNetworkIssuesCategory;if("EAI_AGAIN"===e.code)return u.default.PNNetworkIssuesCategory;if(0===e.status||e.hasOwnProperty("status")&&void 0===e.status)return u.default.PNNetworkIssuesCategory;if(e.timeout)return u.default.PNTimeoutCategory;if(e.response){if(e.response.badRequest)return u.default.PNBadRequestCategory;if(e.response.forbidden)return u.default.PNAccessDeniedCategory}return u.default.PNUnknownCategory}}]),e}());t.default=c,e.exports=t.default},function(e,t){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var r=function(){function e(e,t){for(var n=0;n>>>>>"),o.log("["+u+" / "+a+"]","\n",e,"\n",t,"\n",n),o.log("-----")}function i(){return"mobileweb"===Ti.Platform.osname?new XMLHttpRequest:Ti.Network.createHTTPClient()}function o(e){"mobileweb"!==Ti.Platform.osname&&this._config.keepAlive&&(e.enableKeepAlive=!0)}function s(e,t,n,i,s,a,u){var c=this,f={};f.operation=a.operation,e.open(t,(0,l.buildUrl)(n,i),!0),o.call(this,e),e.onload=function(){f.error=!1,e.status&&(f.statusCode=e.status);var t=JSON.parse(e.responseText);return c._config.logVerbosity&&r(n,i,e.responseText),u(f,t)},e.onerror=function(e){return f.error=!0,f.errorData=e.error,f.category=c._detectErrorCategory(e.error),u(f,null)},e.timeout="android"===Ti.Platform.osname?2147483647:1/0,e.send(s)}function a(e,t,n){var r=i(),o=this.getStandardOrigin()+t.url;return s.call(this,r,"GET",o,e,{},t,n)}function u(e,t,n,r){var o=i(),a=this.getStandardOrigin()+n.url;return s.call(this,o,"POST",a,e,JSON.parse(t),n,r)}function c(e,t,n){var r=i(),o=this.getStandardOrigin()+t.url;return s.call(this,r,"DELETE",o,e,{},t,n)}Object.defineProperty(t,"__esModule",{value:!0}),t.get=a,t.post=u,t.del=c;var l=(n(5),n(42))},function(e,t){"use strict";function n(e,t,r){null!=r?Array.isArray(r)?r.forEach(function(r){n(e,t,r)}):"object"===(void 0===r?"undefined":i(r))?Object.keys(r).forEach(function(i){n(e,t+"["+i+"]",r[i])}):e.push(encodeURIComponent(t)+"="+encodeURIComponent(r)):null===r&&e.push(encodeURIComponent(""+encodeURIComponent(t)))}function r(e,t){var r=[];return Object.keys(t).forEach(function(e){n(r,e,t[e])}),e+"?"+r.join("&")}Object.defineProperty(t,"__esModule",{value:!0});var i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};t.encodedKeyValuePair=n,t.buildUrl=r}])}); \ No newline at end of file +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.PubNub=t():e.PubNub=t()}(this,function(){return function(e){function t(r){if(n[r])return n[r].exports;var i=n[r]={exports:{},id:r,loaded:!1};return e[r].call(i.exports,i,i.exports,t),i.loaded=!0,i.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var a=n(1),u=r(a),c=n(39),l=r(c),f=n(40),h=r(f),d=n(41),p=(n(5),function(e){function t(e){return i(this,t),e.db=new h.default,e.sdkFamily="TitaniumSDK",e.networking=new l.default({del:d.del,get:d.get,post:d.post}),o(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e))}return s(t,e),t}(u.default));t.default=p,e.exports=t.default},function(e,t,n){"use strict";function r(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}function i(e){return e&&e.__esModule?e:{default:e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var s=function(){function e(e,t){for(var n=0;n>>2]|=(n[i>>>2]>>>24-i%4*8&255)<<24-(r+i)%4*8;else if(65535>>2]=n[i>>>2];else t.push.apply(t,n);return this.sigBytes+=e,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=o.clone.call(this);return e.words=this.words.slice(0),e},random:function(t){for(var n=[],r=0;r>>2]>>>24-r%4*8&255;n.push((i>>>4).toString(16)),n.push((15&i).toString(16))}return n.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 s.init(n,t/2)}},c=a.Latin1={stringify:function(e){var t=e.words;e=e.sigBytes;for(var n=[],r=0;r>>2]>>>24-r%4*8&255));return n.join("")},parse:function(e){for(var t=e.length,n=[],r=0;r>>2]|=(255&e.charCodeAt(r))<<24-r%4*8;return new s.init(n,t)}},l=a.Utf8={stringify:function(e){try{return decodeURIComponent(escape(c.stringify(e)))}catch(e){throw Error("Malformed UTF-8 data")}},parse:function(e){return c.parse(unescape(encodeURIComponent(e)))}},f=r.BufferedBlockAlgorithm=o.extend({reset:function(){this._data=new s.init,this._nDataBytes=0},_append:function(e){"string"==typeof e&&(e=l.parse(e)),this._data.concat(e),this._nDataBytes+=e.sigBytes},_process:function(t){var n=this._data,r=n.words,i=n.sigBytes,o=this.blockSize,a=i/(4*o),a=t?e.ceil(a):e.max((0|a)-this._minBufferSize,0);if(t=a*o,i=e.min(4*t,i),t){for(var u=0;ul;){var f;e:{f=c;for(var h=e.sqrt(f),d=2;d<=h;d++)if(!(f%d)){f=!1;break e}f=!0}f&&(8>l&&(s[l]=u(e.pow(c,.5))),a[l]=u(e.pow(c,1/3)),l++),c++}var p=[],r=r.SHA256=o.extend({_doReset:function(){this._hash=new i.init(s.slice(0))},_doProcessBlock:function(e,t){for(var n=this._hash.words,r=n[0],i=n[1],o=n[2],s=n[3],u=n[4],c=n[5],l=n[6],f=n[7],h=0;64>h;h++){if(16>h)p[h]=0|e[t+h];else{var d=p[h-15],g=p[h-2];p[h]=((d<<25|d>>>7)^(d<<14|d>>>18)^d>>>3)+p[h-7]+((g<<15|g>>>17)^(g<<13|g>>>19)^g>>>10)+p[h-16]}d=f+((u<<26|u>>>6)^(u<<21|u>>>11)^(u<<7|u>>>25))+(u&c^~u&l)+a[h]+p[h],g=((r<<30|r>>>2)^(r<<19|r>>>13)^(r<<10|r>>>22))+(r&i^r&o^i&o),f=l,l=c,c=u,u=s+d|0,s=o,o=i,i=r,r=d+g|0}n[0]=n[0]+r|0,n[1]=n[1]+i|0,n[2]=n[2]+o|0,n[3]=n[3]+s|0,n[4]=n[4]+u|0,n[5]=n[5]+c|0,n[6]=n[6]+l|0,n[7]=n[7]+f|0},_doFinalize:function(){var t=this._data,n=t.words,r=8*this._nDataBytes,i=8*t.sigBytes;return n[i>>>5]|=128<<24-i%32,n[14+(i+64>>>9<<4)]=e.floor(r/4294967296),n[15+(i+64>>>9<<4)]=r,t.sigBytes=4*n.length,this._process(),this._hash},clone:function(){var e=o.clone.call(this);return e._hash=this._hash.clone(),e}});t.SHA256=o._createHelper(r),t.HmacSHA256=o._createHmacHelper(r)}(Math),function(){var e=n,t=e.enc.Utf8;e.algo.HMAC=e.lib.Base.extend({init:function(e,n){e=this._hasher=new e.init,"string"==typeof n&&(n=t.parse(n));var r=e.blockSize,i=4*r;n.sigBytes>i&&(n=e.finalize(n)),n.clamp();for(var o=this._oKey=n.clone(),s=this._iKey=n.clone(),a=o.words,u=s.words,c=0;c>>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;4>s&&i+.75*s>>6*(3-s)&63));if(t=r.charAt(64))for(;e.length%4;)e.push(t);return e.join("")},parse:function(e){var n=e.length,r=this._map,i=r.charAt(64);i&&-1!=(i=e.indexOf(i))&&(n=i);for(var i=[],o=0,s=0;s>>6-s%4*2;i[o>>>2]|=(a|u)<<24-o%4*8,o++}return t.create(i,o)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="}}(),function(e){function t(e,t,n,r,i,o,s){return((e=e+(t&n|~t&r)+i+s)<>>32-o)+t}function r(e,t,n,r,i,o,s){return((e=e+(t&r|n&~r)+i+s)<>>32-o)+t}function i(e,t,n,r,i,o,s){return((e=e+(t^n^r)+i+s)<>>32-o)+t}function o(e,t,n,r,i,o,s){return((e=e+(n^(t|~r))+i+s)<>>32-o)+t}for(var s=n,a=s.lib,u=a.WordArray,c=a.Hasher,a=s.algo,l=[],f=0;64>f;f++)l[f]=4294967296*e.abs(e.sin(f+1))|0;a=a.MD5=c.extend({_doReset:function(){this._hash=new u.init([1732584193,4023233417,2562383102,271733878])},_doProcessBlock:function(e,n){for(var s=0;16>s;s++){var a=n+s,u=e[a];e[a]=16711935&(u<<8|u>>>24)|4278255360&(u<<24|u>>>8)}var s=this._hash.words,a=e[n+0],u=e[n+1],c=e[n+2],f=e[n+3],h=e[n+4],d=e[n+5],p=e[n+6],g=e[n+7],y=e[n+8],b=e[n+9],v=e[n+10],_=e[n+11],m=e[n+12],k=e[n+13],P=e[n+14],S=e[n+15],O=s[0],C=s[1],M=s[2],T=s[3],O=t(O,C,M,T,a,7,l[0]),T=t(T,O,C,M,u,12,l[1]),M=t(M,T,O,C,c,17,l[2]),C=t(C,M,T,O,f,22,l[3]),O=t(O,C,M,T,h,7,l[4]),T=t(T,O,C,M,d,12,l[5]),M=t(M,T,O,C,p,17,l[6]),C=t(C,M,T,O,g,22,l[7]),O=t(O,C,M,T,y,7,l[8]),T=t(T,O,C,M,b,12,l[9]),M=t(M,T,O,C,v,17,l[10]),C=t(C,M,T,O,_,22,l[11]),O=t(O,C,M,T,m,7,l[12]),T=t(T,O,C,M,k,12,l[13]),M=t(M,T,O,C,P,17,l[14]),C=t(C,M,T,O,S,22,l[15]),O=r(O,C,M,T,u,5,l[16]),T=r(T,O,C,M,p,9,l[17]),M=r(M,T,O,C,_,14,l[18]),C=r(C,M,T,O,a,20,l[19]),O=r(O,C,M,T,d,5,l[20]),T=r(T,O,C,M,v,9,l[21]),M=r(M,T,O,C,S,14,l[22]),C=r(C,M,T,O,h,20,l[23]),O=r(O,C,M,T,b,5,l[24]),T=r(T,O,C,M,P,9,l[25]),M=r(M,T,O,C,f,14,l[26]),C=r(C,M,T,O,y,20,l[27]),O=r(O,C,M,T,k,5,l[28]),T=r(T,O,C,M,c,9,l[29]),M=r(M,T,O,C,g,14,l[30]),C=r(C,M,T,O,m,20,l[31]),O=i(O,C,M,T,d,4,l[32]),T=i(T,O,C,M,y,11,l[33]),M=i(M,T,O,C,_,16,l[34]),C=i(C,M,T,O,P,23,l[35]),O=i(O,C,M,T,u,4,l[36]),T=i(T,O,C,M,h,11,l[37]),M=i(M,T,O,C,g,16,l[38]),C=i(C,M,T,O,v,23,l[39]),O=i(O,C,M,T,k,4,l[40]),T=i(T,O,C,M,a,11,l[41]),M=i(M,T,O,C,f,16,l[42]),C=i(C,M,T,O,p,23,l[43]),O=i(O,C,M,T,b,4,l[44]),T=i(T,O,C,M,m,11,l[45]),M=i(M,T,O,C,S,16,l[46]),C=i(C,M,T,O,c,23,l[47]),O=o(O,C,M,T,a,6,l[48]),T=o(T,O,C,M,g,10,l[49]),M=o(M,T,O,C,P,15,l[50]),C=o(C,M,T,O,d,21,l[51]),O=o(O,C,M,T,m,6,l[52]),T=o(T,O,C,M,f,10,l[53]),M=o(M,T,O,C,v,15,l[54]),C=o(C,M,T,O,u,21,l[55]),O=o(O,C,M,T,y,6,l[56]),T=o(T,O,C,M,S,10,l[57]),M=o(M,T,O,C,p,15,l[58]),C=o(C,M,T,O,k,21,l[59]),O=o(O,C,M,T,h,6,l[60]),T=o(T,O,C,M,_,10,l[61]),M=o(M,T,O,C,c,15,l[62]),C=o(C,M,T,O,b,21,l[63]);s[0]=s[0]+O|0,s[1]=s[1]+C|0,s[2]=s[2]+M|0,s[3]=s[3]+T|0},_doFinalize:function(){var t=this._data,n=t.words,r=8*this._nDataBytes,i=8*t.sigBytes;n[i>>>5]|=128<<24-i%32;var o=e.floor(r/4294967296);for(n[15+(i+64>>>9<<4)]=16711935&(o<<8|o>>>24)|4278255360&(o<<24|o>>>8),n[14+(i+64>>>9<<4)]=16711935&(r<<8|r>>>24)|4278255360&(r<<24|r>>>8),t.sigBytes=4*(n.length+1),this._process(),t=this._hash,n=t.words,r=0;4>r;r++)i=n[r],n[r]=16711935&(i<<8|i>>>24)|4278255360&(i<<24|i>>>8);return t},clone:function(){var e=c.clone.call(this);return e._hash=this._hash.clone(),e}}),s.MD5=c._createHelper(a),s.HmacMD5=c._createHmacHelper(a)}(Math),function(){var e=n,t=e.lib,r=t.Base,i=t.WordArray,t=e.algo,o=t.EvpKDF=r.extend({cfg:r.extend({keySize:4,hasher:t.MD5,iterations:1}),init:function(e){this.cfg=this.cfg.extend(e)},compute:function(e,t){for(var n=this.cfg,r=n.hasher.create(),o=i.create(),s=o.words,a=n.keySize,n=n.iterations;s.length>>2]}},r.BlockCipher=c.extend({cfg:c.cfg.extend({mode:l,padding:h}),reset:function(){c.reset.call(this);var e=this.cfg,t=e.iv,e=e.mode;if(this._xformMode==this._ENC_XFORM_MODE)var n=e.createEncryptor;else n=e.createDecryptor,this._minBufferSize=1;this._mode=n.call(e,this,t&&t.words)},_doProcessBlock:function(e,t){this._mode.processBlock(e,t)},_doFinalize:function(){var e=this.cfg.padding;if(this._xformMode==this._ENC_XFORM_MODE){e.pad(this._data,this.blockSize);var t=this._process(!0)}else t=this._process(!0),e.unpad(t);return t},blockSize:4});var d=r.CipherParams=i.extend({init:function(e){this.mixIn(e)},toString:function(e){return(e||this.formatter).stringify(this)}}),l=(t.format={}).OpenSSL={stringify:function(e){var t=e.ciphertext;return e=e.salt,(e?o.create([1398893684,1701076831]).concat(e).concat(t):t).toString(a)},parse:function(e){e=a.parse(e);var t=e.words;if(1398893684==t[0]&&1701076831==t[1]){var n=o.create(t.slice(2,4));t.splice(0,4),e.sigBytes-=16}return d.create({ciphertext:e,salt:n})}},p=r.SerializableCipher=i.extend({cfg:i.extend({format:l}),encrypt:function(e,t,n,r){r=this.cfg.extend(r);var i=e.createEncryptor(n,r);return t=i.finalize(t),i=i.cfg,d.create({ciphertext:t,key:n,iv:i.iv,algorithm:e,mode:i.mode,padding:i.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}}),t=(t.kdf={}).OpenSSL={execute:function(e,t,n,r){return r||(r=o.random(8)),e=u.create({keySize:t+n}).compute(e,r),n=o.create(e.words.slice(t),4*n),e.sigBytes=4*t,d.create({key:e,iv:n,salt:r})}},g=r.PasswordBasedCipher=p.extend({cfg:p.cfg.extend({kdf:t}),encrypt:function(e,t,n,r){return r=this.cfg.extend(r),n=r.kdf.execute(n,e.keySize,e.ivSize),r.iv=n.iv,e=p.encrypt.call(this,e,t,n.key,r),e.mixIn(n),e},decrypt:function(e,t,n,r){return r=this.cfg.extend(r),t=this._parse(t,r.format),n=r.kdf.execute(n,e.keySize,e.ivSize,t.salt),r.iv=n.iv,p.decrypt.call(this,e,t,n.key,r)}})}(),function(){for(var e=n,t=e.lib.BlockCipher,r=e.algo,i=[],o=[],s=[],a=[],u=[],c=[],l=[],f=[],h=[],d=[],p=[],g=0;256>g;g++)p[g]=128>g?g<<1:g<<1^283;for(var y=0,b=0,g=0;256>g;g++){var v=b^b<<1^b<<2^b<<3^b<<4,v=v>>>8^255&v^99;i[y]=v,o[v]=y;var _=p[y],m=p[_],k=p[m],P=257*p[v]^16843008*v;s[y]=P<<24|P>>>8,a[y]=P<<16|P>>>16,u[y]=P<<8|P>>>24,c[y]=P,P=16843009*k^65537*m^257*_^16843008*y,l[v]=P<<24|P>>>8,f[v]=P<<16|P>>>16,h[v]=P<<8|P>>>24,d[v]=P,y?(y=_^p[p[p[k^_]]],b^=p[p[b]]):y=b=1}var S=[0,1,2,4,8,16,32,64,128,27,54],r=r.AES=t.extend({_doReset:function(){for(var e=this._key,t=e.words,n=e.sigBytes/4,e=4*((this._nRounds=n+6)+1),r=this._keySchedule=[],o=0;o>>24]<<24|i[s>>>16&255]<<16|i[s>>>8&255]<<8|i[255&s]):(s=s<<8|s>>>24,s=i[s>>>24]<<24|i[s>>>16&255]<<16|i[s>>>8&255]<<8|i[255&s],s^=S[o/n|0]<<24),r[o]=r[o-n]^s}for(t=this._invKeySchedule=[],n=0;nn||4>=o?s:l[i[s>>>24]]^f[i[s>>>16&255]]^h[i[s>>>8&255]]^d[i[255&s]]},encryptBlock:function(e,t){this._doCryptBlock(e,t,this._keySchedule,s,a,u,c,i)},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,h,d,o),n=e[t+1],e[t+1]=e[t+3],e[t+3]=n},_doCryptBlock:function(e,t,n,r,i,o,s,a){for(var u=this._nRounds,c=e[t]^n[0],l=e[t+1]^n[1],f=e[t+2]^n[2],h=e[t+3]^n[3],d=4,p=1;p>>24]^i[l>>>16&255]^o[f>>>8&255]^s[255&h]^n[d++],y=r[l>>>24]^i[f>>>16&255]^o[h>>>8&255]^s[255&c]^n[d++],b=r[f>>>24]^i[h>>>16&255]^o[c>>>8&255]^s[255&l]^n[d++],h=r[h>>>24]^i[c>>>16&255]^o[l>>>8&255]^s[255&f]^n[d++],c=g,l=y,f=b;g=(a[c>>>24]<<24|a[l>>>16&255]<<16|a[f>>>8&255]<<8|a[255&h])^n[d++],y=(a[l>>>24]<<24|a[f>>>16&255]<<16|a[h>>>8&255]<<8|a[255&c])^n[d++],b=(a[f>>>24]<<24|a[h>>>16&255]<<16|a[c>>>8&255]<<8|a[255&l])^n[d++],h=(a[h>>>24]<<24|a[c>>>16&255]<<16|a[l>>>8&255]<<8|a[255&f])^n[d++],e[t]=g,e[t+1]=y,e[t+2]=b,e[t+3]=h},keySize:8});e.AES=t._createHelper(r)}(),n.mode.ECB=function(){var e=n.lib.BlockCipherMode.extend();return e.Encryptor=e.extend({processBlock:function(e,t){this._cipher.encryptBlock(e,t)}}),e.Decryptor=e.extend({processBlock:function(e,t){this._cipher.decryptBlock(e,t)}}),e}(),e.exports=n},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e,t){for(var n=0;n=s){var u={};u.category=y.default.PNRequestMessageCountExceededCategory,u.operation=e.operation,this._listenerManager.announceStatus(u)}i.forEach(function(e){var t=e.channel,r=e.subscriptionMatch,i=e.publishMetaData;if(t===r&&(r=null),a){if(n._dedupingManager.isDuplicate(e))return;n._dedupingManager.addEntry(e)}if(p.default.endsWith(e.channel,"-pnpres")){var o={};o.channel=null,o.subscription=null,o.actualChannel=null!=r?t:null,o.subscribedChannel=null!=r?r:t,t&&(o.channel=t.substring(0,t.lastIndexOf("-pnpres"))),r&&(o.subscription=r.substring(0,r.lastIndexOf("-pnpres"))),o.action=e.payload.action,o.state=e.payload.data,o.timetoken=i.publishTimetoken,o.occupancy=e.payload.occupancy,o.uuid=e.payload.uuid,o.timestamp=e.payload.timestamp,e.payload.join&&(o.join=e.payload.join),e.payload.leave&&(o.leave=e.payload.leave),e.payload.timeout&&(o.timeout=e.payload.timeout),n._listenerManager.announcePresence(o)}else{var s={};s.channel=null,s.subscription=null,s.actualChannel=null!=r?t:null,s.subscribedChannel=null!=r?r:t,s.channel=t,s.subscription=r,s.timetoken=i.publishTimetoken,s.publisher=e.issuingClientId,e.userMetadata&&(s.userMetadata=e.userMetadata),n._config.cipherKey?s.message=n._crypto.decrypt(e.payload):s.message=e.payload,n._listenerManager.announceMessage(s)}}),this._region=t.metadata.region,this._startSubscribeLoop()}},{key:"_stopSubscribeLoop",value:function(){this._subscribeCall&&("function"==typeof this._subscribeCall.abort&&this._subscribeCall.abort(),this._subscribeCall=null)}}]),e}();t.default=b,e.exports=t.default},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n=this._config.maximumCacheSize&&this.hashHistory.shift(),this.hashHistory.push(this.getKey(e))}},{key:"clearHistory",value:function(){this.hashHistory=[]}}]),e}();t.default=a,e.exports=t.default},function(e,t){"use strict";function n(e){var t=[];return Object.keys(e).forEach(function(e){return t.push(e)}),t}function r(e){return encodeURIComponent(e).replace(/[!~*'()]/g,function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()})}function i(e){return n(e).sort()}function o(e){return i(e).map(function(t){return t+"="+r(e[t])}).join("&")}function s(e,t){return-1!==e.indexOf(t,this.length-t.length)}function a(){var e=void 0,t=void 0;return{promise:new Promise(function(n,r){e=n,t=r}),reject:t,fulfill:e}}e.exports={signPamFromParams:o,endsWith:s,createPromise:a,encodeString:r}},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function a(e,t){return e.type=t,e.error=!0,e}function u(e){return a({message:e},"validationError")}function c(e,t,n){return e.usePost&&e.usePost(t,n)?e.postURL(t,n):e.getURL(t,n)}function l(e){if(e.sdkName)return e.sdkName;var t="PubNub-JS-"+e.sdkFamily;return e.partnerId&&(t+="-"+e.partnerId),t+="/"+e.getVersion()}function f(e,t,n){var r=e.config,i=e.crypto;n.timestamp=Math.floor((new Date).getTime()/1e3);var o=r.subscribeKey+"\n"+r.publishKey+"\n"+t+"\n";o+=g.default.signPamFromParams(n);var s=i.HMACSHA256(o);s=s.replace(/\+/g,"-"),s=s.replace(/\//g,"_"),n.signature=s}Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){var n=e.networking,r=e.config,i=null,o=null,s={};t.getOperation()===v.default.PNTimeOperation||t.getOperation()===v.default.PNChannelGroupsOperation?i=arguments.length<=2?void 0:arguments[2]:(s=arguments.length<=2?void 0:arguments[2],i=arguments.length<=3?void 0:arguments[3]),"undefined"==typeof Promise||i||(o=g.default.createPromise());var a=t.validateParams(e,s);if(!a){var h=t.prepareParams(e,s),p=c(t,e,s),y=void 0,b={url:p,operation:t.getOperation(),timeout:t.getRequestTimeout(e)};h.uuid=r.UUID,h.pnsdk=l(r),r.useInstanceId&&(h.instanceid=r.instanceId),r.useRequestId&&(h.requestid=d.default.createUUID()),t.isAuthSupported()&&r.getAuthKey()&&(h.auth=r.getAuthKey()),r.secretKey&&f(e,p,h);var m=function(n,r){if(n.error)return void(i?i(n):o&&o.reject(new _("PubNub call failed, check status for details",n)));var a=t.handleResponse(e,r,s);i?i(n,a):o&&o.fulfill(a)};if(t.usePost&&t.usePost(e,s)){var k=t.postPayload(e,s);y=n.POST(h,k,b,m)}else y=t.useDelete&&t.useDelete()?n.DELETE(h,b,m):n.GET(h,b,m);return t.getOperation()===v.default.PNSubscribeOperation?y:o?o.promise:void 0}return i?i(u(a)):o?(o.reject(new _("Validation failed, check status for details",u(a))),o.promise):void 0};var h=n(3),d=r(h),p=(n(5),n(15)),g=r(p),y=n(2),b=(r(y),n(13)),v=r(b),_=function(e){function t(e,n){i(this,t);var r=o(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return r.name=r.constructor.name,r.status=n,r.message=e,r}return s(t,e),t}(Error);e.exports=t.default},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return h.default.PNAddChannelsToGroupOperation}function o(e,t){var n=t.channels,r=t.channelGroup,i=e.config;return r?n&&0!==n.length?i.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channels":"Missing Channel Group"}function s(e,t){var n=t.channelGroup;return"/v1/channel-registration/sub-key/"+e.config.subscribeKey+"/channel-group/"+p.default.encodeString(n)}function a(e){return e.config.getTransactionTimeout()}function u(){return!0}function c(e,t){var n=t.channels;return{add:(void 0===n?[]:n).join(",")}}function l(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=o,t.getURL=s,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var f=(n(5),n(13)),h=r(f),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return h.default.PNRemoveChannelsFromGroupOperation}function o(e,t){var n=t.channels,r=t.channelGroup,i=e.config;return r?n&&0!==n.length?i.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channels":"Missing Channel Group"}function s(e,t){var n=t.channelGroup;return"/v1/channel-registration/sub-key/"+e.config.subscribeKey+"/channel-group/"+p.default.encodeString(n)}function a(e){return e.config.getTransactionTimeout()}function u(){return!0}function c(e,t){var n=t.channels;return{remove:(void 0===n?[]:n).join(",")}}function l(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=o,t.getURL=s,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var f=(n(5),n(13)),h=r(f),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return h.default.PNRemoveGroupOperation}function o(e,t){var n=t.channelGroup,r=e.config;return n?r.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channel Group"}function s(e,t){var n=t.channelGroup;return"/v1/channel-registration/sub-key/"+e.config.subscribeKey+"/channel-group/"+p.default.encodeString(n)+"/remove"}function a(){return!0}function u(e){return e.config.getTransactionTimeout()}function c(){return{}}function l(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=o,t.getURL=s,t.isAuthSupported=a,t.getRequestTimeout=u,t.prepareParams=c,t.handleResponse=l;var f=(n(5),n(13)),h=r(f),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(){return f.default.PNChannelGroupsOperation}function i(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function o(e){return"/v1/channel-registration/sub-key/"+e.config.subscribeKey+"/channel-group"}function s(e){return e.config.getTransactionTimeout()}function a(){return!0}function u(){return{}}function c(e,t){return{groups:t.payload.groups}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=o,t.getRequestTimeout=s,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),f=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return h.default.PNChannelsForGroupOperation}function o(e,t){var n=t.channelGroup,r=e.config;return n?r.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channel Group"}function s(e,t){var n=t.channelGroup;return"/v1/channel-registration/sub-key/"+e.config.subscribeKey+"/channel-group/"+p.default.encodeString(n)}function a(e){return e.config.getTransactionTimeout()}function u(){return!0}function c(){return{}}function l(e,t){return{channels:t.payload.channels}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=o,t.getURL=s,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var f=(n(5),n(13)),h=r(f),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(){return f.default.PNPushNotificationEnabledChannelsOperation}function i(e,t){var n=t.device,r=t.pushGateway,i=t.channels,o=e.config;return n?r?i&&0!==i.length?o.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channels":"Missing GW Type (pushGateway: gcm or apns)":"Missing Device ID (device)"}function o(e,t){var n=t.device;return"/v1/push/sub-key/"+e.config.subscribeKey+"/devices/"+n}function s(e){return e.config.getTransactionTimeout()}function a(){return!0}function u(e,t){var n=t.pushGateway,r=t.channels;return{type:n,add:(void 0===r?[]:r).join(",")}}function c(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=o,t.getRequestTimeout=s,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),f=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(){return f.default.PNPushNotificationEnabledChannelsOperation}function i(e,t){var n=t.device,r=t.pushGateway,i=t.channels,o=e.config;return n?r?i&&0!==i.length?o.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channels":"Missing GW Type (pushGateway: gcm or apns)":"Missing Device ID (device)"}function o(e,t){var n=t.device;return"/v1/push/sub-key/"+e.config.subscribeKey+"/devices/"+n}function s(e){return e.config.getTransactionTimeout()}function a(){return!0}function u(e,t){var n=t.pushGateway,r=t.channels;return{type:n,remove:(void 0===r?[]:r).join(",")}}function c(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=o,t.getRequestTimeout=s,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),f=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(){return f.default.PNPushNotificationEnabledChannelsOperation}function i(e,t){var n=t.device,r=t.pushGateway,i=e.config;return n?r?i.subscribeKey?void 0:"Missing Subscribe Key":"Missing GW Type (pushGateway: gcm or apns)":"Missing Device ID (device)"}function o(e,t){var n=t.device;return"/v1/push/sub-key/"+e.config.subscribeKey+"/devices/"+n}function s(e){return e.config.getTransactionTimeout()}function a(){return!0}function u(e,t){return{type:t.pushGateway}}function c(e,t){return{channels:t}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=o,t.getRequestTimeout=s,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),f=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(){return f.default.PNRemoveAllPushNotificationsOperation}function i(e,t){var n=t.device,r=t.pushGateway,i=e.config;return n?r?i.subscribeKey?void 0:"Missing Subscribe Key":"Missing GW Type (pushGateway: gcm or apns)":"Missing Device ID (device)"}function o(e,t){var n=t.device;return"/v1/push/sub-key/"+e.config.subscribeKey+"/devices/"+n+"/remove"}function s(e){return e.config.getTransactionTimeout()}function a(){return!0}function u(e,t){return{type:t.pushGateway}}function c(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=o,t.getRequestTimeout=s,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),f=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return h.default.PNUnsubscribeOperation}function o(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function s(e,t){var n=e.config,r=t.channels,i=void 0===r?[]:r,o=i.length>0?i.join(","):",";return"/v2/presence/sub-key/"+n.subscribeKey+"/channel/"+p.default.encodeString(o)+"/leave"}function a(e){return e.config.getTransactionTimeout()}function u(){return!0}function c(e,t){var n=t.channelGroups,r=void 0===n?[]:n,i={};return r.length>0&&(i["channel-group"]=r.join(",")),i}function l(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=o,t.getURL=s,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var f=(n(5),n(13)),h=r(f),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(){return f.default.PNWhereNowOperation}function i(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function o(e,t){var n=e.config,r=t.uuid,i=void 0===r?n.UUID:r;return"/v2/presence/sub-key/"+n.subscribeKey+"/uuid/"+i}function s(e){return e.config.getTransactionTimeout()}function a(){return!0}function u(){return{}}function c(e,t){return t.payload?{channels:t.payload.channels}:{channels:[]}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=o,t.getRequestTimeout=s,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),f=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return h.default.PNHeartbeatOperation}function o(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function s(e,t){var n=e.config,r=t.channels,i=void 0===r?[]:r,o=i.length>0?i.join(","):",";return"/v2/presence/sub-key/"+n.subscribeKey+"/channel/"+p.default.encodeString(o)+"/heartbeat"}function a(){return!0}function u(e){return e.config.getTransactionTimeout()}function c(e,t){var n=t.channelGroups,r=void 0===n?[]:n,i=t.state,o=void 0===i?{}:i,s=e.config,a={};return r.length>0&&(a["channel-group"]=r.join(",")),a.state=JSON.stringify(o),a.heartbeat=s.getPresenceTimeout(),a}function l(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=o,t.getURL=s,t.isAuthSupported=a,t.getRequestTimeout=u,t.prepareParams=c,t.handleResponse=l;var f=(n(5),n(13)),h=r(f),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return h.default.PNGetStateOperation}function o(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function s(e,t){var n=e.config,r=t.uuid,i=void 0===r?n.UUID:r,o=t.channels,s=void 0===o?[]:o,a=s.length>0?s.join(","):",";return"/v2/presence/sub-key/"+n.subscribeKey+"/channel/"+p.default.encodeString(a)+"/uuid/"+i}function a(e){return e.config.getTransactionTimeout()}function u(){return!0}function c(e,t){var n=t.channelGroups,r=void 0===n?[]:n,i={};return r.length>0&&(i["channel-group"]=r.join(",")),i}function l(e,t,n){var r=n.channels,i=void 0===r?[]:r,o=n.channelGroups,s=void 0===o?[]:o,a={};return 1===i.length&&0===s.length?a[i[0]]=t.payload:a=t.payload,{channels:a}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=o,t.getURL=s,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var f=(n(5),n(13)),h=r(f),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return h.default.PNSetStateOperation}function o(e,t){var n=e.config,r=t.state,i=t.channels,o=void 0===i?[]:i,s=t.channelGroups,a=void 0===s?[]:s;return r?n.subscribeKey?0===o.length&&0===a.length?"Please provide a list of channels and/or channel-groups":void 0:"Missing Subscribe Key":"Missing State"}function s(e,t){var n=e.config,r=t.channels,i=void 0===r?[]:r,o=i.length>0?i.join(","):",";return"/v2/presence/sub-key/"+n.subscribeKey+"/channel/"+p.default.encodeString(o)+"/uuid/"+n.UUID+"/data"}function a(e){return e.config.getTransactionTimeout()}function u(){return!0}function c(e,t){var n=t.state,r=t.channelGroups,i=void 0===r?[]:r,o={};return o.state=JSON.stringify(n),i.length>0&&(o["channel-group"]=i.join(",")),o}function l(e,t){return{state:t.payload}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=o,t.getURL=s,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var f=(n(5),n(13)),h=r(f),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return h.default.PNHereNowOperation}function o(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function s(e,t){var n=e.config,r=t.channels,i=void 0===r?[]:r,o=t.channelGroups,s=void 0===o?[]:o,a="/v2/presence/sub-key/"+n.subscribeKey;if(i.length>0||s.length>0){var u=i.length>0?i.join(","):",";a+="/channel/"+p.default.encodeString(u)}return a}function a(e){return e.config.getTransactionTimeout()}function u(){return!0}function c(e,t){var n=t.channelGroups,r=void 0===n?[]:n,i=t.includeUUIDs,o=void 0===i||i,s=t.includeState,a=void 0!==s&&s,u={};return o||(u.disable_uuids=1),a&&(u.state=1),r.length>0&&(u["channel-group"]=r.join(",")),u}function l(e,t,n){var r=n.channels,i=void 0===r?[]:r,o=n.channelGroups,s=void 0===o?[]:o,a=n.includeUUIDs,u=void 0===a||a,c=n.includeState,l=void 0!==c&&c;return i.length>1||s.length>0||0===s.length&&0===i.length?function(){var e={};return e.totalChannels=t.payload.total_channels,e.totalOccupancy=t.payload.total_occupancy,e.channels={},Object.keys(t.payload.channels).forEach(function(n){var r=t.payload.channels[n],i=[];return e.channels[n]={occupants:i,name:n,occupancy:r.occupancy},u&&r.uuids.forEach(function(e){l?i.push({state:e.state,uuid:e.uuid}):i.push({state:null,uuid:e})}),e}),e}():function(){var e={},n=[];return e.totalChannels=1,e.totalOccupancy=t.occupancy,e.channels={},e.channels[i[0]]={occupants:n,name:i[0],occupancy:t.occupancy},u&&t.uuids&&t.uuids.forEach(function(e){l?n.push({state:e.state,uuid:e.uuid}):n.push({state:null,uuid:e})}),e}()}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=o,t.getURL=s,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var f=(n(5),n(13)),h=r(f),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(){return f.default.PNAccessManagerAudit}function i(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function o(e){return"/v2/auth/audit/sub-key/"+e.config.subscribeKey}function s(e){return e.config.getTransactionTimeout()}function a(){return!1}function u(e,t){var n=t.channel,r=t.channelGroup,i=t.authKeys,o=void 0===i?[]:i,s={};return n&&(s.channel=n),r&&(s["channel-group"]=r),o.length>0&&(s.auth=o.join(",")),s}function c(e,t){return t.payload}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=o,t.getRequestTimeout=s,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),f=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(){return f.default.PNAccessManagerGrant}function i(e){var t=e.config;return t.subscribeKey?t.publishKey?t.secretKey?void 0:"Missing Secret Key":"Missing Publish Key":"Missing Subscribe Key"}function o(e){return"/v2/auth/grant/sub-key/"+e.config.subscribeKey}function s(e){return e.config.getTransactionTimeout()}function a(){return!1}function u(e,t){var n=t.channels,r=void 0===n?[]:n,i=t.channelGroups,o=void 0===i?[]:i,s=t.ttl,a=t.read,u=void 0!==a&&a,c=t.write,l=void 0!==c&&c,f=t.manage,h=void 0!==f&&f,d=t.authKeys,p=void 0===d?[]:d,g={};return g.r=u?"1":"0",g.w=l?"1":"0",g.m=h?"1":"0",r.length>0&&(g.channel=r.join(",")),o.length>0&&(g["channel-group"]=o.join(",")),p.length>0&&(g.auth=p.join(",")),(s||0===s)&&(g.ttl=s),g}function c(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=o,t.getRequestTimeout=s,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),f=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){var n=e.crypto,r=e.config,i=JSON.stringify(t) +;return r.cipherKey&&(i=n.encrypt(i),i=JSON.stringify(i)),i}function o(){return b.default.PNPublishOperation}function s(e,t){var n=e.config,r=t.message;return t.channel?r?n.subscribeKey?void 0:"Missing Subscribe Key":"Missing Message":"Missing Channel"}function a(e,t){var n=t.sendByPost;return void 0!==n&&n}function u(e,t){var n=e.config,r=t.channel,o=t.message,s=i(e,o);return"/publish/"+n.publishKey+"/"+n.subscribeKey+"/0/"+_.default.encodeString(r)+"/0/"+_.default.encodeString(s)}function c(e,t){var n=e.config,r=t.channel;return"/publish/"+n.publishKey+"/"+n.subscribeKey+"/0/"+_.default.encodeString(r)+"/0"}function l(e){return e.config.getTransactionTimeout()}function f(){return!0}function h(e,t){return i(e,t.message)}function d(e,t){var n=t.meta,r=t.replicate,i=void 0===r||r,o=t.storeInHistory,s=t.ttl,a={};return null!=o&&(a.store=o?"1":"0"),s&&(a.ttl=s),!1===i&&(a.norep="true"),n&&"object"===(void 0===n?"undefined":g(n))&&(a.meta=JSON.stringify(n)),a}function p(e,t){return{timetoken:t[2]}}Object.defineProperty(t,"__esModule",{value:!0});var g="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};t.getOperation=o,t.validateParams=s,t.usePost=a,t.getURL=u,t.postURL=c,t.getRequestTimeout=l,t.isAuthSupported=f,t.postPayload=h,t.prepareParams=d,t.handleResponse=p;var y=(n(5),n(13)),b=r(y),v=n(15),_=r(v)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){var n=e.config,r=e.crypto;if(!n.cipherKey)return t;try{return r.decrypt(t)}catch(e){return t}}function o(){return d.default.PNHistoryOperation}function s(e,t){var n=t.channel,r=e.config;return n?r.subscribeKey?void 0:"Missing Subscribe Key":"Missing channel"}function a(e,t){var n=t.channel;return"/v2/history/sub-key/"+e.config.subscribeKey+"/channel/"+g.default.encodeString(n)}function u(e){return e.config.getTransactionTimeout()}function c(){return!0}function l(e,t){var n=t.start,r=t.end,i=t.reverse,o=t.count,s=void 0===o?100:o,a=t.stringifiedTimeToken,u=void 0!==a&&a,c={include_token:"true"};return c.count=s,n&&(c.start=n),r&&(c.end=r),u&&(c.string_message_token="true"),null!=i&&(c.reverse=i.toString()),c}function f(e,t){var n={messages:[],startTimeToken:t[1],endTimeToken:t[2]};return t[0].forEach(function(t){var r={timetoken:t.timetoken,entry:i(e,t.message)};n.messages.push(r)}),n}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=o,t.validateParams=s,t.getURL=a,t.getRequestTimeout=u,t.isAuthSupported=c,t.prepareParams=l,t.handleResponse=f;var h=(n(5),n(13)),d=r(h),p=n(15),g=r(p)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return d.default.PNDeleteMessagesOperation}function o(e,t){var n=t.channel,r=e.config;return n?r.subscribeKey?void 0:"Missing Subscribe Key":"Missing channel"}function s(){return!0}function a(e,t){var n=t.channel,r=t.start,i=t.end,o=e.config,s="";return r&&(s="?start="+r),i&&(s+=(""!==s?"&":"?")+"end="+i),"/v3/history/sub-key/"+o.subscribeKey+"/channel/"+g.default.encodeString(n)+s}function u(e){return e.config.getTransactionTimeout()}function c(){return!0}function l(e,t){var n=t.start,r=t.end,i={};return n&&(i.start=n),r&&(i.end=r),{}}function f(e,t){return t.payload}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=o,t.useDelete=s,t.getURL=a,t.getRequestTimeout=u,t.isAuthSupported=c,t.prepareParams=l,t.handleResponse=f;var h=(n(5),n(13)),d=r(h),p=n(15),g=r(p)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){var n=e.config,r=e.crypto;if(!n.cipherKey)return t;try{return r.decrypt(t)}catch(e){return t}}function o(){return d.default.PNFetchMessagesOperation}function s(e,t){var n=t.channels,r=e.config;return n&&0!==n.length?r.subscribeKey?void 0:"Missing Subscribe Key":"Missing channels"}function a(e,t){var n=t.channels,r=void 0===n?[]:n,i=e.config,o=r.length>0?r.join(","):",";return"/v3/history/sub-key/"+i.subscribeKey+"/channel/"+g.default.encodeString(o)}function u(e){return e.config.getTransactionTimeout()}function c(){return!0}function l(e,t){var n=t.start,r=t.end,i=t.count,o={};return i&&(o.max=i),n&&(o.start=n),r&&(o.end=r),o}function f(e,t){var n={channels:{}};return Object.keys(t.channels||{}).forEach(function(r){n.channels[r]=[],(t.channels[r]||[]).forEach(function(t){var o={};o.channel=r,o.subscription=null,o.timetoken=t.timetoken,o.message=i(e,t.message),n.channels[r].push(o)})}),n}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=o,t.validateParams=s,t.getURL=a,t.getRequestTimeout=u,t.isAuthSupported=c,t.prepareParams=l,t.handleResponse=f;var h=(n(5),n(13)),d=r(h),p=n(15),g=r(p)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return h.default.PNSubscribeOperation}function o(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function s(e,t){var n=e.config,r=t.channels,i=void 0===r?[]:r,o=i.length>0?i.join(","):",";return"/v2/subscribe/"+n.subscribeKey+"/"+p.default.encodeString(o)+"/0"}function a(e){return e.config.getSubscribeTimeout()}function u(){return!0}function c(e,t){var n=e.config,r=t.channelGroups,i=void 0===r?[]:r,o=t.timetoken,s=t.filterExpression,a=t.region,u={heartbeat:n.getPresenceTimeout()};return i.length>0&&(u["channel-group"]=i.join(",")),s&&s.length>0&&(u["filter-expr"]=s),o&&(u.tt=o),a&&(u.tr=a),u}function l(e,t){var n=[];t.m.forEach(function(e){var t={publishTimetoken:e.p.t,region:e.p.r},r={shard:parseInt(e.a,10),subscriptionMatch:e.b,channel:e.c,payload:e.d,flags:e.f,issuingClientId:e.i,subscribeKey:e.k,originationTimetoken:e.o,userMetadata:e.u,publishMetaData:t};n.push(r)});var r={timetoken:t.t.t,region:t.t.r};return{messages:n,metadata:r}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=o,t.getURL=s,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var f=(n(5),n(13)),h=r(f),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e,t){for(var n=0;n=this._maxSubDomain&&(this._currentSubDomain=1),e=this._currentSubDomain.toString(),this._providedFQDN.replace("pubsub","ps"+e)}},{key:"hasModule",value:function(e){return e in this._modules}},{key:"shiftStandardOrigin",value:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return this._standardOrigin=this.nextOrigin(e),this._standardOrigin}},{key:"getStandardOrigin",value:function(){return this._standardOrigin}},{key:"POST",value:function(e,t,n,r){return this._modules.post(e,t,n,r)}},{key:"GET",value:function(e,t,n){return this._modules.get(e,t,n)}},{key:"DELETE",value:function(e,t,n){return this._modules.del(e,t,n)}},{key:"_detectErrorCategory",value:function(e){if("ENOTFOUND"===e.code)return u.default.PNNetworkIssuesCategory;if("ECONNREFUSED"===e.code)return u.default.PNNetworkIssuesCategory;if("ECONNRESET"===e.code)return u.default.PNNetworkIssuesCategory;if("EAI_AGAIN"===e.code)return u.default.PNNetworkIssuesCategory;if(0===e.status||e.hasOwnProperty("status")&&void 0===e.status)return u.default.PNNetworkIssuesCategory;if(e.timeout)return u.default.PNTimeoutCategory;if(e.response){if(e.response.badRequest)return u.default.PNBadRequestCategory;if(e.response.forbidden)return u.default.PNAccessDeniedCategory}return u.default.PNUnknownCategory}}]),e}());t.default=c,e.exports=t.default},function(e,t){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var r=function(){function e(e,t){for(var n=0;n>>>>>"),o.log("["+u+" / "+a+"]","\n",e,"\n",t,"\n",n),o.log("-----")}function i(){return"mobileweb"===Ti.Platform.osname?new XMLHttpRequest:Ti.Network.createHTTPClient()}function o(e){"mobileweb"!==Ti.Platform.osname&&this._config.keepAlive&&(e.enableKeepAlive=!0)}function s(e,t,n,i,s,a,u){var c=this,f={};f.operation=a.operation,e.open(t,(0,l.buildUrl)(n,i),!0),o.call(this,e),e.onload=function(){f.error=!1,e.status&&(f.statusCode=e.status);var t=JSON.parse(e.responseText);return c._config.logVerbosity&&r(n,i,e.responseText),u(f,t)},e.onerror=function(e){return f.error=!0,f.errorData=e.error,f.category=c._detectErrorCategory(e.error),u(f,null)},e.timeout="android"===Ti.Platform.osname?2147483647:1/0,e.send(s)}function a(e,t,n){var r=i(),o=this.getStandardOrigin()+t.url;return s.call(this,r,"GET",o,e,{},t,n)}function u(e,t,n,r){var o=i(),a=this.getStandardOrigin()+n.url;return s.call(this,o,"POST",a,e,JSON.parse(t),n,r)}function c(e,t,n){var r=i(),o=this.getStandardOrigin()+t.url;return s.call(this,r,"DELETE",o,e,{},t,n)}Object.defineProperty(t,"__esModule",{value:!0}),t.get=a,t.post=u,t.del=c;var l=(n(5),n(42))},function(e,t){"use strict";function n(e,t,r){null!=r?Array.isArray(r)?r.forEach(function(r){n(e,t,r)}):"object"===(void 0===r?"undefined":i(r))?Object.keys(r).forEach(function(i){n(e,t+"["+i+"]",r[i])}):e.push(encodeURIComponent(t)+"="+encodeURIComponent(r)):null===r&&e.push(encodeURIComponent(""+encodeURIComponent(t)))}function r(e,t){var r=[];return Object.keys(t).forEach(function(e){n(r,e,t[e])}),e+"?"+r.join("&")}Object.defineProperty(t,"__esModule",{value:!0});var i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};t.encodedKeyValuePair=n,t.buildUrl=r}])}); \ No newline at end of file diff --git a/dist/web/pubnub.js b/dist/web/pubnub.js index 7f9006846..129d05371 100644 --- a/dist/web/pubnub.js +++ b/dist/web/pubnub.js @@ -349,6 +349,7 @@ return /******/ (function(modules) { // webpackBootstrap this.time = timeEndpoint; this.subscribe = subscriptionManager.adaptSubscribeChange.bind(subscriptionManager); + this.presence = subscriptionManager.adaptPresenceChange.bind(subscriptionManager); this.unsubscribe = subscriptionManager.adaptUnsubscribeChange.bind(subscriptionManager); this.disconnect = subscriptionManager.disconnect.bind(subscriptionManager); this.reconnect = subscriptionManager.reconnect.bind(subscriptionManager); @@ -377,6 +378,13 @@ return /******/ (function(modules) { // webpackBootstrap this.setFilterExpression = modules.config.setFilterExpression.bind(modules.config); this.setHeartbeatInterval = modules.config.setHeartbeatInterval.bind(modules.config); + + if (networking.hasModule('proxy')) { + this.setProxy = function (proxy) { + modules.config.setProxy(proxy); + _this.reconnect(); + }; + } } _createClass(_class, [{ @@ -552,6 +560,11 @@ return /******/ (function(modules) { // webpackBootstrap this.setHeartbeatInterval(this._presenceTimeout / 2 - 1); return this; } + }, { + key: 'setProxy', + value: function setProxy(proxy) { + this.proxy = proxy; + } }, { key: 'getHeartbeatInterval', value: function getHeartbeatInterval() { @@ -1407,12 +1420,18 @@ return /******/ (function(modules) { // webpackBootstrap this._channels = {}; this._presenceChannels = {}; + this._heartbeatChannels = {}; + this._heartbeatChannelGroups = {}; + this._channelGroups = {}; this._presenceChannelGroups = {}; this._pendingChannelSubscriptions = []; this._pendingChannelGroupSubscriptions = []; + this._pendingHeartbeatChannels = []; + this._pendingHeartbeatChannelGroups = []; + this._currentTimetoken = 0; this._lastTimetoken = 0; this._storedTimetoken = null; @@ -1448,15 +1467,59 @@ return /******/ (function(modules) { // webpackBootstrap return this._setStateEndpoint({ state: state, channels: channels, channelGroups: channelGroups }, callback); } }, { - key: 'adaptSubscribeChange', - value: function adaptSubscribeChange(args) { + key: 'adaptPresenceChange', + value: function adaptPresenceChange(args) { var _this2 = this; - var timetoken = args.timetoken, + var connected = args.connected, _args$channels2 = args.channels, channels = _args$channels2 === undefined ? [] : _args$channels2, _args$channelGroups2 = args.channelGroups, - channelGroups = _args$channelGroups2 === undefined ? [] : _args$channelGroups2, + channelGroups = _args$channelGroups2 === undefined ? [] : _args$channelGroups2; + + + if (connected) { + channels.forEach(function (channel) { + _this2._heartbeatChannels[channel] = { state: {} }; + _this2._pendingHeartbeatChannels.push(channel); + }); + + channelGroups.forEach(function (channelGroup) { + _this2._heartbeatChannelGroups[channelGroup] = { state: {} }; + _this2._pendingHeartbeatChannelGroups.push(channelGroup); + }); + } else { + channels.forEach(function (channel) { + if (channel in _this2._heartbeatChannels) { + delete _this2._heartbeatChannels[channel]; + } + }); + + channelGroups.forEach(function (channelGroup) { + if (channelGroup in _this2._heartbeatChannelGroups) { + delete _this2._heartbeatChannelGroups[channelGroup]; + } + }); + + if (this._config.suppressLeaveEvents === false) { + this._leaveEndpoint({ channels: channels, channelGroups: channelGroups }, function (status) { + _this2._listenerManager.announceStatus(status); + }); + } + } + + this.reconnect(); + } + }, { + key: 'adaptSubscribeChange', + value: function adaptSubscribeChange(args) { + var _this3 = this; + + var timetoken = args.timetoken, + _args$channels3 = args.channels, + channels = _args$channels3 === undefined ? [] : _args$channels3, + _args$channelGroups3 = args.channelGroups, + channelGroups = _args$channelGroups3 === undefined ? [] : _args$channelGroups3, _args$withPresence = args.withPresence, withPresence = _args$withPresence === undefined ? false : _args$withPresence; @@ -1477,17 +1540,17 @@ return /******/ (function(modules) { // webpackBootstrap } channels.forEach(function (channel) { - _this2._channels[channel] = { state: {} }; - if (withPresence) _this2._presenceChannels[channel] = {}; + _this3._channels[channel] = { state: {} }; + if (withPresence) _this3._presenceChannels[channel] = {}; - _this2._pendingChannelSubscriptions.push(channel); + _this3._pendingChannelSubscriptions.push(channel); }); channelGroups.forEach(function (channelGroup) { - _this2._channelGroups[channelGroup] = { state: {} }; - if (withPresence) _this2._presenceChannelGroups[channelGroup] = {}; + _this3._channelGroups[channelGroup] = { state: {} }; + if (withPresence) _this3._presenceChannelGroups[channelGroup] = {}; - _this2._pendingChannelGroupSubscriptions.push(channelGroup); + _this3._pendingChannelGroupSubscriptions.push(channelGroup); }); this._subscriptionStatusAnnounced = false; @@ -1496,35 +1559,35 @@ return /******/ (function(modules) { // webpackBootstrap }, { key: 'adaptUnsubscribeChange', value: function adaptUnsubscribeChange(args, isOffline) { - var _this3 = this; + var _this4 = this; - var _args$channels3 = args.channels, - channels = _args$channels3 === undefined ? [] : _args$channels3, - _args$channelGroups3 = args.channelGroups, - channelGroups = _args$channelGroups3 === undefined ? [] : _args$channelGroups3; + var _args$channels4 = args.channels, + channels = _args$channels4 === undefined ? [] : _args$channels4, + _args$channelGroups4 = args.channelGroups, + channelGroups = _args$channelGroups4 === undefined ? [] : _args$channelGroups4; var actualChannels = []; var actualChannelGroups = []; channels.forEach(function (channel) { - if (channel in _this3._channels) { - delete _this3._channels[channel]; + if (channel in _this4._channels) { + delete _this4._channels[channel]; actualChannels.push(channel); } - if (channel in _this3._presenceChannels) { - delete _this3._presenceChannels[channel]; + if (channel in _this4._presenceChannels) { + delete _this4._presenceChannels[channel]; actualChannels.push(channel); } }); channelGroups.forEach(function (channelGroup) { - if (channelGroup in _this3._channelGroups) { - delete _this3._channelGroups[channelGroup]; + if (channelGroup in _this4._channelGroups) { + delete _this4._channelGroups[channelGroup]; actualChannelGroups.push(channelGroup); } - if (channelGroup in _this3._presenceChannelGroups) { - delete _this3._channelGroups[channelGroup]; + if (channelGroup in _this4._presenceChannelGroups) { + delete _this4._channelGroups[channelGroup]; actualChannelGroups.push(channelGroup); } }); @@ -1537,9 +1600,9 @@ return /******/ (function(modules) { // webpackBootstrap this._leaveEndpoint({ channels: actualChannels, channelGroups: actualChannelGroups }, function (status) { status.affectedChannels = actualChannels; status.affectedChannelGroups = actualChannelGroups; - status.currentTimetoken = _this3._currentTimetoken; - status.lastTimetoken = _this3._lastTimetoken; - _this3._listenerManager.announceStatus(status); + status.currentTimetoken = _this4._currentTimetoken; + status.lastTimetoken = _this4._lastTimetoken; + _this4._listenerManager.announceStatus(status); }); } @@ -1558,6 +1621,16 @@ return /******/ (function(modules) { // webpackBootstrap value: function unsubscribeAll(isOffline) { this.adaptUnsubscribeChange({ channels: this.getSubscribedChannels(), channelGroups: this.getSubscribedChannelGroups() }, isOffline); } + }, { + key: 'getHeartbeatChannels', + value: function getHeartbeatChannels() { + return Object.keys(this._heartbeatChannels); + } + }, { + key: 'getHeartbeatChannelGroups', + value: function getHeartbeatChannelGroups() { + return Object.keys(this._heartbeatChannelGroups); + } }, { key: 'getSubscribedChannels', value: function getSubscribedChannels() { @@ -1604,46 +1677,52 @@ return /******/ (function(modules) { // webpackBootstrap }, { key: '_performHeartbeatLoop', value: function _performHeartbeatLoop() { - var _this4 = this; + var _this5 = this; + + var heartbeatChannels = []; + heartbeatChannels = heartbeatChannels.concat(this.getHeartbeatChannels()); + heartbeatChannels = heartbeatChannels.concat(this.getSubscribedChannels()); + + var heartbeatChannelGroups = []; + heartbeatChannelGroups = heartbeatChannelGroups.concat(this.getHeartbeatChannelGroups()); + heartbeatChannelGroups = heartbeatChannelGroups.concat(this.getSubscribedChannelGroups()); - var presenceChannels = Object.keys(this._channels); - var presenceChannelGroups = Object.keys(this._channelGroups); var presenceState = {}; - if (presenceChannels.length === 0 && presenceChannelGroups.length === 0) { + if (heartbeatChannels.length === 0 && heartbeatChannelGroups.length === 0) { return; } - presenceChannels.forEach(function (channel) { - var channelState = _this4._channels[channel].state; + this.getSubscribedChannels().forEach(function (channel) { + var channelState = _this5._channels[channel].state; if (Object.keys(channelState).length) presenceState[channel] = channelState; }); - presenceChannelGroups.forEach(function (channelGroup) { - var channelGroupState = _this4._channelGroups[channelGroup].state; + this.getSubscribedChannelGroups().forEach(function (channelGroup) { + var channelGroupState = _this5._channelGroups[channelGroup].state; if (Object.keys(channelGroupState).length) presenceState[channelGroup] = channelGroupState; }); var onHeartbeat = function onHeartbeat(status) { - if (status.error && _this4._config.announceFailedHeartbeats) { - _this4._listenerManager.announceStatus(status); + if (status.error && _this5._config.announceFailedHeartbeats) { + _this5._listenerManager.announceStatus(status); } - if (status.error && _this4._config.autoNetworkDetection && _this4._isOnline) { - _this4._isOnline = false; - _this4.disconnect(); - _this4._listenerManager.announceNetworkDown(); - _this4.reconnect(); + if (status.error && _this5._config.autoNetworkDetection && _this5._isOnline) { + _this5._isOnline = false; + _this5.disconnect(); + _this5._listenerManager.announceNetworkDown(); + _this5.reconnect(); } - if (!status.error && _this4._config.announceSuccessfulHeartbeats) { - _this4._listenerManager.announceStatus(status); + if (!status.error && _this5._config.announceSuccessfulHeartbeats) { + _this5._listenerManager.announceStatus(status); } }; this._heartbeatEndpoint({ - channels: presenceChannels, - channelGroups: presenceChannelGroups, + channels: heartbeatChannels, + channelGroups: heartbeatChannelGroups, state: presenceState }, onHeartbeat.bind(this)); } }, { @@ -1684,7 +1763,7 @@ return /******/ (function(modules) { // webpackBootstrap }, { key: '_processSubscribeResponse', value: function _processSubscribeResponse(status, payload) { - var _this5 = this; + var _this6 = this; if (status.error) { if (status.category === _categories2.default.PNTimeoutCategory) { @@ -1698,19 +1777,19 @@ return /******/ (function(modules) { // webpackBootstrap } this._reconnectionManager.onReconnection(function () { - if (_this5._config.autoNetworkDetection && !_this5._isOnline) { - _this5._isOnline = true; - _this5._listenerManager.announceNetworkUp(); + if (_this6._config.autoNetworkDetection && !_this6._isOnline) { + _this6._isOnline = true; + _this6._listenerManager.announceNetworkUp(); } - _this5.reconnect(); - _this5._subscriptionStatusAnnounced = true; + _this6.reconnect(); + _this6._subscriptionStatusAnnounced = true; var reconnectedAnnounce = { category: _categories2.default.PNReconnectedCategory, operation: status.operation, - lastTimetoken: _this5._lastTimetoken, - currentTimetoken: _this5._currentTimetoken + lastTimetoken: _this6._lastTimetoken, + currentTimetoken: _this6._currentTimetoken }; - _this5._listenerManager.announceStatus(reconnectedAnnounce); + _this6._listenerManager.announceStatus(reconnectedAnnounce); }); this._reconnectionManager.startPolling(); @@ -1772,10 +1851,10 @@ return /******/ (function(modules) { // webpackBootstrap } if (dedupeOnSubscribe) { - if (_this5._dedupingManager.isDuplicate(message)) { + if (_this6._dedupingManager.isDuplicate(message)) { return; } else { - _this5._dedupingManager.addEntry(message); + _this6._dedupingManager.addEntry(message); } } @@ -1815,7 +1894,7 @@ return /******/ (function(modules) { // webpackBootstrap announce.timeout = message.payload.timeout; } - _this5._listenerManager.announcePresence(announce); + _this6._listenerManager.announcePresence(announce); } else { var _announce = {}; _announce.channel = null; @@ -1834,13 +1913,13 @@ return /******/ (function(modules) { // webpackBootstrap _announce.userMetadata = message.userMetadata; } - if (_this5._config.cipherKey) { - _announce.message = _this5._crypto.decrypt(message.payload); + if (_this6._config.cipherKey) { + _announce.message = _this6._crypto.decrypt(message.payload); } else { _announce.message = message.payload; } - _this5._listenerManager.announceMessage(_announce); + _this6._listenerManager.announceMessage(_announce); } }); @@ -4487,6 +4566,11 @@ return /******/ (function(modules) { // webpackBootstrap return this._providedFQDN.replace('pubsub', 'ps' + newSubDomain); } + }, { + key: 'hasModule', + value: function hasModule(name) { + return name in this._modules; + } }, { key: 'shiftStandardOrigin', value: function shiftStandardOrigin() { diff --git a/dist/web/pubnub.min.js b/dist/web/pubnub.min.js index d7317b09a..72f8715f6 100644 --- a/dist/web/pubnub.min.js +++ b/dist/web/pubnub.min.js @@ -1,3 +1,3 @@ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.PubNub=t():e.PubNub=t()}(this,function(){return function(e){function t(r){if(n[r])return n[r].exports;var i=n[r]={exports:{},id:r,loaded:!1};return e[r].call(i.exports,i,i.exports,t),i.loaded=!0,i.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function o(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function a(e){if(!navigator||!navigator.sendBeacon)return!1;navigator.sendBeacon(e)}Object.defineProperty(t,"__esModule",{value:!0});var u=n(1),c=r(u),l=n(39),h=r(l),f=n(40),d=r(f),p=n(41),g=(n(5),function(e){function t(e){i(this,t);var n=e.listenToBrowserNetworkEvents,r=void 0===n||n;e.db=d.default,e.sdkFamily="Web",e.networking=new h.default({del:p.del,get:p.get,post:p.post,sendBeacon:a});var o=s(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return r&&(window.addEventListener("offline",function(){o.networkDownDetected()}),window.addEventListener("online",function(){o.networkUpDetected()})),o}return o(t,e),t}(c.default));t.default=g,e.exports=t.default},function(e,t,n){"use strict";function r(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}function i(e){return e&&e.__esModule?e:{default:e}}function s(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e,t){for(var n=0;n>>2]|=(n[i>>>2]>>>24-i%4*8&255)<<24-(r+i)%4*8;else if(65535>>2]=n[i>>>2];else t.push.apply(t,n);return this.sigBytes+=e,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=s.clone.call(this);return e.words=this.words.slice(0),e},random:function(t){for(var n=[],r=0;r>>2]>>>24-r%4*8&255;n.push((i>>>4).toString(16)),n.push((15&i).toString(16))}return n.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 o.init(n,t/2)}},c=a.Latin1={stringify:function(e){var t=e.words;e=e.sigBytes;for(var n=[],r=0;r>>2]>>>24-r%4*8&255));return n.join("")},parse:function(e){for(var t=e.length,n=[],r=0;r>>2]|=(255&e.charCodeAt(r))<<24-r%4*8;return new o.init(n,t)}},l=a.Utf8={stringify:function(e){try{return decodeURIComponent(escape(c.stringify(e)))}catch(e){throw Error("Malformed UTF-8 data")}},parse:function(e){return c.parse(unescape(encodeURIComponent(e)))}},h=r.BufferedBlockAlgorithm=s.extend({reset:function(){this._data=new o.init,this._nDataBytes=0},_append:function(e){"string"==typeof e&&(e=l.parse(e)),this._data.concat(e),this._nDataBytes+=e.sigBytes},_process:function(t){var n=this._data,r=n.words,i=n.sigBytes,s=this.blockSize,a=i/(4*s),a=t?e.ceil(a):e.max((0|a)-this._minBufferSize,0);if(t=a*s,i=e.min(4*t,i),t){for(var u=0;ul;){var h;e:{h=c;for(var f=e.sqrt(h),d=2;d<=f;d++)if(!(h%d)){h=!1;break e}h=!0}h&&(8>l&&(o[l]=u(e.pow(c,.5))),a[l]=u(e.pow(c,1/3)),l++),c++}var p=[],r=r.SHA256=s.extend({_doReset:function(){this._hash=new i.init(o.slice(0))},_doProcessBlock:function(e,t){for(var n=this._hash.words,r=n[0],i=n[1],s=n[2],o=n[3],u=n[4],c=n[5],l=n[6],h=n[7],f=0;64>f;f++){if(16>f)p[f]=0|e[t+f];else{var d=p[f-15],g=p[f-2];p[f]=((d<<25|d>>>7)^(d<<14|d>>>18)^d>>>3)+p[f-7]+((g<<15|g>>>17)^(g<<13|g>>>19)^g>>>10)+p[f-16]}d=h+((u<<26|u>>>6)^(u<<21|u>>>11)^(u<<7|u>>>25))+(u&c^~u&l)+a[f]+p[f],g=((r<<30|r>>>2)^(r<<19|r>>>13)^(r<<10|r>>>22))+(r&i^r&s^i&s),h=l,l=c,c=u,u=o+d|0,o=s,s=i,i=r,r=d+g|0}n[0]=n[0]+r|0,n[1]=n[1]+i|0,n[2]=n[2]+s|0,n[3]=n[3]+o|0,n[4]=n[4]+u|0,n[5]=n[5]+c|0,n[6]=n[6]+l|0,n[7]=n[7]+h|0},_doFinalize:function(){var t=this._data,n=t.words,r=8*this._nDataBytes,i=8*t.sigBytes;return n[i>>>5]|=128<<24-i%32,n[14+(i+64>>>9<<4)]=e.floor(r/4294967296),n[15+(i+64>>>9<<4)]=r,t.sigBytes=4*n.length,this._process(),this._hash},clone:function(){var e=s.clone.call(this);return e._hash=this._hash.clone(),e}});t.SHA256=s._createHelper(r),t.HmacSHA256=s._createHmacHelper(r)}(Math),function(){var e=n,t=e.enc.Utf8;e.algo.HMAC=e.lib.Base.extend({init:function(e,n){e=this._hasher=new e.init,"string"==typeof n&&(n=t.parse(n));var r=e.blockSize,i=4*r;n.sigBytes>i&&(n=e.finalize(n)),n.clamp();for(var s=this._oKey=n.clone(),o=this._iKey=n.clone(),a=s.words,u=o.words,c=0;c>>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,o=0;4>o&&i+.75*o>>6*(3-o)&63));if(t=r.charAt(64))for(;e.length%4;)e.push(t);return e.join("")},parse:function(e){var n=e.length,r=this._map,i=r.charAt(64);i&&-1!=(i=e.indexOf(i))&&(n=i);for(var i=[],s=0,o=0;o>>6-o%4*2;i[s>>>2]|=(a|u)<<24-s%4*8,s++}return t.create(i,s)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="}}(),function(e){function t(e,t,n,r,i,s,o){return((e=e+(t&n|~t&r)+i+o)<>>32-s)+t}function r(e,t,n,r,i,s,o){return((e=e+(t&r|n&~r)+i+o)<>>32-s)+t}function i(e,t,n,r,i,s,o){return((e=e+(t^n^r)+i+o)<>>32-s)+t}function s(e,t,n,r,i,s,o){return((e=e+(n^(t|~r))+i+o)<>>32-s)+t}for(var o=n,a=o.lib,u=a.WordArray,c=a.Hasher,a=o.algo,l=[],h=0;64>h;h++)l[h]=4294967296*e.abs(e.sin(h+1))|0;a=a.MD5=c.extend({_doReset:function(){this._hash=new u.init([1732584193,4023233417,2562383102,271733878])},_doProcessBlock:function(e,n){for(var o=0;16>o;o++){var a=n+o,u=e[a];e[a]=16711935&(u<<8|u>>>24)|4278255360&(u<<24|u>>>8)}var o=this._hash.words,a=e[n+0],u=e[n+1],c=e[n+2],h=e[n+3],f=e[n+4],d=e[n+5],p=e[n+6],g=e[n+7],y=e[n+8],b=e[n+9],v=e[n+10],_=e[n+11],m=e[n+12],k=e[n+13],P=e[n+14],S=e[n+15],O=o[0],w=o[1],T=o[2],M=o[3],O=t(O,w,T,M,a,7,l[0]),M=t(M,O,w,T,u,12,l[1]),T=t(T,M,O,w,c,17,l[2]),w=t(w,T,M,O,h,22,l[3]),O=t(O,w,T,M,f,7,l[4]),M=t(M,O,w,T,d,12,l[5]),T=t(T,M,O,w,p,17,l[6]),w=t(w,T,M,O,g,22,l[7]),O=t(O,w,T,M,y,7,l[8]),M=t(M,O,w,T,b,12,l[9]),T=t(T,M,O,w,v,17,l[10]),w=t(w,T,M,O,_,22,l[11]),O=t(O,w,T,M,m,7,l[12]),M=t(M,O,w,T,k,12,l[13]),T=t(T,M,O,w,P,17,l[14]),w=t(w,T,M,O,S,22,l[15]),O=r(O,w,T,M,u,5,l[16]),M=r(M,O,w,T,p,9,l[17]),T=r(T,M,O,w,_,14,l[18]),w=r(w,T,M,O,a,20,l[19]),O=r(O,w,T,M,d,5,l[20]),M=r(M,O,w,T,v,9,l[21]),T=r(T,M,O,w,S,14,l[22]),w=r(w,T,M,O,f,20,l[23]),O=r(O,w,T,M,b,5,l[24]),M=r(M,O,w,T,P,9,l[25]),T=r(T,M,O,w,h,14,l[26]),w=r(w,T,M,O,y,20,l[27]),O=r(O,w,T,M,k,5,l[28]),M=r(M,O,w,T,c,9,l[29]),T=r(T,M,O,w,g,14,l[30]),w=r(w,T,M,O,m,20,l[31]),O=i(O,w,T,M,d,4,l[32]),M=i(M,O,w,T,y,11,l[33]),T=i(T,M,O,w,_,16,l[34]),w=i(w,T,M,O,P,23,l[35]),O=i(O,w,T,M,u,4,l[36]),M=i(M,O,w,T,f,11,l[37]),T=i(T,M,O,w,g,16,l[38]),w=i(w,T,M,O,v,23,l[39]),O=i(O,w,T,M,k,4,l[40]),M=i(M,O,w,T,a,11,l[41]),T=i(T,M,O,w,h,16,l[42]),w=i(w,T,M,O,p,23,l[43]),O=i(O,w,T,M,b,4,l[44]),M=i(M,O,w,T,m,11,l[45]),T=i(T,M,O,w,S,16,l[46]),w=i(w,T,M,O,c,23,l[47]),O=s(O,w,T,M,a,6,l[48]),M=s(M,O,w,T,g,10,l[49]),T=s(T,M,O,w,P,15,l[50]),w=s(w,T,M,O,d,21,l[51]),O=s(O,w,T,M,m,6,l[52]),M=s(M,O,w,T,h,10,l[53]),T=s(T,M,O,w,v,15,l[54]),w=s(w,T,M,O,u,21,l[55]),O=s(O,w,T,M,y,6,l[56]),M=s(M,O,w,T,S,10,l[57]),T=s(T,M,O,w,p,15,l[58]),w=s(w,T,M,O,k,21,l[59]),O=s(O,w,T,M,f,6,l[60]),M=s(M,O,w,T,_,10,l[61]),T=s(T,M,O,w,c,15,l[62]),w=s(w,T,M,O,b,21,l[63]);o[0]=o[0]+O|0,o[1]=o[1]+w|0,o[2]=o[2]+T|0,o[3]=o[3]+M|0},_doFinalize:function(){var t=this._data,n=t.words,r=8*this._nDataBytes,i=8*t.sigBytes;n[i>>>5]|=128<<24-i%32;var s=e.floor(r/4294967296);for(n[15+(i+64>>>9<<4)]=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),n[14+(i+64>>>9<<4)]=16711935&(r<<8|r>>>24)|4278255360&(r<<24|r>>>8),t.sigBytes=4*(n.length+1),this._process(),t=this._hash,n=t.words,r=0;4>r;r++)i=n[r],n[r]=16711935&(i<<8|i>>>24)|4278255360&(i<<24|i>>>8);return t},clone:function(){var e=c.clone.call(this);return e._hash=this._hash.clone(),e}}),o.MD5=c._createHelper(a),o.HmacMD5=c._createHmacHelper(a)}(Math),function(){var e=n,t=e.lib,r=t.Base,i=t.WordArray,t=e.algo,s=t.EvpKDF=r.extend({cfg:r.extend({keySize:4,hasher:t.MD5,iterations:1}),init:function(e){this.cfg=this.cfg.extend(e)},compute:function(e,t){for(var n=this.cfg,r=n.hasher.create(),s=i.create(),o=s.words,a=n.keySize,n=n.iterations;o.length>>2]}},r.BlockCipher=c.extend({cfg:c.cfg.extend({mode:l,padding:f}),reset:function(){c.reset.call(this);var e=this.cfg,t=e.iv,e=e.mode;if(this._xformMode==this._ENC_XFORM_MODE)var n=e.createEncryptor;else n=e.createDecryptor,this._minBufferSize=1;this._mode=n.call(e,this,t&&t.words)},_doProcessBlock:function(e,t){this._mode.processBlock(e,t)},_doFinalize:function(){var e=this.cfg.padding;if(this._xformMode==this._ENC_XFORM_MODE){e.pad(this._data,this.blockSize);var t=this._process(!0)}else t=this._process(!0),e.unpad(t);return t},blockSize:4});var d=r.CipherParams=i.extend({init:function(e){this.mixIn(e)},toString:function(e){return(e||this.formatter).stringify(this)}}),l=(t.format={}).OpenSSL={stringify:function(e){var t=e.ciphertext;return e=e.salt,(e?s.create([1398893684,1701076831]).concat(e).concat(t):t).toString(a)},parse:function(e){e=a.parse(e);var t=e.words;if(1398893684==t[0]&&1701076831==t[1]){var n=s.create(t.slice(2,4));t.splice(0,4),e.sigBytes-=16}return d.create({ciphertext:e,salt:n})}},p=r.SerializableCipher=i.extend({cfg:i.extend({format:l}),encrypt:function(e,t,n,r){r=this.cfg.extend(r);var i=e.createEncryptor(n,r);return t=i.finalize(t),i=i.cfg,d.create({ciphertext:t,key:n,iv:i.iv,algorithm:e,mode:i.mode,padding:i.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}}),t=(t.kdf={}).OpenSSL={execute:function(e,t,n,r){return r||(r=s.random(8)),e=u.create({keySize:t+n}).compute(e,r),n=s.create(e.words.slice(t),4*n),e.sigBytes=4*t,d.create({key:e,iv:n,salt:r})}},g=r.PasswordBasedCipher=p.extend({cfg:p.cfg.extend({kdf:t}),encrypt:function(e,t,n,r){return r=this.cfg.extend(r),n=r.kdf.execute(n,e.keySize,e.ivSize),r.iv=n.iv,e=p.encrypt.call(this,e,t,n.key,r),e.mixIn(n),e},decrypt:function(e,t,n,r){return r=this.cfg.extend(r),t=this._parse(t,r.format),n=r.kdf.execute(n,e.keySize,e.ivSize,t.salt),r.iv=n.iv,p.decrypt.call(this,e,t,n.key,r)}})}(),function(){for(var e=n,t=e.lib.BlockCipher,r=e.algo,i=[],s=[],o=[],a=[],u=[],c=[],l=[],h=[],f=[],d=[],p=[],g=0;256>g;g++)p[g]=128>g?g<<1:g<<1^283;for(var y=0,b=0,g=0;256>g;g++){var v=b^b<<1^b<<2^b<<3^b<<4,v=v>>>8^255&v^99;i[y]=v,s[v]=y;var _=p[y],m=p[_],k=p[m],P=257*p[v]^16843008*v;o[y]=P<<24|P>>>8,a[y]=P<<16|P>>>16,u[y]=P<<8|P>>>24,c[y]=P,P=16843009*k^65537*m^257*_^16843008*y,l[v]=P<<24|P>>>8,h[v]=P<<16|P>>>16,f[v]=P<<8|P>>>24,d[v]=P,y?(y=_^p[p[p[k^_]]],b^=p[p[b]]):y=b=1}var S=[0,1,2,4,8,16,32,64,128,27,54],r=r.AES=t.extend({_doReset:function(){for(var e=this._key,t=e.words,n=e.sigBytes/4,e=4*((this._nRounds=n+6)+1),r=this._keySchedule=[],s=0;s>>24]<<24|i[o>>>16&255]<<16|i[o>>>8&255]<<8|i[255&o]):(o=o<<8|o>>>24,o=i[o>>>24]<<24|i[o>>>16&255]<<16|i[o>>>8&255]<<8|i[255&o],o^=S[s/n|0]<<24),r[s]=r[s-n]^o}for(t=this._invKeySchedule=[],n=0;nn||4>=s?o:l[i[o>>>24]]^h[i[o>>>16&255]]^f[i[o>>>8&255]]^d[i[255&o]]},encryptBlock:function(e,t){this._doCryptBlock(e,t,this._keySchedule,o,a,u,c,i)},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,h,f,d,s),n=e[t+1],e[t+1]=e[t+3],e[t+3]=n},_doCryptBlock:function(e,t,n,r,i,s,o,a){for(var u=this._nRounds,c=e[t]^n[0],l=e[t+1]^n[1],h=e[t+2]^n[2],f=e[t+3]^n[3],d=4,p=1;p>>24]^i[l>>>16&255]^s[h>>>8&255]^o[255&f]^n[d++],y=r[l>>>24]^i[h>>>16&255]^s[f>>>8&255]^o[255&c]^n[d++],b=r[h>>>24]^i[f>>>16&255]^s[c>>>8&255]^o[255&l]^n[d++],f=r[f>>>24]^i[c>>>16&255]^s[l>>>8&255]^o[255&h]^n[d++],c=g,l=y,h=b;g=(a[c>>>24]<<24|a[l>>>16&255]<<16|a[h>>>8&255]<<8|a[255&f])^n[d++],y=(a[l>>>24]<<24|a[h>>>16&255]<<16|a[f>>>8&255]<<8|a[255&c])^n[d++],b=(a[h>>>24]<<24|a[f>>>16&255]<<16|a[c>>>8&255]<<8|a[255&l])^n[d++],f=(a[f>>>24]<<24|a[c>>>16&255]<<16|a[l>>>8&255]<<8|a[255&h])^n[d++],e[t]=g,e[t+1]=y,e[t+2]=b,e[t+3]=f},keySize:8});e.AES=t._createHelper(r)}(),n.mode.ECB=function(){var e=n.lib.BlockCipherMode.extend();return e.Encryptor=e.extend({processBlock:function(e,t){this._cipher.encryptBlock(e,t)}}),e.Decryptor=e.extend({processBlock:function(e,t){this._cipher.decryptBlock(e,t)}}),e}(),e.exports=n},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var s=function(){function e(e,t){for(var n=0;n=o){var u={};u.category=y.default.PNRequestMessageCountExceededCategory,u.operation=e.operation,this._listenerManager.announceStatus(u)}i.forEach(function(e){var t=e.channel,r=e.subscriptionMatch,i=e.publishMetaData;if(t===r&&(r=null),a){if(n._dedupingManager.isDuplicate(e))return;n._dedupingManager.addEntry(e)}if(p.default.endsWith(e.channel,"-pnpres")){var s={};s.channel=null,s.subscription=null,s.actualChannel=null!=r?t:null,s.subscribedChannel=null!=r?r:t,t&&(s.channel=t.substring(0,t.lastIndexOf("-pnpres"))),r&&(s.subscription=r.substring(0,r.lastIndexOf("-pnpres"))),s.action=e.payload.action,s.state=e.payload.data,s.timetoken=i.publishTimetoken,s.occupancy=e.payload.occupancy,s.uuid=e.payload.uuid,s.timestamp=e.payload.timestamp,e.payload.join&&(s.join=e.payload.join),e.payload.leave&&(s.leave=e.payload.leave),e.payload.timeout&&(s.timeout=e.payload.timeout),n._listenerManager.announcePresence(s)}else{var o={};o.channel=null,o.subscription=null,o.actualChannel=null!=r?t:null,o.subscribedChannel=null!=r?r:t,o.channel=t,o.subscription=r,o.timetoken=i.publishTimetoken,o.publisher=e.issuingClientId,e.userMetadata&&(o.userMetadata=e.userMetadata),n._config.cipherKey?o.message=n._crypto.decrypt(e.payload):o.message=e.payload,n._listenerManager.announceMessage(o)}}),this._region=t.metadata.region,this._startSubscribeLoop()}},{key:"_stopSubscribeLoop",value:function(){this._subscribeCall&&("function"==typeof this._subscribeCall.abort&&this._subscribeCall.abort(),this._subscribeCall=null)}}]),e}();t.default=b,e.exports=t.default},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n=this._config.maximumCacheSize&&this.hashHistory.shift(),this.hashHistory.push(this.getKey(e))}},{key:"clearHistory",value:function(){this.hashHistory=[]}}]),e}();t.default=a,e.exports=t.default},function(e,t){"use strict";function n(e){var t=[];return Object.keys(e).forEach(function(e){return t.push(e)}),t}function r(e){return encodeURIComponent(e).replace(/[!~*'()]/g,function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()})}function i(e){return n(e).sort()}function s(e){return i(e).map(function(t){return t+"="+r(e[t])}).join("&")}function o(e,t){return-1!==e.indexOf(t,this.length-t.length)}function a(){var e=void 0,t=void 0;return{promise:new Promise(function(n,r){e=n,t=r}),reject:t,fulfill:e}}e.exports={signPamFromParams:s,endsWith:o,createPromise:a,encodeString:r}},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function o(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function a(e,t){return e.type=t,e.error=!0,e}function u(e){return a({message:e},"validationError")}function c(e,t,n){return e.usePost&&e.usePost(t,n)?e.postURL(t,n):e.getURL(t,n)}function l(e){if(e.sdkName)return e.sdkName;var t="PubNub-JS-"+e.sdkFamily;return e.partnerId&&(t+="-"+e.partnerId),t+="/"+e.getVersion()}function h(e,t,n){var r=e.config,i=e.crypto;n.timestamp=Math.floor((new Date).getTime()/1e3);var s=r.subscribeKey+"\n"+r.publishKey+"\n"+t+"\n";s+=g.default.signPamFromParams(n);var o=i.HMACSHA256(s);o=o.replace(/\+/g,"-"),o=o.replace(/\//g,"_"),n.signature=o}Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){var n=e.networking,r=e.config,i=null,s=null,o={};t.getOperation()===v.default.PNTimeOperation||t.getOperation()===v.default.PNChannelGroupsOperation?i=arguments.length<=2?void 0:arguments[2]:(o=arguments.length<=2?void 0:arguments[2],i=arguments.length<=3?void 0:arguments[3]),"undefined"==typeof Promise||i||(s=g.default.createPromise());var a=t.validateParams(e,o);if(!a){var f=t.prepareParams(e,o),p=c(t,e,o),y=void 0,b={url:p,operation:t.getOperation(),timeout:t.getRequestTimeout(e)};f.uuid=r.UUID,f.pnsdk=l(r),r.useInstanceId&&(f.instanceid=r.instanceId),r.useRequestId&&(f.requestid=d.default.createUUID()),t.isAuthSupported()&&r.getAuthKey()&&(f.auth=r.getAuthKey()),r.secretKey&&h(e,p,f);var m=function(n,r){if(n.error)return void(i?i(n):s&&s.reject(new _("PubNub call failed, check status for details",n)));var a=t.handleResponse(e,r,o);i?i(n,a):s&&s.fulfill(a)};if(t.usePost&&t.usePost(e,o)){var k=t.postPayload(e,o);y=n.POST(f,k,b,m)}else y=t.useDelete&&t.useDelete()?n.DELETE(f,b,m):n.GET(f,b,m);return t.getOperation()===v.default.PNSubscribeOperation?y:s?s.promise:void 0}return i?i(u(a)):s?(s.reject(new _("Validation failed, check status for details",u(a))),s.promise):void 0};var f=n(3),d=r(f),p=(n(5),n(15)),g=r(p),y=n(2),b=(r(y),n(13)),v=r(b),_=function(e){function t(e,n){i(this,t);var r=s(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return r.name=r.constructor.name,r.status=n,r.message=e,r}return o(t,e),t}(Error);e.exports=t.default},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return f.default.PNAddChannelsToGroupOperation}function s(e,t){var n=t.channels,r=t.channelGroup,i=e.config;return r?n&&0!==n.length?i.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channels":"Missing Channel Group"}function o(e,t){var n=t.channelGroup;return"/v1/channel-registration/sub-key/"+e.config.subscribeKey+"/channel-group/"+p.default.encodeString(n)}function a(e){return e.config.getTransactionTimeout()}function u(){return!0}function c(e,t){var n=t.channels;return{add:(void 0===n?[]:n).join(",")}}function l(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=s,t.getURL=o,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var h=(n(5),n(13)),f=r(h),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return f.default.PNRemoveChannelsFromGroupOperation}function s(e,t){var n=t.channels,r=t.channelGroup,i=e.config;return r?n&&0!==n.length?i.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channels":"Missing Channel Group"}function o(e,t){var n=t.channelGroup;return"/v1/channel-registration/sub-key/"+e.config.subscribeKey+"/channel-group/"+p.default.encodeString(n)}function a(e){return e.config.getTransactionTimeout()}function u(){return!0}function c(e,t){var n=t.channels;return{remove:(void 0===n?[]:n).join(",")}}function l(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=s,t.getURL=o,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var h=(n(5),n(13)),f=r(h),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return f.default.PNRemoveGroupOperation}function s(e,t){var n=t.channelGroup,r=e.config;return n?r.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channel Group"}function o(e,t){var n=t.channelGroup;return"/v1/channel-registration/sub-key/"+e.config.subscribeKey+"/channel-group/"+p.default.encodeString(n)+"/remove"}function a(){return!0}function u(e){return e.config.getTransactionTimeout()}function c(){return{}}function l(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=s,t.getURL=o,t.isAuthSupported=a,t.getRequestTimeout=u,t.prepareParams=c,t.handleResponse=l;var h=(n(5),n(13)),f=r(h),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(){return h.default.PNChannelGroupsOperation}function i(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function s(e){return"/v1/channel-registration/sub-key/"+e.config.subscribeKey+"/channel-group"}function o(e){return e.config.getTransactionTimeout()}function a(){return!0}function u(){return{}}function c(e,t){return{groups:t.payload.groups}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=s,t.getRequestTimeout=o,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),h=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return f.default.PNChannelsForGroupOperation}function s(e,t){var n=t.channelGroup,r=e.config;return n?r.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channel Group"}function o(e,t){var n=t.channelGroup;return"/v1/channel-registration/sub-key/"+e.config.subscribeKey+"/channel-group/"+p.default.encodeString(n)}function a(e){return e.config.getTransactionTimeout()}function u(){return!0}function c(){return{}}function l(e,t){return{channels:t.payload.channels}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=s,t.getURL=o,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var h=(n(5),n(13)),f=r(h),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(){return h.default.PNPushNotificationEnabledChannelsOperation}function i(e,t){var n=t.device,r=t.pushGateway,i=t.channels,s=e.config;return n?r?i&&0!==i.length?s.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channels":"Missing GW Type (pushGateway: gcm or apns)":"Missing Device ID (device)"}function s(e,t){var n=t.device;return"/v1/push/sub-key/"+e.config.subscribeKey+"/devices/"+n}function o(e){return e.config.getTransactionTimeout()}function a(){return!0}function u(e,t){var n=t.pushGateway,r=t.channels;return{type:n,add:(void 0===r?[]:r).join(",")}}function c(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=s,t.getRequestTimeout=o,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),h=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(){return h.default.PNPushNotificationEnabledChannelsOperation}function i(e,t){var n=t.device,r=t.pushGateway,i=t.channels,s=e.config;return n?r?i&&0!==i.length?s.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channels":"Missing GW Type (pushGateway: gcm or apns)":"Missing Device ID (device)"}function s(e,t){var n=t.device;return"/v1/push/sub-key/"+e.config.subscribeKey+"/devices/"+n}function o(e){return e.config.getTransactionTimeout()}function a(){return!0}function u(e,t){var n=t.pushGateway,r=t.channels;return{type:n,remove:(void 0===r?[]:r).join(",")}}function c(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=s,t.getRequestTimeout=o,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),h=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(){return h.default.PNPushNotificationEnabledChannelsOperation}function i(e,t){var n=t.device,r=t.pushGateway,i=e.config;return n?r?i.subscribeKey?void 0:"Missing Subscribe Key":"Missing GW Type (pushGateway: gcm or apns)":"Missing Device ID (device)"}function s(e,t){var n=t.device;return"/v1/push/sub-key/"+e.config.subscribeKey+"/devices/"+n}function o(e){return e.config.getTransactionTimeout()}function a(){return!0}function u(e,t){return{type:t.pushGateway}}function c(e,t){return{channels:t}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=s,t.getRequestTimeout=o,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),h=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(){return h.default.PNRemoveAllPushNotificationsOperation}function i(e,t){var n=t.device,r=t.pushGateway,i=e.config;return n?r?i.subscribeKey?void 0:"Missing Subscribe Key":"Missing GW Type (pushGateway: gcm or apns)":"Missing Device ID (device)"}function s(e,t){var n=t.device;return"/v1/push/sub-key/"+e.config.subscribeKey+"/devices/"+n+"/remove"}function o(e){return e.config.getTransactionTimeout()}function a(){return!0}function u(e,t){return{type:t.pushGateway}}function c(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=s,t.getRequestTimeout=o,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),h=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return f.default.PNUnsubscribeOperation}function s(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function o(e,t){var n=e.config,r=t.channels,i=void 0===r?[]:r,s=i.length>0?i.join(","):",";return"/v2/presence/sub-key/"+n.subscribeKey+"/channel/"+p.default.encodeString(s)+"/leave"}function a(e){return e.config.getTransactionTimeout()}function u(){return!0}function c(e,t){var n=t.channelGroups,r=void 0===n?[]:n,i={};return r.length>0&&(i["channel-group"]=r.join(",")),i}function l(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=s,t.getURL=o,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var h=(n(5),n(13)),f=r(h),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(){return h.default.PNWhereNowOperation}function i(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function s(e,t){var n=e.config,r=t.uuid,i=void 0===r?n.UUID:r;return"/v2/presence/sub-key/"+n.subscribeKey+"/uuid/"+i}function o(e){return e.config.getTransactionTimeout()}function a(){return!0}function u(){return{}}function c(e,t){return t.payload?{channels:t.payload.channels}:{channels:[]}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=s,t.getRequestTimeout=o,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),h=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return f.default.PNHeartbeatOperation}function s(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function o(e,t){var n=e.config,r=t.channels,i=void 0===r?[]:r,s=i.length>0?i.join(","):",";return"/v2/presence/sub-key/"+n.subscribeKey+"/channel/"+p.default.encodeString(s)+"/heartbeat"}function a(){return!0}function u(e){return e.config.getTransactionTimeout()}function c(e,t){var n=t.channelGroups,r=void 0===n?[]:n,i=t.state,s=void 0===i?{}:i,o=e.config,a={};return r.length>0&&(a["channel-group"]=r.join(",")),a.state=JSON.stringify(s),a.heartbeat=o.getPresenceTimeout(),a}function l(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=s,t.getURL=o,t.isAuthSupported=a,t.getRequestTimeout=u,t.prepareParams=c,t.handleResponse=l;var h=(n(5),n(13)),f=r(h),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return f.default.PNGetStateOperation}function s(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function o(e,t){var n=e.config,r=t.uuid,i=void 0===r?n.UUID:r,s=t.channels,o=void 0===s?[]:s,a=o.length>0?o.join(","):",";return"/v2/presence/sub-key/"+n.subscribeKey+"/channel/"+p.default.encodeString(a)+"/uuid/"+i}function a(e){return e.config.getTransactionTimeout()}function u(){return!0}function c(e,t){var n=t.channelGroups,r=void 0===n?[]:n,i={};return r.length>0&&(i["channel-group"]=r.join(",")),i}function l(e,t,n){var r=n.channels,i=void 0===r?[]:r,s=n.channelGroups,o=void 0===s?[]:s,a={};return 1===i.length&&0===o.length?a[i[0]]=t.payload:a=t.payload,{channels:a}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=s,t.getURL=o,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var h=(n(5),n(13)),f=r(h),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return f.default.PNSetStateOperation}function s(e,t){var n=e.config,r=t.state,i=t.channels,s=void 0===i?[]:i,o=t.channelGroups,a=void 0===o?[]:o;return r?n.subscribeKey?0===s.length&&0===a.length?"Please provide a list of channels and/or channel-groups":void 0:"Missing Subscribe Key":"Missing State"}function o(e,t){var n=e.config,r=t.channels,i=void 0===r?[]:r,s=i.length>0?i.join(","):",";return"/v2/presence/sub-key/"+n.subscribeKey+"/channel/"+p.default.encodeString(s)+"/uuid/"+n.UUID+"/data"}function a(e){return e.config.getTransactionTimeout()}function u(){return!0}function c(e,t){var n=t.state,r=t.channelGroups,i=void 0===r?[]:r,s={};return s.state=JSON.stringify(n),i.length>0&&(s["channel-group"]=i.join(",")),s}function l(e,t){return{state:t.payload}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=s,t.getURL=o,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var h=(n(5),n(13)),f=r(h),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return f.default.PNHereNowOperation}function s(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function o(e,t){var n=e.config,r=t.channels,i=void 0===r?[]:r,s=t.channelGroups,o=void 0===s?[]:s,a="/v2/presence/sub-key/"+n.subscribeKey;if(i.length>0||o.length>0){var u=i.length>0?i.join(","):",";a+="/channel/"+p.default.encodeString(u)}return a}function a(e){return e.config.getTransactionTimeout()}function u(){return!0}function c(e,t){var n=t.channelGroups,r=void 0===n?[]:n,i=t.includeUUIDs,s=void 0===i||i,o=t.includeState,a=void 0!==o&&o,u={};return s||(u.disable_uuids=1),a&&(u.state=1),r.length>0&&(u["channel-group"]=r.join(",")),u}function l(e,t,n){var r=n.channels,i=void 0===r?[]:r,s=n.channelGroups,o=void 0===s?[]:s,a=n.includeUUIDs,u=void 0===a||a,c=n.includeState,l=void 0!==c&&c;return i.length>1||o.length>0||0===o.length&&0===i.length?function(){var e={};return e.totalChannels=t.payload.total_channels,e.totalOccupancy=t.payload.total_occupancy,e.channels={},Object.keys(t.payload.channels).forEach(function(n){var r=t.payload.channels[n],i=[];return e.channels[n]={occupants:i,name:n,occupancy:r.occupancy},u&&r.uuids.forEach(function(e){l?i.push({state:e.state,uuid:e.uuid}):i.push({state:null,uuid:e})}),e}),e}():function(){var e={},n=[];return e.totalChannels=1,e.totalOccupancy=t.occupancy,e.channels={},e.channels[i[0]]={occupants:n,name:i[0],occupancy:t.occupancy},u&&t.uuids&&t.uuids.forEach(function(e){l?n.push({state:e.state,uuid:e.uuid}):n.push({state:null,uuid:e})}),e}()}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=s,t.getURL=o,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var h=(n(5),n(13)),f=r(h),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(){return h.default.PNAccessManagerAudit}function i(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function s(e){return"/v2/auth/audit/sub-key/"+e.config.subscribeKey}function o(e){return e.config.getTransactionTimeout()}function a(){return!1}function u(e,t){var n=t.channel,r=t.channelGroup,i=t.authKeys,s=void 0===i?[]:i,o={};return n&&(o.channel=n),r&&(o["channel-group"]=r),s.length>0&&(o.auth=s.join(",")),o}function c(e,t){return t.payload}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=s,t.getRequestTimeout=o,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),h=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(){return h.default.PNAccessManagerGrant}function i(e){var t=e.config;return t.subscribeKey?t.publishKey?t.secretKey?void 0:"Missing Secret Key":"Missing Publish Key":"Missing Subscribe Key"}function s(e){return"/v2/auth/grant/sub-key/"+e.config.subscribeKey}function o(e){return e.config.getTransactionTimeout()}function a(){return!1}function u(e,t){var n=t.channels,r=void 0===n?[]:n,i=t.channelGroups,s=void 0===i?[]:i,o=t.ttl,a=t.read,u=void 0!==a&&a,c=t.write,l=void 0!==c&&c,h=t.manage,f=void 0!==h&&h,d=t.authKeys,p=void 0===d?[]:d,g={};return g.r=u?"1":"0",g.w=l?"1":"0",g.m=f?"1":"0",r.length>0&&(g.channel=r.join(",")),s.length>0&&(g["channel-group"]=s.join(",")),p.length>0&&(g.auth=p.join(",")),(o||0===o)&&(g.ttl=o),g}function c(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=s,t.getRequestTimeout=o,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),h=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){var n=e.crypto,r=e.config,i=JSON.stringify(t);return r.cipherKey&&(i=n.encrypt(i),i=JSON.stringify(i)),i}function s(){return b.default.PNPublishOperation}function o(e,t){var n=e.config,r=t.message;return t.channel?r?n.subscribeKey?void 0:"Missing Subscribe Key":"Missing Message":"Missing Channel"}function a(e,t){var n=t.sendByPost;return void 0!==n&&n}function u(e,t){var n=e.config,r=t.channel,s=t.message,o=i(e,s);return"/publish/"+n.publishKey+"/"+n.subscribeKey+"/0/"+_.default.encodeString(r)+"/0/"+_.default.encodeString(o)}function c(e,t){var n=e.config,r=t.channel;return"/publish/"+n.publishKey+"/"+n.subscribeKey+"/0/"+_.default.encodeString(r)+"/0"}function l(e){return e.config.getTransactionTimeout()}function h(){return!0}function f(e,t){return i(e,t.message)}function d(e,t){var n=t.meta,r=t.replicate,i=void 0===r||r,s=t.storeInHistory,o=t.ttl,a={};return null!=s&&(a.store=s?"1":"0"),o&&(a.ttl=o),!1===i&&(a.norep="true"),n&&"object"===(void 0===n?"undefined":g(n))&&(a.meta=JSON.stringify(n)),a}function p(e,t){return{timetoken:t[2]}}Object.defineProperty(t,"__esModule",{value:!0}) -;var g="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};t.getOperation=s,t.validateParams=o,t.usePost=a,t.getURL=u,t.postURL=c,t.getRequestTimeout=l,t.isAuthSupported=h,t.postPayload=f,t.prepareParams=d,t.handleResponse=p;var y=(n(5),n(13)),b=r(y),v=n(15),_=r(v)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){var n=e.config,r=e.crypto;if(!n.cipherKey)return t;try{return r.decrypt(t)}catch(e){return t}}function s(){return d.default.PNHistoryOperation}function o(e,t){var n=t.channel,r=e.config;return n?r.subscribeKey?void 0:"Missing Subscribe Key":"Missing channel"}function a(e,t){var n=t.channel;return"/v2/history/sub-key/"+e.config.subscribeKey+"/channel/"+g.default.encodeString(n)}function u(e){return e.config.getTransactionTimeout()}function c(){return!0}function l(e,t){var n=t.start,r=t.end,i=t.reverse,s=t.count,o=void 0===s?100:s,a=t.stringifiedTimeToken,u=void 0!==a&&a,c={include_token:"true"};return c.count=o,n&&(c.start=n),r&&(c.end=r),u&&(c.string_message_token="true"),null!=i&&(c.reverse=i.toString()),c}function h(e,t){var n={messages:[],startTimeToken:t[1],endTimeToken:t[2]};return t[0].forEach(function(t){var r={timetoken:t.timetoken,entry:i(e,t.message)};n.messages.push(r)}),n}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=s,t.validateParams=o,t.getURL=a,t.getRequestTimeout=u,t.isAuthSupported=c,t.prepareParams=l,t.handleResponse=h;var f=(n(5),n(13)),d=r(f),p=n(15),g=r(p)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return d.default.PNDeleteMessagesOperation}function s(e,t){var n=t.channel,r=e.config;return n?r.subscribeKey?void 0:"Missing Subscribe Key":"Missing channel"}function o(){return!0}function a(e,t){var n=t.channel,r=t.start,i=t.end,s=e.config,o="";return r&&(o="?start="+r),i&&(o+=(""!==o?"&":"?")+"end="+i),"/v3/history/sub-key/"+s.subscribeKey+"/channel/"+g.default.encodeString(n)+o}function u(e){return e.config.getTransactionTimeout()}function c(){return!0}function l(e,t){var n=t.start,r=t.end,i={};return n&&(i.start=n),r&&(i.end=r),{}}function h(e,t){return t.payload}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=s,t.useDelete=o,t.getURL=a,t.getRequestTimeout=u,t.isAuthSupported=c,t.prepareParams=l,t.handleResponse=h;var f=(n(5),n(13)),d=r(f),p=n(15),g=r(p)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){var n=e.config,r=e.crypto;if(!n.cipherKey)return t;try{return r.decrypt(t)}catch(e){return t}}function s(){return d.default.PNFetchMessagesOperation}function o(e,t){var n=t.channels,r=e.config;return n&&0!==n.length?r.subscribeKey?void 0:"Missing Subscribe Key":"Missing channels"}function a(e,t){var n=t.channels,r=void 0===n?[]:n,i=e.config,s=r.length>0?r.join(","):",";return"/v3/history/sub-key/"+i.subscribeKey+"/channel/"+g.default.encodeString(s)}function u(e){return e.config.getTransactionTimeout()}function c(){return!0}function l(e,t){var n=t.start,r=t.end,i=t.count,s={};return i&&(s.max=i),n&&(s.start=n),r&&(s.end=r),s}function h(e,t){var n={channels:{}};return Object.keys(t.channels||{}).forEach(function(r){n.channels[r]=[],(t.channels[r]||[]).forEach(function(t){var s={};s.channel=r,s.subscription=null,s.timetoken=t.timetoken,s.message=i(e,t.message),n.channels[r].push(s)})}),n}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=s,t.validateParams=o,t.getURL=a,t.getRequestTimeout=u,t.isAuthSupported=c,t.prepareParams=l,t.handleResponse=h;var f=(n(5),n(13)),d=r(f),p=n(15),g=r(p)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return f.default.PNSubscribeOperation}function s(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function o(e,t){var n=e.config,r=t.channels,i=void 0===r?[]:r,s=i.length>0?i.join(","):",";return"/v2/subscribe/"+n.subscribeKey+"/"+p.default.encodeString(s)+"/0"}function a(e){return e.config.getSubscribeTimeout()}function u(){return!0}function c(e,t){var n=e.config,r=t.channelGroups,i=void 0===r?[]:r,s=t.timetoken,o=t.filterExpression,a=t.region,u={heartbeat:n.getPresenceTimeout()};return i.length>0&&(u["channel-group"]=i.join(",")),o&&o.length>0&&(u["filter-expr"]=o),s&&(u.tt=s),a&&(u.tr=a),u}function l(e,t){var n=[];t.m.forEach(function(e){var t={publishTimetoken:e.p.t,region:e.p.r},r={shard:parseInt(e.a,10),subscriptionMatch:e.b,channel:e.c,payload:e.d,flags:e.f,issuingClientId:e.i,subscribeKey:e.k,originationTimetoken:e.o,userMetadata:e.u,publishMetaData:t};n.push(r)});var r={timetoken:t.t.t,region:t.t.r};return{messages:n,metadata:r}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=s,t.getURL=o,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var h=(n(5),n(13)),f=r(h),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var s=function(){function e(e,t){for(var n=0;n=this._maxSubDomain&&(this._currentSubDomain=1),e=this._currentSubDomain.toString(),this._providedFQDN.replace("pubsub","ps"+e)}},{key:"shiftStandardOrigin",value:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return this._standardOrigin=this.nextOrigin(e),this._standardOrigin}},{key:"getStandardOrigin",value:function(){return this._standardOrigin}},{key:"POST",value:function(e,t,n,r){return this._modules.post(e,t,n,r)}},{key:"GET",value:function(e,t,n){return this._modules.get(e,t,n)}},{key:"DELETE",value:function(e,t,n){return this._modules.del(e,t,n)}},{key:"_detectErrorCategory",value:function(e){if("ENOTFOUND"===e.code)return u.default.PNNetworkIssuesCategory;if("ECONNREFUSED"===e.code)return u.default.PNNetworkIssuesCategory;if("ECONNRESET"===e.code)return u.default.PNNetworkIssuesCategory;if("EAI_AGAIN"===e.code)return u.default.PNNetworkIssuesCategory;if(0===e.status||e.hasOwnProperty("status")&&void 0===e.status)return u.default.PNNetworkIssuesCategory;if(e.timeout)return u.default.PNTimeoutCategory;if(e.response){if(e.response.badRequest)return u.default.PNBadRequestCategory;if(e.response.forbidden)return u.default.PNAccessDeniedCategory}return u.default.PNUnknownCategory}}]),e}());t.default=c,e.exports=t.default},function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={get:function(e){try{return localStorage.getItem(e)}catch(e){return null}},set:function(e,t){try{return localStorage.setItem(e,t)}catch(e){return null}}},e.exports=t.default},function(e,t,n){"use strict";function r(e){var t=(new Date).getTime(),n=(new Date).toISOString(),r=function(){return console&&console.log?console:window&&window.console&&window.console.log?window.console:console}();r.log("<<<<<"),r.log("["+n+"]","\n",e.url,"\n",e.qs),r.log("-----"),e.on("response",function(n){var i=(new Date).getTime(),s=i-t,o=(new Date).toISOString();r.log(">>>>>>"),r.log("["+o+" / "+s+"]","\n",e.url,"\n",e.qs,"\n",n.text),r.log("-----")})}function i(e,t,n){var i=this;return this._config.logVerbosity&&(e=e.use(r)),this._config.proxy&&this._modules.proxy&&(e=this._modules.proxy.call(this,e)),this._config.keepAlive&&this._modules.keepAlive&&(e=this._modules.keepAlive(e)),e.timeout(t.timeout).end(function(e,r){var s={};if(s.error=null!==e,s.operation=t.operation,r&&r.status&&(s.statusCode=r.status),e)return s.errorData=e,s.category=i._detectErrorCategory(e),n(s,null);var o=JSON.parse(r.text);return o.error&&1===o.error&&o.status&&o.message&&o.service?(s.errorData=o,s.statusCode=o.status,s.error=!0,s.category=i._detectErrorCategory(s),n(s,null)):n(s,o)})}function s(e,t,n){var r=c.default.get(this.getStandardOrigin()+t.url).query(e);return i.call(this,r,t,n)}function o(e,t,n,r){var s=c.default.post(this.getStandardOrigin()+n.url).query(e).send(t);return i.call(this,s,n,r)}function a(e,t,n){var r=c.default.delete(this.getStandardOrigin()+t.url).query(e);return i.call(this,r,t,n)}Object.defineProperty(t,"__esModule",{value:!0}),t.get=s,t.post=o,t.del=a;var u=n(42),c=function(e){return e&&e.__esModule?e:{default:e}}(u);n(5)},function(e,t,n){function r(){}function i(e){if(!b(e))return e;var t=[];for(var n in e)s(t,n,e[n]);return t.join("&")}function s(e,t,n){if(null!=n)if(Array.isArray(n))n.forEach(function(n){s(e,t,n)});else if(b(n))for(var r in n)s(e,t+"["+r+"]",n[r]);else e.push(encodeURIComponent(t)+"="+encodeURIComponent(n));else null===n&&e.push(encodeURIComponent(t))}function o(e){for(var t,n,r={},i=e.split("&"),s=0,o=i.length;s=300)&&(r=new Error(t.statusText||"Unsuccessful HTTP response"),r.original=e,r.response=t,r.status=t.status)}catch(e){r=e}r?n.callback(r,t):n.callback(null,t)})}function d(e,t){var n=v("DELETE",e);return t&&n.end(t),n}var p;"undefined"!=typeof window?p=window:"undefined"!=typeof self?p=self:(console.warn("Using browser-only version of superagent in non-browser environment"),p=this);var g=n(43),y=n(44),b=n(45),v=e.exports=n(46).bind(null,f);v.getXHR=function(){if(!(!p.XMLHttpRequest||p.location&&"file:"==p.location.protocol&&p.ActiveXObject))return new XMLHttpRequest;try{return new ActiveXObject("Microsoft.XMLHTTP")}catch(e){}try{return new ActiveXObject("Msxml2.XMLHTTP.6.0")}catch(e){}try{return new ActiveXObject("Msxml2.XMLHTTP.3.0")}catch(e){}try{return new ActiveXObject("Msxml2.XMLHTTP")}catch(e){}throw Error("Browser-only verison of superagent could not find XHR")};var _="".trim?function(e){return e.trim()}:function(e){return e.replace(/(^\s*|\s*$)/g,"")};v.serializeObject=i,v.parseString=o,v.types={html:"text/html",json:"application/json",xml:"application/xml",urlencoded:"application/x-www-form-urlencoded",form:"application/x-www-form-urlencoded","form-data":"application/x-www-form-urlencoded"},v.serialize={"application/x-www-form-urlencoded":i,"application/json":JSON.stringify},v.parse={"application/x-www-form-urlencoded":o,"application/json":JSON.parse},h.prototype.get=function(e){return this.header[e.toLowerCase()]},h.prototype._setHeaderProperties=function(e){var t=this.header["content-type"]||"";this.type=c(t);var n=l(t);for(var r in n)this[r]=n[r]},h.prototype._parseBody=function(e){var t=v.parse[this.type];return!t&&u(this.type)&&(t=v.parse["application/json"]),t&&e&&(e.length||e instanceof Object)?t(e):null},h.prototype._setStatusProperties=function(e){1223===e&&(e=204);var t=e/100|0;this.status=this.statusCode=e,this.statusType=t,this.info=1==t,this.ok=2==t,this.clientError=4==t,this.serverError=5==t,this.error=(4==t||5==t)&&this.toError(),this.accepted=202==e,this.noContent=204==e,this.badRequest=400==e,this.unauthorized=401==e,this.notAcceptable=406==e,this.notFound=404==e,this.forbidden=403==e},h.prototype.toError=function(){var e=this.req,t=e.method,n=e.url,r="cannot "+t+" "+n+" ("+this.status+")",i=new Error(r);return i.status=this.status,i.method=t,i.url=n,i},v.Response=h,g(f.prototype);for(var m in y)f.prototype[m]=y[m];f.prototype.type=function(e){return this.set("Content-Type",v.types[e]||e),this},f.prototype.responseType=function(e){return this._responseType=e,this},f.prototype.accept=function(e){return this.set("Accept",v.types[e]||e),this},f.prototype.auth=function(e,t,n){switch(n||(n={type:"basic"}),n.type){case"basic":var r=btoa(e+":"+t);this.set("Authorization","Basic "+r);break;case"auto":this.username=e,this.password=t}return this},f.prototype.query=function(e){return"string"!=typeof e&&(e=i(e)),e&&this._query.push(e),this},f.prototype.attach=function(e,t,n){return this._getFormData().append(e,t,n||t.name),this},f.prototype._getFormData=function(){return this._formData||(this._formData=new p.FormData),this._formData},f.prototype.callback=function(e,t){var n=this._callback;this.clearTimeout(),n(e,t)},f.prototype.crossDomainError=function(){var e=new Error("Request has been terminated\nPossible causes: the network is offline, Origin is not allowed by Access-Control-Allow-Origin, the page is being unloaded, etc.");e.crossDomain=!0,e.status=this.status,e.method=this.method,e.url=this.url,this.callback(e)},f.prototype._timeoutError=function(){var e=this._timeout,t=new Error("timeout of "+e+"ms exceeded");t.timeout=e,this.callback(t)},f.prototype._appendQueryString=function(){var e=this._query.join("&");e&&(this.url+=~this.url.indexOf("?")?"&"+e:"?"+e)},f.prototype.end=function(e){var t=this,n=this.xhr=v.getXHR(),i=this._timeout,s=this._formData||this._data;this._callback=e||r,n.onreadystatechange=function(){if(4==n.readyState){var e;try{e=n.status}catch(t){e=0}if(0==e){if(t.timedout)return t._timeoutError();if(t._aborted)return;return t.crossDomainError()}t.emit("end")}};var o=function(e,n){n.total>0&&(n.percent=n.loaded/n.total*100),n.direction=e,t.emit("progress",n)};if(this.hasListeners("progress"))try{n.onprogress=o.bind(null,"download"),n.upload&&(n.upload.onprogress=o.bind(null,"upload"))}catch(e){}if(i&&!this._timer&&(this._timer=setTimeout(function(){t.timedout=!0,t.abort()},i)),this._appendQueryString(),this.username&&this.password?n.open(this.method,this.url,!0,this.username,this.password):n.open(this.method,this.url,!0),this._withCredentials&&(n.withCredentials=!0),"GET"!=this.method&&"HEAD"!=this.method&&"string"!=typeof s&&!this._isHost(s)){var a=this._header["content-type"],c=this._serializer||v.serialize[a?a.split(";")[0]:""];!c&&u(a)&&(c=v.serialize["application/json"]),c&&(s=c(s))}for(var l in this.header)null!=this.header[l]&&n.setRequestHeader(l,this.header[l]);return this._responseType&&(n.responseType=this._responseType),this.emit("request",this),n.send(void 0!==s?s:null),this},v.Request=f,v.get=function(e,t,n){var r=v("GET",e);return"function"==typeof t&&(n=t,t=null),t&&r.query(t),n&&r.end(n),r},v.head=function(e,t,n){var r=v("HEAD",e);return"function"==typeof t&&(n=t,t=null),t&&r.send(t),n&&r.end(n),r},v.options=function(e,t,n){var r=v("OPTIONS",e);return"function"==typeof t&&(n=t,t=null),t&&r.send(t),n&&r.end(n),r},v.del=d,v.delete=d,v.patch=function(e,t,n){var r=v("PATCH",e);return"function"==typeof t&&(n=t,t=null),t&&r.send(t),n&&r.end(n),r},v.post=function(e,t,n){var r=v("POST",e);return"function"==typeof t&&(n=t,t=null),t&&r.send(t),n&&r.end(n),r},v.put=function(e,t,n){var r=v("PUT",e);return"function"==typeof t&&(n=t,t=null),t&&r.send(t),n&&r.end(n),r}},function(e,t,n){function r(e){if(e)return i(e)}function i(e){for(var t in r.prototype)e[t]=r.prototype[t];return e}e.exports=r,r.prototype.on=r.prototype.addEventListener=function(e,t){return this._callbacks=this._callbacks||{},(this._callbacks["$"+e]=this._callbacks["$"+e]||[]).push(t),this},r.prototype.once=function(e,t){function n(){this.off(e,n),t.apply(this,arguments)}return n.fn=t,this.on(e,n),this},r.prototype.off=r.prototype.removeListener=r.prototype.removeAllListeners=r.prototype.removeEventListener=function(e,t){if(this._callbacks=this._callbacks||{},0==arguments.length)return this._callbacks={},this;var n=this._callbacks["$"+e];if(!n)return this;if(1==arguments.length)return delete this._callbacks["$"+e],this;for(var r,i=0;i>>2]|=(n[i>>>2]>>>24-i%4*8&255)<<24-(r+i)%4*8;else if(65535>>2]=n[i>>>2];else t.push.apply(t,n);return this.sigBytes+=e,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=s.clone.call(this);return e.words=this.words.slice(0),e},random:function(t){for(var n=[],r=0;r>>2]>>>24-r%4*8&255;n.push((i>>>4).toString(16)),n.push((15&i).toString(16))}return n.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 o.init(n,t/2)}},c=a.Latin1={stringify:function(e){var t=e.words;e=e.sigBytes;for(var n=[],r=0;r>>2]>>>24-r%4*8&255));return n.join("")},parse:function(e){for(var t=e.length,n=[],r=0;r>>2]|=(255&e.charCodeAt(r))<<24-r%4*8;return new o.init(n,t)}},l=a.Utf8={stringify:function(e){try{return decodeURIComponent(escape(c.stringify(e)))}catch(e){throw Error("Malformed UTF-8 data")}},parse:function(e){return c.parse(unescape(encodeURIComponent(e)))}},h=r.BufferedBlockAlgorithm=s.extend({reset:function(){this._data=new o.init,this._nDataBytes=0},_append:function(e){"string"==typeof e&&(e=l.parse(e)),this._data.concat(e),this._nDataBytes+=e.sigBytes},_process:function(t){var n=this._data,r=n.words,i=n.sigBytes,s=this.blockSize,a=i/(4*s),a=t?e.ceil(a):e.max((0|a)-this._minBufferSize,0);if(t=a*s,i=e.min(4*t,i),t){for(var u=0;ul;){var h;e:{h=c;for(var f=e.sqrt(h),d=2;d<=f;d++)if(!(h%d)){h=!1;break e}h=!0}h&&(8>l&&(o[l]=u(e.pow(c,.5))),a[l]=u(e.pow(c,1/3)),l++),c++}var p=[],r=r.SHA256=s.extend({_doReset:function(){this._hash=new i.init(o.slice(0))},_doProcessBlock:function(e,t){for(var n=this._hash.words,r=n[0],i=n[1],s=n[2],o=n[3],u=n[4],c=n[5],l=n[6],h=n[7],f=0;64>f;f++){if(16>f)p[f]=0|e[t+f];else{var d=p[f-15],g=p[f-2];p[f]=((d<<25|d>>>7)^(d<<14|d>>>18)^d>>>3)+p[f-7]+((g<<15|g>>>17)^(g<<13|g>>>19)^g>>>10)+p[f-16]}d=h+((u<<26|u>>>6)^(u<<21|u>>>11)^(u<<7|u>>>25))+(u&c^~u&l)+a[f]+p[f],g=((r<<30|r>>>2)^(r<<19|r>>>13)^(r<<10|r>>>22))+(r&i^r&s^i&s),h=l,l=c,c=u,u=o+d|0,o=s,s=i,i=r,r=d+g|0}n[0]=n[0]+r|0,n[1]=n[1]+i|0,n[2]=n[2]+s|0,n[3]=n[3]+o|0,n[4]=n[4]+u|0,n[5]=n[5]+c|0,n[6]=n[6]+l|0,n[7]=n[7]+h|0},_doFinalize:function(){var t=this._data,n=t.words,r=8*this._nDataBytes,i=8*t.sigBytes;return n[i>>>5]|=128<<24-i%32,n[14+(i+64>>>9<<4)]=e.floor(r/4294967296),n[15+(i+64>>>9<<4)]=r,t.sigBytes=4*n.length,this._process(),this._hash},clone:function(){var e=s.clone.call(this);return e._hash=this._hash.clone(),e}});t.SHA256=s._createHelper(r),t.HmacSHA256=s._createHmacHelper(r)}(Math),function(){var e=n,t=e.enc.Utf8;e.algo.HMAC=e.lib.Base.extend({init:function(e,n){e=this._hasher=new e.init,"string"==typeof n&&(n=t.parse(n));var r=e.blockSize,i=4*r;n.sigBytes>i&&(n=e.finalize(n)),n.clamp();for(var s=this._oKey=n.clone(),o=this._iKey=n.clone(),a=s.words,u=o.words,c=0;c>>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,o=0;4>o&&i+.75*o>>6*(3-o)&63));if(t=r.charAt(64))for(;e.length%4;)e.push(t);return e.join("")},parse:function(e){var n=e.length,r=this._map,i=r.charAt(64);i&&-1!=(i=e.indexOf(i))&&(n=i);for(var i=[],s=0,o=0;o>>6-o%4*2;i[s>>>2]|=(a|u)<<24-s%4*8,s++}return t.create(i,s)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="}}(),function(e){function t(e,t,n,r,i,s,o){return((e=e+(t&n|~t&r)+i+o)<>>32-s)+t}function r(e,t,n,r,i,s,o){return((e=e+(t&r|n&~r)+i+o)<>>32-s)+t}function i(e,t,n,r,i,s,o){return((e=e+(t^n^r)+i+o)<>>32-s)+t}function s(e,t,n,r,i,s,o){return((e=e+(n^(t|~r))+i+o)<>>32-s)+t}for(var o=n,a=o.lib,u=a.WordArray,c=a.Hasher,a=o.algo,l=[],h=0;64>h;h++)l[h]=4294967296*e.abs(e.sin(h+1))|0;a=a.MD5=c.extend({_doReset:function(){this._hash=new u.init([1732584193,4023233417,2562383102,271733878])},_doProcessBlock:function(e,n){for(var o=0;16>o;o++){var a=n+o,u=e[a];e[a]=16711935&(u<<8|u>>>24)|4278255360&(u<<24|u>>>8)}var o=this._hash.words,a=e[n+0],u=e[n+1],c=e[n+2],h=e[n+3],f=e[n+4],d=e[n+5],p=e[n+6],g=e[n+7],y=e[n+8],b=e[n+9],v=e[n+10],_=e[n+11],m=e[n+12],k=e[n+13],P=e[n+14],S=e[n+15],O=o[0],w=o[1],C=o[2],T=o[3],O=t(O,w,C,T,a,7,l[0]),T=t(T,O,w,C,u,12,l[1]),C=t(C,T,O,w,c,17,l[2]),w=t(w,C,T,O,h,22,l[3]),O=t(O,w,C,T,f,7,l[4]),T=t(T,O,w,C,d,12,l[5]),C=t(C,T,O,w,p,17,l[6]),w=t(w,C,T,O,g,22,l[7]),O=t(O,w,C,T,y,7,l[8]),T=t(T,O,w,C,b,12,l[9]),C=t(C,T,O,w,v,17,l[10]),w=t(w,C,T,O,_,22,l[11]),O=t(O,w,C,T,m,7,l[12]),T=t(T,O,w,C,k,12,l[13]),C=t(C,T,O,w,P,17,l[14]),w=t(w,C,T,O,S,22,l[15]),O=r(O,w,C,T,u,5,l[16]),T=r(T,O,w,C,p,9,l[17]),C=r(C,T,O,w,_,14,l[18]),w=r(w,C,T,O,a,20,l[19]),O=r(O,w,C,T,d,5,l[20]),T=r(T,O,w,C,v,9,l[21]),C=r(C,T,O,w,S,14,l[22]),w=r(w,C,T,O,f,20,l[23]),O=r(O,w,C,T,b,5,l[24]),T=r(T,O,w,C,P,9,l[25]),C=r(C,T,O,w,h,14,l[26]),w=r(w,C,T,O,y,20,l[27]),O=r(O,w,C,T,k,5,l[28]),T=r(T,O,w,C,c,9,l[29]),C=r(C,T,O,w,g,14,l[30]),w=r(w,C,T,O,m,20,l[31]),O=i(O,w,C,T,d,4,l[32]),T=i(T,O,w,C,y,11,l[33]),C=i(C,T,O,w,_,16,l[34]),w=i(w,C,T,O,P,23,l[35]),O=i(O,w,C,T,u,4,l[36]),T=i(T,O,w,C,f,11,l[37]),C=i(C,T,O,w,g,16,l[38]),w=i(w,C,T,O,v,23,l[39]),O=i(O,w,C,T,k,4,l[40]),T=i(T,O,w,C,a,11,l[41]),C=i(C,T,O,w,h,16,l[42]),w=i(w,C,T,O,p,23,l[43]),O=i(O,w,C,T,b,4,l[44]),T=i(T,O,w,C,m,11,l[45]),C=i(C,T,O,w,S,16,l[46]),w=i(w,C,T,O,c,23,l[47]),O=s(O,w,C,T,a,6,l[48]),T=s(T,O,w,C,g,10,l[49]),C=s(C,T,O,w,P,15,l[50]),w=s(w,C,T,O,d,21,l[51]),O=s(O,w,C,T,m,6,l[52]),T=s(T,O,w,C,h,10,l[53]),C=s(C,T,O,w,v,15,l[54]),w=s(w,C,T,O,u,21,l[55]),O=s(O,w,C,T,y,6,l[56]),T=s(T,O,w,C,S,10,l[57]),C=s(C,T,O,w,p,15,l[58]),w=s(w,C,T,O,k,21,l[59]),O=s(O,w,C,T,f,6,l[60]),T=s(T,O,w,C,_,10,l[61]),C=s(C,T,O,w,c,15,l[62]),w=s(w,C,T,O,b,21,l[63]);o[0]=o[0]+O|0,o[1]=o[1]+w|0,o[2]=o[2]+C|0,o[3]=o[3]+T|0},_doFinalize:function(){var t=this._data,n=t.words,r=8*this._nDataBytes,i=8*t.sigBytes;n[i>>>5]|=128<<24-i%32;var s=e.floor(r/4294967296);for(n[15+(i+64>>>9<<4)]=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),n[14+(i+64>>>9<<4)]=16711935&(r<<8|r>>>24)|4278255360&(r<<24|r>>>8),t.sigBytes=4*(n.length+1),this._process(),t=this._hash,n=t.words,r=0;4>r;r++)i=n[r],n[r]=16711935&(i<<8|i>>>24)|4278255360&(i<<24|i>>>8);return t},clone:function(){var e=c.clone.call(this);return e._hash=this._hash.clone(),e}}),o.MD5=c._createHelper(a),o.HmacMD5=c._createHmacHelper(a)}(Math),function(){var e=n,t=e.lib,r=t.Base,i=t.WordArray,t=e.algo,s=t.EvpKDF=r.extend({cfg:r.extend({keySize:4,hasher:t.MD5,iterations:1}),init:function(e){this.cfg=this.cfg.extend(e)},compute:function(e,t){for(var n=this.cfg,r=n.hasher.create(),s=i.create(),o=s.words,a=n.keySize,n=n.iterations;o.length>>2]}},r.BlockCipher=c.extend({cfg:c.cfg.extend({mode:l,padding:f}),reset:function(){c.reset.call(this);var e=this.cfg,t=e.iv,e=e.mode;if(this._xformMode==this._ENC_XFORM_MODE)var n=e.createEncryptor;else n=e.createDecryptor,this._minBufferSize=1;this._mode=n.call(e,this,t&&t.words)},_doProcessBlock:function(e,t){this._mode.processBlock(e,t)},_doFinalize:function(){var e=this.cfg.padding;if(this._xformMode==this._ENC_XFORM_MODE){e.pad(this._data,this.blockSize);var t=this._process(!0)}else t=this._process(!0),e.unpad(t);return t},blockSize:4});var d=r.CipherParams=i.extend({init:function(e){this.mixIn(e)},toString:function(e){return(e||this.formatter).stringify(this)}}),l=(t.format={}).OpenSSL={stringify:function(e){var t=e.ciphertext;return e=e.salt,(e?s.create([1398893684,1701076831]).concat(e).concat(t):t).toString(a)},parse:function(e){e=a.parse(e);var t=e.words;if(1398893684==t[0]&&1701076831==t[1]){var n=s.create(t.slice(2,4));t.splice(0,4),e.sigBytes-=16}return d.create({ciphertext:e,salt:n})}},p=r.SerializableCipher=i.extend({cfg:i.extend({format:l}),encrypt:function(e,t,n,r){r=this.cfg.extend(r);var i=e.createEncryptor(n,r);return t=i.finalize(t),i=i.cfg,d.create({ciphertext:t,key:n,iv:i.iv,algorithm:e,mode:i.mode,padding:i.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}}),t=(t.kdf={}).OpenSSL={execute:function(e,t,n,r){return r||(r=s.random(8)),e=u.create({keySize:t+n}).compute(e,r),n=s.create(e.words.slice(t),4*n),e.sigBytes=4*t,d.create({key:e,iv:n,salt:r})}},g=r.PasswordBasedCipher=p.extend({cfg:p.cfg.extend({kdf:t}),encrypt:function(e,t,n,r){return r=this.cfg.extend(r),n=r.kdf.execute(n,e.keySize,e.ivSize),r.iv=n.iv,e=p.encrypt.call(this,e,t,n.key,r),e.mixIn(n),e},decrypt:function(e,t,n,r){return r=this.cfg.extend(r),t=this._parse(t,r.format),n=r.kdf.execute(n,e.keySize,e.ivSize,t.salt),r.iv=n.iv,p.decrypt.call(this,e,t,n.key,r)}})}(),function(){for(var e=n,t=e.lib.BlockCipher,r=e.algo,i=[],s=[],o=[],a=[],u=[],c=[],l=[],h=[],f=[],d=[],p=[],g=0;256>g;g++)p[g]=128>g?g<<1:g<<1^283;for(var y=0,b=0,g=0;256>g;g++){var v=b^b<<1^b<<2^b<<3^b<<4,v=v>>>8^255&v^99;i[y]=v,s[v]=y;var _=p[y],m=p[_],k=p[m],P=257*p[v]^16843008*v;o[y]=P<<24|P>>>8,a[y]=P<<16|P>>>16,u[y]=P<<8|P>>>24,c[y]=P,P=16843009*k^65537*m^257*_^16843008*y,l[v]=P<<24|P>>>8,h[v]=P<<16|P>>>16,f[v]=P<<8|P>>>24,d[v]=P,y?(y=_^p[p[p[k^_]]],b^=p[p[b]]):y=b=1}var S=[0,1,2,4,8,16,32,64,128,27,54],r=r.AES=t.extend({_doReset:function(){for(var e=this._key,t=e.words,n=e.sigBytes/4,e=4*((this._nRounds=n+6)+1),r=this._keySchedule=[],s=0;s>>24]<<24|i[o>>>16&255]<<16|i[o>>>8&255]<<8|i[255&o]):(o=o<<8|o>>>24,o=i[o>>>24]<<24|i[o>>>16&255]<<16|i[o>>>8&255]<<8|i[255&o],o^=S[s/n|0]<<24),r[s]=r[s-n]^o}for(t=this._invKeySchedule=[],n=0;nn||4>=s?o:l[i[o>>>24]]^h[i[o>>>16&255]]^f[i[o>>>8&255]]^d[i[255&o]]},encryptBlock:function(e,t){this._doCryptBlock(e,t,this._keySchedule,o,a,u,c,i)},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,h,f,d,s),n=e[t+1],e[t+1]=e[t+3],e[t+3]=n},_doCryptBlock:function(e,t,n,r,i,s,o,a){for(var u=this._nRounds,c=e[t]^n[0],l=e[t+1]^n[1],h=e[t+2]^n[2],f=e[t+3]^n[3],d=4,p=1;p>>24]^i[l>>>16&255]^s[h>>>8&255]^o[255&f]^n[d++],y=r[l>>>24]^i[h>>>16&255]^s[f>>>8&255]^o[255&c]^n[d++],b=r[h>>>24]^i[f>>>16&255]^s[c>>>8&255]^o[255&l]^n[d++],f=r[f>>>24]^i[c>>>16&255]^s[l>>>8&255]^o[255&h]^n[d++],c=g,l=y,h=b;g=(a[c>>>24]<<24|a[l>>>16&255]<<16|a[h>>>8&255]<<8|a[255&f])^n[d++],y=(a[l>>>24]<<24|a[h>>>16&255]<<16|a[f>>>8&255]<<8|a[255&c])^n[d++],b=(a[h>>>24]<<24|a[f>>>16&255]<<16|a[c>>>8&255]<<8|a[255&l])^n[d++],f=(a[f>>>24]<<24|a[c>>>16&255]<<16|a[l>>>8&255]<<8|a[255&h])^n[d++],e[t]=g,e[t+1]=y,e[t+2]=b,e[t+3]=f},keySize:8});e.AES=t._createHelper(r)}(),n.mode.ECB=function(){var e=n.lib.BlockCipherMode.extend();return e.Encryptor=e.extend({processBlock:function(e,t){this._cipher.encryptBlock(e,t)}}),e.Decryptor=e.extend({processBlock:function(e,t){this._cipher.decryptBlock(e,t)}}),e}(),e.exports=n},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var s=function(){function e(e,t){for(var n=0;n=o){var u={};u.category=y.default.PNRequestMessageCountExceededCategory,u.operation=e.operation,this._listenerManager.announceStatus(u)}i.forEach(function(e){var t=e.channel,r=e.subscriptionMatch,i=e.publishMetaData;if(t===r&&(r=null),a){if(n._dedupingManager.isDuplicate(e))return;n._dedupingManager.addEntry(e)}if(p.default.endsWith(e.channel,"-pnpres")){var s={};s.channel=null,s.subscription=null,s.actualChannel=null!=r?t:null,s.subscribedChannel=null!=r?r:t,t&&(s.channel=t.substring(0,t.lastIndexOf("-pnpres"))),r&&(s.subscription=r.substring(0,r.lastIndexOf("-pnpres"))),s.action=e.payload.action,s.state=e.payload.data,s.timetoken=i.publishTimetoken,s.occupancy=e.payload.occupancy,s.uuid=e.payload.uuid,s.timestamp=e.payload.timestamp,e.payload.join&&(s.join=e.payload.join),e.payload.leave&&(s.leave=e.payload.leave),e.payload.timeout&&(s.timeout=e.payload.timeout),n._listenerManager.announcePresence(s)}else{var o={};o.channel=null,o.subscription=null,o.actualChannel=null!=r?t:null,o.subscribedChannel=null!=r?r:t,o.channel=t,o.subscription=r,o.timetoken=i.publishTimetoken,o.publisher=e.issuingClientId,e.userMetadata&&(o.userMetadata=e.userMetadata),n._config.cipherKey?o.message=n._crypto.decrypt(e.payload):o.message=e.payload,n._listenerManager.announceMessage(o)}}),this._region=t.metadata.region,this._startSubscribeLoop()}},{key:"_stopSubscribeLoop",value:function(){this._subscribeCall&&("function"==typeof this._subscribeCall.abort&&this._subscribeCall.abort(),this._subscribeCall=null)}}]),e}();t.default=b,e.exports=t.default},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n=this._config.maximumCacheSize&&this.hashHistory.shift(),this.hashHistory.push(this.getKey(e))}},{key:"clearHistory",value:function(){this.hashHistory=[]}}]),e}();t.default=a,e.exports=t.default},function(e,t){"use strict";function n(e){var t=[];return Object.keys(e).forEach(function(e){return t.push(e)}),t}function r(e){return encodeURIComponent(e).replace(/[!~*'()]/g,function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()})}function i(e){return n(e).sort()}function s(e){return i(e).map(function(t){return t+"="+r(e[t])}).join("&")}function o(e,t){return-1!==e.indexOf(t,this.length-t.length)}function a(){var e=void 0,t=void 0;return{promise:new Promise(function(n,r){e=n,t=r}),reject:t,fulfill:e}}e.exports={signPamFromParams:s,endsWith:o,createPromise:a,encodeString:r}},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function o(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function a(e,t){return e.type=t,e.error=!0,e}function u(e){return a({message:e},"validationError")}function c(e,t,n){return e.usePost&&e.usePost(t,n)?e.postURL(t,n):e.getURL(t,n)}function l(e){if(e.sdkName)return e.sdkName;var t="PubNub-JS-"+e.sdkFamily;return e.partnerId&&(t+="-"+e.partnerId),t+="/"+e.getVersion()}function h(e,t,n){var r=e.config,i=e.crypto;n.timestamp=Math.floor((new Date).getTime()/1e3);var s=r.subscribeKey+"\n"+r.publishKey+"\n"+t+"\n";s+=g.default.signPamFromParams(n);var o=i.HMACSHA256(s);o=o.replace(/\+/g,"-"),o=o.replace(/\//g,"_"),n.signature=o}Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){var n=e.networking,r=e.config,i=null,s=null,o={};t.getOperation()===v.default.PNTimeOperation||t.getOperation()===v.default.PNChannelGroupsOperation?i=arguments.length<=2?void 0:arguments[2]:(o=arguments.length<=2?void 0:arguments[2],i=arguments.length<=3?void 0:arguments[3]),"undefined"==typeof Promise||i||(s=g.default.createPromise());var a=t.validateParams(e,o);if(!a){var f=t.prepareParams(e,o),p=c(t,e,o),y=void 0,b={url:p,operation:t.getOperation(),timeout:t.getRequestTimeout(e)};f.uuid=r.UUID,f.pnsdk=l(r),r.useInstanceId&&(f.instanceid=r.instanceId),r.useRequestId&&(f.requestid=d.default.createUUID()),t.isAuthSupported()&&r.getAuthKey()&&(f.auth=r.getAuthKey()),r.secretKey&&h(e,p,f);var m=function(n,r){if(n.error)return void(i?i(n):s&&s.reject(new _("PubNub call failed, check status for details",n)));var a=t.handleResponse(e,r,o);i?i(n,a):s&&s.fulfill(a)};if(t.usePost&&t.usePost(e,o)){var k=t.postPayload(e,o);y=n.POST(f,k,b,m)}else y=t.useDelete&&t.useDelete()?n.DELETE(f,b,m):n.GET(f,b,m);return t.getOperation()===v.default.PNSubscribeOperation?y:s?s.promise:void 0}return i?i(u(a)):s?(s.reject(new _("Validation failed, check status for details",u(a))),s.promise):void 0};var f=n(3),d=r(f),p=(n(5),n(15)),g=r(p),y=n(2),b=(r(y),n(13)),v=r(b),_=function(e){function t(e,n){i(this,t);var r=s(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return r.name=r.constructor.name,r.status=n,r.message=e,r}return o(t,e),t}(Error);e.exports=t.default},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return f.default.PNAddChannelsToGroupOperation}function s(e,t){var n=t.channels,r=t.channelGroup,i=e.config;return r?n&&0!==n.length?i.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channels":"Missing Channel Group"}function o(e,t){var n=t.channelGroup;return"/v1/channel-registration/sub-key/"+e.config.subscribeKey+"/channel-group/"+p.default.encodeString(n)}function a(e){return e.config.getTransactionTimeout()}function u(){return!0}function c(e,t){var n=t.channels;return{add:(void 0===n?[]:n).join(",")}}function l(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=s,t.getURL=o,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var h=(n(5),n(13)),f=r(h),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return f.default.PNRemoveChannelsFromGroupOperation}function s(e,t){var n=t.channels,r=t.channelGroup,i=e.config;return r?n&&0!==n.length?i.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channels":"Missing Channel Group"}function o(e,t){var n=t.channelGroup;return"/v1/channel-registration/sub-key/"+e.config.subscribeKey+"/channel-group/"+p.default.encodeString(n)}function a(e){return e.config.getTransactionTimeout()}function u(){return!0}function c(e,t){var n=t.channels;return{remove:(void 0===n?[]:n).join(",")}}function l(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=s,t.getURL=o,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var h=(n(5),n(13)),f=r(h),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return f.default.PNRemoveGroupOperation}function s(e,t){var n=t.channelGroup,r=e.config;return n?r.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channel Group"}function o(e,t){var n=t.channelGroup;return"/v1/channel-registration/sub-key/"+e.config.subscribeKey+"/channel-group/"+p.default.encodeString(n)+"/remove"}function a(){return!0}function u(e){return e.config.getTransactionTimeout()}function c(){return{}}function l(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=s,t.getURL=o,t.isAuthSupported=a,t.getRequestTimeout=u,t.prepareParams=c,t.handleResponse=l;var h=(n(5),n(13)),f=r(h),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(){return h.default.PNChannelGroupsOperation}function i(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function s(e){return"/v1/channel-registration/sub-key/"+e.config.subscribeKey+"/channel-group"}function o(e){return e.config.getTransactionTimeout()}function a(){return!0}function u(){return{}}function c(e,t){return{groups:t.payload.groups}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=s,t.getRequestTimeout=o,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),h=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return f.default.PNChannelsForGroupOperation}function s(e,t){var n=t.channelGroup,r=e.config;return n?r.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channel Group"}function o(e,t){var n=t.channelGroup;return"/v1/channel-registration/sub-key/"+e.config.subscribeKey+"/channel-group/"+p.default.encodeString(n)}function a(e){return e.config.getTransactionTimeout()}function u(){return!0}function c(){return{}}function l(e,t){return{channels:t.payload.channels}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=s,t.getURL=o,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var h=(n(5),n(13)),f=r(h),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(){return h.default.PNPushNotificationEnabledChannelsOperation}function i(e,t){var n=t.device,r=t.pushGateway,i=t.channels,s=e.config;return n?r?i&&0!==i.length?s.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channels":"Missing GW Type (pushGateway: gcm or apns)":"Missing Device ID (device)"}function s(e,t){var n=t.device;return"/v1/push/sub-key/"+e.config.subscribeKey+"/devices/"+n}function o(e){return e.config.getTransactionTimeout()}function a(){return!0}function u(e,t){var n=t.pushGateway,r=t.channels;return{type:n,add:(void 0===r?[]:r).join(",")}}function c(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=s,t.getRequestTimeout=o,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),h=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(){return h.default.PNPushNotificationEnabledChannelsOperation}function i(e,t){var n=t.device,r=t.pushGateway,i=t.channels,s=e.config;return n?r?i&&0!==i.length?s.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channels":"Missing GW Type (pushGateway: gcm or apns)":"Missing Device ID (device)"}function s(e,t){var n=t.device;return"/v1/push/sub-key/"+e.config.subscribeKey+"/devices/"+n}function o(e){return e.config.getTransactionTimeout()}function a(){return!0}function u(e,t){var n=t.pushGateway,r=t.channels;return{type:n,remove:(void 0===r?[]:r).join(",")}}function c(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=s,t.getRequestTimeout=o,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),h=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(){return h.default.PNPushNotificationEnabledChannelsOperation}function i(e,t){var n=t.device,r=t.pushGateway,i=e.config;return n?r?i.subscribeKey?void 0:"Missing Subscribe Key":"Missing GW Type (pushGateway: gcm or apns)":"Missing Device ID (device)"}function s(e,t){var n=t.device;return"/v1/push/sub-key/"+e.config.subscribeKey+"/devices/"+n}function o(e){return e.config.getTransactionTimeout()}function a(){return!0}function u(e,t){return{type:t.pushGateway}}function c(e,t){return{channels:t}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=s,t.getRequestTimeout=o,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),h=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(){return h.default.PNRemoveAllPushNotificationsOperation}function i(e,t){var n=t.device,r=t.pushGateway,i=e.config;return n?r?i.subscribeKey?void 0:"Missing Subscribe Key":"Missing GW Type (pushGateway: gcm or apns)":"Missing Device ID (device)"}function s(e,t){var n=t.device;return"/v1/push/sub-key/"+e.config.subscribeKey+"/devices/"+n+"/remove"}function o(e){return e.config.getTransactionTimeout()}function a(){return!0}function u(e,t){return{type:t.pushGateway}}function c(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=s,t.getRequestTimeout=o,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),h=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return f.default.PNUnsubscribeOperation}function s(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function o(e,t){var n=e.config,r=t.channels,i=void 0===r?[]:r,s=i.length>0?i.join(","):",";return"/v2/presence/sub-key/"+n.subscribeKey+"/channel/"+p.default.encodeString(s)+"/leave"}function a(e){return e.config.getTransactionTimeout()}function u(){return!0}function c(e,t){var n=t.channelGroups,r=void 0===n?[]:n,i={};return r.length>0&&(i["channel-group"]=r.join(",")),i}function l(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=s,t.getURL=o,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var h=(n(5),n(13)),f=r(h),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(){return h.default.PNWhereNowOperation}function i(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function s(e,t){var n=e.config,r=t.uuid,i=void 0===r?n.UUID:r;return"/v2/presence/sub-key/"+n.subscribeKey+"/uuid/"+i}function o(e){return e.config.getTransactionTimeout()}function a(){return!0}function u(){return{}}function c(e,t){return t.payload?{channels:t.payload.channels}:{channels:[]}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=s,t.getRequestTimeout=o,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),h=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return f.default.PNHeartbeatOperation}function s(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function o(e,t){var n=e.config,r=t.channels,i=void 0===r?[]:r,s=i.length>0?i.join(","):",";return"/v2/presence/sub-key/"+n.subscribeKey+"/channel/"+p.default.encodeString(s)+"/heartbeat"}function a(){return!0}function u(e){return e.config.getTransactionTimeout()}function c(e,t){var n=t.channelGroups,r=void 0===n?[]:n,i=t.state,s=void 0===i?{}:i,o=e.config,a={};return r.length>0&&(a["channel-group"]=r.join(",")),a.state=JSON.stringify(s),a.heartbeat=o.getPresenceTimeout(),a}function l(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=s,t.getURL=o,t.isAuthSupported=a,t.getRequestTimeout=u,t.prepareParams=c,t.handleResponse=l;var h=(n(5),n(13)),f=r(h),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return f.default.PNGetStateOperation}function s(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function o(e,t){var n=e.config,r=t.uuid,i=void 0===r?n.UUID:r,s=t.channels,o=void 0===s?[]:s,a=o.length>0?o.join(","):",";return"/v2/presence/sub-key/"+n.subscribeKey+"/channel/"+p.default.encodeString(a)+"/uuid/"+i}function a(e){return e.config.getTransactionTimeout()}function u(){return!0}function c(e,t){var n=t.channelGroups,r=void 0===n?[]:n,i={};return r.length>0&&(i["channel-group"]=r.join(",")),i}function l(e,t,n){var r=n.channels,i=void 0===r?[]:r,s=n.channelGroups,o=void 0===s?[]:s,a={};return 1===i.length&&0===o.length?a[i[0]]=t.payload:a=t.payload,{channels:a}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=s,t.getURL=o,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var h=(n(5),n(13)),f=r(h),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return f.default.PNSetStateOperation}function s(e,t){var n=e.config,r=t.state,i=t.channels,s=void 0===i?[]:i,o=t.channelGroups,a=void 0===o?[]:o;return r?n.subscribeKey?0===s.length&&0===a.length?"Please provide a list of channels and/or channel-groups":void 0:"Missing Subscribe Key":"Missing State"}function o(e,t){var n=e.config,r=t.channels,i=void 0===r?[]:r,s=i.length>0?i.join(","):",";return"/v2/presence/sub-key/"+n.subscribeKey+"/channel/"+p.default.encodeString(s)+"/uuid/"+n.UUID+"/data"}function a(e){return e.config.getTransactionTimeout()}function u(){return!0}function c(e,t){var n=t.state,r=t.channelGroups,i=void 0===r?[]:r,s={};return s.state=JSON.stringify(n),i.length>0&&(s["channel-group"]=i.join(",")),s}function l(e,t){return{state:t.payload}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=s,t.getURL=o,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var h=(n(5),n(13)),f=r(h),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return f.default.PNHereNowOperation}function s(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function o(e,t){var n=e.config,r=t.channels,i=void 0===r?[]:r,s=t.channelGroups,o=void 0===s?[]:s,a="/v2/presence/sub-key/"+n.subscribeKey;if(i.length>0||o.length>0){var u=i.length>0?i.join(","):",";a+="/channel/"+p.default.encodeString(u)}return a}function a(e){return e.config.getTransactionTimeout()}function u(){return!0}function c(e,t){var n=t.channelGroups,r=void 0===n?[]:n,i=t.includeUUIDs,s=void 0===i||i,o=t.includeState,a=void 0!==o&&o,u={};return s||(u.disable_uuids=1),a&&(u.state=1),r.length>0&&(u["channel-group"]=r.join(",")),u}function l(e,t,n){var r=n.channels,i=void 0===r?[]:r,s=n.channelGroups,o=void 0===s?[]:s,a=n.includeUUIDs,u=void 0===a||a,c=n.includeState,l=void 0!==c&&c;return i.length>1||o.length>0||0===o.length&&0===i.length?function(){var e={};return e.totalChannels=t.payload.total_channels,e.totalOccupancy=t.payload.total_occupancy,e.channels={},Object.keys(t.payload.channels).forEach(function(n){var r=t.payload.channels[n],i=[];return e.channels[n]={occupants:i,name:n,occupancy:r.occupancy},u&&r.uuids.forEach(function(e){l?i.push({state:e.state,uuid:e.uuid}):i.push({state:null,uuid:e})}),e}),e}():function(){var e={},n=[];return e.totalChannels=1,e.totalOccupancy=t.occupancy,e.channels={},e.channels[i[0]]={occupants:n,name:i[0],occupancy:t.occupancy},u&&t.uuids&&t.uuids.forEach(function(e){l?n.push({state:e.state,uuid:e.uuid}):n.push({state:null,uuid:e})}),e}()}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=s,t.getURL=o,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var h=(n(5),n(13)),f=r(h),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(){return h.default.PNAccessManagerAudit}function i(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function s(e){return"/v2/auth/audit/sub-key/"+e.config.subscribeKey}function o(e){return e.config.getTransactionTimeout()}function a(){return!1}function u(e,t){var n=t.channel,r=t.channelGroup,i=t.authKeys,s=void 0===i?[]:i,o={};return n&&(o.channel=n),r&&(o["channel-group"]=r),s.length>0&&(o.auth=s.join(",")),o}function c(e,t){return t.payload}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=s,t.getRequestTimeout=o,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),h=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(){return h.default.PNAccessManagerGrant}function i(e){var t=e.config;return t.subscribeKey?t.publishKey?t.secretKey?void 0:"Missing Secret Key":"Missing Publish Key":"Missing Subscribe Key"}function s(e){return"/v2/auth/grant/sub-key/"+e.config.subscribeKey}function o(e){return e.config.getTransactionTimeout()}function a(){return!1}function u(e,t){var n=t.channels,r=void 0===n?[]:n,i=t.channelGroups,s=void 0===i?[]:i,o=t.ttl,a=t.read,u=void 0!==a&&a,c=t.write,l=void 0!==c&&c,h=t.manage,f=void 0!==h&&h,d=t.authKeys,p=void 0===d?[]:d,g={};return g.r=u?"1":"0",g.w=l?"1":"0",g.m=f?"1":"0",r.length>0&&(g.channel=r.join(",")),s.length>0&&(g["channel-group"]=s.join(",")),p.length>0&&(g.auth=p.join(",")),(o||0===o)&&(g.ttl=o),g}function c(){return{}} +Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=s,t.getRequestTimeout=o,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),h=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){var n=e.crypto,r=e.config,i=JSON.stringify(t);return r.cipherKey&&(i=n.encrypt(i),i=JSON.stringify(i)),i}function s(){return b.default.PNPublishOperation}function o(e,t){var n=e.config,r=t.message;return t.channel?r?n.subscribeKey?void 0:"Missing Subscribe Key":"Missing Message":"Missing Channel"}function a(e,t){var n=t.sendByPost;return void 0!==n&&n}function u(e,t){var n=e.config,r=t.channel,s=t.message,o=i(e,s);return"/publish/"+n.publishKey+"/"+n.subscribeKey+"/0/"+_.default.encodeString(r)+"/0/"+_.default.encodeString(o)}function c(e,t){var n=e.config,r=t.channel;return"/publish/"+n.publishKey+"/"+n.subscribeKey+"/0/"+_.default.encodeString(r)+"/0"}function l(e){return e.config.getTransactionTimeout()}function h(){return!0}function f(e,t){return i(e,t.message)}function d(e,t){var n=t.meta,r=t.replicate,i=void 0===r||r,s=t.storeInHistory,o=t.ttl,a={};return null!=s&&(a.store=s?"1":"0"),o&&(a.ttl=o),!1===i&&(a.norep="true"),n&&"object"===(void 0===n?"undefined":g(n))&&(a.meta=JSON.stringify(n)),a}function p(e,t){return{timetoken:t[2]}}Object.defineProperty(t,"__esModule",{value:!0});var g="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};t.getOperation=s,t.validateParams=o,t.usePost=a,t.getURL=u,t.postURL=c,t.getRequestTimeout=l,t.isAuthSupported=h,t.postPayload=f,t.prepareParams=d,t.handleResponse=p;var y=(n(5),n(13)),b=r(y),v=n(15),_=r(v)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){var n=e.config,r=e.crypto;if(!n.cipherKey)return t;try{return r.decrypt(t)}catch(e){return t}}function s(){return d.default.PNHistoryOperation}function o(e,t){var n=t.channel,r=e.config;return n?r.subscribeKey?void 0:"Missing Subscribe Key":"Missing channel"}function a(e,t){var n=t.channel;return"/v2/history/sub-key/"+e.config.subscribeKey+"/channel/"+g.default.encodeString(n)}function u(e){return e.config.getTransactionTimeout()}function c(){return!0}function l(e,t){var n=t.start,r=t.end,i=t.reverse,s=t.count,o=void 0===s?100:s,a=t.stringifiedTimeToken,u=void 0!==a&&a,c={include_token:"true"};return c.count=o,n&&(c.start=n),r&&(c.end=r),u&&(c.string_message_token="true"),null!=i&&(c.reverse=i.toString()),c}function h(e,t){var n={messages:[],startTimeToken:t[1],endTimeToken:t[2]};return t[0].forEach(function(t){var r={timetoken:t.timetoken,entry:i(e,t.message)};n.messages.push(r)}),n}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=s,t.validateParams=o,t.getURL=a,t.getRequestTimeout=u,t.isAuthSupported=c,t.prepareParams=l,t.handleResponse=h;var f=(n(5),n(13)),d=r(f),p=n(15),g=r(p)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return d.default.PNDeleteMessagesOperation}function s(e,t){var n=t.channel,r=e.config;return n?r.subscribeKey?void 0:"Missing Subscribe Key":"Missing channel"}function o(){return!0}function a(e,t){var n=t.channel,r=t.start,i=t.end,s=e.config,o="";return r&&(o="?start="+r),i&&(o+=(""!==o?"&":"?")+"end="+i),"/v3/history/sub-key/"+s.subscribeKey+"/channel/"+g.default.encodeString(n)+o}function u(e){return e.config.getTransactionTimeout()}function c(){return!0}function l(e,t){var n=t.start,r=t.end,i={};return n&&(i.start=n),r&&(i.end=r),{}}function h(e,t){return t.payload}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=s,t.useDelete=o,t.getURL=a,t.getRequestTimeout=u,t.isAuthSupported=c,t.prepareParams=l,t.handleResponse=h;var f=(n(5),n(13)),d=r(f),p=n(15),g=r(p)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){var n=e.config,r=e.crypto;if(!n.cipherKey)return t;try{return r.decrypt(t)}catch(e){return t}}function s(){return d.default.PNFetchMessagesOperation}function o(e,t){var n=t.channels,r=e.config;return n&&0!==n.length?r.subscribeKey?void 0:"Missing Subscribe Key":"Missing channels"}function a(e,t){var n=t.channels,r=void 0===n?[]:n,i=e.config,s=r.length>0?r.join(","):",";return"/v3/history/sub-key/"+i.subscribeKey+"/channel/"+g.default.encodeString(s)}function u(e){return e.config.getTransactionTimeout()}function c(){return!0}function l(e,t){var n=t.start,r=t.end,i=t.count,s={};return i&&(s.max=i),n&&(s.start=n),r&&(s.end=r),s}function h(e,t){var n={channels:{}};return Object.keys(t.channels||{}).forEach(function(r){n.channels[r]=[],(t.channels[r]||[]).forEach(function(t){var s={};s.channel=r,s.subscription=null,s.timetoken=t.timetoken,s.message=i(e,t.message),n.channels[r].push(s)})}),n}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=s,t.validateParams=o,t.getURL=a,t.getRequestTimeout=u,t.isAuthSupported=c,t.prepareParams=l,t.handleResponse=h;var f=(n(5),n(13)),d=r(f),p=n(15),g=r(p)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return f.default.PNSubscribeOperation}function s(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function o(e,t){var n=e.config,r=t.channels,i=void 0===r?[]:r,s=i.length>0?i.join(","):",";return"/v2/subscribe/"+n.subscribeKey+"/"+p.default.encodeString(s)+"/0"}function a(e){return e.config.getSubscribeTimeout()}function u(){return!0}function c(e,t){var n=e.config,r=t.channelGroups,i=void 0===r?[]:r,s=t.timetoken,o=t.filterExpression,a=t.region,u={heartbeat:n.getPresenceTimeout()};return i.length>0&&(u["channel-group"]=i.join(",")),o&&o.length>0&&(u["filter-expr"]=o),s&&(u.tt=s),a&&(u.tr=a),u}function l(e,t){var n=[];t.m.forEach(function(e){var t={publishTimetoken:e.p.t,region:e.p.r},r={shard:parseInt(e.a,10),subscriptionMatch:e.b,channel:e.c,payload:e.d,flags:e.f,issuingClientId:e.i,subscribeKey:e.k,originationTimetoken:e.o,userMetadata:e.u,publishMetaData:t};n.push(r)});var r={timetoken:t.t.t,region:t.t.r};return{messages:n,metadata:r}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=s,t.getURL=o,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var h=(n(5),n(13)),f=r(h),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var s=function(){function e(e,t){for(var n=0;n=this._maxSubDomain&&(this._currentSubDomain=1),e=this._currentSubDomain.toString(),this._providedFQDN.replace("pubsub","ps"+e)}},{key:"hasModule",value:function(e){return e in this._modules}},{key:"shiftStandardOrigin",value:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return this._standardOrigin=this.nextOrigin(e),this._standardOrigin}},{key:"getStandardOrigin",value:function(){return this._standardOrigin}},{key:"POST",value:function(e,t,n,r){return this._modules.post(e,t,n,r)}},{key:"GET",value:function(e,t,n){return this._modules.get(e,t,n)}},{key:"DELETE",value:function(e,t,n){return this._modules.del(e,t,n)}},{key:"_detectErrorCategory",value:function(e){if("ENOTFOUND"===e.code)return u.default.PNNetworkIssuesCategory;if("ECONNREFUSED"===e.code)return u.default.PNNetworkIssuesCategory;if("ECONNRESET"===e.code)return u.default.PNNetworkIssuesCategory;if("EAI_AGAIN"===e.code)return u.default.PNNetworkIssuesCategory;if(0===e.status||e.hasOwnProperty("status")&&void 0===e.status)return u.default.PNNetworkIssuesCategory;if(e.timeout)return u.default.PNTimeoutCategory;if(e.response){if(e.response.badRequest)return u.default.PNBadRequestCategory;if(e.response.forbidden)return u.default.PNAccessDeniedCategory}return u.default.PNUnknownCategory}}]),e}());t.default=c,e.exports=t.default},function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={get:function(e){try{return localStorage.getItem(e)}catch(e){return null}},set:function(e,t){try{return localStorage.setItem(e,t)}catch(e){return null}}},e.exports=t.default},function(e,t,n){"use strict";function r(e){var t=(new Date).getTime(),n=(new Date).toISOString(),r=function(){return console&&console.log?console:window&&window.console&&window.console.log?window.console:console}();r.log("<<<<<"),r.log("["+n+"]","\n",e.url,"\n",e.qs),r.log("-----"),e.on("response",function(n){var i=(new Date).getTime(),s=i-t,o=(new Date).toISOString();r.log(">>>>>>"),r.log("["+o+" / "+s+"]","\n",e.url,"\n",e.qs,"\n",n.text),r.log("-----")})}function i(e,t,n){var i=this;return this._config.logVerbosity&&(e=e.use(r)),this._config.proxy&&this._modules.proxy&&(e=this._modules.proxy.call(this,e)),this._config.keepAlive&&this._modules.keepAlive&&(e=this._modules.keepAlive(e)),e.timeout(t.timeout).end(function(e,r){var s={};if(s.error=null!==e,s.operation=t.operation,r&&r.status&&(s.statusCode=r.status),e)return s.errorData=e,s.category=i._detectErrorCategory(e),n(s,null);var o=JSON.parse(r.text);return o.error&&1===o.error&&o.status&&o.message&&o.service?(s.errorData=o,s.statusCode=o.status,s.error=!0,s.category=i._detectErrorCategory(s),n(s,null)):n(s,o)})}function s(e,t,n){var r=c.default.get(this.getStandardOrigin()+t.url).query(e);return i.call(this,r,t,n)}function o(e,t,n,r){var s=c.default.post(this.getStandardOrigin()+n.url).query(e).send(t);return i.call(this,s,n,r)}function a(e,t,n){var r=c.default.delete(this.getStandardOrigin()+t.url).query(e);return i.call(this,r,t,n)}Object.defineProperty(t,"__esModule",{value:!0}),t.get=s,t.post=o,t.del=a;var u=n(42),c=function(e){return e&&e.__esModule?e:{default:e}}(u);n(5)},function(e,t,n){function r(){}function i(e){if(!b(e))return e;var t=[];for(var n in e)s(t,n,e[n]);return t.join("&")}function s(e,t,n){if(null!=n)if(Array.isArray(n))n.forEach(function(n){s(e,t,n)});else if(b(n))for(var r in n)s(e,t+"["+r+"]",n[r]);else e.push(encodeURIComponent(t)+"="+encodeURIComponent(n));else null===n&&e.push(encodeURIComponent(t))}function o(e){for(var t,n,r={},i=e.split("&"),s=0,o=i.length;s=300)&&(r=new Error(t.statusText||"Unsuccessful HTTP response"),r.original=e,r.response=t,r.status=t.status)}catch(e){r=e}r?n.callback(r,t):n.callback(null,t)})}function d(e,t){var n=v("DELETE",e);return t&&n.end(t),n}var p;"undefined"!=typeof window?p=window:"undefined"!=typeof self?p=self:(console.warn("Using browser-only version of superagent in non-browser environment"),p=this);var g=n(43),y=n(44),b=n(45),v=e.exports=n(46).bind(null,f);v.getXHR=function(){if(!(!p.XMLHttpRequest||p.location&&"file:"==p.location.protocol&&p.ActiveXObject))return new XMLHttpRequest;try{return new ActiveXObject("Microsoft.XMLHTTP")}catch(e){}try{return new ActiveXObject("Msxml2.XMLHTTP.6.0")}catch(e){}try{return new ActiveXObject("Msxml2.XMLHTTP.3.0")}catch(e){}try{return new ActiveXObject("Msxml2.XMLHTTP")}catch(e){}throw Error("Browser-only verison of superagent could not find XHR")};var _="".trim?function(e){return e.trim()}:function(e){return e.replace(/(^\s*|\s*$)/g,"")};v.serializeObject=i,v.parseString=o,v.types={html:"text/html",json:"application/json",xml:"application/xml",urlencoded:"application/x-www-form-urlencoded",form:"application/x-www-form-urlencoded","form-data":"application/x-www-form-urlencoded"},v.serialize={"application/x-www-form-urlencoded":i,"application/json":JSON.stringify},v.parse={"application/x-www-form-urlencoded":o,"application/json":JSON.parse},h.prototype.get=function(e){return this.header[e.toLowerCase()]},h.prototype._setHeaderProperties=function(e){var t=this.header["content-type"]||"";this.type=c(t);var n=l(t);for(var r in n)this[r]=n[r]},h.prototype._parseBody=function(e){var t=v.parse[this.type];return!t&&u(this.type)&&(t=v.parse["application/json"]),t&&e&&(e.length||e instanceof Object)?t(e):null},h.prototype._setStatusProperties=function(e){1223===e&&(e=204);var t=e/100|0;this.status=this.statusCode=e,this.statusType=t,this.info=1==t,this.ok=2==t,this.clientError=4==t,this.serverError=5==t,this.error=(4==t||5==t)&&this.toError(),this.accepted=202==e,this.noContent=204==e,this.badRequest=400==e,this.unauthorized=401==e,this.notAcceptable=406==e,this.notFound=404==e,this.forbidden=403==e},h.prototype.toError=function(){var e=this.req,t=e.method,n=e.url,r="cannot "+t+" "+n+" ("+this.status+")",i=new Error(r);return i.status=this.status,i.method=t,i.url=n,i},v.Response=h,g(f.prototype);for(var m in y)f.prototype[m]=y[m];f.prototype.type=function(e){return this.set("Content-Type",v.types[e]||e),this},f.prototype.responseType=function(e){return this._responseType=e,this},f.prototype.accept=function(e){return this.set("Accept",v.types[e]||e),this},f.prototype.auth=function(e,t,n){switch(n||(n={type:"basic"}),n.type){case"basic":var r=btoa(e+":"+t);this.set("Authorization","Basic "+r);break;case"auto":this.username=e,this.password=t}return this},f.prototype.query=function(e){return"string"!=typeof e&&(e=i(e)),e&&this._query.push(e),this},f.prototype.attach=function(e,t,n){return this._getFormData().append(e,t,n||t.name),this},f.prototype._getFormData=function(){return this._formData||(this._formData=new p.FormData),this._formData},f.prototype.callback=function(e,t){var n=this._callback;this.clearTimeout(),n(e,t)},f.prototype.crossDomainError=function(){var e=new Error("Request has been terminated\nPossible causes: the network is offline, Origin is not allowed by Access-Control-Allow-Origin, the page is being unloaded, etc.");e.crossDomain=!0,e.status=this.status,e.method=this.method,e.url=this.url,this.callback(e)},f.prototype._timeoutError=function(){var e=this._timeout,t=new Error("timeout of "+e+"ms exceeded");t.timeout=e,this.callback(t)},f.prototype._appendQueryString=function(){var e=this._query.join("&");e&&(this.url+=~this.url.indexOf("?")?"&"+e:"?"+e)},f.prototype.end=function(e){var t=this,n=this.xhr=v.getXHR(),i=this._timeout,s=this._formData||this._data;this._callback=e||r,n.onreadystatechange=function(){if(4==n.readyState){var e;try{e=n.status}catch(t){e=0}if(0==e){if(t.timedout)return t._timeoutError();if(t._aborted)return;return t.crossDomainError()}t.emit("end")}};var o=function(e,n){n.total>0&&(n.percent=n.loaded/n.total*100),n.direction=e,t.emit("progress",n)};if(this.hasListeners("progress"))try{n.onprogress=o.bind(null,"download"),n.upload&&(n.upload.onprogress=o.bind(null,"upload"))}catch(e){}if(i&&!this._timer&&(this._timer=setTimeout(function(){t.timedout=!0,t.abort()},i)),this._appendQueryString(),this.username&&this.password?n.open(this.method,this.url,!0,this.username,this.password):n.open(this.method,this.url,!0),this._withCredentials&&(n.withCredentials=!0),"GET"!=this.method&&"HEAD"!=this.method&&"string"!=typeof s&&!this._isHost(s)){var a=this._header["content-type"],c=this._serializer||v.serialize[a?a.split(";")[0]:""];!c&&u(a)&&(c=v.serialize["application/json"]),c&&(s=c(s))}for(var l in this.header)null!=this.header[l]&&n.setRequestHeader(l,this.header[l]);return this._responseType&&(n.responseType=this._responseType),this.emit("request",this),n.send(void 0!==s?s:null),this},v.Request=f,v.get=function(e,t,n){var r=v("GET",e);return"function"==typeof t&&(n=t,t=null),t&&r.query(t),n&&r.end(n),r},v.head=function(e,t,n){var r=v("HEAD",e);return"function"==typeof t&&(n=t,t=null),t&&r.send(t),n&&r.end(n),r},v.options=function(e,t,n){var r=v("OPTIONS",e);return"function"==typeof t&&(n=t,t=null),t&&r.send(t),n&&r.end(n),r},v.del=d,v.delete=d,v.patch=function(e,t,n){var r=v("PATCH",e);return"function"==typeof t&&(n=t,t=null),t&&r.send(t),n&&r.end(n),r},v.post=function(e,t,n){var r=v("POST",e);return"function"==typeof t&&(n=t,t=null),t&&r.send(t),n&&r.end(n),r},v.put=function(e,t,n){var r=v("PUT",e);return"function"==typeof t&&(n=t,t=null),t&&r.send(t),n&&r.end(n),r}},function(e,t,n){function r(e){if(e)return i(e)}function i(e){for(var t in r.prototype)e[t]=r.prototype[t];return e}e.exports=r,r.prototype.on=r.prototype.addEventListener=function(e,t){return this._callbacks=this._callbacks||{},(this._callbacks["$"+e]=this._callbacks["$"+e]||[]).push(t),this},r.prototype.once=function(e,t){function n(){this.off(e,n),t.apply(this,arguments)}return n.fn=t,this.on(e,n),this},r.prototype.off=r.prototype.removeListener=r.prototype.removeAllListeners=r.prototype.removeEventListener=function(e,t){if(this._callbacks=this._callbacks||{},0==arguments.length)return this._callbacks={},this;var n=this._callbacks["$"+e];if(!n)return this;if(1==arguments.length)return delete this._callbacks["$"+e],this;for(var r,i=0;i\n useInstanceId: boolean;\n\n // if requestId config is true, the SDK will pass a unique request identifier with each request as request_id=\n useRequestId: boolean;\n\n // use connection keep-alive for http requests\n keepAlive: ?boolean;\n\n keepAliveSettings: ?KeepAliveStruct;\n\n // if autoNetworkDetection config is true, the SDK will emit NetworkUp and NetworkDown when there changes in the networking\n autoNetworkDetection: ?boolean;\n\n // alert when a heartbeat works out.\n announceSuccessfulHeartbeats: boolean;\n announceFailedHeartbeats: boolean;\n\n /*\n how long the server will wait before declaring that the client is gone.\n */\n _presenceTimeout: number;\n\n /*\n how often (in seconds) the client should announce its presence to server\n */\n _heartbeatInterval: number;\n\n /*\n how long to wait for the server when running the subscribe loop\n */\n _subscribeRequestTimeout: number;\n /*\n how long to wait for the server when making transactional requests\n */\n _transactionalRequestTimeout: number;\n /*\n use send beacon API when unsubscribing.\n https://developer.mozilla.org/en-US/docs/Web/API/Navigator/sendBeacon\n */\n _useSendBeacon: boolean;\n\n /*\n if set, the SDK will alert if more messages arrive in one subscribe than the theshold\n */\n requestMessageCountThreshold: number;\n\n /*\n Restore subscription list on disconnection.\n */\n restore: boolean;\n\n\n /*\n support for client deduping\n */\n dedupeOnSubscribe: boolean\n maximumCacheSize: number\n\n /*\n support customp encryption and decryption functions.\n */\n customEncrypt: Function // function to support custome encryption of messages\n customDecrypt: Function // function used to decrypt old version messages\n\n constructor({ setup, db } : ConfigConstructArgs) {\n this._db = db;\n\n this.instanceId = `pn-${uuidGenerator.createUUID()}`;\n this.secretKey = setup.secretKey || setup.secret_key;\n this.subscribeKey = setup.subscribeKey || setup.subscribe_key;\n this.publishKey = setup.publishKey || setup.publish_key;\n this.sdkName = setup.sdkName;\n this.sdkFamily = setup.sdkFamily;\n this.partnerId = setup.partnerId;\n this.setAuthKey(setup.authKey);\n this.setCipherKey(setup.cipherKey);\n\n this.setFilterExpression(setup.filterExpression);\n\n this.origin = setup.origin || 'pubsub.pndsn.com';\n this.secure = setup.ssl || false;\n this.restore = setup.restore || false;\n this.proxy = setup.proxy;\n this.keepAlive = setup.keepAlive;\n this.keepAliveSettings = setup.keepAliveSettings;\n this.autoNetworkDetection = setup.autoNetworkDetection || false;\n\n this.dedupeOnSubscribe = setup.dedupeOnSubscribe || false;\n this.maximumCacheSize = setup.maximumCacheSize || 100;\n\n this.customEncrypt = setup.customEncrypt;\n this.customDecrypt = setup.customDecrypt;\n\n // if location config exist and we are in https, force secure to true.\n if (typeof location !== 'undefined' && location.protocol === 'https:') {\n this.secure = true;\n }\n\n this.logVerbosity = setup.logVerbosity || false;\n this.suppressLeaveEvents = setup.suppressLeaveEvents || false;\n\n this.announceFailedHeartbeats = setup.announceFailedHeartbeats || true;\n this.announceSuccessfulHeartbeats = setup.announceSuccessfulHeartbeats || false;\n\n this.useInstanceId = setup.useInstanceId || false;\n this.useRequestId = setup.useRequestId || false;\n\n this.requestMessageCountThreshold = setup.requestMessageCountThreshold;\n\n // set timeout to how long a transaction request will wait for the server (default 15 seconds)\n this.setTransactionTimeout(setup.transactionalRequestTimeout || 15 * 1000);\n // set timeout to how long a subscribe event loop will run (default 310 seconds)\n this.setSubscribeTimeout(setup.subscribeRequestTimeout || 310 * 1000);\n // set config on beacon (https://developer.mozilla.org/en-US/docs/Web/API/Navigator/sendBeacon) usage\n this.setSendBeaconConfig(setup.useSendBeacon || true);\n // how long the SDK will report the client to be alive before issuing a timeout\n this.setPresenceTimeout(setup.presenceTimeout || 300);\n\n if (setup.heartbeatInterval != null) {\n this.setHeartbeatInterval(setup.heartbeatInterval);\n }\n\n this.setUUID(this._decideUUID(setup.uuid)); // UUID decision depends on subKey.\n }\n\n // exposed setters\n getAuthKey(): string { return this.authKey; }\n setAuthKey(val: string): this { this.authKey = val; return this; }\n setCipherKey(val: string): this { this.cipherKey = val; return this; }\n getUUID(): string { return this.UUID; }\n setUUID(val: string): this {\n if (this._db && this._db.set) this._db.set(`${this.subscribeKey}uuid`, val);\n this.UUID = val;\n return this;\n }\n\n getFilterExpression(): string { return this.filterExpression; }\n setFilterExpression(val: string): this { this.filterExpression = val; return this; }\n\n getPresenceTimeout(): number { return this._presenceTimeout; }\n setPresenceTimeout(val: number): this {\n this._presenceTimeout = val;\n this.setHeartbeatInterval((this._presenceTimeout / 2) - 1);\n return this;\n }\n\n getHeartbeatInterval(): number { return this._heartbeatInterval; }\n setHeartbeatInterval(val: number): this { this._heartbeatInterval = val; return this; }\n\n // deprecated setters.\n getSubscribeTimeout(): number { return this._subscribeRequestTimeout; }\n setSubscribeTimeout(val: number): this { this._subscribeRequestTimeout = val; return this; }\n\n getTransactionTimeout(): number { return this._transactionalRequestTimeout; }\n setTransactionTimeout(val: number): this { this._transactionalRequestTimeout = val; return this; }\n\n isSendBeaconEnabled(): boolean { return this._useSendBeacon; }\n setSendBeaconConfig(val: boolean): this { this._useSendBeacon = val; return this; }\n\n getVersion(): string {\n return '4.19.0';\n }\n\n _decideUUID(providedUUID: string): string {\n // if the uuid was provided by setup, use this UUID.\n if (providedUUID) {\n return providedUUID;\n }\n\n // if the database module is enabled and we have something saved, use this.\n if (this._db && this._db.get && this._db.get(`${this.subscribeKey}uuid`)) {\n return this._db.get(`${this.subscribeKey}uuid`);\n }\n\n // randomize the UUID and push to storage\n return `pn-${uuidGenerator.createUUID()}`;\n }\n}\n"]} \ No newline at end of file +{"version":3,"sources":["core/components/config.js"],"names":["setup","db","_db","instanceId","createUUID","secretKey","secret_key","subscribeKey","subscribe_key","publishKey","publish_key","sdkName","sdkFamily","partnerId","setAuthKey","authKey","setCipherKey","cipherKey","setFilterExpression","filterExpression","origin","secure","ssl","restore","proxy","keepAlive","keepAliveSettings","autoNetworkDetection","dedupeOnSubscribe","maximumCacheSize","customEncrypt","customDecrypt","location","protocol","logVerbosity","suppressLeaveEvents","announceFailedHeartbeats","announceSuccessfulHeartbeats","useInstanceId","useRequestId","requestMessageCountThreshold","setTransactionTimeout","transactionalRequestTimeout","setSubscribeTimeout","subscribeRequestTimeout","setSendBeaconConfig","useSendBeacon","setPresenceTimeout","presenceTimeout","heartbeatInterval","setHeartbeatInterval","setUUID","_decideUUID","uuid","val","UUID","set","_presenceTimeout","_heartbeatInterval","_subscribeRequestTimeout","_transactionalRequestTimeout","_useSendBeacon","providedUUID","get"],"mappings":"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","file":"config.js","sourcesContent":["/* @flow */\n/* global location */\n\nimport uuidGenerator from './uuid';\nimport { InternalSetupStruct, DatabaseInterface, KeepAliveStruct, ProxyStruct } from '../flow_interfaces';\n\ntype ConfigConstructArgs = {\n setup: InternalSetupStruct,\n db: DatabaseInterface\n}\n\nexport default class {\n\n _db: DatabaseInterface;\n\n subscribeKey: string;\n publishKey: string;\n secretKey: string;\n cipherKey: string;\n authKey: string;\n UUID: string;\n\n proxy: ProxyStruct;\n\n /*\n if _useInstanceId is true, this instanceId will be added to all requests\n */\n instanceId: string;\n\n /*\n If the SDK is running as part of another SDK built atop of it, allow a custom pnsdk with name and version.\n */\n sdkName: string;\n\n /*\n keep track of the SDK family for identifier generator\n */\n sdkFamily: string;\n\n /*\n If the SDK is operated by a partner, allow a custom pnsdk item for them.\n */\n partnerId: string;\n\n /*\n filter expression to pass along when subscribing.\n */\n filterExpression: string;\n /*\n configuration to supress leave events; when a presence leave is performed\n this configuration will disallow the leave event from happening\n */\n suppressLeaveEvents: boolean;\n\n /*\n use SSL for http requests?\n */\n secure: boolean;\n\n // Custom optional origin.\n origin: string;\n\n // log verbosity: true to output lots of info\n logVerbosity: boolean;\n\n // if instanceId config is true, the SDK will pass the unique instance identifier to the server as instanceId=\n useInstanceId: boolean;\n\n // if requestId config is true, the SDK will pass a unique request identifier with each request as request_id=\n useRequestId: boolean;\n\n // use connection keep-alive for http requests\n keepAlive: ?boolean;\n\n keepAliveSettings: ?KeepAliveStruct;\n\n // if autoNetworkDetection config is true, the SDK will emit NetworkUp and NetworkDown when there changes in the networking\n autoNetworkDetection: ?boolean;\n\n // alert when a heartbeat works out.\n announceSuccessfulHeartbeats: boolean;\n announceFailedHeartbeats: boolean;\n\n /*\n how long the server will wait before declaring that the client is gone.\n */\n _presenceTimeout: number;\n\n /*\n how often (in seconds) the client should announce its presence to server\n */\n _heartbeatInterval: number;\n\n /*\n how long to wait for the server when running the subscribe loop\n */\n _subscribeRequestTimeout: number;\n /*\n how long to wait for the server when making transactional requests\n */\n _transactionalRequestTimeout: number;\n /*\n use send beacon API when unsubscribing.\n https://developer.mozilla.org/en-US/docs/Web/API/Navigator/sendBeacon\n */\n _useSendBeacon: boolean;\n\n /*\n if set, the SDK will alert if more messages arrive in one subscribe than the theshold\n */\n requestMessageCountThreshold: number;\n\n /*\n Restore subscription list on disconnection.\n */\n restore: boolean;\n\n\n /*\n support for client deduping\n */\n dedupeOnSubscribe: boolean\n maximumCacheSize: number\n\n /*\n support customp encryption and decryption functions.\n */\n customEncrypt: Function // function to support custome encryption of messages\n customDecrypt: Function // function used to decrypt old version messages\n\n constructor({ setup, db } : ConfigConstructArgs) {\n this._db = db;\n\n this.instanceId = `pn-${uuidGenerator.createUUID()}`;\n this.secretKey = setup.secretKey || setup.secret_key;\n this.subscribeKey = setup.subscribeKey || setup.subscribe_key;\n this.publishKey = setup.publishKey || setup.publish_key;\n this.sdkName = setup.sdkName;\n this.sdkFamily = setup.sdkFamily;\n this.partnerId = setup.partnerId;\n this.setAuthKey(setup.authKey);\n this.setCipherKey(setup.cipherKey);\n\n this.setFilterExpression(setup.filterExpression);\n\n this.origin = setup.origin || 'pubsub.pndsn.com';\n this.secure = setup.ssl || false;\n this.restore = setup.restore || false;\n this.proxy = setup.proxy;\n this.keepAlive = setup.keepAlive;\n this.keepAliveSettings = setup.keepAliveSettings;\n this.autoNetworkDetection = setup.autoNetworkDetection || false;\n\n this.dedupeOnSubscribe = setup.dedupeOnSubscribe || false;\n this.maximumCacheSize = setup.maximumCacheSize || 100;\n\n this.customEncrypt = setup.customEncrypt;\n this.customDecrypt = setup.customDecrypt;\n\n // if location config exist and we are in https, force secure to true.\n if (typeof location !== 'undefined' && location.protocol === 'https:') {\n this.secure = true;\n }\n\n this.logVerbosity = setup.logVerbosity || false;\n this.suppressLeaveEvents = setup.suppressLeaveEvents || false;\n\n this.announceFailedHeartbeats = setup.announceFailedHeartbeats || true;\n this.announceSuccessfulHeartbeats = setup.announceSuccessfulHeartbeats || false;\n\n this.useInstanceId = setup.useInstanceId || false;\n this.useRequestId = setup.useRequestId || false;\n\n this.requestMessageCountThreshold = setup.requestMessageCountThreshold;\n\n // set timeout to how long a transaction request will wait for the server (default 15 seconds)\n this.setTransactionTimeout(setup.transactionalRequestTimeout || 15 * 1000);\n // set timeout to how long a subscribe event loop will run (default 310 seconds)\n this.setSubscribeTimeout(setup.subscribeRequestTimeout || 310 * 1000);\n // set config on beacon (https://developer.mozilla.org/en-US/docs/Web/API/Navigator/sendBeacon) usage\n this.setSendBeaconConfig(setup.useSendBeacon || true);\n // how long the SDK will report the client to be alive before issuing a timeout\n this.setPresenceTimeout(setup.presenceTimeout || 300);\n\n if (setup.heartbeatInterval != null) {\n this.setHeartbeatInterval(setup.heartbeatInterval);\n }\n\n this.setUUID(this._decideUUID(setup.uuid)); // UUID decision depends on subKey.\n }\n\n // exposed setters\n getAuthKey(): string { return this.authKey; }\n setAuthKey(val: string): this { this.authKey = val; return this; }\n setCipherKey(val: string): this { this.cipherKey = val; return this; }\n getUUID(): string { return this.UUID; }\n setUUID(val: string): this {\n if (this._db && this._db.set) this._db.set(`${this.subscribeKey}uuid`, val);\n this.UUID = val;\n return this;\n }\n\n getFilterExpression(): string { return this.filterExpression; }\n setFilterExpression(val: string): this { this.filterExpression = val; return this; }\n\n getPresenceTimeout(): number { return this._presenceTimeout; }\n setPresenceTimeout(val: number): this {\n this._presenceTimeout = val;\n this.setHeartbeatInterval((this._presenceTimeout / 2) - 1);\n return this;\n }\n\n setProxy(proxy: ProxyStruct) {\n this.proxy = proxy;\n }\n\n getHeartbeatInterval(): number { return this._heartbeatInterval; }\n setHeartbeatInterval(val: number): this { this._heartbeatInterval = val; return this; }\n\n // deprecated setters.\n getSubscribeTimeout(): number { return this._subscribeRequestTimeout; }\n setSubscribeTimeout(val: number): this { this._subscribeRequestTimeout = val; return this; }\n\n getTransactionTimeout(): number { return this._transactionalRequestTimeout; }\n setTransactionTimeout(val: number): this { this._transactionalRequestTimeout = val; return this; }\n\n isSendBeaconEnabled(): boolean { return this._useSendBeacon; }\n setSendBeaconConfig(val: boolean): this { this._useSendBeacon = val; return this; }\n\n getVersion(): string {\n return '4.19.0';\n }\n\n _decideUUID(providedUUID: string): string {\n // if the uuid was provided by setup, use this UUID.\n if (providedUUID) {\n return providedUUID;\n }\n\n // if the database module is enabled and we have something saved, use this.\n if (this._db && this._db.get && this._db.get(`${this.subscribeKey}uuid`)) {\n return this._db.get(`${this.subscribeKey}uuid`);\n }\n\n // randomize the UUID and push to storage\n return `pn-${uuidGenerator.createUUID()}`;\n }\n}\n"]} \ No newline at end of file diff --git a/lib/core/components/subscription_manager.js b/lib/core/components/subscription_manager.js index 46149c7e4..f38c0cf04 100644 --- a/lib/core/components/subscription_manager.js +++ b/lib/core/components/subscription_manager.js @@ -66,12 +66,18 @@ var _class = function () { this._channels = {}; this._presenceChannels = {}; + this._heartbeatChannels = {}; + this._heartbeatChannelGroups = {}; + this._channelGroups = {}; this._presenceChannelGroups = {}; this._pendingChannelSubscriptions = []; this._pendingChannelGroupSubscriptions = []; + this._pendingHeartbeatChannels = []; + this._pendingHeartbeatChannelGroups = []; + this._currentTimetoken = 0; this._lastTimetoken = 0; this._storedTimetoken = null; @@ -107,15 +113,59 @@ var _class = function () { return this._setStateEndpoint({ state: state, channels: channels, channelGroups: channelGroups }, callback); } }, { - key: 'adaptSubscribeChange', - value: function adaptSubscribeChange(args) { + key: 'adaptPresenceChange', + value: function adaptPresenceChange(args) { var _this2 = this; - var timetoken = args.timetoken, + var connected = args.connected, _args$channels2 = args.channels, channels = _args$channels2 === undefined ? [] : _args$channels2, _args$channelGroups2 = args.channelGroups, - channelGroups = _args$channelGroups2 === undefined ? [] : _args$channelGroups2, + channelGroups = _args$channelGroups2 === undefined ? [] : _args$channelGroups2; + + + if (connected) { + channels.forEach(function (channel) { + _this2._heartbeatChannels[channel] = { state: {} }; + _this2._pendingHeartbeatChannels.push(channel); + }); + + channelGroups.forEach(function (channelGroup) { + _this2._heartbeatChannelGroups[channelGroup] = { state: {} }; + _this2._pendingHeartbeatChannelGroups.push(channelGroup); + }); + } else { + channels.forEach(function (channel) { + if (channel in _this2._heartbeatChannels) { + delete _this2._heartbeatChannels[channel]; + } + }); + + channelGroups.forEach(function (channelGroup) { + if (channelGroup in _this2._heartbeatChannelGroups) { + delete _this2._heartbeatChannelGroups[channelGroup]; + } + }); + + if (this._config.suppressLeaveEvents === false) { + this._leaveEndpoint({ channels: channels, channelGroups: channelGroups }, function (status) { + _this2._listenerManager.announceStatus(status); + }); + } + } + + this.reconnect(); + } + }, { + key: 'adaptSubscribeChange', + value: function adaptSubscribeChange(args) { + var _this3 = this; + + var timetoken = args.timetoken, + _args$channels3 = args.channels, + channels = _args$channels3 === undefined ? [] : _args$channels3, + _args$channelGroups3 = args.channelGroups, + channelGroups = _args$channelGroups3 === undefined ? [] : _args$channelGroups3, _args$withPresence = args.withPresence, withPresence = _args$withPresence === undefined ? false : _args$withPresence; @@ -136,17 +186,17 @@ var _class = function () { } channels.forEach(function (channel) { - _this2._channels[channel] = { state: {} }; - if (withPresence) _this2._presenceChannels[channel] = {}; + _this3._channels[channel] = { state: {} }; + if (withPresence) _this3._presenceChannels[channel] = {}; - _this2._pendingChannelSubscriptions.push(channel); + _this3._pendingChannelSubscriptions.push(channel); }); channelGroups.forEach(function (channelGroup) { - _this2._channelGroups[channelGroup] = { state: {} }; - if (withPresence) _this2._presenceChannelGroups[channelGroup] = {}; + _this3._channelGroups[channelGroup] = { state: {} }; + if (withPresence) _this3._presenceChannelGroups[channelGroup] = {}; - _this2._pendingChannelGroupSubscriptions.push(channelGroup); + _this3._pendingChannelGroupSubscriptions.push(channelGroup); }); this._subscriptionStatusAnnounced = false; @@ -155,35 +205,35 @@ var _class = function () { }, { key: 'adaptUnsubscribeChange', value: function adaptUnsubscribeChange(args, isOffline) { - var _this3 = this; + var _this4 = this; - var _args$channels3 = args.channels, - channels = _args$channels3 === undefined ? [] : _args$channels3, - _args$channelGroups3 = args.channelGroups, - channelGroups = _args$channelGroups3 === undefined ? [] : _args$channelGroups3; + var _args$channels4 = args.channels, + channels = _args$channels4 === undefined ? [] : _args$channels4, + _args$channelGroups4 = args.channelGroups, + channelGroups = _args$channelGroups4 === undefined ? [] : _args$channelGroups4; var actualChannels = []; var actualChannelGroups = []; channels.forEach(function (channel) { - if (channel in _this3._channels) { - delete _this3._channels[channel]; + if (channel in _this4._channels) { + delete _this4._channels[channel]; actualChannels.push(channel); } - if (channel in _this3._presenceChannels) { - delete _this3._presenceChannels[channel]; + if (channel in _this4._presenceChannels) { + delete _this4._presenceChannels[channel]; actualChannels.push(channel); } }); channelGroups.forEach(function (channelGroup) { - if (channelGroup in _this3._channelGroups) { - delete _this3._channelGroups[channelGroup]; + if (channelGroup in _this4._channelGroups) { + delete _this4._channelGroups[channelGroup]; actualChannelGroups.push(channelGroup); } - if (channelGroup in _this3._presenceChannelGroups) { - delete _this3._channelGroups[channelGroup]; + if (channelGroup in _this4._presenceChannelGroups) { + delete _this4._channelGroups[channelGroup]; actualChannelGroups.push(channelGroup); } }); @@ -196,9 +246,9 @@ var _class = function () { this._leaveEndpoint({ channels: actualChannels, channelGroups: actualChannelGroups }, function (status) { status.affectedChannels = actualChannels; status.affectedChannelGroups = actualChannelGroups; - status.currentTimetoken = _this3._currentTimetoken; - status.lastTimetoken = _this3._lastTimetoken; - _this3._listenerManager.announceStatus(status); + status.currentTimetoken = _this4._currentTimetoken; + status.lastTimetoken = _this4._lastTimetoken; + _this4._listenerManager.announceStatus(status); }); } @@ -217,6 +267,16 @@ var _class = function () { value: function unsubscribeAll(isOffline) { this.adaptUnsubscribeChange({ channels: this.getSubscribedChannels(), channelGroups: this.getSubscribedChannelGroups() }, isOffline); } + }, { + key: 'getHeartbeatChannels', + value: function getHeartbeatChannels() { + return Object.keys(this._heartbeatChannels); + } + }, { + key: 'getHeartbeatChannelGroups', + value: function getHeartbeatChannelGroups() { + return Object.keys(this._heartbeatChannelGroups); + } }, { key: 'getSubscribedChannels', value: function getSubscribedChannels() { @@ -263,46 +323,52 @@ var _class = function () { }, { key: '_performHeartbeatLoop', value: function _performHeartbeatLoop() { - var _this4 = this; + var _this5 = this; + + var heartbeatChannels = []; + heartbeatChannels = heartbeatChannels.concat(this.getHeartbeatChannels()); + heartbeatChannels = heartbeatChannels.concat(this.getSubscribedChannels()); + + var heartbeatChannelGroups = []; + heartbeatChannelGroups = heartbeatChannelGroups.concat(this.getHeartbeatChannelGroups()); + heartbeatChannelGroups = heartbeatChannelGroups.concat(this.getSubscribedChannelGroups()); - var presenceChannels = Object.keys(this._channels); - var presenceChannelGroups = Object.keys(this._channelGroups); var presenceState = {}; - if (presenceChannels.length === 0 && presenceChannelGroups.length === 0) { + if (heartbeatChannels.length === 0 && heartbeatChannelGroups.length === 0) { return; } - presenceChannels.forEach(function (channel) { - var channelState = _this4._channels[channel].state; + this.getSubscribedChannels().forEach(function (channel) { + var channelState = _this5._channels[channel].state; if (Object.keys(channelState).length) presenceState[channel] = channelState; }); - presenceChannelGroups.forEach(function (channelGroup) { - var channelGroupState = _this4._channelGroups[channelGroup].state; + this.getSubscribedChannelGroups().forEach(function (channelGroup) { + var channelGroupState = _this5._channelGroups[channelGroup].state; if (Object.keys(channelGroupState).length) presenceState[channelGroup] = channelGroupState; }); var onHeartbeat = function onHeartbeat(status) { - if (status.error && _this4._config.announceFailedHeartbeats) { - _this4._listenerManager.announceStatus(status); + if (status.error && _this5._config.announceFailedHeartbeats) { + _this5._listenerManager.announceStatus(status); } - if (status.error && _this4._config.autoNetworkDetection && _this4._isOnline) { - _this4._isOnline = false; - _this4.disconnect(); - _this4._listenerManager.announceNetworkDown(); - _this4.reconnect(); + if (status.error && _this5._config.autoNetworkDetection && _this5._isOnline) { + _this5._isOnline = false; + _this5.disconnect(); + _this5._listenerManager.announceNetworkDown(); + _this5.reconnect(); } - if (!status.error && _this4._config.announceSuccessfulHeartbeats) { - _this4._listenerManager.announceStatus(status); + if (!status.error && _this5._config.announceSuccessfulHeartbeats) { + _this5._listenerManager.announceStatus(status); } }; this._heartbeatEndpoint({ - channels: presenceChannels, - channelGroups: presenceChannelGroups, + channels: heartbeatChannels, + channelGroups: heartbeatChannelGroups, state: presenceState }, onHeartbeat.bind(this)); } }, { @@ -343,7 +409,7 @@ var _class = function () { }, { key: '_processSubscribeResponse', value: function _processSubscribeResponse(status, payload) { - var _this5 = this; + var _this6 = this; if (status.error) { if (status.category === _categories2.default.PNTimeoutCategory) { @@ -357,19 +423,19 @@ var _class = function () { } this._reconnectionManager.onReconnection(function () { - if (_this5._config.autoNetworkDetection && !_this5._isOnline) { - _this5._isOnline = true; - _this5._listenerManager.announceNetworkUp(); + if (_this6._config.autoNetworkDetection && !_this6._isOnline) { + _this6._isOnline = true; + _this6._listenerManager.announceNetworkUp(); } - _this5.reconnect(); - _this5._subscriptionStatusAnnounced = true; + _this6.reconnect(); + _this6._subscriptionStatusAnnounced = true; var reconnectedAnnounce = { category: _categories2.default.PNReconnectedCategory, operation: status.operation, - lastTimetoken: _this5._lastTimetoken, - currentTimetoken: _this5._currentTimetoken + lastTimetoken: _this6._lastTimetoken, + currentTimetoken: _this6._currentTimetoken }; - _this5._listenerManager.announceStatus(reconnectedAnnounce); + _this6._listenerManager.announceStatus(reconnectedAnnounce); }); this._reconnectionManager.startPolling(); @@ -431,10 +497,10 @@ var _class = function () { } if (dedupeOnSubscribe) { - if (_this5._dedupingManager.isDuplicate(message)) { + if (_this6._dedupingManager.isDuplicate(message)) { return; } else { - _this5._dedupingManager.addEntry(message); + _this6._dedupingManager.addEntry(message); } } @@ -474,7 +540,7 @@ var _class = function () { announce.timeout = message.payload.timeout; } - _this5._listenerManager.announcePresence(announce); + _this6._listenerManager.announcePresence(announce); } else { var _announce = {}; _announce.channel = null; @@ -493,13 +559,13 @@ var _class = function () { _announce.userMetadata = message.userMetadata; } - if (_this5._config.cipherKey) { - _announce.message = _this5._crypto.decrypt(message.payload); + if (_this6._config.cipherKey) { + _announce.message = _this6._crypto.decrypt(message.payload); } else { _announce.message = message.payload; } - _this5._listenerManager.announceMessage(_announce); + _this6._listenerManager.announceMessage(_announce); } }); diff --git a/lib/core/components/subscription_manager.js.map b/lib/core/components/subscription_manager.js.map index d42a06040..285511140 100644 --- a/lib/core/components/subscription_manager.js.map +++ b/lib/core/components/subscription_manager.js.map @@ -1 +1 @@ -{"version":3,"sources":["core/components/subscription_manager.js"],"names":["subscribeEndpoint","leaveEndpoint","heartbeatEndpoint","setStateEndpoint","timeEndpoint","config","crypto","listenerManager","_listenerManager","_config","_leaveEndpoint","_heartbeatEndpoint","_setStateEndpoint","_subscribeEndpoint","_crypto","_channels","_presenceChannels","_channelGroups","_presenceChannelGroups","_pendingChannelSubscriptions","_pendingChannelGroupSubscriptions","_currentTimetoken","_lastTimetoken","_storedTimetoken","_subscriptionStatusAnnounced","_isOnline","_reconnectionManager","_dedupingManager","args","callback","state","channels","channelGroups","forEach","channel","channelGroup","timetoken","withPresence","subscribeKey","console","log","push","reconnect","isOffline","actualChannels","actualChannelGroups","length","suppressLeaveEvents","status","affectedChannels","affectedChannelGroups","currentTimetoken","lastTimetoken","announceStatus","Object","keys","_region","stopPolling","adaptUnsubscribeChange","getSubscribedChannels","getSubscribedChannelGroups","_startSubscribeLoop","_registerHeartbeatTimer","_stopSubscribeLoop","_stopHeartbeatTimer","getHeartbeatInterval","_performHeartbeatLoop","_heartbeatTimer","setInterval","bind","clearInterval","presenceChannels","presenceChannelGroups","presenceState","channelState","channelGroupState","onHeartbeat","error","announceFailedHeartbeats","autoNetworkDetection","disconnect","announceNetworkDown","announceSuccessfulHeartbeats","subscribeArgs","filterExpression","region","_subscribeCall","_processSubscribeResponse","payload","category","PNTimeoutCategory","PNNetworkIssuesCategory","onReconnection","announceNetworkUp","reconnectedAnnounce","PNReconnectedCategory","operation","startPolling","PNBadRequestCategory","metadata","connectedAnnounce","PNConnectedCategory","subscribedChannels","messages","requestMessageCountThreshold","dedupeOnSubscribe","countAnnouncement","PNRequestMessageCountExceededCategory","message","subscriptionMatch","publishMetaData","isDuplicate","addEntry","endsWith","announce","subscription","actualChannel","subscribedChannel","substring","lastIndexOf","action","data","publishTimetoken","occupancy","uuid","timestamp","join","leave","timeout","announcePresence","publisher","issuingClientId","userMetadata","cipherKey","decrypt","announceMessage","abort"],"mappings":"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","file":"subscription_manager.js","sourcesContent":["/* @flow */\nimport Crypto from '../components/cryptography';\nimport Config from '../components/config';\nimport ListenerManager from '../components/listener_manager';\nimport ReconnectionManager from '../components/reconnection_manager';\nimport DedupingManager from '../components/deduping_manager';\nimport utils from '../utils';\nimport { MessageAnnouncement, SubscribeEnvelope, StatusAnnouncement, PresenceAnnouncement } from '../flow_interfaces';\nimport categoryConstants from '../constants/categories';\n\ntype SubscribeArgs = {\n channels: Array,\n channelGroups: Array,\n withPresence: ?boolean,\n timetoken: ?number\n}\n\ntype UnsubscribeArgs = {\n channels: Array,\n channelGroups: Array\n}\n\ntype StateArgs = {\n channels: Array,\n channelGroups: Array,\n state: Object\n}\n\ntype SubscriptionManagerConsturct = {\n leaveEndpoint: Function,\n subscribeEndpoint: Function,\n timeEndpoint: Function,\n heartbeatEndpoint: Function,\n setStateEndpoint: Function,\n config: Config,\n crypto: Crypto,\n listenerManager: ListenerManager\n}\n\nexport default class {\n\n _crypto: Crypto;\n _config: Config;\n _listenerManager: ListenerManager;\n _reconnectionManager: ReconnectionManager;\n\n _leaveEndpoint: Function;\n _heartbeatEndpoint: Function;\n _setStateEndpoint: Function;\n _subscribeEndpoint: Function;\n\n _channels: Object;\n _presenceChannels: Object;\n\n _channelGroups: Object;\n _presenceChannelGroups: Object;\n\n _currentTimetoken: number;\n _lastTimetoken: number;\n _storedTimetoken: ?number;\n\n _region: ?number;\n\n _subscribeCall: ?Object;\n _heartbeatTimer: ?number;\n\n _subscriptionStatusAnnounced: boolean;\n\n _autoNetworkDetection: boolean;\n _isOnline: boolean;\n\n // store pending connection elements\n _pendingChannelSubscriptions: Array;\n _pendingChannelGroupSubscriptions: Array;\n //\n\n _dedupingManager: DedupingManager;\n\n constructor({ subscribeEndpoint, leaveEndpoint, heartbeatEndpoint, setStateEndpoint, timeEndpoint, config, crypto, listenerManager }: SubscriptionManagerConsturct) {\n this._listenerManager = listenerManager;\n this._config = config;\n\n this._leaveEndpoint = leaveEndpoint;\n this._heartbeatEndpoint = heartbeatEndpoint;\n this._setStateEndpoint = setStateEndpoint;\n this._subscribeEndpoint = subscribeEndpoint;\n\n this._crypto = crypto;\n\n this._channels = {};\n this._presenceChannels = {};\n\n this._channelGroups = {};\n this._presenceChannelGroups = {};\n\n this._pendingChannelSubscriptions = [];\n this._pendingChannelGroupSubscriptions = [];\n\n this._currentTimetoken = 0;\n this._lastTimetoken = 0;\n this._storedTimetoken = null;\n\n this._subscriptionStatusAnnounced = false;\n\n this._isOnline = true;\n\n this._reconnectionManager = new ReconnectionManager({ timeEndpoint });\n this._dedupingManager = new DedupingManager({ config });\n }\n\n adaptStateChange(args: StateArgs, callback: Function) {\n const { state, channels = [], channelGroups = [] } = args;\n\n channels.forEach((channel) => {\n if (channel in this._channels) this._channels[channel].state = state;\n });\n\n channelGroups.forEach((channelGroup) => {\n if (channelGroup in this._channelGroups) this._channelGroups[channelGroup].state = state;\n });\n\n return this._setStateEndpoint({ state, channels, channelGroups }, callback);\n }\n\n adaptSubscribeChange(args: SubscribeArgs) {\n const { timetoken, channels = [], channelGroups = [], withPresence = false } = args;\n\n if (!this._config.subscribeKey || this._config.subscribeKey === '') {\n if (console && console.log) console.log('subscribe key missing; aborting subscribe') //eslint-disable-line\n return;\n }\n\n if (timetoken) {\n this._lastTimetoken = this._currentTimetoken;\n this._currentTimetoken = timetoken;\n }\n\n // reset the current timetoken to get a connect event.\n if (this._currentTimetoken !== '0') {\n this._storedTimetoken = this._currentTimetoken;\n this._currentTimetoken = 0;\n }\n\n channels.forEach((channel: string) => {\n this._channels[channel] = { state: {} };\n if (withPresence) this._presenceChannels[channel] = {};\n\n this._pendingChannelSubscriptions.push(channel);\n });\n\n channelGroups.forEach((channelGroup: string) => {\n this._channelGroups[channelGroup] = { state: {} };\n if (withPresence) this._presenceChannelGroups[channelGroup] = {};\n\n this._pendingChannelGroupSubscriptions.push(channelGroup);\n });\n\n this._subscriptionStatusAnnounced = false;\n this.reconnect();\n }\n\n adaptUnsubscribeChange(args: UnsubscribeArgs, isOffline: boolean) {\n const { channels = [], channelGroups = [] } = args;\n\n // keep track of which channels and channel groups\n // we are going to unsubscribe from.\n const actualChannels = [];\n const actualChannelGroups = [];\n //\n\n channels.forEach((channel) => {\n if (channel in this._channels) {\n delete this._channels[channel];\n actualChannels.push(channel);\n }\n if (channel in this._presenceChannels) {\n delete this._presenceChannels[channel];\n actualChannels.push(channel);\n }\n });\n\n channelGroups.forEach((channelGroup) => {\n if (channelGroup in this._channelGroups) {\n delete this._channelGroups[channelGroup];\n actualChannelGroups.push(channelGroup);\n }\n if (channelGroup in this._presenceChannelGroups) {\n delete this._channelGroups[channelGroup];\n actualChannelGroups.push(channelGroup);\n }\n });\n\n // no-op if there are no channels and cg's to unsubscribe from.\n if (actualChannels.length === 0 && actualChannelGroups.length === 0) {\n return;\n }\n\n if (this._config.suppressLeaveEvents === false && !isOffline) {\n this._leaveEndpoint({ channels: actualChannels, channelGroups: actualChannelGroups }, (status) => {\n status.affectedChannels = actualChannels;\n status.affectedChannelGroups = actualChannelGroups;\n status.currentTimetoken = this._currentTimetoken;\n status.lastTimetoken = this._lastTimetoken;\n this._listenerManager.announceStatus(status);\n });\n }\n\n // if we have nothing to subscribe to, reset the timetoken.\n if (Object.keys(this._channels).length === 0 &&\n Object.keys(this._presenceChannels).length === 0 &&\n Object.keys(this._channelGroups).length === 0 &&\n Object.keys(this._presenceChannelGroups).length === 0) {\n this._lastTimetoken = 0;\n this._currentTimetoken = 0;\n this._storedTimetoken = null;\n this._region = null;\n this._reconnectionManager.stopPolling();\n }\n\n this.reconnect();\n }\n\n unsubscribeAll(isOffline: boolean) {\n this.adaptUnsubscribeChange({ channels: this.getSubscribedChannels(), channelGroups: this.getSubscribedChannelGroups() }, isOffline);\n }\n\n getSubscribedChannels(): Array {\n return Object.keys(this._channels);\n }\n\n getSubscribedChannelGroups(): Array {\n return Object.keys(this._channelGroups);\n }\n\n reconnect() {\n this._startSubscribeLoop();\n this._registerHeartbeatTimer();\n }\n\n disconnect() {\n this._stopSubscribeLoop();\n this._stopHeartbeatTimer();\n this._reconnectionManager.stopPolling();\n }\n\n _registerHeartbeatTimer() {\n this._stopHeartbeatTimer();\n\n // if the interval is 0, do not queue up heartbeating\n if (this._config.getHeartbeatInterval() === 0) {\n return;\n }\n\n this._performHeartbeatLoop();\n this._heartbeatTimer = setInterval(this._performHeartbeatLoop.bind(this), this._config.getHeartbeatInterval() * 1000);\n }\n\n _stopHeartbeatTimer() {\n if (this._heartbeatTimer) {\n clearInterval(this._heartbeatTimer);\n this._heartbeatTimer = null;\n }\n }\n\n _performHeartbeatLoop() {\n let presenceChannels = Object.keys(this._channels);\n let presenceChannelGroups = Object.keys(this._channelGroups);\n let presenceState = {};\n\n if (presenceChannels.length === 0 && presenceChannelGroups.length === 0) {\n return;\n }\n\n presenceChannels.forEach((channel) => {\n let channelState = this._channels[channel].state;\n if (Object.keys(channelState).length) presenceState[channel] = channelState;\n });\n\n presenceChannelGroups.forEach((channelGroup) => {\n let channelGroupState = this._channelGroups[channelGroup].state;\n if (Object.keys(channelGroupState).length) presenceState[channelGroup] = channelGroupState;\n });\n\n let onHeartbeat = (status: StatusAnnouncement) => {\n if (status.error && this._config.announceFailedHeartbeats) {\n this._listenerManager.announceStatus(status);\n }\n\n if (status.error && this._config.autoNetworkDetection && this._isOnline) {\n this._isOnline = false;\n this.disconnect();\n this._listenerManager.announceNetworkDown();\n this.reconnect();\n }\n\n if (!status.error && this._config.announceSuccessfulHeartbeats) {\n this._listenerManager.announceStatus(status);\n }\n };\n\n this._heartbeatEndpoint({\n channels: presenceChannels,\n channelGroups: presenceChannelGroups,\n state: presenceState }, onHeartbeat.bind(this));\n }\n\n _startSubscribeLoop() {\n this._stopSubscribeLoop();\n let channels = [];\n let channelGroups = [];\n\n Object.keys(this._channels).forEach(channel => channels.push(channel));\n Object.keys(this._presenceChannels).forEach(channel => channels.push(`${channel}-pnpres`));\n\n Object.keys(this._channelGroups).forEach(channelGroup => channelGroups.push(channelGroup));\n Object.keys(this._presenceChannelGroups).forEach(channelGroup => channelGroups.push(`${channelGroup}-pnpres`));\n\n if (channels.length === 0 && channelGroups.length === 0) {\n return;\n }\n\n const subscribeArgs = {\n channels,\n channelGroups,\n timetoken: this._currentTimetoken,\n filterExpression: this._config.filterExpression,\n region: this._region\n };\n\n this._subscribeCall = this._subscribeEndpoint(subscribeArgs, this._processSubscribeResponse.bind(this));\n }\n\n _processSubscribeResponse(status: StatusAnnouncement, payload: SubscribeEnvelope) {\n if (status.error) {\n // if we timeout from server, restart the loop.\n if (status.category === categoryConstants.PNTimeoutCategory) {\n this._startSubscribeLoop();\n } else if (status.category === categoryConstants.PNNetworkIssuesCategory) {\n // we lost internet connection, alert the reconnection manager and terminate all loops\n this.disconnect();\n\n if (status.error && this._config.autoNetworkDetection && this._isOnline) {\n this._isOnline = false;\n this._listenerManager.announceNetworkDown();\n }\n\n this._reconnectionManager.onReconnection(() => {\n if (this._config.autoNetworkDetection && !this._isOnline) {\n this._isOnline = true;\n this._listenerManager.announceNetworkUp();\n }\n this.reconnect();\n this._subscriptionStatusAnnounced = true;\n let reconnectedAnnounce: StatusAnnouncement = {\n category: categoryConstants.PNReconnectedCategory,\n operation: status.operation,\n lastTimetoken: this._lastTimetoken,\n currentTimetoken: this._currentTimetoken\n };\n this._listenerManager.announceStatus(reconnectedAnnounce);\n });\n\n this._reconnectionManager.startPolling();\n this._listenerManager.announceStatus(status);\n } else if (status.category === categoryConstants.PNBadRequestCategory) {\n this._stopHeartbeatTimer();\n this._listenerManager.announceStatus(status);\n } else {\n this._listenerManager.announceStatus(status);\n }\n\n return;\n }\n\n if (this._storedTimetoken) {\n this._currentTimetoken = this._storedTimetoken;\n this._storedTimetoken = null;\n } else {\n this._lastTimetoken = this._currentTimetoken;\n this._currentTimetoken = payload.metadata.timetoken;\n }\n\n if (!this._subscriptionStatusAnnounced) {\n let connectedAnnounce: StatusAnnouncement = {};\n connectedAnnounce.category = categoryConstants.PNConnectedCategory;\n connectedAnnounce.operation = status.operation;\n connectedAnnounce.affectedChannels = this._pendingChannelSubscriptions;\n connectedAnnounce.subscribedChannels = this.getSubscribedChannels();\n connectedAnnounce.affectedChannelGroups = this._pendingChannelGroupSubscriptions;\n connectedAnnounce.lastTimetoken = this._lastTimetoken;\n connectedAnnounce.currentTimetoken = this._currentTimetoken;\n this._subscriptionStatusAnnounced = true;\n this._listenerManager.announceStatus(connectedAnnounce);\n\n // clear the pending connections list\n this._pendingChannelSubscriptions = [];\n this._pendingChannelGroupSubscriptions = [];\n }\n\n let messages = payload.messages || [];\n let { requestMessageCountThreshold, dedupeOnSubscribe } = this._config;\n\n if (requestMessageCountThreshold && messages.length >= requestMessageCountThreshold) {\n let countAnnouncement: StatusAnnouncement = {};\n countAnnouncement.category = categoryConstants.PNRequestMessageCountExceededCategory;\n countAnnouncement.operation = status.operation;\n this._listenerManager.announceStatus(countAnnouncement);\n }\n\n messages.forEach((message) => {\n let channel = message.channel;\n let subscriptionMatch = message.subscriptionMatch;\n let publishMetaData = message.publishMetaData;\n\n if (channel === subscriptionMatch) {\n subscriptionMatch = null;\n }\n\n if (dedupeOnSubscribe) {\n if (this._dedupingManager.isDuplicate(message)) {\n return;\n } else {\n this._dedupingManager.addEntry(message);\n }\n }\n\n if (utils.endsWith(message.channel, '-pnpres')) {\n let announce: PresenceAnnouncement = {};\n announce.channel = null;\n announce.subscription = null;\n\n // deprecated -->\n announce.actualChannel = (subscriptionMatch != null) ? channel : null;\n announce.subscribedChannel = subscriptionMatch != null ? subscriptionMatch : channel;\n // <-- deprecated\n\n if (channel) {\n announce.channel = channel.substring(0, channel.lastIndexOf('-pnpres'));\n }\n\n if (subscriptionMatch) {\n announce.subscription = subscriptionMatch.substring(0, subscriptionMatch.lastIndexOf('-pnpres'));\n }\n\n announce.action = message.payload.action;\n announce.state = message.payload.data;\n announce.timetoken = publishMetaData.publishTimetoken;\n announce.occupancy = message.payload.occupancy;\n announce.uuid = message.payload.uuid;\n announce.timestamp = message.payload.timestamp;\n\n if (message.payload.join) {\n announce.join = message.payload.join;\n }\n\n if (message.payload.leave) {\n announce.leave = message.payload.leave;\n }\n\n if (message.payload.timeout) {\n announce.timeout = message.payload.timeout;\n }\n\n this._listenerManager.announcePresence(announce);\n } else {\n let announce: MessageAnnouncement = {};\n announce.channel = null;\n announce.subscription = null;\n\n // deprecated -->\n announce.actualChannel = (subscriptionMatch != null) ? channel : null;\n announce.subscribedChannel = subscriptionMatch != null ? subscriptionMatch : channel;\n // <-- deprecated\n\n announce.channel = channel;\n announce.subscription = subscriptionMatch;\n announce.timetoken = publishMetaData.publishTimetoken;\n announce.publisher = message.issuingClientId;\n\n if (message.userMetadata) {\n announce.userMetadata = message.userMetadata;\n }\n\n if (this._config.cipherKey) {\n announce.message = this._crypto.decrypt(message.payload);\n } else {\n announce.message = message.payload;\n }\n\n this._listenerManager.announceMessage(announce);\n }\n });\n\n this._region = payload.metadata.region;\n this._startSubscribeLoop();\n }\n\n _stopSubscribeLoop() {\n if (this._subscribeCall) {\n if (typeof this._subscribeCall.abort === 'function') {\n this._subscribeCall.abort();\n }\n this._subscribeCall = null;\n }\n }\n\n}\n"]} \ No newline at end of file +{"version":3,"sources":["core/components/subscription_manager.js"],"names":["subscribeEndpoint","leaveEndpoint","heartbeatEndpoint","setStateEndpoint","timeEndpoint","config","crypto","listenerManager","_listenerManager","_config","_leaveEndpoint","_heartbeatEndpoint","_setStateEndpoint","_subscribeEndpoint","_crypto","_channels","_presenceChannels","_heartbeatChannels","_heartbeatChannelGroups","_channelGroups","_presenceChannelGroups","_pendingChannelSubscriptions","_pendingChannelGroupSubscriptions","_pendingHeartbeatChannels","_pendingHeartbeatChannelGroups","_currentTimetoken","_lastTimetoken","_storedTimetoken","_subscriptionStatusAnnounced","_isOnline","_reconnectionManager","_dedupingManager","args","callback","state","channels","channelGroups","forEach","channel","channelGroup","connected","push","suppressLeaveEvents","status","announceStatus","reconnect","timetoken","withPresence","subscribeKey","console","log","isOffline","actualChannels","actualChannelGroups","length","affectedChannels","affectedChannelGroups","currentTimetoken","lastTimetoken","Object","keys","_region","stopPolling","adaptUnsubscribeChange","getSubscribedChannels","getSubscribedChannelGroups","_startSubscribeLoop","_registerHeartbeatTimer","_stopSubscribeLoop","_stopHeartbeatTimer","getHeartbeatInterval","_performHeartbeatLoop","_heartbeatTimer","setInterval","bind","clearInterval","heartbeatChannels","concat","getHeartbeatChannels","heartbeatChannelGroups","getHeartbeatChannelGroups","presenceState","channelState","channelGroupState","onHeartbeat","error","announceFailedHeartbeats","autoNetworkDetection","disconnect","announceNetworkDown","announceSuccessfulHeartbeats","subscribeArgs","filterExpression","region","_subscribeCall","_processSubscribeResponse","payload","category","PNTimeoutCategory","PNNetworkIssuesCategory","onReconnection","announceNetworkUp","reconnectedAnnounce","PNReconnectedCategory","operation","startPolling","PNBadRequestCategory","metadata","connectedAnnounce","PNConnectedCategory","subscribedChannels","messages","requestMessageCountThreshold","dedupeOnSubscribe","countAnnouncement","PNRequestMessageCountExceededCategory","message","subscriptionMatch","publishMetaData","isDuplicate","addEntry","endsWith","announce","subscription","actualChannel","subscribedChannel","substring","lastIndexOf","action","data","publishTimetoken","occupancy","uuid","timestamp","join","leave","timeout","announcePresence","publisher","issuingClientId","userMetadata","cipherKey","decrypt","announceMessage","abort"],"mappings":"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","file":"subscription_manager.js","sourcesContent":["/* @flow */\nimport Crypto from '../components/cryptography';\nimport Config from '../components/config';\nimport ListenerManager from '../components/listener_manager';\nimport ReconnectionManager from '../components/reconnection_manager';\nimport DedupingManager from '../components/deduping_manager';\nimport utils from '../utils';\nimport { MessageAnnouncement, SubscribeEnvelope, StatusAnnouncement, PresenceAnnouncement } from '../flow_interfaces';\nimport categoryConstants from '../constants/categories';\n\ntype SubscribeArgs = {\n channels: Array,\n channelGroups: Array,\n withPresence: ?boolean,\n timetoken: ?number\n}\n\ntype PresenceArgs = {\n channels: Array,\n channelGroups: Array,\n connected: boolean\n}\n\ntype UnsubscribeArgs = {\n channels: Array,\n channelGroups: Array\n}\n\ntype StateArgs = {\n channels: Array,\n channelGroups: Array,\n state: Object\n}\n\ntype SubscriptionManagerConsturct = {\n leaveEndpoint: Function,\n subscribeEndpoint: Function,\n timeEndpoint: Function,\n heartbeatEndpoint: Function,\n setStateEndpoint: Function,\n config: Config,\n crypto: Crypto,\n listenerManager: ListenerManager\n}\n\nexport default class {\n\n _crypto: Crypto;\n _config: Config;\n _listenerManager: ListenerManager;\n _reconnectionManager: ReconnectionManager;\n\n _leaveEndpoint: Function;\n _heartbeatEndpoint: Function;\n _setStateEndpoint: Function;\n _subscribeEndpoint: Function;\n\n _channels: Object;\n _presenceChannels: Object;\n\n _heartbeatChannels: Object;\n _heartbeatChannelGroups: Object;\n\n _channelGroups: Object;\n _presenceChannelGroups: Object;\n\n _currentTimetoken: number;\n _lastTimetoken: number;\n _storedTimetoken: ?number;\n\n _region: ?number;\n\n _subscribeCall: ?Object;\n _heartbeatTimer: ?number;\n\n _subscriptionStatusAnnounced: boolean;\n\n _autoNetworkDetection: boolean;\n _isOnline: boolean;\n\n // store pending connection elements\n _pendingChannelSubscriptions: Array;\n _pendingChannelGroupSubscriptions: Array;\n\n _pendingHeartbeatChannels: Array;\n _pendingHeartbeatChannelGroups: Array;\n //\n\n _dedupingManager: DedupingManager;\n\n constructor({ subscribeEndpoint, leaveEndpoint, heartbeatEndpoint, setStateEndpoint, timeEndpoint, config, crypto, listenerManager }: SubscriptionManagerConsturct) {\n this._listenerManager = listenerManager;\n this._config = config;\n\n this._leaveEndpoint = leaveEndpoint;\n this._heartbeatEndpoint = heartbeatEndpoint;\n this._setStateEndpoint = setStateEndpoint;\n this._subscribeEndpoint = subscribeEndpoint;\n\n this._crypto = crypto;\n\n this._channels = {};\n this._presenceChannels = {};\n\n this._heartbeatChannels = {};\n this._heartbeatChannelGroups = {};\n\n this._channelGroups = {};\n this._presenceChannelGroups = {};\n\n this._pendingChannelSubscriptions = [];\n this._pendingChannelGroupSubscriptions = [];\n\n this._pendingHeartbeatChannels = [];\n this._pendingHeartbeatChannelGroups = [];\n\n this._currentTimetoken = 0;\n this._lastTimetoken = 0;\n this._storedTimetoken = null;\n\n this._subscriptionStatusAnnounced = false;\n\n this._isOnline = true;\n\n this._reconnectionManager = new ReconnectionManager({ timeEndpoint });\n this._dedupingManager = new DedupingManager({ config });\n }\n\n adaptStateChange(args: StateArgs, callback: Function) {\n const { state, channels = [], channelGroups = [] } = args;\n\n channels.forEach((channel) => {\n if (channel in this._channels) this._channels[channel].state = state;\n });\n\n channelGroups.forEach((channelGroup) => {\n if (channelGroup in this._channelGroups) this._channelGroups[channelGroup].state = state;\n });\n\n return this._setStateEndpoint({ state, channels, channelGroups }, callback);\n }\n\n adaptPresenceChange(args: PresenceArgs) {\n const { connected, channels = [], channelGroups = [] } = args;\n\n if (connected) {\n channels.forEach((channel: string) => {\n this._heartbeatChannels[channel] = { state: {} };\n this._pendingHeartbeatChannels.push(channel);\n });\n\n channelGroups.forEach((channelGroup: string) => {\n this._heartbeatChannelGroups[channelGroup] = { state: {} };\n this._pendingHeartbeatChannelGroups.push(channelGroup);\n });\n } else {\n channels.forEach((channel) => {\n if (channel in this._heartbeatChannels) {\n delete this._heartbeatChannels[channel];\n }\n });\n\n channelGroups.forEach((channelGroup) => {\n if (channelGroup in this._heartbeatChannelGroups) {\n delete this._heartbeatChannelGroups[channelGroup];\n }\n });\n\n if (this._config.suppressLeaveEvents === false) {\n this._leaveEndpoint({ channels, channelGroups }, (status) => {\n this._listenerManager.announceStatus(status);\n });\n }\n }\n\n this.reconnect();\n }\n\n adaptSubscribeChange(args: SubscribeArgs) {\n const { timetoken, channels = [], channelGroups = [], withPresence = false } = args;\n\n if (!this._config.subscribeKey || this._config.subscribeKey === '') {\n if (console && console.log) console.log('subscribe key missing; aborting subscribe') //eslint-disable-line\n return;\n }\n\n if (timetoken) {\n this._lastTimetoken = this._currentTimetoken;\n this._currentTimetoken = timetoken;\n }\n\n // reset the current timetoken to get a connect event.\n if (this._currentTimetoken !== '0') {\n this._storedTimetoken = this._currentTimetoken;\n this._currentTimetoken = 0;\n }\n\n channels.forEach((channel: string) => {\n this._channels[channel] = { state: {} };\n if (withPresence) this._presenceChannels[channel] = {};\n\n this._pendingChannelSubscriptions.push(channel);\n });\n\n channelGroups.forEach((channelGroup: string) => {\n this._channelGroups[channelGroup] = { state: {} };\n if (withPresence) this._presenceChannelGroups[channelGroup] = {};\n\n this._pendingChannelGroupSubscriptions.push(channelGroup);\n });\n\n this._subscriptionStatusAnnounced = false;\n this.reconnect();\n }\n\n adaptUnsubscribeChange(args: UnsubscribeArgs, isOffline: boolean) {\n const { channels = [], channelGroups = [] } = args;\n\n // keep track of which channels and channel groups\n // we are going to unsubscribe from.\n const actualChannels = [];\n const actualChannelGroups = [];\n //\n\n channels.forEach((channel) => {\n if (channel in this._channels) {\n delete this._channels[channel];\n actualChannels.push(channel);\n }\n if (channel in this._presenceChannels) {\n delete this._presenceChannels[channel];\n actualChannels.push(channel);\n }\n });\n\n channelGroups.forEach((channelGroup) => {\n if (channelGroup in this._channelGroups) {\n delete this._channelGroups[channelGroup];\n actualChannelGroups.push(channelGroup);\n }\n if (channelGroup in this._presenceChannelGroups) {\n delete this._channelGroups[channelGroup];\n actualChannelGroups.push(channelGroup);\n }\n });\n\n // no-op if there are no channels and cg's to unsubscribe from.\n if (actualChannels.length === 0 && actualChannelGroups.length === 0) {\n return;\n }\n\n if (this._config.suppressLeaveEvents === false && !isOffline) {\n this._leaveEndpoint({ channels: actualChannels, channelGroups: actualChannelGroups }, (status) => {\n status.affectedChannels = actualChannels;\n status.affectedChannelGroups = actualChannelGroups;\n status.currentTimetoken = this._currentTimetoken;\n status.lastTimetoken = this._lastTimetoken;\n this._listenerManager.announceStatus(status);\n });\n }\n\n // if we have nothing to subscribe to, reset the timetoken.\n if (Object.keys(this._channels).length === 0 &&\n Object.keys(this._presenceChannels).length === 0 &&\n Object.keys(this._channelGroups).length === 0 &&\n Object.keys(this._presenceChannelGroups).length === 0) {\n this._lastTimetoken = 0;\n this._currentTimetoken = 0;\n this._storedTimetoken = null;\n this._region = null;\n this._reconnectionManager.stopPolling();\n }\n\n this.reconnect();\n }\n\n unsubscribeAll(isOffline: boolean) {\n this.adaptUnsubscribeChange({ channels: this.getSubscribedChannels(), channelGroups: this.getSubscribedChannelGroups() }, isOffline);\n }\n\n getHeartbeatChannels(): Array {\n return Object.keys(this._heartbeatChannels);\n }\n\n getHeartbeatChannelGroups(): Array {\n return Object.keys(this._heartbeatChannelGroups);\n }\n\n getSubscribedChannels(): Array {\n return Object.keys(this._channels);\n }\n\n getSubscribedChannelGroups(): Array {\n return Object.keys(this._channelGroups);\n }\n\n reconnect() {\n this._startSubscribeLoop();\n this._registerHeartbeatTimer();\n }\n\n disconnect() {\n this._stopSubscribeLoop();\n this._stopHeartbeatTimer();\n this._reconnectionManager.stopPolling();\n }\n\n _registerHeartbeatTimer() {\n this._stopHeartbeatTimer();\n\n // if the interval is 0, do not queue up heartbeating\n if (this._config.getHeartbeatInterval() === 0) {\n return;\n }\n\n this._performHeartbeatLoop();\n this._heartbeatTimer = setInterval(this._performHeartbeatLoop.bind(this), this._config.getHeartbeatInterval() * 1000);\n }\n\n _stopHeartbeatTimer() {\n if (this._heartbeatTimer) {\n clearInterval(this._heartbeatTimer);\n this._heartbeatTimer = null;\n }\n }\n\n _performHeartbeatLoop() {\n let heartbeatChannels = [];\n heartbeatChannels = heartbeatChannels.concat(this.getHeartbeatChannels());\n heartbeatChannels = heartbeatChannels.concat(this.getSubscribedChannels());\n\n let heartbeatChannelGroups = [];\n heartbeatChannelGroups = heartbeatChannelGroups.concat(this.getHeartbeatChannelGroups());\n heartbeatChannelGroups = heartbeatChannelGroups.concat(this.getSubscribedChannelGroups());\n\n let presenceState = {};\n\n if (heartbeatChannels.length === 0 && heartbeatChannelGroups.length === 0) {\n return;\n }\n\n this.getSubscribedChannels().forEach((channel) => {\n let channelState = this._channels[channel].state;\n if (Object.keys(channelState).length) presenceState[channel] = channelState;\n });\n\n this.getSubscribedChannelGroups().forEach((channelGroup) => {\n let channelGroupState = this._channelGroups[channelGroup].state;\n if (Object.keys(channelGroupState).length) presenceState[channelGroup] = channelGroupState;\n });\n\n let onHeartbeat = (status: StatusAnnouncement) => {\n if (status.error && this._config.announceFailedHeartbeats) {\n this._listenerManager.announceStatus(status);\n }\n\n if (status.error && this._config.autoNetworkDetection && this._isOnline) {\n this._isOnline = false;\n this.disconnect();\n this._listenerManager.announceNetworkDown();\n this.reconnect();\n }\n\n if (!status.error && this._config.announceSuccessfulHeartbeats) {\n this._listenerManager.announceStatus(status);\n }\n };\n\n this._heartbeatEndpoint({\n channels: heartbeatChannels,\n channelGroups: heartbeatChannelGroups,\n state: presenceState }, onHeartbeat.bind(this));\n }\n\n _startSubscribeLoop() {\n this._stopSubscribeLoop();\n let channels = [];\n let channelGroups = [];\n\n Object.keys(this._channels).forEach(channel => channels.push(channel));\n Object.keys(this._presenceChannels).forEach(channel => channels.push(`${channel}-pnpres`));\n\n Object.keys(this._channelGroups).forEach(channelGroup => channelGroups.push(channelGroup));\n Object.keys(this._presenceChannelGroups).forEach(channelGroup => channelGroups.push(`${channelGroup}-pnpres`));\n\n if (channels.length === 0 && channelGroups.length === 0) {\n return;\n }\n\n const subscribeArgs = {\n channels,\n channelGroups,\n timetoken: this._currentTimetoken,\n filterExpression: this._config.filterExpression,\n region: this._region\n };\n\n this._subscribeCall = this._subscribeEndpoint(subscribeArgs, this._processSubscribeResponse.bind(this));\n }\n\n _processSubscribeResponse(status: StatusAnnouncement, payload: SubscribeEnvelope) {\n if (status.error) {\n // if we timeout from server, restart the loop.\n if (status.category === categoryConstants.PNTimeoutCategory) {\n this._startSubscribeLoop();\n } else if (status.category === categoryConstants.PNNetworkIssuesCategory) {\n // we lost internet connection, alert the reconnection manager and terminate all loops\n this.disconnect();\n\n if (status.error && this._config.autoNetworkDetection && this._isOnline) {\n this._isOnline = false;\n this._listenerManager.announceNetworkDown();\n }\n\n this._reconnectionManager.onReconnection(() => {\n if (this._config.autoNetworkDetection && !this._isOnline) {\n this._isOnline = true;\n this._listenerManager.announceNetworkUp();\n }\n this.reconnect();\n this._subscriptionStatusAnnounced = true;\n let reconnectedAnnounce: StatusAnnouncement = {\n category: categoryConstants.PNReconnectedCategory,\n operation: status.operation,\n lastTimetoken: this._lastTimetoken,\n currentTimetoken: this._currentTimetoken\n };\n this._listenerManager.announceStatus(reconnectedAnnounce);\n });\n\n this._reconnectionManager.startPolling();\n this._listenerManager.announceStatus(status);\n } else if (status.category === categoryConstants.PNBadRequestCategory) {\n this._stopHeartbeatTimer();\n this._listenerManager.announceStatus(status);\n } else {\n this._listenerManager.announceStatus(status);\n }\n\n return;\n }\n\n if (this._storedTimetoken) {\n this._currentTimetoken = this._storedTimetoken;\n this._storedTimetoken = null;\n } else {\n this._lastTimetoken = this._currentTimetoken;\n this._currentTimetoken = payload.metadata.timetoken;\n }\n\n if (!this._subscriptionStatusAnnounced) {\n let connectedAnnounce: StatusAnnouncement = {};\n connectedAnnounce.category = categoryConstants.PNConnectedCategory;\n connectedAnnounce.operation = status.operation;\n connectedAnnounce.affectedChannels = this._pendingChannelSubscriptions;\n connectedAnnounce.subscribedChannels = this.getSubscribedChannels();\n connectedAnnounce.affectedChannelGroups = this._pendingChannelGroupSubscriptions;\n connectedAnnounce.lastTimetoken = this._lastTimetoken;\n connectedAnnounce.currentTimetoken = this._currentTimetoken;\n this._subscriptionStatusAnnounced = true;\n this._listenerManager.announceStatus(connectedAnnounce);\n\n // clear the pending connections list\n this._pendingChannelSubscriptions = [];\n this._pendingChannelGroupSubscriptions = [];\n }\n\n let messages = payload.messages || [];\n let { requestMessageCountThreshold, dedupeOnSubscribe } = this._config;\n\n if (requestMessageCountThreshold && messages.length >= requestMessageCountThreshold) {\n let countAnnouncement: StatusAnnouncement = {};\n countAnnouncement.category = categoryConstants.PNRequestMessageCountExceededCategory;\n countAnnouncement.operation = status.operation;\n this._listenerManager.announceStatus(countAnnouncement);\n }\n\n messages.forEach((message) => {\n let channel = message.channel;\n let subscriptionMatch = message.subscriptionMatch;\n let publishMetaData = message.publishMetaData;\n\n if (channel === subscriptionMatch) {\n subscriptionMatch = null;\n }\n\n if (dedupeOnSubscribe) {\n if (this._dedupingManager.isDuplicate(message)) {\n return;\n } else {\n this._dedupingManager.addEntry(message);\n }\n }\n\n if (utils.endsWith(message.channel, '-pnpres')) {\n let announce: PresenceAnnouncement = {};\n announce.channel = null;\n announce.subscription = null;\n\n // deprecated -->\n announce.actualChannel = (subscriptionMatch != null) ? channel : null;\n announce.subscribedChannel = subscriptionMatch != null ? subscriptionMatch : channel;\n // <-- deprecated\n\n if (channel) {\n announce.channel = channel.substring(0, channel.lastIndexOf('-pnpres'));\n }\n\n if (subscriptionMatch) {\n announce.subscription = subscriptionMatch.substring(0, subscriptionMatch.lastIndexOf('-pnpres'));\n }\n\n announce.action = message.payload.action;\n announce.state = message.payload.data;\n announce.timetoken = publishMetaData.publishTimetoken;\n announce.occupancy = message.payload.occupancy;\n announce.uuid = message.payload.uuid;\n announce.timestamp = message.payload.timestamp;\n\n if (message.payload.join) {\n announce.join = message.payload.join;\n }\n\n if (message.payload.leave) {\n announce.leave = message.payload.leave;\n }\n\n if (message.payload.timeout) {\n announce.timeout = message.payload.timeout;\n }\n\n this._listenerManager.announcePresence(announce);\n } else {\n let announce: MessageAnnouncement = {};\n announce.channel = null;\n announce.subscription = null;\n\n // deprecated -->\n announce.actualChannel = (subscriptionMatch != null) ? channel : null;\n announce.subscribedChannel = subscriptionMatch != null ? subscriptionMatch : channel;\n // <-- deprecated\n\n announce.channel = channel;\n announce.subscription = subscriptionMatch;\n announce.timetoken = publishMetaData.publishTimetoken;\n announce.publisher = message.issuingClientId;\n\n if (message.userMetadata) {\n announce.userMetadata = message.userMetadata;\n }\n\n if (this._config.cipherKey) {\n announce.message = this._crypto.decrypt(message.payload);\n } else {\n announce.message = message.payload;\n }\n\n this._listenerManager.announceMessage(announce);\n }\n });\n\n this._region = payload.metadata.region;\n this._startSubscribeLoop();\n }\n\n _stopSubscribeLoop() {\n if (this._subscribeCall) {\n if (typeof this._subscribeCall.abort === 'function') {\n this._subscribeCall.abort();\n }\n this._subscribeCall = null;\n }\n }\n\n}\n"]} \ No newline at end of file diff --git a/lib/core/pubnub-common.js b/lib/core/pubnub-common.js index 4c082f6a2..823a79216 100644 --- a/lib/core/pubnub-common.js +++ b/lib/core/pubnub-common.js @@ -216,6 +216,7 @@ var _class = function () { this.time = timeEndpoint; this.subscribe = subscriptionManager.adaptSubscribeChange.bind(subscriptionManager); + this.presence = subscriptionManager.adaptPresenceChange.bind(subscriptionManager); this.unsubscribe = subscriptionManager.adaptUnsubscribeChange.bind(subscriptionManager); this.disconnect = subscriptionManager.disconnect.bind(subscriptionManager); this.reconnect = subscriptionManager.reconnect.bind(subscriptionManager); @@ -244,6 +245,13 @@ var _class = function () { this.setFilterExpression = modules.config.setFilterExpression.bind(modules.config); this.setHeartbeatInterval = modules.config.setHeartbeatInterval.bind(modules.config); + + if (networking.hasModule('proxy')) { + this.setProxy = function (proxy) { + modules.config.setProxy(proxy); + _this.reconnect(); + }; + } } _createClass(_class, [{ diff --git a/lib/core/pubnub-common.js.map b/lib/core/pubnub-common.js.map index 7324f2ed0..e1d6fb20d 100644 --- a/lib/core/pubnub-common.js.map +++ b/lib/core/pubnub-common.js.map @@ -1 +1 @@ -{"version":3,"sources":["core/pubnub-common.js"],"names":["addChannelsChannelGroupConfig","removeChannelsChannelGroupConfig","deleteChannelGroupConfig","listChannelGroupsConfig","listChannelsInChannelGroupConfig","addPushChannelsConfig","removePushChannelsConfig","listPushChannelsConfig","removeDevicePushConfig","presenceLeaveEndpointConfig","presenceWhereNowEndpointConfig","presenceHeartbeatEndpointConfig","presenceGetStateConfig","presenceSetStateConfig","presenceHereNowConfig","auditEndpointConfig","grantEndpointConfig","publishEndpointConfig","historyEndpointConfig","deleteMessagesEndpointConfig","fetchMessagesEndpointConfig","timeEndpointConfig","subscribeEndpointConfig","setup","db","networking","config","_config","crypto","init","modules","timeEndpoint","bind","leaveEndpoint","heartbeatEndpoint","setStateEndpoint","subscribeEndpoint","listenerManager","_listenerManager","subscriptionManager","addListener","removeListener","removeAllListeners","channelGroups","listGroups","listChannels","addChannels","removeChannels","deleteGroup","push","deleteDevice","hereNow","whereNow","getState","setState","adaptStateChange","grant","audit","publish","fire","args","callback","replicate","storeInHistory","history","deleteMessages","fetchMessages","time","subscribe","adaptSubscribeChange","unsubscribe","adaptUnsubscribeChange","disconnect","reconnect","destroy","isOffline","unsubscribeAll","stop","getSubscribedChannels","getSubscribedChannelGroups","encrypt","decrypt","getAuthKey","setAuthKey","setCipherKey","getUUID","setUUID","getFilterExpression","setFilterExpression","setHeartbeatInterval","getVersion","announceNetworkDown","restore","announceNetworkUp","createUUID","OPERATIONS","CATEGORIES"],"mappings":"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","file":"pubnub-common.js","sourcesContent":["/* @flow */\n\nimport Config from './components/config';\nimport Crypto from './components/cryptography/index';\nimport SubscriptionManager from './components/subscription_manager';\nimport ListenerManager from './components/listener_manager';\n\nimport endpointCreator from './components/endpoint';\n\nimport * as addChannelsChannelGroupConfig from './endpoints/channel_groups/add_channels';\nimport * as removeChannelsChannelGroupConfig from './endpoints/channel_groups/remove_channels';\nimport * as deleteChannelGroupConfig from './endpoints/channel_groups/delete_group';\nimport * as listChannelGroupsConfig from './endpoints/channel_groups/list_groups';\nimport * as listChannelsInChannelGroupConfig from './endpoints/channel_groups/list_channels';\n\nimport * as addPushChannelsConfig from './endpoints/push/add_push_channels';\nimport * as removePushChannelsConfig from './endpoints/push/remove_push_channels';\nimport * as listPushChannelsConfig from './endpoints/push/list_push_channels';\nimport * as removeDevicePushConfig from './endpoints/push/remove_device';\n\nimport * as presenceLeaveEndpointConfig from './endpoints/presence/leave';\nimport * as presenceWhereNowEndpointConfig from './endpoints/presence/where_now';\nimport * as presenceHeartbeatEndpointConfig from './endpoints/presence/heartbeat';\nimport * as presenceGetStateConfig from './endpoints/presence/get_state';\nimport * as presenceSetStateConfig from './endpoints/presence/set_state';\nimport * as presenceHereNowConfig from './endpoints/presence/here_now';\n\nimport * as auditEndpointConfig from './endpoints/access_manager/audit';\nimport * as grantEndpointConfig from './endpoints/access_manager/grant';\n\nimport * as publishEndpointConfig from './endpoints/publish';\nimport * as historyEndpointConfig from './endpoints/history/get_history';\nimport * as deleteMessagesEndpointConfig from './endpoints/history/delete_messages';\nimport * as fetchMessagesEndpointConfig from './endpoints/fetch_messages';\nimport * as timeEndpointConfig from './endpoints/time';\nimport * as subscribeEndpointConfig from './endpoints/subscribe';\n\nimport OPERATIONS from './constants/operations';\nimport CATEGORIES from './constants/categories';\n\nimport { InternalSetupStruct } from './flow_interfaces';\nimport uuidGenerator from './components/uuid';\n\nexport default class {\n\n _config: Config;\n _listenerManager: ListenerManager;\n\n // tell flow about the mounted endpoint\n time: Function;\n publish: Function;\n fire: Function;\n\n history: Function;\n deleteMessages: Function;\n fetchMessages: Function;\n\n //\n channelGroups: Object;\n //\n push: Object;\n //\n hereNow: Function;\n whereNow: Function;\n getState: Function;\n setState: Function;\n //\n grant: Function;\n audit: Function;\n //\n subscribe: Function;\n unsubscribe: Function;\n unsubscribeAll: Function;\n\n disconnect: Function;\n reconnect: Function;\n\n\n destroy: Function;\n stop: Function;\n\n getSubscribedChannels: Function;\n getSubscribedChannelGroups: Function;\n\n addListener: Function;\n removeListener: Function;\n removeAllListeners: Function;\n\n getAuthKey: Function;\n setAuthKey: Function;\n\n setCipherKey: Function;\n setUUID: Function;\n getUUID: Function;\n\n getFilterExpression: Function;\n setFilterExpression: Function;\n\n setHeartbeatInterval: Function;\n\n encrypt: Function;\n decrypt: Function;\n\n //\n\n constructor(setup: InternalSetupStruct) {\n let { db, networking } = setup;\n\n const config = this._config = new Config({ setup, db });\n const crypto = new Crypto({ config });\n\n networking.init(config);\n\n let modules = { config, networking, crypto };\n\n const timeEndpoint = endpointCreator.bind(this, modules, timeEndpointConfig);\n const leaveEndpoint = endpointCreator.bind(this, modules, presenceLeaveEndpointConfig);\n const heartbeatEndpoint = endpointCreator.bind(this, modules, presenceHeartbeatEndpointConfig);\n const setStateEndpoint = endpointCreator.bind(this, modules, presenceSetStateConfig);\n const subscribeEndpoint = endpointCreator.bind(this, modules, subscribeEndpointConfig);\n\n // managers\n const listenerManager = this._listenerManager = new ListenerManager();\n\n const subscriptionManager = new SubscriptionManager({\n timeEndpoint,\n leaveEndpoint,\n heartbeatEndpoint,\n setStateEndpoint,\n subscribeEndpoint,\n crypto: modules.crypto,\n config: modules.config,\n listenerManager\n });\n\n this.addListener = listenerManager.addListener.bind(listenerManager);\n this.removeListener = listenerManager.removeListener.bind(listenerManager);\n this.removeAllListeners = listenerManager.removeAllListeners.bind(listenerManager);\n\n /* channel groups */\n this.channelGroups = {\n listGroups: endpointCreator.bind(this, modules, listChannelGroupsConfig),\n listChannels: endpointCreator.bind(this, modules, listChannelsInChannelGroupConfig),\n addChannels: endpointCreator.bind(this, modules, addChannelsChannelGroupConfig),\n removeChannels: endpointCreator.bind(this, modules, removeChannelsChannelGroupConfig),\n deleteGroup: endpointCreator.bind(this, modules, deleteChannelGroupConfig)\n };\n /* push */\n this.push = {\n addChannels: endpointCreator.bind(this, modules, addPushChannelsConfig),\n removeChannels: endpointCreator.bind(this, modules, removePushChannelsConfig),\n deleteDevice: endpointCreator.bind(this, modules, removeDevicePushConfig),\n listChannels: endpointCreator.bind(this, modules, listPushChannelsConfig)\n };\n /* presence */\n this.hereNow = endpointCreator.bind(this, modules, presenceHereNowConfig);\n this.whereNow = endpointCreator.bind(this, modules, presenceWhereNowEndpointConfig);\n this.getState = endpointCreator.bind(this, modules, presenceGetStateConfig);\n this.setState = subscriptionManager.adaptStateChange.bind(subscriptionManager);\n /* PAM */\n this.grant = endpointCreator.bind(this, modules, grantEndpointConfig);\n this.audit = endpointCreator.bind(this, modules, auditEndpointConfig);\n //\n this.publish = endpointCreator.bind(this, modules, publishEndpointConfig);\n\n this.fire = (args, callback) => {\n args.replicate = false;\n args.storeInHistory = false;\n return this.publish(args, callback);\n };\n\n this.history = endpointCreator.bind(this, modules, historyEndpointConfig);\n this.deleteMessages = endpointCreator.bind(this, modules, deleteMessagesEndpointConfig);\n this.fetchMessages = endpointCreator.bind(this, modules, fetchMessagesEndpointConfig);\n\n this.time = timeEndpoint;\n\n // subscription related methods\n this.subscribe = subscriptionManager.adaptSubscribeChange.bind(subscriptionManager);\n this.unsubscribe = subscriptionManager.adaptUnsubscribeChange.bind(subscriptionManager);\n this.disconnect = subscriptionManager.disconnect.bind(subscriptionManager);\n this.reconnect = subscriptionManager.reconnect.bind(subscriptionManager);\n\n this.destroy = (isOffline: boolean) => {\n subscriptionManager.unsubscribeAll(isOffline);\n subscriptionManager.disconnect();\n };\n\n // --- deprecated ------------------\n this.stop = this.destroy; // --------\n // --- deprecated ------------------\n\n this.unsubscribeAll = subscriptionManager.unsubscribeAll.bind(subscriptionManager);\n\n this.getSubscribedChannels = subscriptionManager.getSubscribedChannels.bind(subscriptionManager);\n this.getSubscribedChannelGroups = subscriptionManager.getSubscribedChannelGroups.bind(subscriptionManager);\n\n // mount crypto\n this.encrypt = crypto.encrypt.bind(crypto);\n this.decrypt = crypto.decrypt.bind(crypto);\n\n /* config */\n this.getAuthKey = modules.config.getAuthKey.bind(modules.config);\n this.setAuthKey = modules.config.setAuthKey.bind(modules.config);\n this.setCipherKey = modules.config.setCipherKey.bind(modules.config);\n this.getUUID = modules.config.getUUID.bind(modules.config);\n this.setUUID = modules.config.setUUID.bind(modules.config);\n this.getFilterExpression = modules.config.getFilterExpression.bind(modules.config);\n this.setFilterExpression = modules.config.setFilterExpression.bind(modules.config);\n\n this.setHeartbeatInterval = modules.config.setHeartbeatInterval.bind(modules.config);\n }\n\n\n getVersion(): string {\n return this._config.getVersion();\n }\n\n // network hooks to indicate network changes\n networkDownDetected() {\n this._listenerManager.announceNetworkDown();\n\n if (this._config.restore) {\n this.disconnect();\n } else {\n this.destroy(true);\n }\n }\n\n networkUpDetected() {\n this._listenerManager.announceNetworkUp();\n this.reconnect();\n }\n\n\n static generateUUID(): string {\n return uuidGenerator.createUUID();\n }\n\n static OPERATIONS = OPERATIONS;\n static CATEGORIES = CATEGORIES;\n\n}\n"]} \ No newline at end of file +{"version":3,"sources":["core/pubnub-common.js"],"names":["addChannelsChannelGroupConfig","removeChannelsChannelGroupConfig","deleteChannelGroupConfig","listChannelGroupsConfig","listChannelsInChannelGroupConfig","addPushChannelsConfig","removePushChannelsConfig","listPushChannelsConfig","removeDevicePushConfig","presenceLeaveEndpointConfig","presenceWhereNowEndpointConfig","presenceHeartbeatEndpointConfig","presenceGetStateConfig","presenceSetStateConfig","presenceHereNowConfig","auditEndpointConfig","grantEndpointConfig","publishEndpointConfig","historyEndpointConfig","deleteMessagesEndpointConfig","fetchMessagesEndpointConfig","timeEndpointConfig","subscribeEndpointConfig","setup","db","networking","config","_config","crypto","init","modules","timeEndpoint","bind","leaveEndpoint","heartbeatEndpoint","setStateEndpoint","subscribeEndpoint","listenerManager","_listenerManager","subscriptionManager","addListener","removeListener","removeAllListeners","channelGroups","listGroups","listChannels","addChannels","removeChannels","deleteGroup","push","deleteDevice","hereNow","whereNow","getState","setState","adaptStateChange","grant","audit","publish","fire","args","callback","replicate","storeInHistory","history","deleteMessages","fetchMessages","time","subscribe","adaptSubscribeChange","presence","adaptPresenceChange","unsubscribe","adaptUnsubscribeChange","disconnect","reconnect","destroy","isOffline","unsubscribeAll","stop","getSubscribedChannels","getSubscribedChannelGroups","encrypt","decrypt","getAuthKey","setAuthKey","setCipherKey","getUUID","setUUID","getFilterExpression","setFilterExpression","setHeartbeatInterval","hasModule","setProxy","proxy","getVersion","announceNetworkDown","restore","announceNetworkUp","createUUID","OPERATIONS","CATEGORIES"],"mappings":"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","file":"pubnub-common.js","sourcesContent":["/* @flow */\n\nimport Config from './components/config';\nimport Crypto from './components/cryptography/index';\nimport SubscriptionManager from './components/subscription_manager';\nimport ListenerManager from './components/listener_manager';\n\nimport endpointCreator from './components/endpoint';\n\nimport * as addChannelsChannelGroupConfig from './endpoints/channel_groups/add_channels';\nimport * as removeChannelsChannelGroupConfig from './endpoints/channel_groups/remove_channels';\nimport * as deleteChannelGroupConfig from './endpoints/channel_groups/delete_group';\nimport * as listChannelGroupsConfig from './endpoints/channel_groups/list_groups';\nimport * as listChannelsInChannelGroupConfig from './endpoints/channel_groups/list_channels';\n\nimport * as addPushChannelsConfig from './endpoints/push/add_push_channels';\nimport * as removePushChannelsConfig from './endpoints/push/remove_push_channels';\nimport * as listPushChannelsConfig from './endpoints/push/list_push_channels';\nimport * as removeDevicePushConfig from './endpoints/push/remove_device';\n\nimport * as presenceLeaveEndpointConfig from './endpoints/presence/leave';\nimport * as presenceWhereNowEndpointConfig from './endpoints/presence/where_now';\nimport * as presenceHeartbeatEndpointConfig from './endpoints/presence/heartbeat';\nimport * as presenceGetStateConfig from './endpoints/presence/get_state';\nimport * as presenceSetStateConfig from './endpoints/presence/set_state';\nimport * as presenceHereNowConfig from './endpoints/presence/here_now';\n\nimport * as auditEndpointConfig from './endpoints/access_manager/audit';\nimport * as grantEndpointConfig from './endpoints/access_manager/grant';\n\nimport * as publishEndpointConfig from './endpoints/publish';\nimport * as historyEndpointConfig from './endpoints/history/get_history';\nimport * as deleteMessagesEndpointConfig from './endpoints/history/delete_messages';\nimport * as fetchMessagesEndpointConfig from './endpoints/fetch_messages';\nimport * as timeEndpointConfig from './endpoints/time';\nimport * as subscribeEndpointConfig from './endpoints/subscribe';\n\nimport OPERATIONS from './constants/operations';\nimport CATEGORIES from './constants/categories';\n\nimport { InternalSetupStruct } from './flow_interfaces';\nimport uuidGenerator from './components/uuid';\n\nexport default class {\n\n _config: Config;\n _listenerManager: ListenerManager;\n\n // tell flow about the mounted endpoint\n time: Function;\n publish: Function;\n fire: Function;\n\n history: Function;\n deleteMessages: Function;\n fetchMessages: Function;\n\n //\n channelGroups: Object;\n //\n push: Object;\n //\n hereNow: Function;\n whereNow: Function;\n getState: Function;\n setState: Function;\n //\n grant: Function;\n audit: Function;\n //\n subscribe: Function;\n presence: Function;\n unsubscribe: Function;\n unsubscribeAll: Function;\n\n disconnect: Function;\n reconnect: Function;\n\n\n destroy: Function;\n stop: Function;\n\n getSubscribedChannels: Function;\n getSubscribedChannelGroups: Function;\n\n addListener: Function;\n removeListener: Function;\n removeAllListeners: Function;\n\n getAuthKey: Function;\n setAuthKey: Function;\n\n setCipherKey: Function;\n setUUID: Function;\n getUUID: Function;\n\n getFilterExpression: Function;\n setFilterExpression: Function;\n\n setHeartbeatInterval: Function;\n\n setProxy: Function;\n\n encrypt: Function;\n decrypt: Function;\n\n //\n\n constructor(setup: InternalSetupStruct) {\n let { db, networking } = setup;\n\n const config = this._config = new Config({ setup, db });\n const crypto = new Crypto({ config });\n\n networking.init(config);\n\n let modules = { config, networking, crypto };\n\n const timeEndpoint = endpointCreator.bind(this, modules, timeEndpointConfig);\n const leaveEndpoint = endpointCreator.bind(this, modules, presenceLeaveEndpointConfig);\n const heartbeatEndpoint = endpointCreator.bind(this, modules, presenceHeartbeatEndpointConfig);\n const setStateEndpoint = endpointCreator.bind(this, modules, presenceSetStateConfig);\n const subscribeEndpoint = endpointCreator.bind(this, modules, subscribeEndpointConfig);\n\n // managers\n const listenerManager = this._listenerManager = new ListenerManager();\n\n const subscriptionManager = new SubscriptionManager({\n timeEndpoint,\n leaveEndpoint,\n heartbeatEndpoint,\n setStateEndpoint,\n subscribeEndpoint,\n crypto: modules.crypto,\n config: modules.config,\n listenerManager\n });\n\n this.addListener = listenerManager.addListener.bind(listenerManager);\n this.removeListener = listenerManager.removeListener.bind(listenerManager);\n this.removeAllListeners = listenerManager.removeAllListeners.bind(listenerManager);\n\n /* channel groups */\n this.channelGroups = {\n listGroups: endpointCreator.bind(this, modules, listChannelGroupsConfig),\n listChannels: endpointCreator.bind(this, modules, listChannelsInChannelGroupConfig),\n addChannels: endpointCreator.bind(this, modules, addChannelsChannelGroupConfig),\n removeChannels: endpointCreator.bind(this, modules, removeChannelsChannelGroupConfig),\n deleteGroup: endpointCreator.bind(this, modules, deleteChannelGroupConfig)\n };\n /* push */\n this.push = {\n addChannels: endpointCreator.bind(this, modules, addPushChannelsConfig),\n removeChannels: endpointCreator.bind(this, modules, removePushChannelsConfig),\n deleteDevice: endpointCreator.bind(this, modules, removeDevicePushConfig),\n listChannels: endpointCreator.bind(this, modules, listPushChannelsConfig)\n };\n /* presence */\n this.hereNow = endpointCreator.bind(this, modules, presenceHereNowConfig);\n this.whereNow = endpointCreator.bind(this, modules, presenceWhereNowEndpointConfig);\n this.getState = endpointCreator.bind(this, modules, presenceGetStateConfig);\n this.setState = subscriptionManager.adaptStateChange.bind(subscriptionManager);\n /* PAM */\n this.grant = endpointCreator.bind(this, modules, grantEndpointConfig);\n this.audit = endpointCreator.bind(this, modules, auditEndpointConfig);\n //\n this.publish = endpointCreator.bind(this, modules, publishEndpointConfig);\n\n this.fire = (args, callback) => {\n args.replicate = false;\n args.storeInHistory = false;\n return this.publish(args, callback);\n };\n\n this.history = endpointCreator.bind(this, modules, historyEndpointConfig);\n this.deleteMessages = endpointCreator.bind(this, modules, deleteMessagesEndpointConfig);\n this.fetchMessages = endpointCreator.bind(this, modules, fetchMessagesEndpointConfig);\n\n this.time = timeEndpoint;\n\n // subscription related methods\n this.subscribe = subscriptionManager.adaptSubscribeChange.bind(subscriptionManager);\n this.presence = subscriptionManager.adaptPresenceChange.bind(subscriptionManager);\n this.unsubscribe = subscriptionManager.adaptUnsubscribeChange.bind(subscriptionManager);\n this.disconnect = subscriptionManager.disconnect.bind(subscriptionManager);\n this.reconnect = subscriptionManager.reconnect.bind(subscriptionManager);\n\n this.destroy = (isOffline: boolean) => {\n subscriptionManager.unsubscribeAll(isOffline);\n subscriptionManager.disconnect();\n };\n\n // --- deprecated ------------------\n this.stop = this.destroy; // --------\n // --- deprecated ------------------\n\n this.unsubscribeAll = subscriptionManager.unsubscribeAll.bind(subscriptionManager);\n\n this.getSubscribedChannels = subscriptionManager.getSubscribedChannels.bind(subscriptionManager);\n this.getSubscribedChannelGroups = subscriptionManager.getSubscribedChannelGroups.bind(subscriptionManager);\n\n // mount crypto\n this.encrypt = crypto.encrypt.bind(crypto);\n this.decrypt = crypto.decrypt.bind(crypto);\n\n /* config */\n this.getAuthKey = modules.config.getAuthKey.bind(modules.config);\n this.setAuthKey = modules.config.setAuthKey.bind(modules.config);\n this.setCipherKey = modules.config.setCipherKey.bind(modules.config);\n this.getUUID = modules.config.getUUID.bind(modules.config);\n this.setUUID = modules.config.setUUID.bind(modules.config);\n this.getFilterExpression = modules.config.getFilterExpression.bind(modules.config);\n this.setFilterExpression = modules.config.setFilterExpression.bind(modules.config);\n\n this.setHeartbeatInterval = modules.config.setHeartbeatInterval.bind(modules.config);\n\n if (networking.hasModule('proxy')) {\n this.setProxy = (proxy) => {\n modules.config.setProxy(proxy);\n this.reconnect();\n };\n }\n }\n\n\n getVersion(): string {\n return this._config.getVersion();\n }\n\n // network hooks to indicate network changes\n networkDownDetected() {\n this._listenerManager.announceNetworkDown();\n\n if (this._config.restore) {\n this.disconnect();\n } else {\n this.destroy(true);\n }\n }\n\n networkUpDetected() {\n this._listenerManager.announceNetworkUp();\n this.reconnect();\n }\n\n\n static generateUUID(): string {\n return uuidGenerator.createUUID();\n }\n\n static OPERATIONS = OPERATIONS;\n static CATEGORIES = CATEGORIES;\n\n}\n"]} \ No newline at end of file diff --git a/lib/networking/index.js b/lib/networking/index.js index d4d52d5d2..1b98422f7 100644 --- a/lib/networking/index.js +++ b/lib/networking/index.js @@ -64,6 +64,11 @@ var _class = function () { return this._providedFQDN.replace('pubsub', 'ps' + newSubDomain); } + }, { + key: 'hasModule', + value: function hasModule(name) { + return name in this._modules; + } }, { key: 'shiftStandardOrigin', value: function shiftStandardOrigin() { diff --git a/lib/networking/index.js.map b/lib/networking/index.js.map index 40ec561e1..60c932230 100644 --- a/lib/networking/index.js.map +++ b/lib/networking/index.js.map @@ -1 +1 @@ -{"version":3,"sources":["networking/index.js"],"names":["modules","_modules","Object","keys","forEach","key","bind","config","_config","_maxSubDomain","_currentSubDomain","Math","floor","random","_providedFQDN","secure","origin","_coreParams","shiftStandardOrigin","indexOf","newSubDomain","toString","replace","failover","_standardOrigin","nextOrigin","params","body","endpoint","callback","post","get","del","err","code","PNNetworkIssuesCategory","status","hasOwnProperty","timeout","PNTimeoutCategory","response","badRequest","PNBadRequestCategory","forbidden","PNAccessDeniedCategory","PNUnknownCategory"],"mappings":"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","file":"index.js","sourcesContent":["/* @flow */\n\nimport Config from '../core/components/config';\nimport categoryConstants from '../core/constants/categories';\n\nimport { EndpointDefinition, NetworkingModules } from '../core/flow_interfaces';\n\nexport default class {\n _modules: NetworkingModules;\n _config: Config;\n\n _maxSubDomain: number;\n _currentSubDomain: number;\n\n _standardOrigin: string;\n _subscribeOrigin: string;\n\n _providedFQDN: string;\n\n _requestTimeout: number;\n\n _coreParams: Object; /* items that must be passed with each request. */\n\n constructor(modules: NetworkingModules) {\n this._modules = {};\n\n Object.keys(modules).forEach((key) => {\n this._modules[key] = modules[key].bind(this);\n });\n }\n\n init(config: Config) {\n this._config = config;\n\n this._maxSubDomain = 20;\n this._currentSubDomain = Math.floor(Math.random() * this._maxSubDomain);\n this._providedFQDN = (this._config.secure ? 'https://' : 'http://') + this._config.origin;\n this._coreParams = {};\n\n // create initial origins\n this.shiftStandardOrigin();\n }\n\n nextOrigin(): string {\n // if a custom origin is supplied, use do not bother with shuffling subdomains\n if (this._providedFQDN.indexOf('pubsub.') === -1) {\n return this._providedFQDN;\n }\n\n let newSubDomain: string;\n\n this._currentSubDomain = this._currentSubDomain + 1;\n\n if (this._currentSubDomain >= this._maxSubDomain) {\n this._currentSubDomain = 1;\n }\n\n newSubDomain = this._currentSubDomain.toString();\n\n return this._providedFQDN.replace('pubsub', `ps${newSubDomain}`);\n }\n\n // origin operations\n shiftStandardOrigin(failover: boolean = false): string {\n this._standardOrigin = this.nextOrigin(failover);\n\n return this._standardOrigin;\n }\n\n getStandardOrigin(): string {\n return this._standardOrigin;\n }\n\n POST(params: Object, body: string, endpoint: EndpointDefinition, callback: Function) {\n return this._modules.post(params, body, endpoint, callback);\n }\n\n GET(params: Object, endpoint: EndpointDefinition, callback: Function) {\n return this._modules.get(params, endpoint, callback);\n }\n\n DELETE(params: Object, endpoint: EndpointDefinition, callback: Function) {\n return this._modules.del(params, endpoint, callback);\n }\n\n _detectErrorCategory(err: Object): string {\n if (err.code === 'ENOTFOUND') return categoryConstants.PNNetworkIssuesCategory;\n if (err.code === 'ECONNREFUSED') return categoryConstants.PNNetworkIssuesCategory;\n if (err.code === 'ECONNRESET') return categoryConstants.PNNetworkIssuesCategory;\n if (err.code === 'EAI_AGAIN') return categoryConstants.PNNetworkIssuesCategory;\n\n if (err.status === 0 || (err.hasOwnProperty('status') && typeof err.status === 'undefined')) return categoryConstants.PNNetworkIssuesCategory;\n if (err.timeout) return categoryConstants.PNTimeoutCategory;\n\n if (err.response) {\n if (err.response.badRequest) return categoryConstants.PNBadRequestCategory;\n if (err.response.forbidden) return categoryConstants.PNAccessDeniedCategory;\n }\n\n return categoryConstants.PNUnknownCategory;\n }\n}\n"]} \ No newline at end of file +{"version":3,"sources":["networking/index.js"],"names":["modules","_modules","Object","keys","forEach","key","bind","config","_config","_maxSubDomain","_currentSubDomain","Math","floor","random","_providedFQDN","secure","origin","_coreParams","shiftStandardOrigin","indexOf","newSubDomain","toString","replace","name","failover","_standardOrigin","nextOrigin","params","body","endpoint","callback","post","get","del","err","code","PNNetworkIssuesCategory","status","hasOwnProperty","timeout","PNTimeoutCategory","response","badRequest","PNBadRequestCategory","forbidden","PNAccessDeniedCategory","PNUnknownCategory"],"mappings":"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","file":"index.js","sourcesContent":["/* @flow */\n\nimport Config from '../core/components/config';\nimport categoryConstants from '../core/constants/categories';\n\nimport { EndpointDefinition, NetworkingModules } from '../core/flow_interfaces';\n\nexport default class {\n _modules: NetworkingModules;\n _config: Config;\n\n _maxSubDomain: number;\n _currentSubDomain: number;\n\n _standardOrigin: string;\n _subscribeOrigin: string;\n\n _providedFQDN: string;\n\n _requestTimeout: number;\n\n _coreParams: Object; /* items that must be passed with each request. */\n\n constructor(modules: NetworkingModules) {\n this._modules = {};\n\n Object.keys(modules).forEach((key) => {\n this._modules[key] = modules[key].bind(this);\n });\n }\n\n init(config: Config) {\n this._config = config;\n\n this._maxSubDomain = 20;\n this._currentSubDomain = Math.floor(Math.random() * this._maxSubDomain);\n this._providedFQDN = (this._config.secure ? 'https://' : 'http://') + this._config.origin;\n this._coreParams = {};\n\n // create initial origins\n this.shiftStandardOrigin();\n }\n\n nextOrigin(): string {\n // if a custom origin is supplied, use do not bother with shuffling subdomains\n if (this._providedFQDN.indexOf('pubsub.') === -1) {\n return this._providedFQDN;\n }\n\n let newSubDomain: string;\n\n this._currentSubDomain = this._currentSubDomain + 1;\n\n if (this._currentSubDomain >= this._maxSubDomain) {\n this._currentSubDomain = 1;\n }\n\n newSubDomain = this._currentSubDomain.toString();\n\n return this._providedFQDN.replace('pubsub', `ps${newSubDomain}`);\n }\n\n hasModule(name: string) {\n return name in this._modules;\n }\n\n // origin operations\n shiftStandardOrigin(failover: boolean = false): string {\n this._standardOrigin = this.nextOrigin(failover);\n\n return this._standardOrigin;\n }\n\n getStandardOrigin(): string {\n return this._standardOrigin;\n }\n\n POST(params: Object, body: string, endpoint: EndpointDefinition, callback: Function) {\n return this._modules.post(params, body, endpoint, callback);\n }\n\n GET(params: Object, endpoint: EndpointDefinition, callback: Function) {\n return this._modules.get(params, endpoint, callback);\n }\n\n DELETE(params: Object, endpoint: EndpointDefinition, callback: Function) {\n return this._modules.del(params, endpoint, callback);\n }\n\n _detectErrorCategory(err: Object): string {\n if (err.code === 'ENOTFOUND') return categoryConstants.PNNetworkIssuesCategory;\n if (err.code === 'ECONNREFUSED') return categoryConstants.PNNetworkIssuesCategory;\n if (err.code === 'ECONNRESET') return categoryConstants.PNNetworkIssuesCategory;\n if (err.code === 'EAI_AGAIN') return categoryConstants.PNNetworkIssuesCategory;\n\n if (err.status === 0 || (err.hasOwnProperty('status') && typeof err.status === 'undefined')) return categoryConstants.PNNetworkIssuesCategory;\n if (err.timeout) return categoryConstants.PNTimeoutCategory;\n\n if (err.response) {\n if (err.response.badRequest) return categoryConstants.PNBadRequestCategory;\n if (err.response.forbidden) return categoryConstants.PNAccessDeniedCategory;\n }\n\n return categoryConstants.PNUnknownCategory;\n }\n}\n"]} \ No newline at end of file diff --git a/lib/node/index.js b/lib/node/index.js index 84f5b3798..6d345d435 100755 --- a/lib/node/index.js +++ b/lib/node/index.js @@ -39,6 +39,7 @@ var _class = function (_PubNubCore) { setup.db = new _common2.default(); setup.networking = new _networking2.default({ keepAlive: _node.keepAlive, del: _webNode.del, get: _webNode.get, post: _webNode.post, proxy: _node.proxy }); setup.sdkFamily = 'Nodejs'; + setup.ssl = true; return _possibleConstructorReturn(this, (_class.__proto__ || Object.getPrototypeOf(_class)).call(this, setup)); } diff --git a/lib/node/index.js.map b/lib/node/index.js.map index 1141f3b93..4cf817c53 100644 --- a/lib/node/index.js.map +++ b/lib/node/index.js.map @@ -1 +1 @@ -{"version":3,"sources":["node/index.js"],"names":["setup","db","networking","keepAlive","del","get","post","proxy","sdkFamily"],"mappings":";;;;;;AAEA;;;;AACA;;;;AACA;;;;AACA;;AACA;;AACA;;;;;;;;;;;;;AAGE,kBAAYA,KAAZ,EAAwC;AAAA;;AACtCA,UAAMC,EAAN,GAAW,sBAAX;AACAD,UAAME,UAAN,GAAmB,yBAAe,EAAEC,0BAAF,EAAaC,iBAAb,EAAkBC,iBAAlB,EAAuBC,mBAAvB,EAA6BC,kBAA7B,EAAf,CAAnB;AACAP,UAAMQ,SAAN,GAAkB,QAAlB;;AAHsC,2GAKhCR,KALgC;AAMvC","file":"index.js","sourcesContent":[" /* @flow */\n\nimport PubNubCore from '../core/pubnub-common';\nimport Networking from '../networking';\nimport Database from '../db/common';\nimport { del, get, post } from '../networking/modules/web-node';\nimport { keepAlive, proxy } from '../networking/modules/node';\nimport { InternalSetupStruct } from '../core/flow_interfaces';\n\nexport default class extends PubNubCore {\n constructor(setup: InternalSetupStruct) {\n setup.db = new Database();\n setup.networking = new Networking({ keepAlive, del, get, post, proxy });\n setup.sdkFamily = 'Nodejs';\n\n super(setup);\n }\n}\n"]} \ No newline at end of file +{"version":3,"sources":["node/index.js"],"names":["setup","db","networking","keepAlive","del","get","post","proxy","sdkFamily","ssl"],"mappings":";;;;;;AAEA;;;;AACA;;;;AACA;;;;AACA;;AACA;;AACA;;;;;;;;;;;;;AAGE,kBAAYA,KAAZ,EAAwC;AAAA;;AACtCA,UAAMC,EAAN,GAAW,sBAAX;AACAD,UAAME,UAAN,GAAmB,yBAAe,EAAEC,0BAAF,EAAaC,iBAAb,EAAkBC,iBAAlB,EAAuBC,mBAAvB,EAA6BC,kBAA7B,EAAf,CAAnB;AACAP,UAAMQ,SAAN,GAAkB,QAAlB;AACAR,UAAMS,GAAN,GAAY,IAAZ;;AAJsC,2GAMhCT,KANgC;AAOvC","file":"index.js","sourcesContent":[" /* @flow */\n\nimport PubNubCore from '../core/pubnub-common';\nimport Networking from '../networking';\nimport Database from '../db/common';\nimport { del, get, post } from '../networking/modules/web-node';\nimport { keepAlive, proxy } from '../networking/modules/node';\nimport { InternalSetupStruct } from '../core/flow_interfaces';\n\nexport default class extends PubNubCore {\n constructor(setup: InternalSetupStruct) {\n setup.db = new Database();\n setup.networking = new Networking({ keepAlive, del, get, post, proxy });\n setup.sdkFamily = 'Nodejs';\n setup.ssl = true;\n\n super(setup);\n }\n}\n"]} \ No newline at end of file diff --git a/src/core/components/subscription_manager.js b/src/core/components/subscription_manager.js index 23fb3d458..b0dcd54a3 100644 --- a/src/core/components/subscription_manager.js +++ b/src/core/components/subscription_manager.js @@ -11,17 +11,19 @@ import categoryConstants from '../constants/categories'; type SubscribeArgs = { channels: Array, channelGroups: Array, - heartbeatChannels: Array, - heartbeatChannelGroups: Array, withPresence: ?boolean, timetoken: ?number } -type UnsubscribeArgs = { +type PresenceArgs = { channels: Array, channelGroups: Array, - heartbeatChannels: Array, - heartbeatChannelGroups: Array + connected: boolean +} + +type UnsubscribeArgs = { + channels: Array, + channelGroups: Array } type StateArgs = { @@ -138,8 +140,44 @@ export default class { return this._setStateEndpoint({ state, channels, channelGroups }, callback); } + adaptPresenceChange(args: PresenceArgs) { + const { connected, channels = [], channelGroups = [] } = args; + + if (connected) { + channels.forEach((channel: string) => { + this._heartbeatChannels[channel] = { state: {} }; + this._pendingHeartbeatChannels.push(channel); + }); + + channelGroups.forEach((channelGroup: string) => { + this._heartbeatChannelGroups[channelGroup] = { state: {} }; + this._pendingHeartbeatChannelGroups.push(channelGroup); + }); + } else { + channels.forEach((channel) => { + if (channel in this._heartbeatChannels) { + delete this._heartbeatChannels[channel]; + } + }); + + channelGroups.forEach((channelGroup) => { + if (channelGroup in this._heartbeatChannelGroups) { + delete this._heartbeatChannelGroups[channelGroup]; + } + }); + + if (this._config.suppressLeaveEvents === false) { + this._leaveEndpoint({ channels, channelGroups }, (status) => { + this._listenerManager.announceStatus(status); + }); + } + } + + this.reconnect(); + } + adaptSubscribeChange(args: SubscribeArgs) { - const { timetoken, channels = [], channelGroups = [], heartbeatChannels = [], heartbeatChannelGroups = [], withPresence = false } = args; + const { timetoken, channels = [], channelGroups = [], withPresence = false } = args; if (!this._config.subscribeKey || this._config.subscribeKey === '') { if (console && console.log) console.log('subscribe key missing; aborting subscribe') //eslint-disable-line @@ -157,24 +195,10 @@ export default class { this._currentTimetoken = 0; } - heartbeatChannels.forEach((channel: string) => { - this._heartbeatChannels[channel] = { state: {} }; - this._pendingHeartbeatChannels.push(channel); - }); - - heartbeatChannelGroups.forEach((channelGroup: string) => { - this._heartbeatChannelGroups[channelGroup] = { state: {} }; - this._pendingHeartbeatChannelGroups.push(channelGroup); - }); - channels.forEach((channel: string) => { this._channels[channel] = { state: {} }; if (withPresence) this._presenceChannels[channel] = {}; - if (!(channel in this._heartbeatChannels)) { - this._heartbeatChannels[channel] = this._channels[channel]; - } - this._pendingChannelSubscriptions.push(channel); }); @@ -182,10 +206,6 @@ export default class { this._channelGroups[channelGroup] = { state: {} }; if (withPresence) this._presenceChannelGroups[channelGroup] = {}; - if (!(channelGroup in this._heartbeatChannelGroups)) { - this._heartbeatChannelGroups[channelGroup] = this._channelGroups[channelGroup]; - } - this._pendingChannelGroupSubscriptions.push(channelGroup); }); @@ -194,30 +214,14 @@ export default class { } adaptUnsubscribeChange(args: UnsubscribeArgs, isOffline: boolean) { - const { channels = [], channelGroups = [], heartbeatChannels = [], heartbeatChannelGroups = [] } = args; + const { channels = [], channelGroups = [] } = args; // keep track of which channels and channel groups // we are going to unsubscribe from. const actualChannels = []; const actualChannelGroups = []; - const actualHeartbeatChannels = []; - const actualHeartbeatChannelGroups = []; // - heartbeatChannels.forEach((channel) => { - if (channel in this._heartbeatChannels) { - delete this._heartbeatChannels[channel]; - actualHeartbeatChannels.push(channel); - } - }); - - heartbeatChannelGroups.forEach((channelGroup) => { - if (channelGroup in this._heartbeatChannelGroups) { - delete this._heartbeatChannelGroups[channelGroup]; - actualHeartbeatChannelGroups.push(channelGroup); - } - }); - channels.forEach((channel) => { if (channel in this._channels) { delete this._channels[channel]; @@ -227,9 +231,6 @@ export default class { delete this._presenceChannels[channel]; actualChannels.push(channel); } - if (channel in this._heartbeatChannels) { - delete this._heartbeatChannels[channel]; - } }); channelGroups.forEach((channelGroup) => { @@ -241,42 +242,17 @@ export default class { delete this._channelGroups[channelGroup]; actualChannelGroups.push(channelGroup); } - - if (channelGroup in this._heartbeatChannelGroups) { - delete this._heartbeatChannelGroups[channelGroup]; - } }); // no-op if there are no channels and cg's to unsubscribe from. - if (actualChannels.length === 0 && actualChannelGroups.length === 0 && actualHeartbeatChannels.length === 0 && actualHeartbeatChannelGroups.length === 0) { + if (actualChannels.length === 0 && actualChannelGroups.length === 0) { return; } if (this._config.suppressLeaveEvents === false && !isOffline) { - let _actualChannels = actualChannels.map(channel => channel); - let _actualChannelGroups = actualChannelGroups.map(channelGroup => channelGroup); - - actualHeartbeatChannels.forEach((channel) => { - if (!_actualChannels.includes(channel)) { - _actualChannels.push(channel); - } - }); - - actualHeartbeatChannelGroups.forEach((channelGroup) => { - if (!_actualChannelGroups.includes(channelGroup)) { - _actualChannelGroups.push(channelGroup); - } - }); - - this._leaveEndpoint({ channels: _actualChannels, channelGroups: _actualChannelGroups }, (status) => { + this._leaveEndpoint({ channels: actualChannels, channelGroups: actualChannelGroups }, (status) => { status.affectedChannels = actualChannels; status.affectedChannelGroups = actualChannelGroups; - - if (heartbeatChannels.length > 0 || heartbeatChannelGroups.length > 0) { - status.affectedHeartbeatChannels = actualHeartbeatChannels; - status.affectedHeartbeatChannelGroups = actualHeartbeatChannelGroups; - } - status.currentTimetoken = this._currentTimetoken; status.lastTimetoken = this._lastTimetoken; this._listenerManager.announceStatus(status); @@ -299,12 +275,7 @@ export default class { } unsubscribeAll(isOffline: boolean) { - this.adaptUnsubscribeChange({ - channels: this.getSubscribedChannels(), - channelGroups: this.getSubscribedChannelGroups(), - heartbeatChannels: this.getHeartbeatChannels(), - heartbeatChannelGroups: this.getHeartbeatChannelGroups() - }, isOffline); + this.adaptUnsubscribeChange({ channels: this.getSubscribedChannels(), channelGroups: this.getSubscribedChannelGroups() }, isOffline); } getHeartbeatChannels(): Array { @@ -354,21 +325,27 @@ export default class { } _performHeartbeatLoop() { - let heartbeatChannels = Object.keys(this._heartbeatChannels); - let heartbeatChannelGroups = Object.keys(this._heartbeatChannelGroups); + let heartbeatChannels = []; + heartbeatChannels = heartbeatChannels.concat(this.getHeartbeatChannels()); + heartbeatChannels = heartbeatChannels.concat(this.getSubscribedChannels()); + + let heartbeatChannelGroups = []; + heartbeatChannelGroups = heartbeatChannelGroups.concat(this.getHeartbeatChannelGroups()); + heartbeatChannelGroups = heartbeatChannelGroups.concat(this.getSubscribedChannelGroups()); + let presenceState = {}; if (heartbeatChannels.length === 0 && heartbeatChannelGroups.length === 0) { return; } - heartbeatChannels.forEach((channel) => { - let channelState = this._heartbeatChannels[channel].state; + this.getSubscribedChannels().forEach((channel) => { + let channelState = this._channels[channel].state; if (Object.keys(channelState).length) presenceState[channel] = channelState; }); - heartbeatChannelGroups.forEach((channelGroup) => { - let channelGroupState = this._heartbeatChannelGroups[channelGroup].state; + this.getSubscribedChannelGroups().forEach((channelGroup) => { + let channelGroupState = this._channelGroups[channelGroup].state; if (Object.keys(channelGroupState).length) presenceState[channelGroup] = channelGroupState; }); @@ -399,8 +376,6 @@ export default class { this._stopSubscribeLoop(); let channels = []; let channelGroups = []; - let heartbeatChannels = []; - let heartbeatChannelGroups = []; Object.keys(this._channels).forEach(channel => channels.push(channel)); Object.keys(this._presenceChannels).forEach(channel => channels.push(`${channel}-pnpres`)); @@ -408,10 +383,7 @@ export default class { Object.keys(this._channelGroups).forEach(channelGroup => channelGroups.push(channelGroup)); Object.keys(this._presenceChannelGroups).forEach(channelGroup => channelGroups.push(`${channelGroup}-pnpres`)); - Object.keys(this._heartbeatChannels).forEach(channel => heartbeatChannels.push(channel)); - Object.keys(this._heartbeatChannelGroups).forEach(channelGroup => heartbeatChannelGroups.push(channelGroup)); - - if (channels.length === 0 && channelGroups.length === 0 && heartbeatChannels.length === 0 && heartbeatChannelGroups.length === 0) { + if (channels.length === 0 && channelGroups.length === 0) { return; } @@ -477,21 +449,10 @@ export default class { } if (!this._subscriptionStatusAnnounced) { - const conciliationChannels = this.getHeartbeatChannels().every(channel => this.getSubscribedChannels().includes(channel)); - const conciliationChannelGroups = this.getHeartbeatChannelGroups().every(channelGroup => this.getSubscribedChannelGroups().includes(channelGroup)); - let connectedAnnounce: StatusAnnouncement = {}; connectedAnnounce.category = categoryConstants.PNConnectedCategory; connectedAnnounce.operation = status.operation; connectedAnnounce.affectedChannels = this._pendingChannelSubscriptions; - - if (!conciliationChannels || !conciliationChannelGroups) { - connectedAnnounce.affectedHeartbeatChannels = this._pendingHeartbeatChannels; - connectedAnnounce.affectedHeartbeatChannelGroups = this._pendingHeartbeatChannelGroups; - connectedAnnounce.heartbeatChannels = this.getHeartbeatChannels(); - connectedAnnounce.heartbeatChannelGroups = this.getHeartbeatChannelGroups(); - } - connectedAnnounce.subscribedChannels = this.getSubscribedChannels(); connectedAnnounce.affectedChannelGroups = this._pendingChannelGroupSubscriptions; connectedAnnounce.lastTimetoken = this._lastTimetoken; @@ -502,8 +463,6 @@ export default class { // clear the pending connections list this._pendingChannelSubscriptions = []; this._pendingChannelGroupSubscriptions = []; - this._pendingHeartbeatChannels = []; - this._pendingHeartbeatChannelGroups = []; } let messages = payload.messages || []; diff --git a/src/core/pubnub-common.js b/src/core/pubnub-common.js index 1e0ab9501..98888fbb7 100644 --- a/src/core/pubnub-common.js +++ b/src/core/pubnub-common.js @@ -69,6 +69,7 @@ export default class { audit: Function; // subscribe: Function; + presence: Function; unsubscribe: Function; unsubscribeAll: Function; @@ -179,6 +180,7 @@ export default class { // subscription related methods this.subscribe = subscriptionManager.adaptSubscribeChange.bind(subscriptionManager); + this.presence = subscriptionManager.adaptPresenceChange.bind(subscriptionManager); this.unsubscribe = subscriptionManager.adaptUnsubscribeChange.bind(subscriptionManager); this.disconnect = subscriptionManager.disconnect.bind(subscriptionManager); this.reconnect = subscriptionManager.reconnect.bind(subscriptionManager); diff --git a/test/integration/components/subscription_manager.test.js b/test/integration/components/subscription_manager.test.js index 65323602f..07340c97f 100644 --- a/test/integration/components/subscription_manager.test.js +++ b/test/integration/components/subscription_manager.test.js @@ -241,7 +241,7 @@ describe('#components/subscription_manager', () => { } }); - pubnubWithPassingHeartbeats.subscribe({ heartbeatChannels: ['ch1', 'ch2'] }); + pubnubWithPassingHeartbeats.presence({ channels: ['ch1', 'ch2'], connected: true }); }); it('reports when heartbeats pass with heartbeatChannelGroups', (done) => { @@ -263,7 +263,7 @@ describe('#components/subscription_manager', () => { } }); - pubnubWithPassingHeartbeats.subscribe({ heartbeatChannelGroups: ['cg1'] }); + pubnubWithPassingHeartbeats.presence({ channelGroups: ['cg1'], connected: true }); }); it('reports when the queue is beyond set threshold', (done) => { From b4e9ef32c93164d0c3dc941ffdf86734e8dca7e9 Mon Sep 17 00:00:00 2001 From: Max Presman Date: Thu, 4 Jan 2018 14:06:31 -0800 Subject: [PATCH 10/13] 4.20.0 --- .pubnub.yml | 7 ++++++- CHANGELOG.md | 10 +++++----- README.md | 4 ++-- dist/titanium/pubnub.js | 4 ++-- dist/titanium/pubnub.min.js | 2 +- dist/web/pubnub.js | 4 ++-- dist/web/pubnub.min.js | 2 +- lib/core/components/config.js | 2 +- lib/core/components/config.js.map | 2 +- package.json | 2 +- src/core/components/config.js | 2 +- 11 files changed, 23 insertions(+), 18 deletions(-) diff --git a/.pubnub.yml b/.pubnub.yml index 7e76c33fb..97e6f6020 100644 --- a/.pubnub.yml +++ b/.pubnub.yml @@ -1,11 +1,16 @@ name: javascript -version: 4.19.0 +version: 4.20.0 schema: 1 scm: github.com/pubnub/javascript files: - dist/web/pubnub.js - dist/web/pubnub.min.js changelog: + - version: v4.20.0 + date: 2018-01-04 + changes: + - type: feature + text: add support for heartbeat sending without subscription via .presence() - version: v4.19.0 date: 2017-12-05 changes: diff --git a/CHANGELOG.md b/CHANGELOG.md index 8fc34c47c..2e55df19a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,14 +5,14 @@ [Full Changelog](https://github.com/pubnub/javascript/compare/v4.18.0...v4.19.0) +- 🌟add support for Native Script -- ⭐ add support for Native Script -- 🌟 add missing flow types +- ⭐add missing flow types -- 🌟 upgrade superagent to ^3.8.1 +- ⭐upgrade superagent to ^3.8.1 @@ -23,10 +23,10 @@ [Full Changelog](https://github.com/pubnub/javascript/compare/v4.17.0...v4.18.0) -- ⭐ keepAlive is now initialized globally instead of per-call, allowing better connection reuse +- ⭐keepAlive is now initialized globally instead of per-call, allowing better connection reuse +- 🌟added sdkName configuration parameter which allow completely override pnsdk in request query -- 🌟 added sdkName configuration parameter which allow completely override pnsdk in request query diff --git a/README.md b/README.md index 63d7daa02..bbbf6cf8d 100644 --- a/README.md +++ b/README.md @@ -19,5 +19,5 @@ please use the [master_3x](https://github.com/pubnub/javascript/tree/master_3x) - If you **need help** or have a **general question**, contact ## CDN Links -* https://cdn.pubnub.com/sdk/javascript/pubnub.4.19.0.min.js -* https://cdn.pubnub.com/sdk/javascript/pubnub.4.19.0.js +* https://cdn.pubnub.com/sdk/javascript/pubnub.4.20.0.min.js +* https://cdn.pubnub.com/sdk/javascript/pubnub.4.20.0.js diff --git a/dist/titanium/pubnub.js b/dist/titanium/pubnub.js index b26d35519..330f484ca 100644 --- a/dist/titanium/pubnub.js +++ b/dist/titanium/pubnub.js @@ -1,4 +1,4 @@ -/*! 4.19.0 / Consumer */ +/*! 4.20.0 / Consumer */ (function webpackUniversalModuleDefinition(root, factory) { if(typeof exports === 'object' && typeof module === 'object') module.exports = factory(); @@ -586,7 +586,7 @@ return /******/ (function(modules) { // webpackBootstrap }, { key: 'getVersion', value: function getVersion() { - return '4.19.0'; + return '4.20.0'; } }, { key: '_decideUUID', diff --git a/dist/titanium/pubnub.min.js b/dist/titanium/pubnub.min.js index 3bbc0cbda..a425078bc 100644 --- a/dist/titanium/pubnub.min.js +++ b/dist/titanium/pubnub.min.js @@ -1,3 +1,3 @@ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.PubNub=t():e.PubNub=t()}(this,function(){return function(e){function t(r){if(n[r])return n[r].exports;var i=n[r]={exports:{},id:r,loaded:!1};return e[r].call(i.exports,i,i.exports,t),i.loaded=!0,i.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var a=n(1),u=r(a),c=n(39),l=r(c),f=n(40),h=r(f),d=n(41),p=(n(5),function(e){function t(e){return i(this,t),e.db=new h.default,e.sdkFamily="TitaniumSDK",e.networking=new l.default({del:d.del,get:d.get,post:d.post}),o(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e))}return s(t,e),t}(u.default));t.default=p,e.exports=t.default},function(e,t,n){"use strict";function r(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}function i(e){return e&&e.__esModule?e:{default:e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var s=function(){function e(e,t){for(var n=0;n>>2]|=(n[i>>>2]>>>24-i%4*8&255)<<24-(r+i)%4*8;else if(65535>>2]=n[i>>>2];else t.push.apply(t,n);return this.sigBytes+=e,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=o.clone.call(this);return e.words=this.words.slice(0),e},random:function(t){for(var n=[],r=0;r>>2]>>>24-r%4*8&255;n.push((i>>>4).toString(16)),n.push((15&i).toString(16))}return n.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 s.init(n,t/2)}},c=a.Latin1={stringify:function(e){var t=e.words;e=e.sigBytes;for(var n=[],r=0;r>>2]>>>24-r%4*8&255));return n.join("")},parse:function(e){for(var t=e.length,n=[],r=0;r>>2]|=(255&e.charCodeAt(r))<<24-r%4*8;return new s.init(n,t)}},l=a.Utf8={stringify:function(e){try{return decodeURIComponent(escape(c.stringify(e)))}catch(e){throw Error("Malformed UTF-8 data")}},parse:function(e){return c.parse(unescape(encodeURIComponent(e)))}},f=r.BufferedBlockAlgorithm=o.extend({reset:function(){this._data=new s.init,this._nDataBytes=0},_append:function(e){"string"==typeof e&&(e=l.parse(e)),this._data.concat(e),this._nDataBytes+=e.sigBytes},_process:function(t){var n=this._data,r=n.words,i=n.sigBytes,o=this.blockSize,a=i/(4*o),a=t?e.ceil(a):e.max((0|a)-this._minBufferSize,0);if(t=a*o,i=e.min(4*t,i),t){for(var u=0;ul;){var f;e:{f=c;for(var h=e.sqrt(f),d=2;d<=h;d++)if(!(f%d)){f=!1;break e}f=!0}f&&(8>l&&(s[l]=u(e.pow(c,.5))),a[l]=u(e.pow(c,1/3)),l++),c++}var p=[],r=r.SHA256=o.extend({_doReset:function(){this._hash=new i.init(s.slice(0))},_doProcessBlock:function(e,t){for(var n=this._hash.words,r=n[0],i=n[1],o=n[2],s=n[3],u=n[4],c=n[5],l=n[6],f=n[7],h=0;64>h;h++){if(16>h)p[h]=0|e[t+h];else{var d=p[h-15],g=p[h-2];p[h]=((d<<25|d>>>7)^(d<<14|d>>>18)^d>>>3)+p[h-7]+((g<<15|g>>>17)^(g<<13|g>>>19)^g>>>10)+p[h-16]}d=f+((u<<26|u>>>6)^(u<<21|u>>>11)^(u<<7|u>>>25))+(u&c^~u&l)+a[h]+p[h],g=((r<<30|r>>>2)^(r<<19|r>>>13)^(r<<10|r>>>22))+(r&i^r&o^i&o),f=l,l=c,c=u,u=s+d|0,s=o,o=i,i=r,r=d+g|0}n[0]=n[0]+r|0,n[1]=n[1]+i|0,n[2]=n[2]+o|0,n[3]=n[3]+s|0,n[4]=n[4]+u|0,n[5]=n[5]+c|0,n[6]=n[6]+l|0,n[7]=n[7]+f|0},_doFinalize:function(){var t=this._data,n=t.words,r=8*this._nDataBytes,i=8*t.sigBytes;return n[i>>>5]|=128<<24-i%32,n[14+(i+64>>>9<<4)]=e.floor(r/4294967296),n[15+(i+64>>>9<<4)]=r,t.sigBytes=4*n.length,this._process(),this._hash},clone:function(){var e=o.clone.call(this);return e._hash=this._hash.clone(),e}});t.SHA256=o._createHelper(r),t.HmacSHA256=o._createHmacHelper(r)}(Math),function(){var e=n,t=e.enc.Utf8;e.algo.HMAC=e.lib.Base.extend({init:function(e,n){e=this._hasher=new e.init,"string"==typeof n&&(n=t.parse(n));var r=e.blockSize,i=4*r;n.sigBytes>i&&(n=e.finalize(n)),n.clamp();for(var o=this._oKey=n.clone(),s=this._iKey=n.clone(),a=o.words,u=s.words,c=0;c>>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;4>s&&i+.75*s>>6*(3-s)&63));if(t=r.charAt(64))for(;e.length%4;)e.push(t);return e.join("")},parse:function(e){var n=e.length,r=this._map,i=r.charAt(64);i&&-1!=(i=e.indexOf(i))&&(n=i);for(var i=[],o=0,s=0;s>>6-s%4*2;i[o>>>2]|=(a|u)<<24-o%4*8,o++}return t.create(i,o)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="}}(),function(e){function t(e,t,n,r,i,o,s){return((e=e+(t&n|~t&r)+i+s)<>>32-o)+t}function r(e,t,n,r,i,o,s){return((e=e+(t&r|n&~r)+i+s)<>>32-o)+t}function i(e,t,n,r,i,o,s){return((e=e+(t^n^r)+i+s)<>>32-o)+t}function o(e,t,n,r,i,o,s){return((e=e+(n^(t|~r))+i+s)<>>32-o)+t}for(var s=n,a=s.lib,u=a.WordArray,c=a.Hasher,a=s.algo,l=[],f=0;64>f;f++)l[f]=4294967296*e.abs(e.sin(f+1))|0;a=a.MD5=c.extend({_doReset:function(){this._hash=new u.init([1732584193,4023233417,2562383102,271733878])},_doProcessBlock:function(e,n){for(var s=0;16>s;s++){var a=n+s,u=e[a];e[a]=16711935&(u<<8|u>>>24)|4278255360&(u<<24|u>>>8)}var s=this._hash.words,a=e[n+0],u=e[n+1],c=e[n+2],f=e[n+3],h=e[n+4],d=e[n+5],p=e[n+6],g=e[n+7],y=e[n+8],b=e[n+9],v=e[n+10],_=e[n+11],m=e[n+12],k=e[n+13],P=e[n+14],S=e[n+15],O=s[0],C=s[1],M=s[2],T=s[3],O=t(O,C,M,T,a,7,l[0]),T=t(T,O,C,M,u,12,l[1]),M=t(M,T,O,C,c,17,l[2]),C=t(C,M,T,O,f,22,l[3]),O=t(O,C,M,T,h,7,l[4]),T=t(T,O,C,M,d,12,l[5]),M=t(M,T,O,C,p,17,l[6]),C=t(C,M,T,O,g,22,l[7]),O=t(O,C,M,T,y,7,l[8]),T=t(T,O,C,M,b,12,l[9]),M=t(M,T,O,C,v,17,l[10]),C=t(C,M,T,O,_,22,l[11]),O=t(O,C,M,T,m,7,l[12]),T=t(T,O,C,M,k,12,l[13]),M=t(M,T,O,C,P,17,l[14]),C=t(C,M,T,O,S,22,l[15]),O=r(O,C,M,T,u,5,l[16]),T=r(T,O,C,M,p,9,l[17]),M=r(M,T,O,C,_,14,l[18]),C=r(C,M,T,O,a,20,l[19]),O=r(O,C,M,T,d,5,l[20]),T=r(T,O,C,M,v,9,l[21]),M=r(M,T,O,C,S,14,l[22]),C=r(C,M,T,O,h,20,l[23]),O=r(O,C,M,T,b,5,l[24]),T=r(T,O,C,M,P,9,l[25]),M=r(M,T,O,C,f,14,l[26]),C=r(C,M,T,O,y,20,l[27]),O=r(O,C,M,T,k,5,l[28]),T=r(T,O,C,M,c,9,l[29]),M=r(M,T,O,C,g,14,l[30]),C=r(C,M,T,O,m,20,l[31]),O=i(O,C,M,T,d,4,l[32]),T=i(T,O,C,M,y,11,l[33]),M=i(M,T,O,C,_,16,l[34]),C=i(C,M,T,O,P,23,l[35]),O=i(O,C,M,T,u,4,l[36]),T=i(T,O,C,M,h,11,l[37]),M=i(M,T,O,C,g,16,l[38]),C=i(C,M,T,O,v,23,l[39]),O=i(O,C,M,T,k,4,l[40]),T=i(T,O,C,M,a,11,l[41]),M=i(M,T,O,C,f,16,l[42]),C=i(C,M,T,O,p,23,l[43]),O=i(O,C,M,T,b,4,l[44]),T=i(T,O,C,M,m,11,l[45]),M=i(M,T,O,C,S,16,l[46]),C=i(C,M,T,O,c,23,l[47]),O=o(O,C,M,T,a,6,l[48]),T=o(T,O,C,M,g,10,l[49]),M=o(M,T,O,C,P,15,l[50]),C=o(C,M,T,O,d,21,l[51]),O=o(O,C,M,T,m,6,l[52]),T=o(T,O,C,M,f,10,l[53]),M=o(M,T,O,C,v,15,l[54]),C=o(C,M,T,O,u,21,l[55]),O=o(O,C,M,T,y,6,l[56]),T=o(T,O,C,M,S,10,l[57]),M=o(M,T,O,C,p,15,l[58]),C=o(C,M,T,O,k,21,l[59]),O=o(O,C,M,T,h,6,l[60]),T=o(T,O,C,M,_,10,l[61]),M=o(M,T,O,C,c,15,l[62]),C=o(C,M,T,O,b,21,l[63]);s[0]=s[0]+O|0,s[1]=s[1]+C|0,s[2]=s[2]+M|0,s[3]=s[3]+T|0},_doFinalize:function(){var t=this._data,n=t.words,r=8*this._nDataBytes,i=8*t.sigBytes;n[i>>>5]|=128<<24-i%32;var o=e.floor(r/4294967296);for(n[15+(i+64>>>9<<4)]=16711935&(o<<8|o>>>24)|4278255360&(o<<24|o>>>8),n[14+(i+64>>>9<<4)]=16711935&(r<<8|r>>>24)|4278255360&(r<<24|r>>>8),t.sigBytes=4*(n.length+1),this._process(),t=this._hash,n=t.words,r=0;4>r;r++)i=n[r],n[r]=16711935&(i<<8|i>>>24)|4278255360&(i<<24|i>>>8);return t},clone:function(){var e=c.clone.call(this);return e._hash=this._hash.clone(),e}}),s.MD5=c._createHelper(a),s.HmacMD5=c._createHmacHelper(a)}(Math),function(){var e=n,t=e.lib,r=t.Base,i=t.WordArray,t=e.algo,o=t.EvpKDF=r.extend({cfg:r.extend({keySize:4,hasher:t.MD5,iterations:1}),init:function(e){this.cfg=this.cfg.extend(e)},compute:function(e,t){for(var n=this.cfg,r=n.hasher.create(),o=i.create(),s=o.words,a=n.keySize,n=n.iterations;s.length>>2]}},r.BlockCipher=c.extend({cfg:c.cfg.extend({mode:l,padding:h}),reset:function(){c.reset.call(this);var e=this.cfg,t=e.iv,e=e.mode;if(this._xformMode==this._ENC_XFORM_MODE)var n=e.createEncryptor;else n=e.createDecryptor,this._minBufferSize=1;this._mode=n.call(e,this,t&&t.words)},_doProcessBlock:function(e,t){this._mode.processBlock(e,t)},_doFinalize:function(){var e=this.cfg.padding;if(this._xformMode==this._ENC_XFORM_MODE){e.pad(this._data,this.blockSize);var t=this._process(!0)}else t=this._process(!0),e.unpad(t);return t},blockSize:4});var d=r.CipherParams=i.extend({init:function(e){this.mixIn(e)},toString:function(e){return(e||this.formatter).stringify(this)}}),l=(t.format={}).OpenSSL={stringify:function(e){var t=e.ciphertext;return e=e.salt,(e?o.create([1398893684,1701076831]).concat(e).concat(t):t).toString(a)},parse:function(e){e=a.parse(e);var t=e.words;if(1398893684==t[0]&&1701076831==t[1]){var n=o.create(t.slice(2,4));t.splice(0,4),e.sigBytes-=16}return d.create({ciphertext:e,salt:n})}},p=r.SerializableCipher=i.extend({cfg:i.extend({format:l}),encrypt:function(e,t,n,r){r=this.cfg.extend(r);var i=e.createEncryptor(n,r);return t=i.finalize(t),i=i.cfg,d.create({ciphertext:t,key:n,iv:i.iv,algorithm:e,mode:i.mode,padding:i.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}}),t=(t.kdf={}).OpenSSL={execute:function(e,t,n,r){return r||(r=o.random(8)),e=u.create({keySize:t+n}).compute(e,r),n=o.create(e.words.slice(t),4*n),e.sigBytes=4*t,d.create({key:e,iv:n,salt:r})}},g=r.PasswordBasedCipher=p.extend({cfg:p.cfg.extend({kdf:t}),encrypt:function(e,t,n,r){return r=this.cfg.extend(r),n=r.kdf.execute(n,e.keySize,e.ivSize),r.iv=n.iv,e=p.encrypt.call(this,e,t,n.key,r),e.mixIn(n),e},decrypt:function(e,t,n,r){return r=this.cfg.extend(r),t=this._parse(t,r.format),n=r.kdf.execute(n,e.keySize,e.ivSize,t.salt),r.iv=n.iv,p.decrypt.call(this,e,t,n.key,r)}})}(),function(){for(var e=n,t=e.lib.BlockCipher,r=e.algo,i=[],o=[],s=[],a=[],u=[],c=[],l=[],f=[],h=[],d=[],p=[],g=0;256>g;g++)p[g]=128>g?g<<1:g<<1^283;for(var y=0,b=0,g=0;256>g;g++){var v=b^b<<1^b<<2^b<<3^b<<4,v=v>>>8^255&v^99;i[y]=v,o[v]=y;var _=p[y],m=p[_],k=p[m],P=257*p[v]^16843008*v;s[y]=P<<24|P>>>8,a[y]=P<<16|P>>>16,u[y]=P<<8|P>>>24,c[y]=P,P=16843009*k^65537*m^257*_^16843008*y,l[v]=P<<24|P>>>8,f[v]=P<<16|P>>>16,h[v]=P<<8|P>>>24,d[v]=P,y?(y=_^p[p[p[k^_]]],b^=p[p[b]]):y=b=1}var S=[0,1,2,4,8,16,32,64,128,27,54],r=r.AES=t.extend({_doReset:function(){for(var e=this._key,t=e.words,n=e.sigBytes/4,e=4*((this._nRounds=n+6)+1),r=this._keySchedule=[],o=0;o>>24]<<24|i[s>>>16&255]<<16|i[s>>>8&255]<<8|i[255&s]):(s=s<<8|s>>>24,s=i[s>>>24]<<24|i[s>>>16&255]<<16|i[s>>>8&255]<<8|i[255&s],s^=S[o/n|0]<<24),r[o]=r[o-n]^s}for(t=this._invKeySchedule=[],n=0;nn||4>=o?s:l[i[s>>>24]]^f[i[s>>>16&255]]^h[i[s>>>8&255]]^d[i[255&s]]},encryptBlock:function(e,t){this._doCryptBlock(e,t,this._keySchedule,s,a,u,c,i)},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,h,d,o),n=e[t+1],e[t+1]=e[t+3],e[t+3]=n},_doCryptBlock:function(e,t,n,r,i,o,s,a){for(var u=this._nRounds,c=e[t]^n[0],l=e[t+1]^n[1],f=e[t+2]^n[2],h=e[t+3]^n[3],d=4,p=1;p>>24]^i[l>>>16&255]^o[f>>>8&255]^s[255&h]^n[d++],y=r[l>>>24]^i[f>>>16&255]^o[h>>>8&255]^s[255&c]^n[d++],b=r[f>>>24]^i[h>>>16&255]^o[c>>>8&255]^s[255&l]^n[d++],h=r[h>>>24]^i[c>>>16&255]^o[l>>>8&255]^s[255&f]^n[d++],c=g,l=y,f=b;g=(a[c>>>24]<<24|a[l>>>16&255]<<16|a[f>>>8&255]<<8|a[255&h])^n[d++],y=(a[l>>>24]<<24|a[f>>>16&255]<<16|a[h>>>8&255]<<8|a[255&c])^n[d++],b=(a[f>>>24]<<24|a[h>>>16&255]<<16|a[c>>>8&255]<<8|a[255&l])^n[d++],h=(a[h>>>24]<<24|a[c>>>16&255]<<16|a[l>>>8&255]<<8|a[255&f])^n[d++],e[t]=g,e[t+1]=y,e[t+2]=b,e[t+3]=h},keySize:8});e.AES=t._createHelper(r)}(),n.mode.ECB=function(){var e=n.lib.BlockCipherMode.extend();return e.Encryptor=e.extend({processBlock:function(e,t){this._cipher.encryptBlock(e,t)}}),e.Decryptor=e.extend({processBlock:function(e,t){this._cipher.decryptBlock(e,t)}}),e}(),e.exports=n},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e,t){for(var n=0;n>>2]|=(n[i>>>2]>>>24-i%4*8&255)<<24-(r+i)%4*8;else if(65535>>2]=n[i>>>2];else t.push.apply(t,n);return this.sigBytes+=e,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=o.clone.call(this);return e.words=this.words.slice(0),e},random:function(t){for(var n=[],r=0;r>>2]>>>24-r%4*8&255;n.push((i>>>4).toString(16)),n.push((15&i).toString(16))}return n.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 s.init(n,t/2)}},c=a.Latin1={stringify:function(e){var t=e.words;e=e.sigBytes;for(var n=[],r=0;r>>2]>>>24-r%4*8&255));return n.join("")},parse:function(e){for(var t=e.length,n=[],r=0;r>>2]|=(255&e.charCodeAt(r))<<24-r%4*8;return new s.init(n,t)}},l=a.Utf8={stringify:function(e){try{return decodeURIComponent(escape(c.stringify(e)))}catch(e){throw Error("Malformed UTF-8 data")}},parse:function(e){return c.parse(unescape(encodeURIComponent(e)))}},f=r.BufferedBlockAlgorithm=o.extend({reset:function(){this._data=new s.init,this._nDataBytes=0},_append:function(e){"string"==typeof e&&(e=l.parse(e)),this._data.concat(e),this._nDataBytes+=e.sigBytes},_process:function(t){var n=this._data,r=n.words,i=n.sigBytes,o=this.blockSize,a=i/(4*o),a=t?e.ceil(a):e.max((0|a)-this._minBufferSize,0);if(t=a*o,i=e.min(4*t,i),t){for(var u=0;ul;){var f;e:{f=c;for(var h=e.sqrt(f),d=2;d<=h;d++)if(!(f%d)){f=!1;break e}f=!0}f&&(8>l&&(s[l]=u(e.pow(c,.5))),a[l]=u(e.pow(c,1/3)),l++),c++}var p=[],r=r.SHA256=o.extend({_doReset:function(){this._hash=new i.init(s.slice(0))},_doProcessBlock:function(e,t){for(var n=this._hash.words,r=n[0],i=n[1],o=n[2],s=n[3],u=n[4],c=n[5],l=n[6],f=n[7],h=0;64>h;h++){if(16>h)p[h]=0|e[t+h];else{var d=p[h-15],g=p[h-2];p[h]=((d<<25|d>>>7)^(d<<14|d>>>18)^d>>>3)+p[h-7]+((g<<15|g>>>17)^(g<<13|g>>>19)^g>>>10)+p[h-16]}d=f+((u<<26|u>>>6)^(u<<21|u>>>11)^(u<<7|u>>>25))+(u&c^~u&l)+a[h]+p[h],g=((r<<30|r>>>2)^(r<<19|r>>>13)^(r<<10|r>>>22))+(r&i^r&o^i&o),f=l,l=c,c=u,u=s+d|0,s=o,o=i,i=r,r=d+g|0}n[0]=n[0]+r|0,n[1]=n[1]+i|0,n[2]=n[2]+o|0,n[3]=n[3]+s|0,n[4]=n[4]+u|0,n[5]=n[5]+c|0,n[6]=n[6]+l|0,n[7]=n[7]+f|0},_doFinalize:function(){var t=this._data,n=t.words,r=8*this._nDataBytes,i=8*t.sigBytes;return n[i>>>5]|=128<<24-i%32,n[14+(i+64>>>9<<4)]=e.floor(r/4294967296),n[15+(i+64>>>9<<4)]=r,t.sigBytes=4*n.length,this._process(),this._hash},clone:function(){var e=o.clone.call(this);return e._hash=this._hash.clone(),e}});t.SHA256=o._createHelper(r),t.HmacSHA256=o._createHmacHelper(r)}(Math),function(){var e=n,t=e.enc.Utf8;e.algo.HMAC=e.lib.Base.extend({init:function(e,n){e=this._hasher=new e.init,"string"==typeof n&&(n=t.parse(n));var r=e.blockSize,i=4*r;n.sigBytes>i&&(n=e.finalize(n)),n.clamp();for(var o=this._oKey=n.clone(),s=this._iKey=n.clone(),a=o.words,u=s.words,c=0;c>>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;4>s&&i+.75*s>>6*(3-s)&63));if(t=r.charAt(64))for(;e.length%4;)e.push(t);return e.join("")},parse:function(e){var n=e.length,r=this._map,i=r.charAt(64);i&&-1!=(i=e.indexOf(i))&&(n=i);for(var i=[],o=0,s=0;s>>6-s%4*2;i[o>>>2]|=(a|u)<<24-o%4*8,o++}return t.create(i,o)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="}}(),function(e){function t(e,t,n,r,i,o,s){return((e=e+(t&n|~t&r)+i+s)<>>32-o)+t}function r(e,t,n,r,i,o,s){return((e=e+(t&r|n&~r)+i+s)<>>32-o)+t}function i(e,t,n,r,i,o,s){return((e=e+(t^n^r)+i+s)<>>32-o)+t}function o(e,t,n,r,i,o,s){return((e=e+(n^(t|~r))+i+s)<>>32-o)+t}for(var s=n,a=s.lib,u=a.WordArray,c=a.Hasher,a=s.algo,l=[],f=0;64>f;f++)l[f]=4294967296*e.abs(e.sin(f+1))|0;a=a.MD5=c.extend({_doReset:function(){this._hash=new u.init([1732584193,4023233417,2562383102,271733878])},_doProcessBlock:function(e,n){for(var s=0;16>s;s++){var a=n+s,u=e[a];e[a]=16711935&(u<<8|u>>>24)|4278255360&(u<<24|u>>>8)}var s=this._hash.words,a=e[n+0],u=e[n+1],c=e[n+2],f=e[n+3],h=e[n+4],d=e[n+5],p=e[n+6],g=e[n+7],y=e[n+8],b=e[n+9],v=e[n+10],_=e[n+11],m=e[n+12],k=e[n+13],P=e[n+14],S=e[n+15],O=s[0],C=s[1],M=s[2],T=s[3],O=t(O,C,M,T,a,7,l[0]),T=t(T,O,C,M,u,12,l[1]),M=t(M,T,O,C,c,17,l[2]),C=t(C,M,T,O,f,22,l[3]),O=t(O,C,M,T,h,7,l[4]),T=t(T,O,C,M,d,12,l[5]),M=t(M,T,O,C,p,17,l[6]),C=t(C,M,T,O,g,22,l[7]),O=t(O,C,M,T,y,7,l[8]),T=t(T,O,C,M,b,12,l[9]),M=t(M,T,O,C,v,17,l[10]),C=t(C,M,T,O,_,22,l[11]),O=t(O,C,M,T,m,7,l[12]),T=t(T,O,C,M,k,12,l[13]),M=t(M,T,O,C,P,17,l[14]),C=t(C,M,T,O,S,22,l[15]),O=r(O,C,M,T,u,5,l[16]),T=r(T,O,C,M,p,9,l[17]),M=r(M,T,O,C,_,14,l[18]),C=r(C,M,T,O,a,20,l[19]),O=r(O,C,M,T,d,5,l[20]),T=r(T,O,C,M,v,9,l[21]),M=r(M,T,O,C,S,14,l[22]),C=r(C,M,T,O,h,20,l[23]),O=r(O,C,M,T,b,5,l[24]),T=r(T,O,C,M,P,9,l[25]),M=r(M,T,O,C,f,14,l[26]),C=r(C,M,T,O,y,20,l[27]),O=r(O,C,M,T,k,5,l[28]),T=r(T,O,C,M,c,9,l[29]),M=r(M,T,O,C,g,14,l[30]),C=r(C,M,T,O,m,20,l[31]),O=i(O,C,M,T,d,4,l[32]),T=i(T,O,C,M,y,11,l[33]),M=i(M,T,O,C,_,16,l[34]),C=i(C,M,T,O,P,23,l[35]),O=i(O,C,M,T,u,4,l[36]),T=i(T,O,C,M,h,11,l[37]),M=i(M,T,O,C,g,16,l[38]),C=i(C,M,T,O,v,23,l[39]),O=i(O,C,M,T,k,4,l[40]),T=i(T,O,C,M,a,11,l[41]),M=i(M,T,O,C,f,16,l[42]),C=i(C,M,T,O,p,23,l[43]),O=i(O,C,M,T,b,4,l[44]),T=i(T,O,C,M,m,11,l[45]),M=i(M,T,O,C,S,16,l[46]),C=i(C,M,T,O,c,23,l[47]),O=o(O,C,M,T,a,6,l[48]),T=o(T,O,C,M,g,10,l[49]),M=o(M,T,O,C,P,15,l[50]),C=o(C,M,T,O,d,21,l[51]),O=o(O,C,M,T,m,6,l[52]),T=o(T,O,C,M,f,10,l[53]),M=o(M,T,O,C,v,15,l[54]),C=o(C,M,T,O,u,21,l[55]),O=o(O,C,M,T,y,6,l[56]),T=o(T,O,C,M,S,10,l[57]),M=o(M,T,O,C,p,15,l[58]),C=o(C,M,T,O,k,21,l[59]),O=o(O,C,M,T,h,6,l[60]),T=o(T,O,C,M,_,10,l[61]),M=o(M,T,O,C,c,15,l[62]),C=o(C,M,T,O,b,21,l[63]);s[0]=s[0]+O|0,s[1]=s[1]+C|0,s[2]=s[2]+M|0,s[3]=s[3]+T|0},_doFinalize:function(){var t=this._data,n=t.words,r=8*this._nDataBytes,i=8*t.sigBytes;n[i>>>5]|=128<<24-i%32;var o=e.floor(r/4294967296);for(n[15+(i+64>>>9<<4)]=16711935&(o<<8|o>>>24)|4278255360&(o<<24|o>>>8),n[14+(i+64>>>9<<4)]=16711935&(r<<8|r>>>24)|4278255360&(r<<24|r>>>8),t.sigBytes=4*(n.length+1),this._process(),t=this._hash,n=t.words,r=0;4>r;r++)i=n[r],n[r]=16711935&(i<<8|i>>>24)|4278255360&(i<<24|i>>>8);return t},clone:function(){var e=c.clone.call(this);return e._hash=this._hash.clone(),e}}),s.MD5=c._createHelper(a),s.HmacMD5=c._createHmacHelper(a)}(Math),function(){var e=n,t=e.lib,r=t.Base,i=t.WordArray,t=e.algo,o=t.EvpKDF=r.extend({cfg:r.extend({keySize:4,hasher:t.MD5,iterations:1}),init:function(e){this.cfg=this.cfg.extend(e)},compute:function(e,t){for(var n=this.cfg,r=n.hasher.create(),o=i.create(),s=o.words,a=n.keySize,n=n.iterations;s.length>>2]}},r.BlockCipher=c.extend({cfg:c.cfg.extend({mode:l,padding:h}),reset:function(){c.reset.call(this);var e=this.cfg,t=e.iv,e=e.mode;if(this._xformMode==this._ENC_XFORM_MODE)var n=e.createEncryptor;else n=e.createDecryptor,this._minBufferSize=1;this._mode=n.call(e,this,t&&t.words)},_doProcessBlock:function(e,t){this._mode.processBlock(e,t)},_doFinalize:function(){var e=this.cfg.padding;if(this._xformMode==this._ENC_XFORM_MODE){e.pad(this._data,this.blockSize);var t=this._process(!0)}else t=this._process(!0),e.unpad(t);return t},blockSize:4});var d=r.CipherParams=i.extend({init:function(e){this.mixIn(e)},toString:function(e){return(e||this.formatter).stringify(this)}}),l=(t.format={}).OpenSSL={stringify:function(e){var t=e.ciphertext;return e=e.salt,(e?o.create([1398893684,1701076831]).concat(e).concat(t):t).toString(a)},parse:function(e){e=a.parse(e);var t=e.words;if(1398893684==t[0]&&1701076831==t[1]){var n=o.create(t.slice(2,4));t.splice(0,4),e.sigBytes-=16}return d.create({ciphertext:e,salt:n})}},p=r.SerializableCipher=i.extend({cfg:i.extend({format:l}),encrypt:function(e,t,n,r){r=this.cfg.extend(r);var i=e.createEncryptor(n,r);return t=i.finalize(t),i=i.cfg,d.create({ciphertext:t,key:n,iv:i.iv,algorithm:e,mode:i.mode,padding:i.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}}),t=(t.kdf={}).OpenSSL={execute:function(e,t,n,r){return r||(r=o.random(8)),e=u.create({keySize:t+n}).compute(e,r),n=o.create(e.words.slice(t),4*n),e.sigBytes=4*t,d.create({key:e,iv:n,salt:r})}},g=r.PasswordBasedCipher=p.extend({cfg:p.cfg.extend({kdf:t}),encrypt:function(e,t,n,r){return r=this.cfg.extend(r),n=r.kdf.execute(n,e.keySize,e.ivSize),r.iv=n.iv,e=p.encrypt.call(this,e,t,n.key,r),e.mixIn(n),e},decrypt:function(e,t,n,r){return r=this.cfg.extend(r),t=this._parse(t,r.format),n=r.kdf.execute(n,e.keySize,e.ivSize,t.salt),r.iv=n.iv,p.decrypt.call(this,e,t,n.key,r)}})}(),function(){for(var e=n,t=e.lib.BlockCipher,r=e.algo,i=[],o=[],s=[],a=[],u=[],c=[],l=[],f=[],h=[],d=[],p=[],g=0;256>g;g++)p[g]=128>g?g<<1:g<<1^283;for(var y=0,b=0,g=0;256>g;g++){var v=b^b<<1^b<<2^b<<3^b<<4,v=v>>>8^255&v^99;i[y]=v,o[v]=y;var _=p[y],m=p[_],k=p[m],P=257*p[v]^16843008*v;s[y]=P<<24|P>>>8,a[y]=P<<16|P>>>16,u[y]=P<<8|P>>>24,c[y]=P,P=16843009*k^65537*m^257*_^16843008*y,l[v]=P<<24|P>>>8,f[v]=P<<16|P>>>16,h[v]=P<<8|P>>>24,d[v]=P,y?(y=_^p[p[p[k^_]]],b^=p[p[b]]):y=b=1}var S=[0,1,2,4,8,16,32,64,128,27,54],r=r.AES=t.extend({_doReset:function(){for(var e=this._key,t=e.words,n=e.sigBytes/4,e=4*((this._nRounds=n+6)+1),r=this._keySchedule=[],o=0;o>>24]<<24|i[s>>>16&255]<<16|i[s>>>8&255]<<8|i[255&s]):(s=s<<8|s>>>24,s=i[s>>>24]<<24|i[s>>>16&255]<<16|i[s>>>8&255]<<8|i[255&s],s^=S[o/n|0]<<24),r[o]=r[o-n]^s}for(t=this._invKeySchedule=[],n=0;nn||4>=o?s:l[i[s>>>24]]^f[i[s>>>16&255]]^h[i[s>>>8&255]]^d[i[255&s]]},encryptBlock:function(e,t){this._doCryptBlock(e,t,this._keySchedule,s,a,u,c,i)},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,h,d,o),n=e[t+1],e[t+1]=e[t+3],e[t+3]=n},_doCryptBlock:function(e,t,n,r,i,o,s,a){for(var u=this._nRounds,c=e[t]^n[0],l=e[t+1]^n[1],f=e[t+2]^n[2],h=e[t+3]^n[3],d=4,p=1;p>>24]^i[l>>>16&255]^o[f>>>8&255]^s[255&h]^n[d++],y=r[l>>>24]^i[f>>>16&255]^o[h>>>8&255]^s[255&c]^n[d++],b=r[f>>>24]^i[h>>>16&255]^o[c>>>8&255]^s[255&l]^n[d++],h=r[h>>>24]^i[c>>>16&255]^o[l>>>8&255]^s[255&f]^n[d++],c=g,l=y,f=b;g=(a[c>>>24]<<24|a[l>>>16&255]<<16|a[f>>>8&255]<<8|a[255&h])^n[d++],y=(a[l>>>24]<<24|a[f>>>16&255]<<16|a[h>>>8&255]<<8|a[255&c])^n[d++],b=(a[f>>>24]<<24|a[h>>>16&255]<<16|a[c>>>8&255]<<8|a[255&l])^n[d++],h=(a[h>>>24]<<24|a[c>>>16&255]<<16|a[l>>>8&255]<<8|a[255&f])^n[d++],e[t]=g,e[t+1]=y,e[t+2]=b,e[t+3]=h},keySize:8});e.AES=t._createHelper(r)}(),n.mode.ECB=function(){var e=n.lib.BlockCipherMode.extend();return e.Encryptor=e.extend({processBlock:function(e,t){this._cipher.encryptBlock(e,t)}}),e.Decryptor=e.extend({processBlock:function(e,t){this._cipher.decryptBlock(e,t)}}),e}(),e.exports=n},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e,t){for(var n=0;n=s){var u={};u.category=y.default.PNRequestMessageCountExceededCategory,u.operation=e.operation,this._listenerManager.announceStatus(u)}i.forEach(function(e){var t=e.channel,r=e.subscriptionMatch,i=e.publishMetaData;if(t===r&&(r=null),a){if(n._dedupingManager.isDuplicate(e))return;n._dedupingManager.addEntry(e)}if(p.default.endsWith(e.channel,"-pnpres")){var o={};o.channel=null,o.subscription=null,o.actualChannel=null!=r?t:null,o.subscribedChannel=null!=r?r:t,t&&(o.channel=t.substring(0,t.lastIndexOf("-pnpres"))),r&&(o.subscription=r.substring(0,r.lastIndexOf("-pnpres"))),o.action=e.payload.action,o.state=e.payload.data,o.timetoken=i.publishTimetoken,o.occupancy=e.payload.occupancy,o.uuid=e.payload.uuid,o.timestamp=e.payload.timestamp,e.payload.join&&(o.join=e.payload.join),e.payload.leave&&(o.leave=e.payload.leave),e.payload.timeout&&(o.timeout=e.payload.timeout),n._listenerManager.announcePresence(o)}else{var s={};s.channel=null,s.subscription=null,s.actualChannel=null!=r?t:null,s.subscribedChannel=null!=r?r:t,s.channel=t,s.subscription=r,s.timetoken=i.publishTimetoken,s.publisher=e.issuingClientId,e.userMetadata&&(s.userMetadata=e.userMetadata),n._config.cipherKey?s.message=n._crypto.decrypt(e.payload):s.message=e.payload,n._listenerManager.announceMessage(s)}}),this._region=t.metadata.region,this._startSubscribeLoop()}},{key:"_stopSubscribeLoop",value:function(){this._subscribeCall&&("function"==typeof this._subscribeCall.abort&&this._subscribeCall.abort(),this._subscribeCall=null)}}]),e}();t.default=b,e.exports=t.default},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n=this._config.maximumCacheSize&&this.hashHistory.shift(),this.hashHistory.push(this.getKey(e))}},{key:"clearHistory",value:function(){this.hashHistory=[]}}]),e}();t.default=a,e.exports=t.default},function(e,t){"use strict";function n(e){var t=[];return Object.keys(e).forEach(function(e){return t.push(e)}),t}function r(e){return encodeURIComponent(e).replace(/[!~*'()]/g,function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()})}function i(e){return n(e).sort()}function o(e){return i(e).map(function(t){return t+"="+r(e[t])}).join("&")}function s(e,t){return-1!==e.indexOf(t,this.length-t.length)}function a(){var e=void 0,t=void 0;return{promise:new Promise(function(n,r){e=n,t=r}),reject:t,fulfill:e}}e.exports={signPamFromParams:o,endsWith:s,createPromise:a,encodeString:r}},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function a(e,t){return e.type=t,e.error=!0,e}function u(e){return a({message:e},"validationError")}function c(e,t,n){return e.usePost&&e.usePost(t,n)?e.postURL(t,n):e.getURL(t,n)}function l(e){if(e.sdkName)return e.sdkName;var t="PubNub-JS-"+e.sdkFamily;return e.partnerId&&(t+="-"+e.partnerId),t+="/"+e.getVersion()}function f(e,t,n){var r=e.config,i=e.crypto;n.timestamp=Math.floor((new Date).getTime()/1e3);var o=r.subscribeKey+"\n"+r.publishKey+"\n"+t+"\n";o+=g.default.signPamFromParams(n);var s=i.HMACSHA256(o);s=s.replace(/\+/g,"-"),s=s.replace(/\//g,"_"),n.signature=s}Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){var n=e.networking,r=e.config,i=null,o=null,s={};t.getOperation()===v.default.PNTimeOperation||t.getOperation()===v.default.PNChannelGroupsOperation?i=arguments.length<=2?void 0:arguments[2]:(s=arguments.length<=2?void 0:arguments[2],i=arguments.length<=3?void 0:arguments[3]),"undefined"==typeof Promise||i||(o=g.default.createPromise());var a=t.validateParams(e,s);if(!a){var h=t.prepareParams(e,s),p=c(t,e,s),y=void 0,b={url:p,operation:t.getOperation(),timeout:t.getRequestTimeout(e)};h.uuid=r.UUID,h.pnsdk=l(r),r.useInstanceId&&(h.instanceid=r.instanceId),r.useRequestId&&(h.requestid=d.default.createUUID()),t.isAuthSupported()&&r.getAuthKey()&&(h.auth=r.getAuthKey()),r.secretKey&&f(e,p,h);var m=function(n,r){if(n.error)return void(i?i(n):o&&o.reject(new _("PubNub call failed, check status for details",n)));var a=t.handleResponse(e,r,s);i?i(n,a):o&&o.fulfill(a)};if(t.usePost&&t.usePost(e,s)){var k=t.postPayload(e,s);y=n.POST(h,k,b,m)}else y=t.useDelete&&t.useDelete()?n.DELETE(h,b,m):n.GET(h,b,m);return t.getOperation()===v.default.PNSubscribeOperation?y:o?o.promise:void 0}return i?i(u(a)):o?(o.reject(new _("Validation failed, check status for details",u(a))),o.promise):void 0};var h=n(3),d=r(h),p=(n(5),n(15)),g=r(p),y=n(2),b=(r(y),n(13)),v=r(b),_=function(e){function t(e,n){i(this,t);var r=o(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return r.name=r.constructor.name,r.status=n,r.message=e,r}return s(t,e),t}(Error);e.exports=t.default},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return h.default.PNAddChannelsToGroupOperation}function o(e,t){var n=t.channels,r=t.channelGroup,i=e.config;return r?n&&0!==n.length?i.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channels":"Missing Channel Group"}function s(e,t){var n=t.channelGroup;return"/v1/channel-registration/sub-key/"+e.config.subscribeKey+"/channel-group/"+p.default.encodeString(n)}function a(e){return e.config.getTransactionTimeout()}function u(){return!0}function c(e,t){var n=t.channels;return{add:(void 0===n?[]:n).join(",")}}function l(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=o,t.getURL=s,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var f=(n(5),n(13)),h=r(f),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return h.default.PNRemoveChannelsFromGroupOperation}function o(e,t){var n=t.channels,r=t.channelGroup,i=e.config;return r?n&&0!==n.length?i.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channels":"Missing Channel Group"}function s(e,t){var n=t.channelGroup;return"/v1/channel-registration/sub-key/"+e.config.subscribeKey+"/channel-group/"+p.default.encodeString(n)}function a(e){return e.config.getTransactionTimeout()}function u(){return!0}function c(e,t){var n=t.channels;return{remove:(void 0===n?[]:n).join(",")}}function l(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=o,t.getURL=s,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var f=(n(5),n(13)),h=r(f),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return h.default.PNRemoveGroupOperation}function o(e,t){var n=t.channelGroup,r=e.config;return n?r.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channel Group"}function s(e,t){var n=t.channelGroup;return"/v1/channel-registration/sub-key/"+e.config.subscribeKey+"/channel-group/"+p.default.encodeString(n)+"/remove"}function a(){return!0}function u(e){return e.config.getTransactionTimeout()}function c(){return{}}function l(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=o,t.getURL=s,t.isAuthSupported=a,t.getRequestTimeout=u,t.prepareParams=c,t.handleResponse=l;var f=(n(5),n(13)),h=r(f),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(){return f.default.PNChannelGroupsOperation}function i(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function o(e){return"/v1/channel-registration/sub-key/"+e.config.subscribeKey+"/channel-group"}function s(e){return e.config.getTransactionTimeout()}function a(){return!0}function u(){return{}}function c(e,t){return{groups:t.payload.groups}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=o,t.getRequestTimeout=s,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),f=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return h.default.PNChannelsForGroupOperation}function o(e,t){var n=t.channelGroup,r=e.config;return n?r.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channel Group"}function s(e,t){var n=t.channelGroup;return"/v1/channel-registration/sub-key/"+e.config.subscribeKey+"/channel-group/"+p.default.encodeString(n)}function a(e){return e.config.getTransactionTimeout()}function u(){return!0}function c(){return{}}function l(e,t){return{channels:t.payload.channels}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=o,t.getURL=s,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var f=(n(5),n(13)),h=r(f),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(){return f.default.PNPushNotificationEnabledChannelsOperation}function i(e,t){var n=t.device,r=t.pushGateway,i=t.channels,o=e.config;return n?r?i&&0!==i.length?o.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channels":"Missing GW Type (pushGateway: gcm or apns)":"Missing Device ID (device)"}function o(e,t){var n=t.device;return"/v1/push/sub-key/"+e.config.subscribeKey+"/devices/"+n}function s(e){return e.config.getTransactionTimeout()}function a(){return!0}function u(e,t){var n=t.pushGateway,r=t.channels;return{type:n,add:(void 0===r?[]:r).join(",")}}function c(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=o,t.getRequestTimeout=s,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),f=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(){return f.default.PNPushNotificationEnabledChannelsOperation}function i(e,t){var n=t.device,r=t.pushGateway,i=t.channels,o=e.config;return n?r?i&&0!==i.length?o.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channels":"Missing GW Type (pushGateway: gcm or apns)":"Missing Device ID (device)"}function o(e,t){var n=t.device;return"/v1/push/sub-key/"+e.config.subscribeKey+"/devices/"+n}function s(e){return e.config.getTransactionTimeout()}function a(){return!0}function u(e,t){var n=t.pushGateway,r=t.channels;return{type:n,remove:(void 0===r?[]:r).join(",")}}function c(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=o,t.getRequestTimeout=s,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),f=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(){return f.default.PNPushNotificationEnabledChannelsOperation}function i(e,t){var n=t.device,r=t.pushGateway,i=e.config;return n?r?i.subscribeKey?void 0:"Missing Subscribe Key":"Missing GW Type (pushGateway: gcm or apns)":"Missing Device ID (device)"}function o(e,t){var n=t.device;return"/v1/push/sub-key/"+e.config.subscribeKey+"/devices/"+n}function s(e){return e.config.getTransactionTimeout()}function a(){return!0}function u(e,t){return{type:t.pushGateway}}function c(e,t){return{channels:t}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=o,t.getRequestTimeout=s,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),f=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(){return f.default.PNRemoveAllPushNotificationsOperation}function i(e,t){var n=t.device,r=t.pushGateway,i=e.config;return n?r?i.subscribeKey?void 0:"Missing Subscribe Key":"Missing GW Type (pushGateway: gcm or apns)":"Missing Device ID (device)"}function o(e,t){var n=t.device;return"/v1/push/sub-key/"+e.config.subscribeKey+"/devices/"+n+"/remove"}function s(e){return e.config.getTransactionTimeout()}function a(){return!0}function u(e,t){return{type:t.pushGateway}}function c(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=o,t.getRequestTimeout=s,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),f=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return h.default.PNUnsubscribeOperation}function o(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function s(e,t){var n=e.config,r=t.channels,i=void 0===r?[]:r,o=i.length>0?i.join(","):",";return"/v2/presence/sub-key/"+n.subscribeKey+"/channel/"+p.default.encodeString(o)+"/leave"}function a(e){return e.config.getTransactionTimeout()}function u(){return!0}function c(e,t){var n=t.channelGroups,r=void 0===n?[]:n,i={};return r.length>0&&(i["channel-group"]=r.join(",")),i}function l(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=o,t.getURL=s,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var f=(n(5),n(13)),h=r(f),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(){return f.default.PNWhereNowOperation}function i(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function o(e,t){var n=e.config,r=t.uuid,i=void 0===r?n.UUID:r;return"/v2/presence/sub-key/"+n.subscribeKey+"/uuid/"+i}function s(e){return e.config.getTransactionTimeout()}function a(){return!0}function u(){return{}}function c(e,t){return t.payload?{channels:t.payload.channels}:{channels:[]}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=o,t.getRequestTimeout=s,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),f=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return h.default.PNHeartbeatOperation}function o(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function s(e,t){var n=e.config,r=t.channels,i=void 0===r?[]:r,o=i.length>0?i.join(","):",";return"/v2/presence/sub-key/"+n.subscribeKey+"/channel/"+p.default.encodeString(o)+"/heartbeat"}function a(){return!0}function u(e){return e.config.getTransactionTimeout()}function c(e,t){var n=t.channelGroups,r=void 0===n?[]:n,i=t.state,o=void 0===i?{}:i,s=e.config,a={};return r.length>0&&(a["channel-group"]=r.join(",")),a.state=JSON.stringify(o),a.heartbeat=s.getPresenceTimeout(),a}function l(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=o,t.getURL=s,t.isAuthSupported=a,t.getRequestTimeout=u,t.prepareParams=c,t.handleResponse=l;var f=(n(5),n(13)),h=r(f),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return h.default.PNGetStateOperation}function o(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function s(e,t){var n=e.config,r=t.uuid,i=void 0===r?n.UUID:r,o=t.channels,s=void 0===o?[]:o,a=s.length>0?s.join(","):",";return"/v2/presence/sub-key/"+n.subscribeKey+"/channel/"+p.default.encodeString(a)+"/uuid/"+i}function a(e){return e.config.getTransactionTimeout()}function u(){return!0}function c(e,t){var n=t.channelGroups,r=void 0===n?[]:n,i={};return r.length>0&&(i["channel-group"]=r.join(",")),i}function l(e,t,n){var r=n.channels,i=void 0===r?[]:r,o=n.channelGroups,s=void 0===o?[]:o,a={};return 1===i.length&&0===s.length?a[i[0]]=t.payload:a=t.payload,{channels:a}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=o,t.getURL=s,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var f=(n(5),n(13)),h=r(f),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return h.default.PNSetStateOperation}function o(e,t){var n=e.config,r=t.state,i=t.channels,o=void 0===i?[]:i,s=t.channelGroups,a=void 0===s?[]:s;return r?n.subscribeKey?0===o.length&&0===a.length?"Please provide a list of channels and/or channel-groups":void 0:"Missing Subscribe Key":"Missing State"}function s(e,t){var n=e.config,r=t.channels,i=void 0===r?[]:r,o=i.length>0?i.join(","):",";return"/v2/presence/sub-key/"+n.subscribeKey+"/channel/"+p.default.encodeString(o)+"/uuid/"+n.UUID+"/data"}function a(e){return e.config.getTransactionTimeout()}function u(){return!0}function c(e,t){var n=t.state,r=t.channelGroups,i=void 0===r?[]:r,o={};return o.state=JSON.stringify(n),i.length>0&&(o["channel-group"]=i.join(",")),o}function l(e,t){return{state:t.payload}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=o,t.getURL=s,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var f=(n(5),n(13)),h=r(f),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return h.default.PNHereNowOperation}function o(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function s(e,t){var n=e.config,r=t.channels,i=void 0===r?[]:r,o=t.channelGroups,s=void 0===o?[]:o,a="/v2/presence/sub-key/"+n.subscribeKey;if(i.length>0||s.length>0){var u=i.length>0?i.join(","):",";a+="/channel/"+p.default.encodeString(u)}return a}function a(e){return e.config.getTransactionTimeout()}function u(){return!0}function c(e,t){var n=t.channelGroups,r=void 0===n?[]:n,i=t.includeUUIDs,o=void 0===i||i,s=t.includeState,a=void 0!==s&&s,u={};return o||(u.disable_uuids=1),a&&(u.state=1),r.length>0&&(u["channel-group"]=r.join(",")),u}function l(e,t,n){var r=n.channels,i=void 0===r?[]:r,o=n.channelGroups,s=void 0===o?[]:o,a=n.includeUUIDs,u=void 0===a||a,c=n.includeState,l=void 0!==c&&c;return i.length>1||s.length>0||0===s.length&&0===i.length?function(){var e={};return e.totalChannels=t.payload.total_channels,e.totalOccupancy=t.payload.total_occupancy,e.channels={},Object.keys(t.payload.channels).forEach(function(n){var r=t.payload.channels[n],i=[];return e.channels[n]={occupants:i,name:n,occupancy:r.occupancy},u&&r.uuids.forEach(function(e){l?i.push({state:e.state,uuid:e.uuid}):i.push({state:null,uuid:e})}),e}),e}():function(){var e={},n=[];return e.totalChannels=1,e.totalOccupancy=t.occupancy,e.channels={},e.channels[i[0]]={occupants:n,name:i[0],occupancy:t.occupancy},u&&t.uuids&&t.uuids.forEach(function(e){l?n.push({state:e.state,uuid:e.uuid}):n.push({state:null,uuid:e})}),e}()}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=o,t.getURL=s,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var f=(n(5),n(13)),h=r(f),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(){return f.default.PNAccessManagerAudit}function i(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function o(e){return"/v2/auth/audit/sub-key/"+e.config.subscribeKey}function s(e){return e.config.getTransactionTimeout()}function a(){return!1}function u(e,t){var n=t.channel,r=t.channelGroup,i=t.authKeys,o=void 0===i?[]:i,s={};return n&&(s.channel=n),r&&(s["channel-group"]=r),o.length>0&&(s.auth=o.join(",")),s}function c(e,t){return t.payload}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=o,t.getRequestTimeout=s,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),f=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(){return f.default.PNAccessManagerGrant}function i(e){var t=e.config;return t.subscribeKey?t.publishKey?t.secretKey?void 0:"Missing Secret Key":"Missing Publish Key":"Missing Subscribe Key"}function o(e){return"/v2/auth/grant/sub-key/"+e.config.subscribeKey}function s(e){return e.config.getTransactionTimeout()}function a(){return!1}function u(e,t){var n=t.channels,r=void 0===n?[]:n,i=t.channelGroups,o=void 0===i?[]:i,s=t.ttl,a=t.read,u=void 0!==a&&a,c=t.write,l=void 0!==c&&c,f=t.manage,h=void 0!==f&&f,d=t.authKeys,p=void 0===d?[]:d,g={};return g.r=u?"1":"0",g.w=l?"1":"0",g.m=h?"1":"0",r.length>0&&(g.channel=r.join(",")),o.length>0&&(g["channel-group"]=o.join(",")),p.length>0&&(g.auth=p.join(",")),(s||0===s)&&(g.ttl=s),g}function c(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=o,t.getRequestTimeout=s,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),f=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){var n=e.crypto,r=e.config,i=JSON.stringify(t) ;return r.cipherKey&&(i=n.encrypt(i),i=JSON.stringify(i)),i}function o(){return b.default.PNPublishOperation}function s(e,t){var n=e.config,r=t.message;return t.channel?r?n.subscribeKey?void 0:"Missing Subscribe Key":"Missing Message":"Missing Channel"}function a(e,t){var n=t.sendByPost;return void 0!==n&&n}function u(e,t){var n=e.config,r=t.channel,o=t.message,s=i(e,o);return"/publish/"+n.publishKey+"/"+n.subscribeKey+"/0/"+_.default.encodeString(r)+"/0/"+_.default.encodeString(s)}function c(e,t){var n=e.config,r=t.channel;return"/publish/"+n.publishKey+"/"+n.subscribeKey+"/0/"+_.default.encodeString(r)+"/0"}function l(e){return e.config.getTransactionTimeout()}function f(){return!0}function h(e,t){return i(e,t.message)}function d(e,t){var n=t.meta,r=t.replicate,i=void 0===r||r,o=t.storeInHistory,s=t.ttl,a={};return null!=o&&(a.store=o?"1":"0"),s&&(a.ttl=s),!1===i&&(a.norep="true"),n&&"object"===(void 0===n?"undefined":g(n))&&(a.meta=JSON.stringify(n)),a}function p(e,t){return{timetoken:t[2]}}Object.defineProperty(t,"__esModule",{value:!0});var g="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};t.getOperation=o,t.validateParams=s,t.usePost=a,t.getURL=u,t.postURL=c,t.getRequestTimeout=l,t.isAuthSupported=f,t.postPayload=h,t.prepareParams=d,t.handleResponse=p;var y=(n(5),n(13)),b=r(y),v=n(15),_=r(v)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){var n=e.config,r=e.crypto;if(!n.cipherKey)return t;try{return r.decrypt(t)}catch(e){return t}}function o(){return d.default.PNHistoryOperation}function s(e,t){var n=t.channel,r=e.config;return n?r.subscribeKey?void 0:"Missing Subscribe Key":"Missing channel"}function a(e,t){var n=t.channel;return"/v2/history/sub-key/"+e.config.subscribeKey+"/channel/"+g.default.encodeString(n)}function u(e){return e.config.getTransactionTimeout()}function c(){return!0}function l(e,t){var n=t.start,r=t.end,i=t.reverse,o=t.count,s=void 0===o?100:o,a=t.stringifiedTimeToken,u=void 0!==a&&a,c={include_token:"true"};return c.count=s,n&&(c.start=n),r&&(c.end=r),u&&(c.string_message_token="true"),null!=i&&(c.reverse=i.toString()),c}function f(e,t){var n={messages:[],startTimeToken:t[1],endTimeToken:t[2]};return t[0].forEach(function(t){var r={timetoken:t.timetoken,entry:i(e,t.message)};n.messages.push(r)}),n}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=o,t.validateParams=s,t.getURL=a,t.getRequestTimeout=u,t.isAuthSupported=c,t.prepareParams=l,t.handleResponse=f;var h=(n(5),n(13)),d=r(h),p=n(15),g=r(p)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return d.default.PNDeleteMessagesOperation}function o(e,t){var n=t.channel,r=e.config;return n?r.subscribeKey?void 0:"Missing Subscribe Key":"Missing channel"}function s(){return!0}function a(e,t){var n=t.channel,r=t.start,i=t.end,o=e.config,s="";return r&&(s="?start="+r),i&&(s+=(""!==s?"&":"?")+"end="+i),"/v3/history/sub-key/"+o.subscribeKey+"/channel/"+g.default.encodeString(n)+s}function u(e){return e.config.getTransactionTimeout()}function c(){return!0}function l(e,t){var n=t.start,r=t.end,i={};return n&&(i.start=n),r&&(i.end=r),{}}function f(e,t){return t.payload}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=o,t.useDelete=s,t.getURL=a,t.getRequestTimeout=u,t.isAuthSupported=c,t.prepareParams=l,t.handleResponse=f;var h=(n(5),n(13)),d=r(h),p=n(15),g=r(p)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){var n=e.config,r=e.crypto;if(!n.cipherKey)return t;try{return r.decrypt(t)}catch(e){return t}}function o(){return d.default.PNFetchMessagesOperation}function s(e,t){var n=t.channels,r=e.config;return n&&0!==n.length?r.subscribeKey?void 0:"Missing Subscribe Key":"Missing channels"}function a(e,t){var n=t.channels,r=void 0===n?[]:n,i=e.config,o=r.length>0?r.join(","):",";return"/v3/history/sub-key/"+i.subscribeKey+"/channel/"+g.default.encodeString(o)}function u(e){return e.config.getTransactionTimeout()}function c(){return!0}function l(e,t){var n=t.start,r=t.end,i=t.count,o={};return i&&(o.max=i),n&&(o.start=n),r&&(o.end=r),o}function f(e,t){var n={channels:{}};return Object.keys(t.channels||{}).forEach(function(r){n.channels[r]=[],(t.channels[r]||[]).forEach(function(t){var o={};o.channel=r,o.subscription=null,o.timetoken=t.timetoken,o.message=i(e,t.message),n.channels[r].push(o)})}),n}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=o,t.validateParams=s,t.getURL=a,t.getRequestTimeout=u,t.isAuthSupported=c,t.prepareParams=l,t.handleResponse=f;var h=(n(5),n(13)),d=r(h),p=n(15),g=r(p)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return h.default.PNSubscribeOperation}function o(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function s(e,t){var n=e.config,r=t.channels,i=void 0===r?[]:r,o=i.length>0?i.join(","):",";return"/v2/subscribe/"+n.subscribeKey+"/"+p.default.encodeString(o)+"/0"}function a(e){return e.config.getSubscribeTimeout()}function u(){return!0}function c(e,t){var n=e.config,r=t.channelGroups,i=void 0===r?[]:r,o=t.timetoken,s=t.filterExpression,a=t.region,u={heartbeat:n.getPresenceTimeout()};return i.length>0&&(u["channel-group"]=i.join(",")),s&&s.length>0&&(u["filter-expr"]=s),o&&(u.tt=o),a&&(u.tr=a),u}function l(e,t){var n=[];t.m.forEach(function(e){var t={publishTimetoken:e.p.t,region:e.p.r},r={shard:parseInt(e.a,10),subscriptionMatch:e.b,channel:e.c,payload:e.d,flags:e.f,issuingClientId:e.i,subscribeKey:e.k,originationTimetoken:e.o,userMetadata:e.u,publishMetaData:t};n.push(r)});var r={timetoken:t.t.t,region:t.t.r};return{messages:n,metadata:r}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=o,t.getURL=s,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var f=(n(5),n(13)),h=r(f),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e,t){for(var n=0;n=this._maxSubDomain&&(this._currentSubDomain=1),e=this._currentSubDomain.toString(),this._providedFQDN.replace("pubsub","ps"+e)}},{key:"hasModule",value:function(e){return e in this._modules}},{key:"shiftStandardOrigin",value:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return this._standardOrigin=this.nextOrigin(e),this._standardOrigin}},{key:"getStandardOrigin",value:function(){return this._standardOrigin}},{key:"POST",value:function(e,t,n,r){return this._modules.post(e,t,n,r)}},{key:"GET",value:function(e,t,n){return this._modules.get(e,t,n)}},{key:"DELETE",value:function(e,t,n){return this._modules.del(e,t,n)}},{key:"_detectErrorCategory",value:function(e){if("ENOTFOUND"===e.code)return u.default.PNNetworkIssuesCategory;if("ECONNREFUSED"===e.code)return u.default.PNNetworkIssuesCategory;if("ECONNRESET"===e.code)return u.default.PNNetworkIssuesCategory;if("EAI_AGAIN"===e.code)return u.default.PNNetworkIssuesCategory;if(0===e.status||e.hasOwnProperty("status")&&void 0===e.status)return u.default.PNNetworkIssuesCategory;if(e.timeout)return u.default.PNTimeoutCategory;if(e.response){if(e.response.badRequest)return u.default.PNBadRequestCategory;if(e.response.forbidden)return u.default.PNAccessDeniedCategory}return u.default.PNUnknownCategory}}]),e}());t.default=c,e.exports=t.default},function(e,t){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var r=function(){function e(e,t){for(var n=0;n>>>>>"),o.log("["+u+" / "+a+"]","\n",e,"\n",t,"\n",n),o.log("-----")}function i(){return"mobileweb"===Ti.Platform.osname?new XMLHttpRequest:Ti.Network.createHTTPClient()}function o(e){"mobileweb"!==Ti.Platform.osname&&this._config.keepAlive&&(e.enableKeepAlive=!0)}function s(e,t,n,i,s,a,u){var c=this,f={};f.operation=a.operation,e.open(t,(0,l.buildUrl)(n,i),!0),o.call(this,e),e.onload=function(){f.error=!1,e.status&&(f.statusCode=e.status);var t=JSON.parse(e.responseText);return c._config.logVerbosity&&r(n,i,e.responseText),u(f,t)},e.onerror=function(e){return f.error=!0,f.errorData=e.error,f.category=c._detectErrorCategory(e.error),u(f,null)},e.timeout="android"===Ti.Platform.osname?2147483647:1/0,e.send(s)}function a(e,t,n){var r=i(),o=this.getStandardOrigin()+t.url;return s.call(this,r,"GET",o,e,{},t,n)}function u(e,t,n,r){var o=i(),a=this.getStandardOrigin()+n.url;return s.call(this,o,"POST",a,e,JSON.parse(t),n,r)}function c(e,t,n){var r=i(),o=this.getStandardOrigin()+t.url;return s.call(this,r,"DELETE",o,e,{},t,n)}Object.defineProperty(t,"__esModule",{value:!0}),t.get=a,t.post=u,t.del=c;var l=(n(5),n(42))},function(e,t){"use strict";function n(e,t,r){null!=r?Array.isArray(r)?r.forEach(function(r){n(e,t,r)}):"object"===(void 0===r?"undefined":i(r))?Object.keys(r).forEach(function(i){n(e,t+"["+i+"]",r[i])}):e.push(encodeURIComponent(t)+"="+encodeURIComponent(r)):null===r&&e.push(encodeURIComponent(""+encodeURIComponent(t)))}function r(e,t){var r=[];return Object.keys(t).forEach(function(e){n(r,e,t[e])}),e+"?"+r.join("&")}Object.defineProperty(t,"__esModule",{value:!0});var i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};t.encodedKeyValuePair=n,t.buildUrl=r}])}); \ No newline at end of file diff --git a/dist/web/pubnub.js b/dist/web/pubnub.js index 129d05371..70df24594 100644 --- a/dist/web/pubnub.js +++ b/dist/web/pubnub.js @@ -1,4 +1,4 @@ -/*! 4.19.0 / Consumer */ +/*! 4.20.0 / Consumer */ (function webpackUniversalModuleDefinition(root, factory) { if(typeof exports === 'object' && typeof module === 'object') module.exports = factory(); @@ -608,7 +608,7 @@ return /******/ (function(modules) { // webpackBootstrap }, { key: 'getVersion', value: function getVersion() { - return '4.19.0'; + return '4.20.0'; } }, { key: '_decideUUID', diff --git a/dist/web/pubnub.min.js b/dist/web/pubnub.min.js index 72f8715f6..40d5f39fe 100644 --- a/dist/web/pubnub.min.js +++ b/dist/web/pubnub.min.js @@ -1,3 +1,3 @@ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.PubNub=t():e.PubNub=t()}(this,function(){return function(e){function t(r){if(n[r])return n[r].exports;var i=n[r]={exports:{},id:r,loaded:!1};return e[r].call(i.exports,i,i.exports,t),i.loaded=!0,i.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function o(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function a(e){if(!navigator||!navigator.sendBeacon)return!1;navigator.sendBeacon(e)}Object.defineProperty(t,"__esModule",{value:!0});var u=n(1),c=r(u),l=n(39),h=r(l),f=n(40),d=r(f),p=n(41),g=(n(5),function(e){function t(e){i(this,t);var n=e.listenToBrowserNetworkEvents,r=void 0===n||n;e.db=d.default,e.sdkFamily="Web",e.networking=new h.default({del:p.del,get:p.get,post:p.post,sendBeacon:a});var o=s(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return r&&(window.addEventListener("offline",function(){o.networkDownDetected()}),window.addEventListener("online",function(){o.networkUpDetected()})),o}return o(t,e),t}(c.default));t.default=g,e.exports=t.default},function(e,t,n){"use strict";function r(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}function i(e){return e&&e.__esModule?e:{default:e}}function s(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e,t){for(var n=0;n>>2]|=(n[i>>>2]>>>24-i%4*8&255)<<24-(r+i)%4*8;else if(65535>>2]=n[i>>>2];else t.push.apply(t,n);return this.sigBytes+=e,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=s.clone.call(this);return e.words=this.words.slice(0),e},random:function(t){for(var n=[],r=0;r>>2]>>>24-r%4*8&255;n.push((i>>>4).toString(16)),n.push((15&i).toString(16))}return n.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 o.init(n,t/2)}},c=a.Latin1={stringify:function(e){var t=e.words;e=e.sigBytes;for(var n=[],r=0;r>>2]>>>24-r%4*8&255));return n.join("")},parse:function(e){for(var t=e.length,n=[],r=0;r>>2]|=(255&e.charCodeAt(r))<<24-r%4*8;return new o.init(n,t)}},l=a.Utf8={stringify:function(e){try{return decodeURIComponent(escape(c.stringify(e)))}catch(e){throw Error("Malformed UTF-8 data")}},parse:function(e){return c.parse(unescape(encodeURIComponent(e)))}},h=r.BufferedBlockAlgorithm=s.extend({reset:function(){this._data=new o.init,this._nDataBytes=0},_append:function(e){"string"==typeof e&&(e=l.parse(e)),this._data.concat(e),this._nDataBytes+=e.sigBytes},_process:function(t){var n=this._data,r=n.words,i=n.sigBytes,s=this.blockSize,a=i/(4*s),a=t?e.ceil(a):e.max((0|a)-this._minBufferSize,0);if(t=a*s,i=e.min(4*t,i),t){for(var u=0;ul;){var h;e:{h=c;for(var f=e.sqrt(h),d=2;d<=f;d++)if(!(h%d)){h=!1;break e}h=!0}h&&(8>l&&(o[l]=u(e.pow(c,.5))),a[l]=u(e.pow(c,1/3)),l++),c++}var p=[],r=r.SHA256=s.extend({_doReset:function(){this._hash=new i.init(o.slice(0))},_doProcessBlock:function(e,t){for(var n=this._hash.words,r=n[0],i=n[1],s=n[2],o=n[3],u=n[4],c=n[5],l=n[6],h=n[7],f=0;64>f;f++){if(16>f)p[f]=0|e[t+f];else{var d=p[f-15],g=p[f-2];p[f]=((d<<25|d>>>7)^(d<<14|d>>>18)^d>>>3)+p[f-7]+((g<<15|g>>>17)^(g<<13|g>>>19)^g>>>10)+p[f-16]}d=h+((u<<26|u>>>6)^(u<<21|u>>>11)^(u<<7|u>>>25))+(u&c^~u&l)+a[f]+p[f],g=((r<<30|r>>>2)^(r<<19|r>>>13)^(r<<10|r>>>22))+(r&i^r&s^i&s),h=l,l=c,c=u,u=o+d|0,o=s,s=i,i=r,r=d+g|0}n[0]=n[0]+r|0,n[1]=n[1]+i|0,n[2]=n[2]+s|0,n[3]=n[3]+o|0,n[4]=n[4]+u|0,n[5]=n[5]+c|0,n[6]=n[6]+l|0,n[7]=n[7]+h|0},_doFinalize:function(){var t=this._data,n=t.words,r=8*this._nDataBytes,i=8*t.sigBytes;return n[i>>>5]|=128<<24-i%32,n[14+(i+64>>>9<<4)]=e.floor(r/4294967296),n[15+(i+64>>>9<<4)]=r,t.sigBytes=4*n.length,this._process(),this._hash},clone:function(){var e=s.clone.call(this);return e._hash=this._hash.clone(),e}});t.SHA256=s._createHelper(r),t.HmacSHA256=s._createHmacHelper(r)}(Math),function(){var e=n,t=e.enc.Utf8;e.algo.HMAC=e.lib.Base.extend({init:function(e,n){e=this._hasher=new e.init,"string"==typeof n&&(n=t.parse(n));var r=e.blockSize,i=4*r;n.sigBytes>i&&(n=e.finalize(n)),n.clamp();for(var s=this._oKey=n.clone(),o=this._iKey=n.clone(),a=s.words,u=o.words,c=0;c>>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,o=0;4>o&&i+.75*o>>6*(3-o)&63));if(t=r.charAt(64))for(;e.length%4;)e.push(t);return e.join("")},parse:function(e){var n=e.length,r=this._map,i=r.charAt(64);i&&-1!=(i=e.indexOf(i))&&(n=i);for(var i=[],s=0,o=0;o>>6-o%4*2;i[s>>>2]|=(a|u)<<24-s%4*8,s++}return t.create(i,s)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="}}(),function(e){function t(e,t,n,r,i,s,o){return((e=e+(t&n|~t&r)+i+o)<>>32-s)+t}function r(e,t,n,r,i,s,o){return((e=e+(t&r|n&~r)+i+o)<>>32-s)+t}function i(e,t,n,r,i,s,o){return((e=e+(t^n^r)+i+o)<>>32-s)+t}function s(e,t,n,r,i,s,o){return((e=e+(n^(t|~r))+i+o)<>>32-s)+t}for(var o=n,a=o.lib,u=a.WordArray,c=a.Hasher,a=o.algo,l=[],h=0;64>h;h++)l[h]=4294967296*e.abs(e.sin(h+1))|0;a=a.MD5=c.extend({_doReset:function(){this._hash=new u.init([1732584193,4023233417,2562383102,271733878])},_doProcessBlock:function(e,n){for(var o=0;16>o;o++){var a=n+o,u=e[a];e[a]=16711935&(u<<8|u>>>24)|4278255360&(u<<24|u>>>8)}var o=this._hash.words,a=e[n+0],u=e[n+1],c=e[n+2],h=e[n+3],f=e[n+4],d=e[n+5],p=e[n+6],g=e[n+7],y=e[n+8],b=e[n+9],v=e[n+10],_=e[n+11],m=e[n+12],k=e[n+13],P=e[n+14],S=e[n+15],O=o[0],w=o[1],C=o[2],T=o[3],O=t(O,w,C,T,a,7,l[0]),T=t(T,O,w,C,u,12,l[1]),C=t(C,T,O,w,c,17,l[2]),w=t(w,C,T,O,h,22,l[3]),O=t(O,w,C,T,f,7,l[4]),T=t(T,O,w,C,d,12,l[5]),C=t(C,T,O,w,p,17,l[6]),w=t(w,C,T,O,g,22,l[7]),O=t(O,w,C,T,y,7,l[8]),T=t(T,O,w,C,b,12,l[9]),C=t(C,T,O,w,v,17,l[10]),w=t(w,C,T,O,_,22,l[11]),O=t(O,w,C,T,m,7,l[12]),T=t(T,O,w,C,k,12,l[13]),C=t(C,T,O,w,P,17,l[14]),w=t(w,C,T,O,S,22,l[15]),O=r(O,w,C,T,u,5,l[16]),T=r(T,O,w,C,p,9,l[17]),C=r(C,T,O,w,_,14,l[18]),w=r(w,C,T,O,a,20,l[19]),O=r(O,w,C,T,d,5,l[20]),T=r(T,O,w,C,v,9,l[21]),C=r(C,T,O,w,S,14,l[22]),w=r(w,C,T,O,f,20,l[23]),O=r(O,w,C,T,b,5,l[24]),T=r(T,O,w,C,P,9,l[25]),C=r(C,T,O,w,h,14,l[26]),w=r(w,C,T,O,y,20,l[27]),O=r(O,w,C,T,k,5,l[28]),T=r(T,O,w,C,c,9,l[29]),C=r(C,T,O,w,g,14,l[30]),w=r(w,C,T,O,m,20,l[31]),O=i(O,w,C,T,d,4,l[32]),T=i(T,O,w,C,y,11,l[33]),C=i(C,T,O,w,_,16,l[34]),w=i(w,C,T,O,P,23,l[35]),O=i(O,w,C,T,u,4,l[36]),T=i(T,O,w,C,f,11,l[37]),C=i(C,T,O,w,g,16,l[38]),w=i(w,C,T,O,v,23,l[39]),O=i(O,w,C,T,k,4,l[40]),T=i(T,O,w,C,a,11,l[41]),C=i(C,T,O,w,h,16,l[42]),w=i(w,C,T,O,p,23,l[43]),O=i(O,w,C,T,b,4,l[44]),T=i(T,O,w,C,m,11,l[45]),C=i(C,T,O,w,S,16,l[46]),w=i(w,C,T,O,c,23,l[47]),O=s(O,w,C,T,a,6,l[48]),T=s(T,O,w,C,g,10,l[49]),C=s(C,T,O,w,P,15,l[50]),w=s(w,C,T,O,d,21,l[51]),O=s(O,w,C,T,m,6,l[52]),T=s(T,O,w,C,h,10,l[53]),C=s(C,T,O,w,v,15,l[54]),w=s(w,C,T,O,u,21,l[55]),O=s(O,w,C,T,y,6,l[56]),T=s(T,O,w,C,S,10,l[57]),C=s(C,T,O,w,p,15,l[58]),w=s(w,C,T,O,k,21,l[59]),O=s(O,w,C,T,f,6,l[60]),T=s(T,O,w,C,_,10,l[61]),C=s(C,T,O,w,c,15,l[62]),w=s(w,C,T,O,b,21,l[63]);o[0]=o[0]+O|0,o[1]=o[1]+w|0,o[2]=o[2]+C|0,o[3]=o[3]+T|0},_doFinalize:function(){var t=this._data,n=t.words,r=8*this._nDataBytes,i=8*t.sigBytes;n[i>>>5]|=128<<24-i%32;var s=e.floor(r/4294967296);for(n[15+(i+64>>>9<<4)]=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),n[14+(i+64>>>9<<4)]=16711935&(r<<8|r>>>24)|4278255360&(r<<24|r>>>8),t.sigBytes=4*(n.length+1),this._process(),t=this._hash,n=t.words,r=0;4>r;r++)i=n[r],n[r]=16711935&(i<<8|i>>>24)|4278255360&(i<<24|i>>>8);return t},clone:function(){var e=c.clone.call(this);return e._hash=this._hash.clone(),e}}),o.MD5=c._createHelper(a),o.HmacMD5=c._createHmacHelper(a)}(Math),function(){var e=n,t=e.lib,r=t.Base,i=t.WordArray,t=e.algo,s=t.EvpKDF=r.extend({cfg:r.extend({keySize:4,hasher:t.MD5,iterations:1}),init:function(e){this.cfg=this.cfg.extend(e)},compute:function(e,t){for(var n=this.cfg,r=n.hasher.create(),s=i.create(),o=s.words,a=n.keySize,n=n.iterations;o.length>>2]}},r.BlockCipher=c.extend({cfg:c.cfg.extend({mode:l,padding:f}),reset:function(){c.reset.call(this);var e=this.cfg,t=e.iv,e=e.mode;if(this._xformMode==this._ENC_XFORM_MODE)var n=e.createEncryptor;else n=e.createDecryptor,this._minBufferSize=1;this._mode=n.call(e,this,t&&t.words)},_doProcessBlock:function(e,t){this._mode.processBlock(e,t)},_doFinalize:function(){var e=this.cfg.padding;if(this._xformMode==this._ENC_XFORM_MODE){e.pad(this._data,this.blockSize);var t=this._process(!0)}else t=this._process(!0),e.unpad(t);return t},blockSize:4});var d=r.CipherParams=i.extend({init:function(e){this.mixIn(e)},toString:function(e){return(e||this.formatter).stringify(this)}}),l=(t.format={}).OpenSSL={stringify:function(e){var t=e.ciphertext;return e=e.salt,(e?s.create([1398893684,1701076831]).concat(e).concat(t):t).toString(a)},parse:function(e){e=a.parse(e);var t=e.words;if(1398893684==t[0]&&1701076831==t[1]){var n=s.create(t.slice(2,4));t.splice(0,4),e.sigBytes-=16}return d.create({ciphertext:e,salt:n})}},p=r.SerializableCipher=i.extend({cfg:i.extend({format:l}),encrypt:function(e,t,n,r){r=this.cfg.extend(r);var i=e.createEncryptor(n,r);return t=i.finalize(t),i=i.cfg,d.create({ciphertext:t,key:n,iv:i.iv,algorithm:e,mode:i.mode,padding:i.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}}),t=(t.kdf={}).OpenSSL={execute:function(e,t,n,r){return r||(r=s.random(8)),e=u.create({keySize:t+n}).compute(e,r),n=s.create(e.words.slice(t),4*n),e.sigBytes=4*t,d.create({key:e,iv:n,salt:r})}},g=r.PasswordBasedCipher=p.extend({cfg:p.cfg.extend({kdf:t}),encrypt:function(e,t,n,r){return r=this.cfg.extend(r),n=r.kdf.execute(n,e.keySize,e.ivSize),r.iv=n.iv,e=p.encrypt.call(this,e,t,n.key,r),e.mixIn(n),e},decrypt:function(e,t,n,r){return r=this.cfg.extend(r),t=this._parse(t,r.format),n=r.kdf.execute(n,e.keySize,e.ivSize,t.salt),r.iv=n.iv,p.decrypt.call(this,e,t,n.key,r)}})}(),function(){for(var e=n,t=e.lib.BlockCipher,r=e.algo,i=[],s=[],o=[],a=[],u=[],c=[],l=[],h=[],f=[],d=[],p=[],g=0;256>g;g++)p[g]=128>g?g<<1:g<<1^283;for(var y=0,b=0,g=0;256>g;g++){var v=b^b<<1^b<<2^b<<3^b<<4,v=v>>>8^255&v^99;i[y]=v,s[v]=y;var _=p[y],m=p[_],k=p[m],P=257*p[v]^16843008*v;o[y]=P<<24|P>>>8,a[y]=P<<16|P>>>16,u[y]=P<<8|P>>>24,c[y]=P,P=16843009*k^65537*m^257*_^16843008*y,l[v]=P<<24|P>>>8,h[v]=P<<16|P>>>16,f[v]=P<<8|P>>>24,d[v]=P,y?(y=_^p[p[p[k^_]]],b^=p[p[b]]):y=b=1}var S=[0,1,2,4,8,16,32,64,128,27,54],r=r.AES=t.extend({_doReset:function(){for(var e=this._key,t=e.words,n=e.sigBytes/4,e=4*((this._nRounds=n+6)+1),r=this._keySchedule=[],s=0;s>>24]<<24|i[o>>>16&255]<<16|i[o>>>8&255]<<8|i[255&o]):(o=o<<8|o>>>24,o=i[o>>>24]<<24|i[o>>>16&255]<<16|i[o>>>8&255]<<8|i[255&o],o^=S[s/n|0]<<24),r[s]=r[s-n]^o}for(t=this._invKeySchedule=[],n=0;nn||4>=s?o:l[i[o>>>24]]^h[i[o>>>16&255]]^f[i[o>>>8&255]]^d[i[255&o]]},encryptBlock:function(e,t){this._doCryptBlock(e,t,this._keySchedule,o,a,u,c,i)},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,h,f,d,s),n=e[t+1],e[t+1]=e[t+3],e[t+3]=n},_doCryptBlock:function(e,t,n,r,i,s,o,a){for(var u=this._nRounds,c=e[t]^n[0],l=e[t+1]^n[1],h=e[t+2]^n[2],f=e[t+3]^n[3],d=4,p=1;p>>24]^i[l>>>16&255]^s[h>>>8&255]^o[255&f]^n[d++],y=r[l>>>24]^i[h>>>16&255]^s[f>>>8&255]^o[255&c]^n[d++],b=r[h>>>24]^i[f>>>16&255]^s[c>>>8&255]^o[255&l]^n[d++],f=r[f>>>24]^i[c>>>16&255]^s[l>>>8&255]^o[255&h]^n[d++],c=g,l=y,h=b;g=(a[c>>>24]<<24|a[l>>>16&255]<<16|a[h>>>8&255]<<8|a[255&f])^n[d++],y=(a[l>>>24]<<24|a[h>>>16&255]<<16|a[f>>>8&255]<<8|a[255&c])^n[d++],b=(a[h>>>24]<<24|a[f>>>16&255]<<16|a[c>>>8&255]<<8|a[255&l])^n[d++],f=(a[f>>>24]<<24|a[c>>>16&255]<<16|a[l>>>8&255]<<8|a[255&h])^n[d++],e[t]=g,e[t+1]=y,e[t+2]=b,e[t+3]=f},keySize:8});e.AES=t._createHelper(r)}(),n.mode.ECB=function(){var e=n.lib.BlockCipherMode.extend();return e.Encryptor=e.extend({processBlock:function(e,t){this._cipher.encryptBlock(e,t)}}),e.Decryptor=e.extend({processBlock:function(e,t){this._cipher.decryptBlock(e,t)}}),e}(),e.exports=n},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var s=function(){function e(e,t){for(var n=0;n>>2]|=(n[i>>>2]>>>24-i%4*8&255)<<24-(r+i)%4*8;else if(65535>>2]=n[i>>>2];else t.push.apply(t,n);return this.sigBytes+=e,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=s.clone.call(this);return e.words=this.words.slice(0),e},random:function(t){for(var n=[],r=0;r>>2]>>>24-r%4*8&255;n.push((i>>>4).toString(16)),n.push((15&i).toString(16))}return n.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 o.init(n,t/2)}},c=a.Latin1={stringify:function(e){var t=e.words;e=e.sigBytes;for(var n=[],r=0;r>>2]>>>24-r%4*8&255));return n.join("")},parse:function(e){for(var t=e.length,n=[],r=0;r>>2]|=(255&e.charCodeAt(r))<<24-r%4*8;return new o.init(n,t)}},l=a.Utf8={stringify:function(e){try{return decodeURIComponent(escape(c.stringify(e)))}catch(e){throw Error("Malformed UTF-8 data")}},parse:function(e){return c.parse(unescape(encodeURIComponent(e)))}},h=r.BufferedBlockAlgorithm=s.extend({reset:function(){this._data=new o.init,this._nDataBytes=0},_append:function(e){"string"==typeof e&&(e=l.parse(e)),this._data.concat(e),this._nDataBytes+=e.sigBytes},_process:function(t){var n=this._data,r=n.words,i=n.sigBytes,s=this.blockSize,a=i/(4*s),a=t?e.ceil(a):e.max((0|a)-this._minBufferSize,0);if(t=a*s,i=e.min(4*t,i),t){for(var u=0;ul;){var h;e:{h=c;for(var f=e.sqrt(h),d=2;d<=f;d++)if(!(h%d)){h=!1;break e}h=!0}h&&(8>l&&(o[l]=u(e.pow(c,.5))),a[l]=u(e.pow(c,1/3)),l++),c++}var p=[],r=r.SHA256=s.extend({_doReset:function(){this._hash=new i.init(o.slice(0))},_doProcessBlock:function(e,t){for(var n=this._hash.words,r=n[0],i=n[1],s=n[2],o=n[3],u=n[4],c=n[5],l=n[6],h=n[7],f=0;64>f;f++){if(16>f)p[f]=0|e[t+f];else{var d=p[f-15],g=p[f-2];p[f]=((d<<25|d>>>7)^(d<<14|d>>>18)^d>>>3)+p[f-7]+((g<<15|g>>>17)^(g<<13|g>>>19)^g>>>10)+p[f-16]}d=h+((u<<26|u>>>6)^(u<<21|u>>>11)^(u<<7|u>>>25))+(u&c^~u&l)+a[f]+p[f],g=((r<<30|r>>>2)^(r<<19|r>>>13)^(r<<10|r>>>22))+(r&i^r&s^i&s),h=l,l=c,c=u,u=o+d|0,o=s,s=i,i=r,r=d+g|0}n[0]=n[0]+r|0,n[1]=n[1]+i|0,n[2]=n[2]+s|0,n[3]=n[3]+o|0,n[4]=n[4]+u|0,n[5]=n[5]+c|0,n[6]=n[6]+l|0,n[7]=n[7]+h|0},_doFinalize:function(){var t=this._data,n=t.words,r=8*this._nDataBytes,i=8*t.sigBytes;return n[i>>>5]|=128<<24-i%32,n[14+(i+64>>>9<<4)]=e.floor(r/4294967296),n[15+(i+64>>>9<<4)]=r,t.sigBytes=4*n.length,this._process(),this._hash},clone:function(){var e=s.clone.call(this);return e._hash=this._hash.clone(),e}});t.SHA256=s._createHelper(r),t.HmacSHA256=s._createHmacHelper(r)}(Math),function(){var e=n,t=e.enc.Utf8;e.algo.HMAC=e.lib.Base.extend({init:function(e,n){e=this._hasher=new e.init,"string"==typeof n&&(n=t.parse(n));var r=e.blockSize,i=4*r;n.sigBytes>i&&(n=e.finalize(n)),n.clamp();for(var s=this._oKey=n.clone(),o=this._iKey=n.clone(),a=s.words,u=o.words,c=0;c>>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,o=0;4>o&&i+.75*o>>6*(3-o)&63));if(t=r.charAt(64))for(;e.length%4;)e.push(t);return e.join("")},parse:function(e){var n=e.length,r=this._map,i=r.charAt(64);i&&-1!=(i=e.indexOf(i))&&(n=i);for(var i=[],s=0,o=0;o>>6-o%4*2;i[s>>>2]|=(a|u)<<24-s%4*8,s++}return t.create(i,s)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="}}(),function(e){function t(e,t,n,r,i,s,o){return((e=e+(t&n|~t&r)+i+o)<>>32-s)+t}function r(e,t,n,r,i,s,o){return((e=e+(t&r|n&~r)+i+o)<>>32-s)+t}function i(e,t,n,r,i,s,o){return((e=e+(t^n^r)+i+o)<>>32-s)+t}function s(e,t,n,r,i,s,o){return((e=e+(n^(t|~r))+i+o)<>>32-s)+t}for(var o=n,a=o.lib,u=a.WordArray,c=a.Hasher,a=o.algo,l=[],h=0;64>h;h++)l[h]=4294967296*e.abs(e.sin(h+1))|0;a=a.MD5=c.extend({_doReset:function(){this._hash=new u.init([1732584193,4023233417,2562383102,271733878])},_doProcessBlock:function(e,n){for(var o=0;16>o;o++){var a=n+o,u=e[a];e[a]=16711935&(u<<8|u>>>24)|4278255360&(u<<24|u>>>8)}var o=this._hash.words,a=e[n+0],u=e[n+1],c=e[n+2],h=e[n+3],f=e[n+4],d=e[n+5],p=e[n+6],g=e[n+7],y=e[n+8],b=e[n+9],v=e[n+10],_=e[n+11],m=e[n+12],k=e[n+13],P=e[n+14],S=e[n+15],O=o[0],w=o[1],C=o[2],T=o[3],O=t(O,w,C,T,a,7,l[0]),T=t(T,O,w,C,u,12,l[1]),C=t(C,T,O,w,c,17,l[2]),w=t(w,C,T,O,h,22,l[3]),O=t(O,w,C,T,f,7,l[4]),T=t(T,O,w,C,d,12,l[5]),C=t(C,T,O,w,p,17,l[6]),w=t(w,C,T,O,g,22,l[7]),O=t(O,w,C,T,y,7,l[8]),T=t(T,O,w,C,b,12,l[9]),C=t(C,T,O,w,v,17,l[10]),w=t(w,C,T,O,_,22,l[11]),O=t(O,w,C,T,m,7,l[12]),T=t(T,O,w,C,k,12,l[13]),C=t(C,T,O,w,P,17,l[14]),w=t(w,C,T,O,S,22,l[15]),O=r(O,w,C,T,u,5,l[16]),T=r(T,O,w,C,p,9,l[17]),C=r(C,T,O,w,_,14,l[18]),w=r(w,C,T,O,a,20,l[19]),O=r(O,w,C,T,d,5,l[20]),T=r(T,O,w,C,v,9,l[21]),C=r(C,T,O,w,S,14,l[22]),w=r(w,C,T,O,f,20,l[23]),O=r(O,w,C,T,b,5,l[24]),T=r(T,O,w,C,P,9,l[25]),C=r(C,T,O,w,h,14,l[26]),w=r(w,C,T,O,y,20,l[27]),O=r(O,w,C,T,k,5,l[28]),T=r(T,O,w,C,c,9,l[29]),C=r(C,T,O,w,g,14,l[30]),w=r(w,C,T,O,m,20,l[31]),O=i(O,w,C,T,d,4,l[32]),T=i(T,O,w,C,y,11,l[33]),C=i(C,T,O,w,_,16,l[34]),w=i(w,C,T,O,P,23,l[35]),O=i(O,w,C,T,u,4,l[36]),T=i(T,O,w,C,f,11,l[37]),C=i(C,T,O,w,g,16,l[38]),w=i(w,C,T,O,v,23,l[39]),O=i(O,w,C,T,k,4,l[40]),T=i(T,O,w,C,a,11,l[41]),C=i(C,T,O,w,h,16,l[42]),w=i(w,C,T,O,p,23,l[43]),O=i(O,w,C,T,b,4,l[44]),T=i(T,O,w,C,m,11,l[45]),C=i(C,T,O,w,S,16,l[46]),w=i(w,C,T,O,c,23,l[47]),O=s(O,w,C,T,a,6,l[48]),T=s(T,O,w,C,g,10,l[49]),C=s(C,T,O,w,P,15,l[50]),w=s(w,C,T,O,d,21,l[51]),O=s(O,w,C,T,m,6,l[52]),T=s(T,O,w,C,h,10,l[53]),C=s(C,T,O,w,v,15,l[54]),w=s(w,C,T,O,u,21,l[55]),O=s(O,w,C,T,y,6,l[56]),T=s(T,O,w,C,S,10,l[57]),C=s(C,T,O,w,p,15,l[58]),w=s(w,C,T,O,k,21,l[59]),O=s(O,w,C,T,f,6,l[60]),T=s(T,O,w,C,_,10,l[61]),C=s(C,T,O,w,c,15,l[62]),w=s(w,C,T,O,b,21,l[63]);o[0]=o[0]+O|0,o[1]=o[1]+w|0,o[2]=o[2]+C|0,o[3]=o[3]+T|0},_doFinalize:function(){var t=this._data,n=t.words,r=8*this._nDataBytes,i=8*t.sigBytes;n[i>>>5]|=128<<24-i%32;var s=e.floor(r/4294967296);for(n[15+(i+64>>>9<<4)]=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),n[14+(i+64>>>9<<4)]=16711935&(r<<8|r>>>24)|4278255360&(r<<24|r>>>8),t.sigBytes=4*(n.length+1),this._process(),t=this._hash,n=t.words,r=0;4>r;r++)i=n[r],n[r]=16711935&(i<<8|i>>>24)|4278255360&(i<<24|i>>>8);return t},clone:function(){var e=c.clone.call(this);return e._hash=this._hash.clone(),e}}),o.MD5=c._createHelper(a),o.HmacMD5=c._createHmacHelper(a)}(Math),function(){var e=n,t=e.lib,r=t.Base,i=t.WordArray,t=e.algo,s=t.EvpKDF=r.extend({cfg:r.extend({keySize:4,hasher:t.MD5,iterations:1}),init:function(e){this.cfg=this.cfg.extend(e)},compute:function(e,t){for(var n=this.cfg,r=n.hasher.create(),s=i.create(),o=s.words,a=n.keySize,n=n.iterations;o.length>>2]}},r.BlockCipher=c.extend({cfg:c.cfg.extend({mode:l,padding:f}),reset:function(){c.reset.call(this);var e=this.cfg,t=e.iv,e=e.mode;if(this._xformMode==this._ENC_XFORM_MODE)var n=e.createEncryptor;else n=e.createDecryptor,this._minBufferSize=1;this._mode=n.call(e,this,t&&t.words)},_doProcessBlock:function(e,t){this._mode.processBlock(e,t)},_doFinalize:function(){var e=this.cfg.padding;if(this._xformMode==this._ENC_XFORM_MODE){e.pad(this._data,this.blockSize);var t=this._process(!0)}else t=this._process(!0),e.unpad(t);return t},blockSize:4});var d=r.CipherParams=i.extend({init:function(e){this.mixIn(e)},toString:function(e){return(e||this.formatter).stringify(this)}}),l=(t.format={}).OpenSSL={stringify:function(e){var t=e.ciphertext;return e=e.salt,(e?s.create([1398893684,1701076831]).concat(e).concat(t):t).toString(a)},parse:function(e){e=a.parse(e);var t=e.words;if(1398893684==t[0]&&1701076831==t[1]){var n=s.create(t.slice(2,4));t.splice(0,4),e.sigBytes-=16}return d.create({ciphertext:e,salt:n})}},p=r.SerializableCipher=i.extend({cfg:i.extend({format:l}),encrypt:function(e,t,n,r){r=this.cfg.extend(r);var i=e.createEncryptor(n,r);return t=i.finalize(t),i=i.cfg,d.create({ciphertext:t,key:n,iv:i.iv,algorithm:e,mode:i.mode,padding:i.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}}),t=(t.kdf={}).OpenSSL={execute:function(e,t,n,r){return r||(r=s.random(8)),e=u.create({keySize:t+n}).compute(e,r),n=s.create(e.words.slice(t),4*n),e.sigBytes=4*t,d.create({key:e,iv:n,salt:r})}},g=r.PasswordBasedCipher=p.extend({cfg:p.cfg.extend({kdf:t}),encrypt:function(e,t,n,r){return r=this.cfg.extend(r),n=r.kdf.execute(n,e.keySize,e.ivSize),r.iv=n.iv,e=p.encrypt.call(this,e,t,n.key,r),e.mixIn(n),e},decrypt:function(e,t,n,r){return r=this.cfg.extend(r),t=this._parse(t,r.format),n=r.kdf.execute(n,e.keySize,e.ivSize,t.salt),r.iv=n.iv,p.decrypt.call(this,e,t,n.key,r)}})}(),function(){for(var e=n,t=e.lib.BlockCipher,r=e.algo,i=[],s=[],o=[],a=[],u=[],c=[],l=[],h=[],f=[],d=[],p=[],g=0;256>g;g++)p[g]=128>g?g<<1:g<<1^283;for(var y=0,b=0,g=0;256>g;g++){var v=b^b<<1^b<<2^b<<3^b<<4,v=v>>>8^255&v^99;i[y]=v,s[v]=y;var _=p[y],m=p[_],k=p[m],P=257*p[v]^16843008*v;o[y]=P<<24|P>>>8,a[y]=P<<16|P>>>16,u[y]=P<<8|P>>>24,c[y]=P,P=16843009*k^65537*m^257*_^16843008*y,l[v]=P<<24|P>>>8,h[v]=P<<16|P>>>16,f[v]=P<<8|P>>>24,d[v]=P,y?(y=_^p[p[p[k^_]]],b^=p[p[b]]):y=b=1}var S=[0,1,2,4,8,16,32,64,128,27,54],r=r.AES=t.extend({_doReset:function(){for(var e=this._key,t=e.words,n=e.sigBytes/4,e=4*((this._nRounds=n+6)+1),r=this._keySchedule=[],s=0;s>>24]<<24|i[o>>>16&255]<<16|i[o>>>8&255]<<8|i[255&o]):(o=o<<8|o>>>24,o=i[o>>>24]<<24|i[o>>>16&255]<<16|i[o>>>8&255]<<8|i[255&o],o^=S[s/n|0]<<24),r[s]=r[s-n]^o}for(t=this._invKeySchedule=[],n=0;nn||4>=s?o:l[i[o>>>24]]^h[i[o>>>16&255]]^f[i[o>>>8&255]]^d[i[255&o]]},encryptBlock:function(e,t){this._doCryptBlock(e,t,this._keySchedule,o,a,u,c,i)},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,h,f,d,s),n=e[t+1],e[t+1]=e[t+3],e[t+3]=n},_doCryptBlock:function(e,t,n,r,i,s,o,a){for(var u=this._nRounds,c=e[t]^n[0],l=e[t+1]^n[1],h=e[t+2]^n[2],f=e[t+3]^n[3],d=4,p=1;p>>24]^i[l>>>16&255]^s[h>>>8&255]^o[255&f]^n[d++],y=r[l>>>24]^i[h>>>16&255]^s[f>>>8&255]^o[255&c]^n[d++],b=r[h>>>24]^i[f>>>16&255]^s[c>>>8&255]^o[255&l]^n[d++],f=r[f>>>24]^i[c>>>16&255]^s[l>>>8&255]^o[255&h]^n[d++],c=g,l=y,h=b;g=(a[c>>>24]<<24|a[l>>>16&255]<<16|a[h>>>8&255]<<8|a[255&f])^n[d++],y=(a[l>>>24]<<24|a[h>>>16&255]<<16|a[f>>>8&255]<<8|a[255&c])^n[d++],b=(a[h>>>24]<<24|a[f>>>16&255]<<16|a[c>>>8&255]<<8|a[255&l])^n[d++],f=(a[f>>>24]<<24|a[c>>>16&255]<<16|a[l>>>8&255]<<8|a[255&h])^n[d++],e[t]=g,e[t+1]=y,e[t+2]=b,e[t+3]=f},keySize:8});e.AES=t._createHelper(r)}(),n.mode.ECB=function(){var e=n.lib.BlockCipherMode.extend();return e.Encryptor=e.extend({processBlock:function(e,t){this._cipher.encryptBlock(e,t)}}),e.Decryptor=e.extend({processBlock:function(e,t){this._cipher.decryptBlock(e,t)}}),e}(),e.exports=n},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var s=function(){function e(e,t){for(var n=0;n=o){var u={};u.category=y.default.PNRequestMessageCountExceededCategory,u.operation=e.operation,this._listenerManager.announceStatus(u)}i.forEach(function(e){var t=e.channel,r=e.subscriptionMatch,i=e.publishMetaData;if(t===r&&(r=null),a){if(n._dedupingManager.isDuplicate(e))return;n._dedupingManager.addEntry(e)}if(p.default.endsWith(e.channel,"-pnpres")){var s={};s.channel=null,s.subscription=null,s.actualChannel=null!=r?t:null,s.subscribedChannel=null!=r?r:t,t&&(s.channel=t.substring(0,t.lastIndexOf("-pnpres"))),r&&(s.subscription=r.substring(0,r.lastIndexOf("-pnpres"))),s.action=e.payload.action,s.state=e.payload.data,s.timetoken=i.publishTimetoken,s.occupancy=e.payload.occupancy,s.uuid=e.payload.uuid,s.timestamp=e.payload.timestamp,e.payload.join&&(s.join=e.payload.join),e.payload.leave&&(s.leave=e.payload.leave),e.payload.timeout&&(s.timeout=e.payload.timeout),n._listenerManager.announcePresence(s)}else{var o={};o.channel=null,o.subscription=null,o.actualChannel=null!=r?t:null,o.subscribedChannel=null!=r?r:t,o.channel=t,o.subscription=r,o.timetoken=i.publishTimetoken,o.publisher=e.issuingClientId,e.userMetadata&&(o.userMetadata=e.userMetadata),n._config.cipherKey?o.message=n._crypto.decrypt(e.payload):o.message=e.payload,n._listenerManager.announceMessage(o)}}),this._region=t.metadata.region,this._startSubscribeLoop()}},{key:"_stopSubscribeLoop",value:function(){this._subscribeCall&&("function"==typeof this._subscribeCall.abort&&this._subscribeCall.abort(),this._subscribeCall=null)}}]),e}();t.default=b,e.exports=t.default},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n=this._config.maximumCacheSize&&this.hashHistory.shift(),this.hashHistory.push(this.getKey(e))}},{key:"clearHistory",value:function(){this.hashHistory=[]}}]),e}();t.default=a,e.exports=t.default},function(e,t){"use strict";function n(e){var t=[];return Object.keys(e).forEach(function(e){return t.push(e)}),t}function r(e){return encodeURIComponent(e).replace(/[!~*'()]/g,function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()})}function i(e){return n(e).sort()}function s(e){return i(e).map(function(t){return t+"="+r(e[t])}).join("&")}function o(e,t){return-1!==e.indexOf(t,this.length-t.length)}function a(){var e=void 0,t=void 0;return{promise:new Promise(function(n,r){e=n,t=r}),reject:t,fulfill:e}}e.exports={signPamFromParams:s,endsWith:o,createPromise:a,encodeString:r}},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function o(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function a(e,t){return e.type=t,e.error=!0,e}function u(e){return a({message:e},"validationError")}function c(e,t,n){return e.usePost&&e.usePost(t,n)?e.postURL(t,n):e.getURL(t,n)}function l(e){if(e.sdkName)return e.sdkName;var t="PubNub-JS-"+e.sdkFamily;return e.partnerId&&(t+="-"+e.partnerId),t+="/"+e.getVersion()}function h(e,t,n){var r=e.config,i=e.crypto;n.timestamp=Math.floor((new Date).getTime()/1e3);var s=r.subscribeKey+"\n"+r.publishKey+"\n"+t+"\n";s+=g.default.signPamFromParams(n);var o=i.HMACSHA256(s);o=o.replace(/\+/g,"-"),o=o.replace(/\//g,"_"),n.signature=o}Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){var n=e.networking,r=e.config,i=null,s=null,o={};t.getOperation()===v.default.PNTimeOperation||t.getOperation()===v.default.PNChannelGroupsOperation?i=arguments.length<=2?void 0:arguments[2]:(o=arguments.length<=2?void 0:arguments[2],i=arguments.length<=3?void 0:arguments[3]),"undefined"==typeof Promise||i||(s=g.default.createPromise());var a=t.validateParams(e,o);if(!a){var f=t.prepareParams(e,o),p=c(t,e,o),y=void 0,b={url:p,operation:t.getOperation(),timeout:t.getRequestTimeout(e)};f.uuid=r.UUID,f.pnsdk=l(r),r.useInstanceId&&(f.instanceid=r.instanceId),r.useRequestId&&(f.requestid=d.default.createUUID()),t.isAuthSupported()&&r.getAuthKey()&&(f.auth=r.getAuthKey()),r.secretKey&&h(e,p,f);var m=function(n,r){if(n.error)return void(i?i(n):s&&s.reject(new _("PubNub call failed, check status for details",n)));var a=t.handleResponse(e,r,o);i?i(n,a):s&&s.fulfill(a)};if(t.usePost&&t.usePost(e,o)){var k=t.postPayload(e,o);y=n.POST(f,k,b,m)}else y=t.useDelete&&t.useDelete()?n.DELETE(f,b,m):n.GET(f,b,m);return t.getOperation()===v.default.PNSubscribeOperation?y:s?s.promise:void 0}return i?i(u(a)):s?(s.reject(new _("Validation failed, check status for details",u(a))),s.promise):void 0};var f=n(3),d=r(f),p=(n(5),n(15)),g=r(p),y=n(2),b=(r(y),n(13)),v=r(b),_=function(e){function t(e,n){i(this,t);var r=s(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return r.name=r.constructor.name,r.status=n,r.message=e,r}return o(t,e),t}(Error);e.exports=t.default},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return f.default.PNAddChannelsToGroupOperation}function s(e,t){var n=t.channels,r=t.channelGroup,i=e.config;return r?n&&0!==n.length?i.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channels":"Missing Channel Group"}function o(e,t){var n=t.channelGroup;return"/v1/channel-registration/sub-key/"+e.config.subscribeKey+"/channel-group/"+p.default.encodeString(n)}function a(e){return e.config.getTransactionTimeout()}function u(){return!0}function c(e,t){var n=t.channels;return{add:(void 0===n?[]:n).join(",")}}function l(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=s,t.getURL=o,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var h=(n(5),n(13)),f=r(h),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return f.default.PNRemoveChannelsFromGroupOperation}function s(e,t){var n=t.channels,r=t.channelGroup,i=e.config;return r?n&&0!==n.length?i.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channels":"Missing Channel Group"}function o(e,t){var n=t.channelGroup;return"/v1/channel-registration/sub-key/"+e.config.subscribeKey+"/channel-group/"+p.default.encodeString(n)}function a(e){return e.config.getTransactionTimeout()}function u(){return!0}function c(e,t){var n=t.channels;return{remove:(void 0===n?[]:n).join(",")}}function l(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=s,t.getURL=o,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var h=(n(5),n(13)),f=r(h),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return f.default.PNRemoveGroupOperation}function s(e,t){var n=t.channelGroup,r=e.config;return n?r.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channel Group"}function o(e,t){var n=t.channelGroup;return"/v1/channel-registration/sub-key/"+e.config.subscribeKey+"/channel-group/"+p.default.encodeString(n)+"/remove"}function a(){return!0}function u(e){return e.config.getTransactionTimeout()}function c(){return{}}function l(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=s,t.getURL=o,t.isAuthSupported=a,t.getRequestTimeout=u,t.prepareParams=c,t.handleResponse=l;var h=(n(5),n(13)),f=r(h),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(){return h.default.PNChannelGroupsOperation}function i(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function s(e){return"/v1/channel-registration/sub-key/"+e.config.subscribeKey+"/channel-group"}function o(e){return e.config.getTransactionTimeout()}function a(){return!0}function u(){return{}}function c(e,t){return{groups:t.payload.groups}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=s,t.getRequestTimeout=o,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),h=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return f.default.PNChannelsForGroupOperation}function s(e,t){var n=t.channelGroup,r=e.config;return n?r.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channel Group"}function o(e,t){var n=t.channelGroup;return"/v1/channel-registration/sub-key/"+e.config.subscribeKey+"/channel-group/"+p.default.encodeString(n)}function a(e){return e.config.getTransactionTimeout()}function u(){return!0}function c(){return{}}function l(e,t){return{channels:t.payload.channels}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=s,t.getURL=o,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var h=(n(5),n(13)),f=r(h),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(){return h.default.PNPushNotificationEnabledChannelsOperation}function i(e,t){var n=t.device,r=t.pushGateway,i=t.channels,s=e.config;return n?r?i&&0!==i.length?s.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channels":"Missing GW Type (pushGateway: gcm or apns)":"Missing Device ID (device)"}function s(e,t){var n=t.device;return"/v1/push/sub-key/"+e.config.subscribeKey+"/devices/"+n}function o(e){return e.config.getTransactionTimeout()}function a(){return!0}function u(e,t){var n=t.pushGateway,r=t.channels;return{type:n,add:(void 0===r?[]:r).join(",")}}function c(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=s,t.getRequestTimeout=o,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),h=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(){return h.default.PNPushNotificationEnabledChannelsOperation}function i(e,t){var n=t.device,r=t.pushGateway,i=t.channels,s=e.config;return n?r?i&&0!==i.length?s.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channels":"Missing GW Type (pushGateway: gcm or apns)":"Missing Device ID (device)"}function s(e,t){var n=t.device;return"/v1/push/sub-key/"+e.config.subscribeKey+"/devices/"+n}function o(e){return e.config.getTransactionTimeout()}function a(){return!0}function u(e,t){var n=t.pushGateway,r=t.channels;return{type:n,remove:(void 0===r?[]:r).join(",")}}function c(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=s,t.getRequestTimeout=o,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),h=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(){return h.default.PNPushNotificationEnabledChannelsOperation}function i(e,t){var n=t.device,r=t.pushGateway,i=e.config;return n?r?i.subscribeKey?void 0:"Missing Subscribe Key":"Missing GW Type (pushGateway: gcm or apns)":"Missing Device ID (device)"}function s(e,t){var n=t.device;return"/v1/push/sub-key/"+e.config.subscribeKey+"/devices/"+n}function o(e){return e.config.getTransactionTimeout()}function a(){return!0}function u(e,t){return{type:t.pushGateway}}function c(e,t){return{channels:t}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=s,t.getRequestTimeout=o,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),h=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(){return h.default.PNRemoveAllPushNotificationsOperation}function i(e,t){var n=t.device,r=t.pushGateway,i=e.config;return n?r?i.subscribeKey?void 0:"Missing Subscribe Key":"Missing GW Type (pushGateway: gcm or apns)":"Missing Device ID (device)"}function s(e,t){var n=t.device;return"/v1/push/sub-key/"+e.config.subscribeKey+"/devices/"+n+"/remove"}function o(e){return e.config.getTransactionTimeout()}function a(){return!0}function u(e,t){return{type:t.pushGateway}}function c(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=s,t.getRequestTimeout=o,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),h=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return f.default.PNUnsubscribeOperation}function s(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function o(e,t){var n=e.config,r=t.channels,i=void 0===r?[]:r,s=i.length>0?i.join(","):",";return"/v2/presence/sub-key/"+n.subscribeKey+"/channel/"+p.default.encodeString(s)+"/leave"}function a(e){return e.config.getTransactionTimeout()}function u(){return!0}function c(e,t){var n=t.channelGroups,r=void 0===n?[]:n,i={};return r.length>0&&(i["channel-group"]=r.join(",")),i}function l(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=s,t.getURL=o,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var h=(n(5),n(13)),f=r(h),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(){return h.default.PNWhereNowOperation}function i(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function s(e,t){var n=e.config,r=t.uuid,i=void 0===r?n.UUID:r;return"/v2/presence/sub-key/"+n.subscribeKey+"/uuid/"+i}function o(e){return e.config.getTransactionTimeout()}function a(){return!0}function u(){return{}}function c(e,t){return t.payload?{channels:t.payload.channels}:{channels:[]}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=s,t.getRequestTimeout=o,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),h=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return f.default.PNHeartbeatOperation}function s(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function o(e,t){var n=e.config,r=t.channels,i=void 0===r?[]:r,s=i.length>0?i.join(","):",";return"/v2/presence/sub-key/"+n.subscribeKey+"/channel/"+p.default.encodeString(s)+"/heartbeat"}function a(){return!0}function u(e){return e.config.getTransactionTimeout()}function c(e,t){var n=t.channelGroups,r=void 0===n?[]:n,i=t.state,s=void 0===i?{}:i,o=e.config,a={};return r.length>0&&(a["channel-group"]=r.join(",")),a.state=JSON.stringify(s),a.heartbeat=o.getPresenceTimeout(),a}function l(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=s,t.getURL=o,t.isAuthSupported=a,t.getRequestTimeout=u,t.prepareParams=c,t.handleResponse=l;var h=(n(5),n(13)),f=r(h),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return f.default.PNGetStateOperation}function s(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function o(e,t){var n=e.config,r=t.uuid,i=void 0===r?n.UUID:r,s=t.channels,o=void 0===s?[]:s,a=o.length>0?o.join(","):",";return"/v2/presence/sub-key/"+n.subscribeKey+"/channel/"+p.default.encodeString(a)+"/uuid/"+i}function a(e){return e.config.getTransactionTimeout()}function u(){return!0}function c(e,t){var n=t.channelGroups,r=void 0===n?[]:n,i={};return r.length>0&&(i["channel-group"]=r.join(",")),i}function l(e,t,n){var r=n.channels,i=void 0===r?[]:r,s=n.channelGroups,o=void 0===s?[]:s,a={};return 1===i.length&&0===o.length?a[i[0]]=t.payload:a=t.payload,{channels:a}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=s,t.getURL=o,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var h=(n(5),n(13)),f=r(h),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return f.default.PNSetStateOperation}function s(e,t){var n=e.config,r=t.state,i=t.channels,s=void 0===i?[]:i,o=t.channelGroups,a=void 0===o?[]:o;return r?n.subscribeKey?0===s.length&&0===a.length?"Please provide a list of channels and/or channel-groups":void 0:"Missing Subscribe Key":"Missing State"}function o(e,t){var n=e.config,r=t.channels,i=void 0===r?[]:r,s=i.length>0?i.join(","):",";return"/v2/presence/sub-key/"+n.subscribeKey+"/channel/"+p.default.encodeString(s)+"/uuid/"+n.UUID+"/data"}function a(e){return e.config.getTransactionTimeout()}function u(){return!0}function c(e,t){var n=t.state,r=t.channelGroups,i=void 0===r?[]:r,s={};return s.state=JSON.stringify(n),i.length>0&&(s["channel-group"]=i.join(",")),s}function l(e,t){return{state:t.payload}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=s,t.getURL=o,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var h=(n(5),n(13)),f=r(h),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return f.default.PNHereNowOperation}function s(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function o(e,t){var n=e.config,r=t.channels,i=void 0===r?[]:r,s=t.channelGroups,o=void 0===s?[]:s,a="/v2/presence/sub-key/"+n.subscribeKey;if(i.length>0||o.length>0){var u=i.length>0?i.join(","):",";a+="/channel/"+p.default.encodeString(u)}return a}function a(e){return e.config.getTransactionTimeout()}function u(){return!0}function c(e,t){var n=t.channelGroups,r=void 0===n?[]:n,i=t.includeUUIDs,s=void 0===i||i,o=t.includeState,a=void 0!==o&&o,u={};return s||(u.disable_uuids=1),a&&(u.state=1),r.length>0&&(u["channel-group"]=r.join(",")),u}function l(e,t,n){var r=n.channels,i=void 0===r?[]:r,s=n.channelGroups,o=void 0===s?[]:s,a=n.includeUUIDs,u=void 0===a||a,c=n.includeState,l=void 0!==c&&c;return i.length>1||o.length>0||0===o.length&&0===i.length?function(){var e={};return e.totalChannels=t.payload.total_channels,e.totalOccupancy=t.payload.total_occupancy,e.channels={},Object.keys(t.payload.channels).forEach(function(n){var r=t.payload.channels[n],i=[];return e.channels[n]={occupants:i,name:n,occupancy:r.occupancy},u&&r.uuids.forEach(function(e){l?i.push({state:e.state,uuid:e.uuid}):i.push({state:null,uuid:e})}),e}),e}():function(){var e={},n=[];return e.totalChannels=1,e.totalOccupancy=t.occupancy,e.channels={},e.channels[i[0]]={occupants:n,name:i[0],occupancy:t.occupancy},u&&t.uuids&&t.uuids.forEach(function(e){l?n.push({state:e.state,uuid:e.uuid}):n.push({state:null,uuid:e})}),e}()}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=s,t.getURL=o,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var h=(n(5),n(13)),f=r(h),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(){return h.default.PNAccessManagerAudit}function i(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function s(e){return"/v2/auth/audit/sub-key/"+e.config.subscribeKey}function o(e){return e.config.getTransactionTimeout()}function a(){return!1}function u(e,t){var n=t.channel,r=t.channelGroup,i=t.authKeys,s=void 0===i?[]:i,o={};return n&&(o.channel=n),r&&(o["channel-group"]=r),s.length>0&&(o.auth=s.join(",")),o}function c(e,t){return t.payload}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=s,t.getRequestTimeout=o,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),h=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(){return h.default.PNAccessManagerGrant}function i(e){var t=e.config;return t.subscribeKey?t.publishKey?t.secretKey?void 0:"Missing Secret Key":"Missing Publish Key":"Missing Subscribe Key"}function s(e){return"/v2/auth/grant/sub-key/"+e.config.subscribeKey}function o(e){return e.config.getTransactionTimeout()}function a(){return!1}function u(e,t){var n=t.channels,r=void 0===n?[]:n,i=t.channelGroups,s=void 0===i?[]:i,o=t.ttl,a=t.read,u=void 0!==a&&a,c=t.write,l=void 0!==c&&c,h=t.manage,f=void 0!==h&&h,d=t.authKeys,p=void 0===d?[]:d,g={};return g.r=u?"1":"0",g.w=l?"1":"0",g.m=f?"1":"0",r.length>0&&(g.channel=r.join(",")),s.length>0&&(g["channel-group"]=s.join(",")),p.length>0&&(g.auth=p.join(",")),(o||0===o)&&(g.ttl=o),g}function c(){return{}} Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=s,t.getRequestTimeout=o,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),h=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){var n=e.crypto,r=e.config,i=JSON.stringify(t);return r.cipherKey&&(i=n.encrypt(i),i=JSON.stringify(i)),i}function s(){return b.default.PNPublishOperation}function o(e,t){var n=e.config,r=t.message;return t.channel?r?n.subscribeKey?void 0:"Missing Subscribe Key":"Missing Message":"Missing Channel"}function a(e,t){var n=t.sendByPost;return void 0!==n&&n}function u(e,t){var n=e.config,r=t.channel,s=t.message,o=i(e,s);return"/publish/"+n.publishKey+"/"+n.subscribeKey+"/0/"+_.default.encodeString(r)+"/0/"+_.default.encodeString(o)}function c(e,t){var n=e.config,r=t.channel;return"/publish/"+n.publishKey+"/"+n.subscribeKey+"/0/"+_.default.encodeString(r)+"/0"}function l(e){return e.config.getTransactionTimeout()}function h(){return!0}function f(e,t){return i(e,t.message)}function d(e,t){var n=t.meta,r=t.replicate,i=void 0===r||r,s=t.storeInHistory,o=t.ttl,a={};return null!=s&&(a.store=s?"1":"0"),o&&(a.ttl=o),!1===i&&(a.norep="true"),n&&"object"===(void 0===n?"undefined":g(n))&&(a.meta=JSON.stringify(n)),a}function p(e,t){return{timetoken:t[2]}}Object.defineProperty(t,"__esModule",{value:!0});var g="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};t.getOperation=s,t.validateParams=o,t.usePost=a,t.getURL=u,t.postURL=c,t.getRequestTimeout=l,t.isAuthSupported=h,t.postPayload=f,t.prepareParams=d,t.handleResponse=p;var y=(n(5),n(13)),b=r(y),v=n(15),_=r(v)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){var n=e.config,r=e.crypto;if(!n.cipherKey)return t;try{return r.decrypt(t)}catch(e){return t}}function s(){return d.default.PNHistoryOperation}function o(e,t){var n=t.channel,r=e.config;return n?r.subscribeKey?void 0:"Missing Subscribe Key":"Missing channel"}function a(e,t){var n=t.channel;return"/v2/history/sub-key/"+e.config.subscribeKey+"/channel/"+g.default.encodeString(n)}function u(e){return e.config.getTransactionTimeout()}function c(){return!0}function l(e,t){var n=t.start,r=t.end,i=t.reverse,s=t.count,o=void 0===s?100:s,a=t.stringifiedTimeToken,u=void 0!==a&&a,c={include_token:"true"};return c.count=o,n&&(c.start=n),r&&(c.end=r),u&&(c.string_message_token="true"),null!=i&&(c.reverse=i.toString()),c}function h(e,t){var n={messages:[],startTimeToken:t[1],endTimeToken:t[2]};return t[0].forEach(function(t){var r={timetoken:t.timetoken,entry:i(e,t.message)};n.messages.push(r)}),n}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=s,t.validateParams=o,t.getURL=a,t.getRequestTimeout=u,t.isAuthSupported=c,t.prepareParams=l,t.handleResponse=h;var f=(n(5),n(13)),d=r(f),p=n(15),g=r(p)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return d.default.PNDeleteMessagesOperation}function s(e,t){var n=t.channel,r=e.config;return n?r.subscribeKey?void 0:"Missing Subscribe Key":"Missing channel"}function o(){return!0}function a(e,t){var n=t.channel,r=t.start,i=t.end,s=e.config,o="";return r&&(o="?start="+r),i&&(o+=(""!==o?"&":"?")+"end="+i),"/v3/history/sub-key/"+s.subscribeKey+"/channel/"+g.default.encodeString(n)+o}function u(e){return e.config.getTransactionTimeout()}function c(){return!0}function l(e,t){var n=t.start,r=t.end,i={};return n&&(i.start=n),r&&(i.end=r),{}}function h(e,t){return t.payload}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=s,t.useDelete=o,t.getURL=a,t.getRequestTimeout=u,t.isAuthSupported=c,t.prepareParams=l,t.handleResponse=h;var f=(n(5),n(13)),d=r(f),p=n(15),g=r(p)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){var n=e.config,r=e.crypto;if(!n.cipherKey)return t;try{return r.decrypt(t)}catch(e){return t}}function s(){return d.default.PNFetchMessagesOperation}function o(e,t){var n=t.channels,r=e.config;return n&&0!==n.length?r.subscribeKey?void 0:"Missing Subscribe Key":"Missing channels"}function a(e,t){var n=t.channels,r=void 0===n?[]:n,i=e.config,s=r.length>0?r.join(","):",";return"/v3/history/sub-key/"+i.subscribeKey+"/channel/"+g.default.encodeString(s)}function u(e){return e.config.getTransactionTimeout()}function c(){return!0}function l(e,t){var n=t.start,r=t.end,i=t.count,s={};return i&&(s.max=i),n&&(s.start=n),r&&(s.end=r),s}function h(e,t){var n={channels:{}};return Object.keys(t.channels||{}).forEach(function(r){n.channels[r]=[],(t.channels[r]||[]).forEach(function(t){var s={};s.channel=r,s.subscription=null,s.timetoken=t.timetoken,s.message=i(e,t.message),n.channels[r].push(s)})}),n}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=s,t.validateParams=o,t.getURL=a,t.getRequestTimeout=u,t.isAuthSupported=c,t.prepareParams=l,t.handleResponse=h;var f=(n(5),n(13)),d=r(f),p=n(15),g=r(p)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return f.default.PNSubscribeOperation}function s(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function o(e,t){var n=e.config,r=t.channels,i=void 0===r?[]:r,s=i.length>0?i.join(","):",";return"/v2/subscribe/"+n.subscribeKey+"/"+p.default.encodeString(s)+"/0"}function a(e){return e.config.getSubscribeTimeout()}function u(){return!0}function c(e,t){var n=e.config,r=t.channelGroups,i=void 0===r?[]:r,s=t.timetoken,o=t.filterExpression,a=t.region,u={heartbeat:n.getPresenceTimeout()};return i.length>0&&(u["channel-group"]=i.join(",")),o&&o.length>0&&(u["filter-expr"]=o),s&&(u.tt=s),a&&(u.tr=a),u}function l(e,t){var n=[];t.m.forEach(function(e){var t={publishTimetoken:e.p.t,region:e.p.r},r={shard:parseInt(e.a,10),subscriptionMatch:e.b,channel:e.c,payload:e.d,flags:e.f,issuingClientId:e.i,subscribeKey:e.k,originationTimetoken:e.o,userMetadata:e.u,publishMetaData:t};n.push(r)});var r={timetoken:t.t.t,region:t.t.r};return{messages:n,metadata:r}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=s,t.getURL=o,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var h=(n(5),n(13)),f=r(h),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var s=function(){function e(e,t){for(var n=0;n=this._maxSubDomain&&(this._currentSubDomain=1),e=this._currentSubDomain.toString(),this._providedFQDN.replace("pubsub","ps"+e)}},{key:"hasModule",value:function(e){return e in this._modules}},{key:"shiftStandardOrigin",value:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return this._standardOrigin=this.nextOrigin(e),this._standardOrigin}},{key:"getStandardOrigin",value:function(){return this._standardOrigin}},{key:"POST",value:function(e,t,n,r){return this._modules.post(e,t,n,r)}},{key:"GET",value:function(e,t,n){return this._modules.get(e,t,n)}},{key:"DELETE",value:function(e,t,n){return this._modules.del(e,t,n)}},{key:"_detectErrorCategory",value:function(e){if("ENOTFOUND"===e.code)return u.default.PNNetworkIssuesCategory;if("ECONNREFUSED"===e.code)return u.default.PNNetworkIssuesCategory;if("ECONNRESET"===e.code)return u.default.PNNetworkIssuesCategory;if("EAI_AGAIN"===e.code)return u.default.PNNetworkIssuesCategory;if(0===e.status||e.hasOwnProperty("status")&&void 0===e.status)return u.default.PNNetworkIssuesCategory;if(e.timeout)return u.default.PNTimeoutCategory;if(e.response){if(e.response.badRequest)return u.default.PNBadRequestCategory;if(e.response.forbidden)return u.default.PNAccessDeniedCategory}return u.default.PNUnknownCategory}}]),e}());t.default=c,e.exports=t.default},function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={get:function(e){try{return localStorage.getItem(e)}catch(e){return null}},set:function(e,t){try{return localStorage.setItem(e,t)}catch(e){return null}}},e.exports=t.default},function(e,t,n){"use strict";function r(e){var t=(new Date).getTime(),n=(new Date).toISOString(),r=function(){return console&&console.log?console:window&&window.console&&window.console.log?window.console:console}();r.log("<<<<<"),r.log("["+n+"]","\n",e.url,"\n",e.qs),r.log("-----"),e.on("response",function(n){var i=(new Date).getTime(),s=i-t,o=(new Date).toISOString();r.log(">>>>>>"),r.log("["+o+" / "+s+"]","\n",e.url,"\n",e.qs,"\n",n.text),r.log("-----")})}function i(e,t,n){var i=this;return this._config.logVerbosity&&(e=e.use(r)),this._config.proxy&&this._modules.proxy&&(e=this._modules.proxy.call(this,e)),this._config.keepAlive&&this._modules.keepAlive&&(e=this._modules.keepAlive(e)),e.timeout(t.timeout).end(function(e,r){var s={};if(s.error=null!==e,s.operation=t.operation,r&&r.status&&(s.statusCode=r.status),e)return s.errorData=e,s.category=i._detectErrorCategory(e),n(s,null);var o=JSON.parse(r.text);return o.error&&1===o.error&&o.status&&o.message&&o.service?(s.errorData=o,s.statusCode=o.status,s.error=!0,s.category=i._detectErrorCategory(s),n(s,null)):n(s,o)})}function s(e,t,n){var r=c.default.get(this.getStandardOrigin()+t.url).query(e);return i.call(this,r,t,n)}function o(e,t,n,r){var s=c.default.post(this.getStandardOrigin()+n.url).query(e).send(t);return i.call(this,s,n,r)}function a(e,t,n){var r=c.default.delete(this.getStandardOrigin()+t.url).query(e);return i.call(this,r,t,n)}Object.defineProperty(t,"__esModule",{value:!0}),t.get=s,t.post=o,t.del=a;var u=n(42),c=function(e){return e&&e.__esModule?e:{default:e}}(u);n(5)},function(e,t,n){function r(){}function i(e){if(!b(e))return e;var t=[];for(var n in e)s(t,n,e[n]);return t.join("&")}function s(e,t,n){if(null!=n)if(Array.isArray(n))n.forEach(function(n){s(e,t,n)});else if(b(n))for(var r in n)s(e,t+"["+r+"]",n[r]);else e.push(encodeURIComponent(t)+"="+encodeURIComponent(n));else null===n&&e.push(encodeURIComponent(t))}function o(e){for(var t,n,r={},i=e.split("&"),s=0,o=i.length;s=300)&&(r=new Error(t.statusText||"Unsuccessful HTTP response"),r.original=e,r.response=t,r.status=t.status)}catch(e){r=e}r?n.callback(r,t):n.callback(null,t)})}function d(e,t){var n=v("DELETE",e);return t&&n.end(t),n}var p;"undefined"!=typeof window?p=window:"undefined"!=typeof self?p=self:(console.warn("Using browser-only version of superagent in non-browser environment"),p=this);var g=n(43),y=n(44),b=n(45),v=e.exports=n(46).bind(null,f);v.getXHR=function(){if(!(!p.XMLHttpRequest||p.location&&"file:"==p.location.protocol&&p.ActiveXObject))return new XMLHttpRequest;try{return new ActiveXObject("Microsoft.XMLHTTP")}catch(e){}try{return new ActiveXObject("Msxml2.XMLHTTP.6.0")}catch(e){}try{return new ActiveXObject("Msxml2.XMLHTTP.3.0")}catch(e){}try{return new ActiveXObject("Msxml2.XMLHTTP")}catch(e){}throw Error("Browser-only verison of superagent could not find XHR")};var _="".trim?function(e){return e.trim()}:function(e){return e.replace(/(^\s*|\s*$)/g,"")};v.serializeObject=i,v.parseString=o,v.types={html:"text/html",json:"application/json",xml:"application/xml",urlencoded:"application/x-www-form-urlencoded",form:"application/x-www-form-urlencoded","form-data":"application/x-www-form-urlencoded"},v.serialize={"application/x-www-form-urlencoded":i,"application/json":JSON.stringify},v.parse={"application/x-www-form-urlencoded":o,"application/json":JSON.parse},h.prototype.get=function(e){return this.header[e.toLowerCase()]},h.prototype._setHeaderProperties=function(e){var t=this.header["content-type"]||"";this.type=c(t);var n=l(t);for(var r in n)this[r]=n[r]},h.prototype._parseBody=function(e){var t=v.parse[this.type];return!t&&u(this.type)&&(t=v.parse["application/json"]),t&&e&&(e.length||e instanceof Object)?t(e):null},h.prototype._setStatusProperties=function(e){1223===e&&(e=204);var t=e/100|0;this.status=this.statusCode=e,this.statusType=t,this.info=1==t,this.ok=2==t,this.clientError=4==t,this.serverError=5==t,this.error=(4==t||5==t)&&this.toError(),this.accepted=202==e,this.noContent=204==e,this.badRequest=400==e,this.unauthorized=401==e,this.notAcceptable=406==e,this.notFound=404==e,this.forbidden=403==e},h.prototype.toError=function(){var e=this.req,t=e.method,n=e.url,r="cannot "+t+" "+n+" ("+this.status+")",i=new Error(r);return i.status=this.status,i.method=t,i.url=n,i},v.Response=h,g(f.prototype);for(var m in y)f.prototype[m]=y[m];f.prototype.type=function(e){return this.set("Content-Type",v.types[e]||e),this},f.prototype.responseType=function(e){return this._responseType=e,this},f.prototype.accept=function(e){return this.set("Accept",v.types[e]||e),this},f.prototype.auth=function(e,t,n){switch(n||(n={type:"basic"}),n.type){case"basic":var r=btoa(e+":"+t);this.set("Authorization","Basic "+r);break;case"auto":this.username=e,this.password=t}return this},f.prototype.query=function(e){return"string"!=typeof e&&(e=i(e)),e&&this._query.push(e),this},f.prototype.attach=function(e,t,n){return this._getFormData().append(e,t,n||t.name),this},f.prototype._getFormData=function(){return this._formData||(this._formData=new p.FormData),this._formData},f.prototype.callback=function(e,t){var n=this._callback;this.clearTimeout(),n(e,t)},f.prototype.crossDomainError=function(){var e=new Error("Request has been terminated\nPossible causes: the network is offline, Origin is not allowed by Access-Control-Allow-Origin, the page is being unloaded, etc.");e.crossDomain=!0,e.status=this.status,e.method=this.method,e.url=this.url,this.callback(e)},f.prototype._timeoutError=function(){var e=this._timeout,t=new Error("timeout of "+e+"ms exceeded");t.timeout=e,this.callback(t)},f.prototype._appendQueryString=function(){var e=this._query.join("&");e&&(this.url+=~this.url.indexOf("?")?"&"+e:"?"+e)},f.prototype.end=function(e){var t=this,n=this.xhr=v.getXHR(),i=this._timeout,s=this._formData||this._data;this._callback=e||r,n.onreadystatechange=function(){if(4==n.readyState){var e;try{e=n.status}catch(t){e=0}if(0==e){if(t.timedout)return t._timeoutError();if(t._aborted)return;return t.crossDomainError()}t.emit("end")}};var o=function(e,n){n.total>0&&(n.percent=n.loaded/n.total*100),n.direction=e,t.emit("progress",n)};if(this.hasListeners("progress"))try{n.onprogress=o.bind(null,"download"),n.upload&&(n.upload.onprogress=o.bind(null,"upload"))}catch(e){}if(i&&!this._timer&&(this._timer=setTimeout(function(){t.timedout=!0,t.abort()},i)),this._appendQueryString(),this.username&&this.password?n.open(this.method,this.url,!0,this.username,this.password):n.open(this.method,this.url,!0),this._withCredentials&&(n.withCredentials=!0),"GET"!=this.method&&"HEAD"!=this.method&&"string"!=typeof s&&!this._isHost(s)){var a=this._header["content-type"],c=this._serializer||v.serialize[a?a.split(";")[0]:""];!c&&u(a)&&(c=v.serialize["application/json"]),c&&(s=c(s))}for(var l in this.header)null!=this.header[l]&&n.setRequestHeader(l,this.header[l]);return this._responseType&&(n.responseType=this._responseType),this.emit("request",this),n.send(void 0!==s?s:null),this},v.Request=f,v.get=function(e,t,n){var r=v("GET",e);return"function"==typeof t&&(n=t,t=null),t&&r.query(t),n&&r.end(n),r},v.head=function(e,t,n){var r=v("HEAD",e);return"function"==typeof t&&(n=t,t=null),t&&r.send(t),n&&r.end(n),r},v.options=function(e,t,n){var r=v("OPTIONS",e);return"function"==typeof t&&(n=t,t=null),t&&r.send(t),n&&r.end(n),r},v.del=d,v.delete=d,v.patch=function(e,t,n){var r=v("PATCH",e);return"function"==typeof t&&(n=t,t=null),t&&r.send(t),n&&r.end(n),r},v.post=function(e,t,n){var r=v("POST",e);return"function"==typeof t&&(n=t,t=null),t&&r.send(t),n&&r.end(n),r},v.put=function(e,t,n){var r=v("PUT",e);return"function"==typeof t&&(n=t,t=null),t&&r.send(t),n&&r.end(n),r}},function(e,t,n){function r(e){if(e)return i(e)}function i(e){for(var t in r.prototype)e[t]=r.prototype[t];return e}e.exports=r,r.prototype.on=r.prototype.addEventListener=function(e,t){return this._callbacks=this._callbacks||{},(this._callbacks["$"+e]=this._callbacks["$"+e]||[]).push(t),this},r.prototype.once=function(e,t){function n(){this.off(e,n),t.apply(this,arguments)}return n.fn=t,this.on(e,n),this},r.prototype.off=r.prototype.removeListener=r.prototype.removeAllListeners=r.prototype.removeEventListener=function(e,t){if(this._callbacks=this._callbacks||{},0==arguments.length)return this._callbacks={},this;var n=this._callbacks["$"+e];if(!n)return this;if(1==arguments.length)return delete this._callbacks["$"+e],this;for(var r,i=0;i\n useInstanceId: boolean;\n\n // if requestId config is true, the SDK will pass a unique request identifier with each request as request_id=\n useRequestId: boolean;\n\n // use connection keep-alive for http requests\n keepAlive: ?boolean;\n\n keepAliveSettings: ?KeepAliveStruct;\n\n // if autoNetworkDetection config is true, the SDK will emit NetworkUp and NetworkDown when there changes in the networking\n autoNetworkDetection: ?boolean;\n\n // alert when a heartbeat works out.\n announceSuccessfulHeartbeats: boolean;\n announceFailedHeartbeats: boolean;\n\n /*\n how long the server will wait before declaring that the client is gone.\n */\n _presenceTimeout: number;\n\n /*\n how often (in seconds) the client should announce its presence to server\n */\n _heartbeatInterval: number;\n\n /*\n how long to wait for the server when running the subscribe loop\n */\n _subscribeRequestTimeout: number;\n /*\n how long to wait for the server when making transactional requests\n */\n _transactionalRequestTimeout: number;\n /*\n use send beacon API when unsubscribing.\n https://developer.mozilla.org/en-US/docs/Web/API/Navigator/sendBeacon\n */\n _useSendBeacon: boolean;\n\n /*\n if set, the SDK will alert if more messages arrive in one subscribe than the theshold\n */\n requestMessageCountThreshold: number;\n\n /*\n Restore subscription list on disconnection.\n */\n restore: boolean;\n\n\n /*\n support for client deduping\n */\n dedupeOnSubscribe: boolean\n maximumCacheSize: number\n\n /*\n support customp encryption and decryption functions.\n */\n customEncrypt: Function // function to support custome encryption of messages\n customDecrypt: Function // function used to decrypt old version messages\n\n constructor({ setup, db } : ConfigConstructArgs) {\n this._db = db;\n\n this.instanceId = `pn-${uuidGenerator.createUUID()}`;\n this.secretKey = setup.secretKey || setup.secret_key;\n this.subscribeKey = setup.subscribeKey || setup.subscribe_key;\n this.publishKey = setup.publishKey || setup.publish_key;\n this.sdkName = setup.sdkName;\n this.sdkFamily = setup.sdkFamily;\n this.partnerId = setup.partnerId;\n this.setAuthKey(setup.authKey);\n this.setCipherKey(setup.cipherKey);\n\n this.setFilterExpression(setup.filterExpression);\n\n this.origin = setup.origin || 'pubsub.pndsn.com';\n this.secure = setup.ssl || false;\n this.restore = setup.restore || false;\n this.proxy = setup.proxy;\n this.keepAlive = setup.keepAlive;\n this.keepAliveSettings = setup.keepAliveSettings;\n this.autoNetworkDetection = setup.autoNetworkDetection || false;\n\n this.dedupeOnSubscribe = setup.dedupeOnSubscribe || false;\n this.maximumCacheSize = setup.maximumCacheSize || 100;\n\n this.customEncrypt = setup.customEncrypt;\n this.customDecrypt = setup.customDecrypt;\n\n // if location config exist and we are in https, force secure to true.\n if (typeof location !== 'undefined' && location.protocol === 'https:') {\n this.secure = true;\n }\n\n this.logVerbosity = setup.logVerbosity || false;\n this.suppressLeaveEvents = setup.suppressLeaveEvents || false;\n\n this.announceFailedHeartbeats = setup.announceFailedHeartbeats || true;\n this.announceSuccessfulHeartbeats = setup.announceSuccessfulHeartbeats || false;\n\n this.useInstanceId = setup.useInstanceId || false;\n this.useRequestId = setup.useRequestId || false;\n\n this.requestMessageCountThreshold = setup.requestMessageCountThreshold;\n\n // set timeout to how long a transaction request will wait for the server (default 15 seconds)\n this.setTransactionTimeout(setup.transactionalRequestTimeout || 15 * 1000);\n // set timeout to how long a subscribe event loop will run (default 310 seconds)\n this.setSubscribeTimeout(setup.subscribeRequestTimeout || 310 * 1000);\n // set config on beacon (https://developer.mozilla.org/en-US/docs/Web/API/Navigator/sendBeacon) usage\n this.setSendBeaconConfig(setup.useSendBeacon || true);\n // how long the SDK will report the client to be alive before issuing a timeout\n this.setPresenceTimeout(setup.presenceTimeout || 300);\n\n if (setup.heartbeatInterval != null) {\n this.setHeartbeatInterval(setup.heartbeatInterval);\n }\n\n this.setUUID(this._decideUUID(setup.uuid)); // UUID decision depends on subKey.\n }\n\n // exposed setters\n getAuthKey(): string { return this.authKey; }\n setAuthKey(val: string): this { this.authKey = val; return this; }\n setCipherKey(val: string): this { this.cipherKey = val; return this; }\n getUUID(): string { return this.UUID; }\n setUUID(val: string): this {\n if (this._db && this._db.set) this._db.set(`${this.subscribeKey}uuid`, val);\n this.UUID = val;\n return this;\n }\n\n getFilterExpression(): string { return this.filterExpression; }\n setFilterExpression(val: string): this { this.filterExpression = val; return this; }\n\n getPresenceTimeout(): number { return this._presenceTimeout; }\n setPresenceTimeout(val: number): this {\n this._presenceTimeout = val;\n this.setHeartbeatInterval((this._presenceTimeout / 2) - 1);\n return this;\n }\n\n setProxy(proxy: ProxyStruct) {\n this.proxy = proxy;\n }\n\n getHeartbeatInterval(): number { return this._heartbeatInterval; }\n setHeartbeatInterval(val: number): this { this._heartbeatInterval = val; return this; }\n\n // deprecated setters.\n getSubscribeTimeout(): number { return this._subscribeRequestTimeout; }\n setSubscribeTimeout(val: number): this { this._subscribeRequestTimeout = val; return this; }\n\n getTransactionTimeout(): number { return this._transactionalRequestTimeout; }\n setTransactionTimeout(val: number): this { this._transactionalRequestTimeout = val; return this; }\n\n isSendBeaconEnabled(): boolean { return this._useSendBeacon; }\n setSendBeaconConfig(val: boolean): this { this._useSendBeacon = val; return this; }\n\n getVersion(): string {\n return '4.19.0';\n }\n\n _decideUUID(providedUUID: string): string {\n // if the uuid was provided by setup, use this UUID.\n if (providedUUID) {\n return providedUUID;\n }\n\n // if the database module is enabled and we have something saved, use this.\n if (this._db && this._db.get && this._db.get(`${this.subscribeKey}uuid`)) {\n return this._db.get(`${this.subscribeKey}uuid`);\n }\n\n // randomize the UUID and push to storage\n return `pn-${uuidGenerator.createUUID()}`;\n }\n}\n"]} \ No newline at end of file +{"version":3,"sources":["core/components/config.js"],"names":["setup","db","_db","instanceId","createUUID","secretKey","secret_key","subscribeKey","subscribe_key","publishKey","publish_key","sdkName","sdkFamily","partnerId","setAuthKey","authKey","setCipherKey","cipherKey","setFilterExpression","filterExpression","origin","secure","ssl","restore","proxy","keepAlive","keepAliveSettings","autoNetworkDetection","dedupeOnSubscribe","maximumCacheSize","customEncrypt","customDecrypt","location","protocol","logVerbosity","suppressLeaveEvents","announceFailedHeartbeats","announceSuccessfulHeartbeats","useInstanceId","useRequestId","requestMessageCountThreshold","setTransactionTimeout","transactionalRequestTimeout","setSubscribeTimeout","subscribeRequestTimeout","setSendBeaconConfig","useSendBeacon","setPresenceTimeout","presenceTimeout","heartbeatInterval","setHeartbeatInterval","setUUID","_decideUUID","uuid","val","UUID","set","_presenceTimeout","_heartbeatInterval","_subscribeRequestTimeout","_transactionalRequestTimeout","_useSendBeacon","providedUUID","get"],"mappings":"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","file":"config.js","sourcesContent":["/* @flow */\n/* global location */\n\nimport uuidGenerator from './uuid';\nimport { InternalSetupStruct, DatabaseInterface, KeepAliveStruct, ProxyStruct } from '../flow_interfaces';\n\ntype ConfigConstructArgs = {\n setup: InternalSetupStruct,\n db: DatabaseInterface\n}\n\nexport default class {\n\n _db: DatabaseInterface;\n\n subscribeKey: string;\n publishKey: string;\n secretKey: string;\n cipherKey: string;\n authKey: string;\n UUID: string;\n\n proxy: ProxyStruct;\n\n /*\n if _useInstanceId is true, this instanceId will be added to all requests\n */\n instanceId: string;\n\n /*\n If the SDK is running as part of another SDK built atop of it, allow a custom pnsdk with name and version.\n */\n sdkName: string;\n\n /*\n keep track of the SDK family for identifier generator\n */\n sdkFamily: string;\n\n /*\n If the SDK is operated by a partner, allow a custom pnsdk item for them.\n */\n partnerId: string;\n\n /*\n filter expression to pass along when subscribing.\n */\n filterExpression: string;\n /*\n configuration to supress leave events; when a presence leave is performed\n this configuration will disallow the leave event from happening\n */\n suppressLeaveEvents: boolean;\n\n /*\n use SSL for http requests?\n */\n secure: boolean;\n\n // Custom optional origin.\n origin: string;\n\n // log verbosity: true to output lots of info\n logVerbosity: boolean;\n\n // if instanceId config is true, the SDK will pass the unique instance identifier to the server as instanceId=\n useInstanceId: boolean;\n\n // if requestId config is true, the SDK will pass a unique request identifier with each request as request_id=\n useRequestId: boolean;\n\n // use connection keep-alive for http requests\n keepAlive: ?boolean;\n\n keepAliveSettings: ?KeepAliveStruct;\n\n // if autoNetworkDetection config is true, the SDK will emit NetworkUp and NetworkDown when there changes in the networking\n autoNetworkDetection: ?boolean;\n\n // alert when a heartbeat works out.\n announceSuccessfulHeartbeats: boolean;\n announceFailedHeartbeats: boolean;\n\n /*\n how long the server will wait before declaring that the client is gone.\n */\n _presenceTimeout: number;\n\n /*\n how often (in seconds) the client should announce its presence to server\n */\n _heartbeatInterval: number;\n\n /*\n how long to wait for the server when running the subscribe loop\n */\n _subscribeRequestTimeout: number;\n /*\n how long to wait for the server when making transactional requests\n */\n _transactionalRequestTimeout: number;\n /*\n use send beacon API when unsubscribing.\n https://developer.mozilla.org/en-US/docs/Web/API/Navigator/sendBeacon\n */\n _useSendBeacon: boolean;\n\n /*\n if set, the SDK will alert if more messages arrive in one subscribe than the theshold\n */\n requestMessageCountThreshold: number;\n\n /*\n Restore subscription list on disconnection.\n */\n restore: boolean;\n\n\n /*\n support for client deduping\n */\n dedupeOnSubscribe: boolean\n maximumCacheSize: number\n\n /*\n support customp encryption and decryption functions.\n */\n customEncrypt: Function // function to support custome encryption of messages\n customDecrypt: Function // function used to decrypt old version messages\n\n constructor({ setup, db } : ConfigConstructArgs) {\n this._db = db;\n\n this.instanceId = `pn-${uuidGenerator.createUUID()}`;\n this.secretKey = setup.secretKey || setup.secret_key;\n this.subscribeKey = setup.subscribeKey || setup.subscribe_key;\n this.publishKey = setup.publishKey || setup.publish_key;\n this.sdkName = setup.sdkName;\n this.sdkFamily = setup.sdkFamily;\n this.partnerId = setup.partnerId;\n this.setAuthKey(setup.authKey);\n this.setCipherKey(setup.cipherKey);\n\n this.setFilterExpression(setup.filterExpression);\n\n this.origin = setup.origin || 'pubsub.pndsn.com';\n this.secure = setup.ssl || false;\n this.restore = setup.restore || false;\n this.proxy = setup.proxy;\n this.keepAlive = setup.keepAlive;\n this.keepAliveSettings = setup.keepAliveSettings;\n this.autoNetworkDetection = setup.autoNetworkDetection || false;\n\n this.dedupeOnSubscribe = setup.dedupeOnSubscribe || false;\n this.maximumCacheSize = setup.maximumCacheSize || 100;\n\n this.customEncrypt = setup.customEncrypt;\n this.customDecrypt = setup.customDecrypt;\n\n // if location config exist and we are in https, force secure to true.\n if (typeof location !== 'undefined' && location.protocol === 'https:') {\n this.secure = true;\n }\n\n this.logVerbosity = setup.logVerbosity || false;\n this.suppressLeaveEvents = setup.suppressLeaveEvents || false;\n\n this.announceFailedHeartbeats = setup.announceFailedHeartbeats || true;\n this.announceSuccessfulHeartbeats = setup.announceSuccessfulHeartbeats || false;\n\n this.useInstanceId = setup.useInstanceId || false;\n this.useRequestId = setup.useRequestId || false;\n\n this.requestMessageCountThreshold = setup.requestMessageCountThreshold;\n\n // set timeout to how long a transaction request will wait for the server (default 15 seconds)\n this.setTransactionTimeout(setup.transactionalRequestTimeout || 15 * 1000);\n // set timeout to how long a subscribe event loop will run (default 310 seconds)\n this.setSubscribeTimeout(setup.subscribeRequestTimeout || 310 * 1000);\n // set config on beacon (https://developer.mozilla.org/en-US/docs/Web/API/Navigator/sendBeacon) usage\n this.setSendBeaconConfig(setup.useSendBeacon || true);\n // how long the SDK will report the client to be alive before issuing a timeout\n this.setPresenceTimeout(setup.presenceTimeout || 300);\n\n if (setup.heartbeatInterval != null) {\n this.setHeartbeatInterval(setup.heartbeatInterval);\n }\n\n this.setUUID(this._decideUUID(setup.uuid)); // UUID decision depends on subKey.\n }\n\n // exposed setters\n getAuthKey(): string { return this.authKey; }\n setAuthKey(val: string): this { this.authKey = val; return this; }\n setCipherKey(val: string): this { this.cipherKey = val; return this; }\n getUUID(): string { return this.UUID; }\n setUUID(val: string): this {\n if (this._db && this._db.set) this._db.set(`${this.subscribeKey}uuid`, val);\n this.UUID = val;\n return this;\n }\n\n getFilterExpression(): string { return this.filterExpression; }\n setFilterExpression(val: string): this { this.filterExpression = val; return this; }\n\n getPresenceTimeout(): number { return this._presenceTimeout; }\n setPresenceTimeout(val: number): this {\n this._presenceTimeout = val;\n this.setHeartbeatInterval((this._presenceTimeout / 2) - 1);\n return this;\n }\n\n setProxy(proxy: ProxyStruct) {\n this.proxy = proxy;\n }\n\n getHeartbeatInterval(): number { return this._heartbeatInterval; }\n setHeartbeatInterval(val: number): this { this._heartbeatInterval = val; return this; }\n\n // deprecated setters.\n getSubscribeTimeout(): number { return this._subscribeRequestTimeout; }\n setSubscribeTimeout(val: number): this { this._subscribeRequestTimeout = val; return this; }\n\n getTransactionTimeout(): number { return this._transactionalRequestTimeout; }\n setTransactionTimeout(val: number): this { this._transactionalRequestTimeout = val; return this; }\n\n isSendBeaconEnabled(): boolean { return this._useSendBeacon; }\n setSendBeaconConfig(val: boolean): this { this._useSendBeacon = val; return this; }\n\n getVersion(): string {\n return '4.20.0';\n }\n\n _decideUUID(providedUUID: string): string {\n // if the uuid was provided by setup, use this UUID.\n if (providedUUID) {\n return providedUUID;\n }\n\n // if the database module is enabled and we have something saved, use this.\n if (this._db && this._db.get && this._db.get(`${this.subscribeKey}uuid`)) {\n return this._db.get(`${this.subscribeKey}uuid`);\n }\n\n // randomize the UUID and push to storage\n return `pn-${uuidGenerator.createUUID()}`;\n }\n}\n"]} \ No newline at end of file diff --git a/package.json b/package.json index 1957aa366..8dbbc4a9b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "pubnub", - "version": "4.19.0", + "version": "4.20.0", "author": "PubNub ", "description": "Publish & Subscribe Real-time Messaging with PubNub", "bin": {}, diff --git a/src/core/components/config.js b/src/core/components/config.js index de2005e86..a6d5d5edd 100644 --- a/src/core/components/config.js +++ b/src/core/components/config.js @@ -228,7 +228,7 @@ export default class { setSendBeaconConfig(val: boolean): this { this._useSendBeacon = val; return this; } getVersion(): string { - return '4.19.0'; + return '4.20.0'; } _decideUUID(providedUUID: string): string { From deb7c02a399297425a9940e11fedaf607b359cae Mon Sep 17 00:00:00 2001 From: Max Presman Date: Thu, 4 Jan 2018 14:14:29 -0800 Subject: [PATCH 11/13] cleanup --- dist/titanium/pubnub.js | 5 ----- dist/titanium/pubnub.min.js | 6 +++--- dist/web/pubnub.js | 5 ----- dist/web/pubnub.min.js | 6 +++--- lib/core/components/subscription_manager.js | 5 ----- lib/core/components/subscription_manager.js.map | 2 +- src/core/components/subscription_manager.js | 8 -------- 7 files changed, 7 insertions(+), 30 deletions(-) diff --git a/dist/titanium/pubnub.js b/dist/titanium/pubnub.js index 330f484ca..8fdd45f87 100644 --- a/dist/titanium/pubnub.js +++ b/dist/titanium/pubnub.js @@ -1407,9 +1407,6 @@ return /******/ (function(modules) { // webpackBootstrap this._pendingChannelSubscriptions = []; this._pendingChannelGroupSubscriptions = []; - this._pendingHeartbeatChannels = []; - this._pendingHeartbeatChannelGroups = []; - this._currentTimetoken = 0; this._lastTimetoken = 0; this._storedTimetoken = null; @@ -1459,12 +1456,10 @@ return /******/ (function(modules) { // webpackBootstrap if (connected) { channels.forEach(function (channel) { _this2._heartbeatChannels[channel] = { state: {} }; - _this2._pendingHeartbeatChannels.push(channel); }); channelGroups.forEach(function (channelGroup) { _this2._heartbeatChannelGroups[channelGroup] = { state: {} }; - _this2._pendingHeartbeatChannelGroups.push(channelGroup); }); } else { channels.forEach(function (channel) { diff --git a/dist/titanium/pubnub.min.js b/dist/titanium/pubnub.min.js index a425078bc..5b7c9f03d 100644 --- a/dist/titanium/pubnub.min.js +++ b/dist/titanium/pubnub.min.js @@ -1,3 +1,3 @@ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.PubNub=t():e.PubNub=t()}(this,function(){return function(e){function t(r){if(n[r])return n[r].exports;var i=n[r]={exports:{},id:r,loaded:!1};return e[r].call(i.exports,i,i.exports,t),i.loaded=!0,i.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var a=n(1),u=r(a),c=n(39),l=r(c),f=n(40),h=r(f),d=n(41),p=(n(5),function(e){function t(e){return i(this,t),e.db=new h.default,e.sdkFamily="TitaniumSDK",e.networking=new l.default({del:d.del,get:d.get,post:d.post}),o(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e))}return s(t,e),t}(u.default));t.default=p,e.exports=t.default},function(e,t,n){"use strict";function r(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}function i(e){return e&&e.__esModule?e:{default:e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var s=function(){function e(e,t){for(var n=0;n>>2]|=(n[i>>>2]>>>24-i%4*8&255)<<24-(r+i)%4*8;else if(65535>>2]=n[i>>>2];else t.push.apply(t,n);return this.sigBytes+=e,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=o.clone.call(this);return e.words=this.words.slice(0),e},random:function(t){for(var n=[],r=0;r>>2]>>>24-r%4*8&255;n.push((i>>>4).toString(16)),n.push((15&i).toString(16))}return n.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 s.init(n,t/2)}},c=a.Latin1={stringify:function(e){var t=e.words;e=e.sigBytes;for(var n=[],r=0;r>>2]>>>24-r%4*8&255));return n.join("")},parse:function(e){for(var t=e.length,n=[],r=0;r>>2]|=(255&e.charCodeAt(r))<<24-r%4*8;return new s.init(n,t)}},l=a.Utf8={stringify:function(e){try{return decodeURIComponent(escape(c.stringify(e)))}catch(e){throw Error("Malformed UTF-8 data")}},parse:function(e){return c.parse(unescape(encodeURIComponent(e)))}},f=r.BufferedBlockAlgorithm=o.extend({reset:function(){this._data=new s.init,this._nDataBytes=0},_append:function(e){"string"==typeof e&&(e=l.parse(e)),this._data.concat(e),this._nDataBytes+=e.sigBytes},_process:function(t){var n=this._data,r=n.words,i=n.sigBytes,o=this.blockSize,a=i/(4*o),a=t?e.ceil(a):e.max((0|a)-this._minBufferSize,0);if(t=a*o,i=e.min(4*t,i),t){for(var u=0;ul;){var f;e:{f=c;for(var h=e.sqrt(f),d=2;d<=h;d++)if(!(f%d)){f=!1;break e}f=!0}f&&(8>l&&(s[l]=u(e.pow(c,.5))),a[l]=u(e.pow(c,1/3)),l++),c++}var p=[],r=r.SHA256=o.extend({_doReset:function(){this._hash=new i.init(s.slice(0))},_doProcessBlock:function(e,t){for(var n=this._hash.words,r=n[0],i=n[1],o=n[2],s=n[3],u=n[4],c=n[5],l=n[6],f=n[7],h=0;64>h;h++){if(16>h)p[h]=0|e[t+h];else{var d=p[h-15],g=p[h-2];p[h]=((d<<25|d>>>7)^(d<<14|d>>>18)^d>>>3)+p[h-7]+((g<<15|g>>>17)^(g<<13|g>>>19)^g>>>10)+p[h-16]}d=f+((u<<26|u>>>6)^(u<<21|u>>>11)^(u<<7|u>>>25))+(u&c^~u&l)+a[h]+p[h],g=((r<<30|r>>>2)^(r<<19|r>>>13)^(r<<10|r>>>22))+(r&i^r&o^i&o),f=l,l=c,c=u,u=s+d|0,s=o,o=i,i=r,r=d+g|0}n[0]=n[0]+r|0,n[1]=n[1]+i|0,n[2]=n[2]+o|0,n[3]=n[3]+s|0,n[4]=n[4]+u|0,n[5]=n[5]+c|0,n[6]=n[6]+l|0,n[7]=n[7]+f|0},_doFinalize:function(){var t=this._data,n=t.words,r=8*this._nDataBytes,i=8*t.sigBytes;return n[i>>>5]|=128<<24-i%32,n[14+(i+64>>>9<<4)]=e.floor(r/4294967296),n[15+(i+64>>>9<<4)]=r,t.sigBytes=4*n.length,this._process(),this._hash},clone:function(){var e=o.clone.call(this);return e._hash=this._hash.clone(),e}});t.SHA256=o._createHelper(r),t.HmacSHA256=o._createHmacHelper(r)}(Math),function(){var e=n,t=e.enc.Utf8;e.algo.HMAC=e.lib.Base.extend({init:function(e,n){e=this._hasher=new e.init,"string"==typeof n&&(n=t.parse(n));var r=e.blockSize,i=4*r;n.sigBytes>i&&(n=e.finalize(n)),n.clamp();for(var o=this._oKey=n.clone(),s=this._iKey=n.clone(),a=o.words,u=s.words,c=0;c>>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;4>s&&i+.75*s>>6*(3-s)&63));if(t=r.charAt(64))for(;e.length%4;)e.push(t);return e.join("")},parse:function(e){var n=e.length,r=this._map,i=r.charAt(64);i&&-1!=(i=e.indexOf(i))&&(n=i);for(var i=[],o=0,s=0;s>>6-s%4*2;i[o>>>2]|=(a|u)<<24-o%4*8,o++}return t.create(i,o)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="}}(),function(e){function t(e,t,n,r,i,o,s){return((e=e+(t&n|~t&r)+i+s)<>>32-o)+t}function r(e,t,n,r,i,o,s){return((e=e+(t&r|n&~r)+i+s)<>>32-o)+t}function i(e,t,n,r,i,o,s){return((e=e+(t^n^r)+i+s)<>>32-o)+t}function o(e,t,n,r,i,o,s){return((e=e+(n^(t|~r))+i+s)<>>32-o)+t}for(var s=n,a=s.lib,u=a.WordArray,c=a.Hasher,a=s.algo,l=[],f=0;64>f;f++)l[f]=4294967296*e.abs(e.sin(f+1))|0;a=a.MD5=c.extend({_doReset:function(){this._hash=new u.init([1732584193,4023233417,2562383102,271733878])},_doProcessBlock:function(e,n){for(var s=0;16>s;s++){var a=n+s,u=e[a];e[a]=16711935&(u<<8|u>>>24)|4278255360&(u<<24|u>>>8)}var s=this._hash.words,a=e[n+0],u=e[n+1],c=e[n+2],f=e[n+3],h=e[n+4],d=e[n+5],p=e[n+6],g=e[n+7],y=e[n+8],b=e[n+9],v=e[n+10],_=e[n+11],m=e[n+12],k=e[n+13],P=e[n+14],S=e[n+15],O=s[0],C=s[1],M=s[2],T=s[3],O=t(O,C,M,T,a,7,l[0]),T=t(T,O,C,M,u,12,l[1]),M=t(M,T,O,C,c,17,l[2]),C=t(C,M,T,O,f,22,l[3]),O=t(O,C,M,T,h,7,l[4]),T=t(T,O,C,M,d,12,l[5]),M=t(M,T,O,C,p,17,l[6]),C=t(C,M,T,O,g,22,l[7]),O=t(O,C,M,T,y,7,l[8]),T=t(T,O,C,M,b,12,l[9]),M=t(M,T,O,C,v,17,l[10]),C=t(C,M,T,O,_,22,l[11]),O=t(O,C,M,T,m,7,l[12]),T=t(T,O,C,M,k,12,l[13]),M=t(M,T,O,C,P,17,l[14]),C=t(C,M,T,O,S,22,l[15]),O=r(O,C,M,T,u,5,l[16]),T=r(T,O,C,M,p,9,l[17]),M=r(M,T,O,C,_,14,l[18]),C=r(C,M,T,O,a,20,l[19]),O=r(O,C,M,T,d,5,l[20]),T=r(T,O,C,M,v,9,l[21]),M=r(M,T,O,C,S,14,l[22]),C=r(C,M,T,O,h,20,l[23]),O=r(O,C,M,T,b,5,l[24]),T=r(T,O,C,M,P,9,l[25]),M=r(M,T,O,C,f,14,l[26]),C=r(C,M,T,O,y,20,l[27]),O=r(O,C,M,T,k,5,l[28]),T=r(T,O,C,M,c,9,l[29]),M=r(M,T,O,C,g,14,l[30]),C=r(C,M,T,O,m,20,l[31]),O=i(O,C,M,T,d,4,l[32]),T=i(T,O,C,M,y,11,l[33]),M=i(M,T,O,C,_,16,l[34]),C=i(C,M,T,O,P,23,l[35]),O=i(O,C,M,T,u,4,l[36]),T=i(T,O,C,M,h,11,l[37]),M=i(M,T,O,C,g,16,l[38]),C=i(C,M,T,O,v,23,l[39]),O=i(O,C,M,T,k,4,l[40]),T=i(T,O,C,M,a,11,l[41]),M=i(M,T,O,C,f,16,l[42]),C=i(C,M,T,O,p,23,l[43]),O=i(O,C,M,T,b,4,l[44]),T=i(T,O,C,M,m,11,l[45]),M=i(M,T,O,C,S,16,l[46]),C=i(C,M,T,O,c,23,l[47]),O=o(O,C,M,T,a,6,l[48]),T=o(T,O,C,M,g,10,l[49]),M=o(M,T,O,C,P,15,l[50]),C=o(C,M,T,O,d,21,l[51]),O=o(O,C,M,T,m,6,l[52]),T=o(T,O,C,M,f,10,l[53]),M=o(M,T,O,C,v,15,l[54]),C=o(C,M,T,O,u,21,l[55]),O=o(O,C,M,T,y,6,l[56]),T=o(T,O,C,M,S,10,l[57]),M=o(M,T,O,C,p,15,l[58]),C=o(C,M,T,O,k,21,l[59]),O=o(O,C,M,T,h,6,l[60]),T=o(T,O,C,M,_,10,l[61]),M=o(M,T,O,C,c,15,l[62]),C=o(C,M,T,O,b,21,l[63]);s[0]=s[0]+O|0,s[1]=s[1]+C|0,s[2]=s[2]+M|0,s[3]=s[3]+T|0},_doFinalize:function(){var t=this._data,n=t.words,r=8*this._nDataBytes,i=8*t.sigBytes;n[i>>>5]|=128<<24-i%32;var o=e.floor(r/4294967296);for(n[15+(i+64>>>9<<4)]=16711935&(o<<8|o>>>24)|4278255360&(o<<24|o>>>8),n[14+(i+64>>>9<<4)]=16711935&(r<<8|r>>>24)|4278255360&(r<<24|r>>>8),t.sigBytes=4*(n.length+1),this._process(),t=this._hash,n=t.words,r=0;4>r;r++)i=n[r],n[r]=16711935&(i<<8|i>>>24)|4278255360&(i<<24|i>>>8);return t},clone:function(){var e=c.clone.call(this);return e._hash=this._hash.clone(),e}}),s.MD5=c._createHelper(a),s.HmacMD5=c._createHmacHelper(a)}(Math),function(){var e=n,t=e.lib,r=t.Base,i=t.WordArray,t=e.algo,o=t.EvpKDF=r.extend({cfg:r.extend({keySize:4,hasher:t.MD5,iterations:1}),init:function(e){this.cfg=this.cfg.extend(e)},compute:function(e,t){for(var n=this.cfg,r=n.hasher.create(),o=i.create(),s=o.words,a=n.keySize,n=n.iterations;s.length>>2]}},r.BlockCipher=c.extend({cfg:c.cfg.extend({mode:l,padding:h}),reset:function(){c.reset.call(this);var e=this.cfg,t=e.iv,e=e.mode;if(this._xformMode==this._ENC_XFORM_MODE)var n=e.createEncryptor;else n=e.createDecryptor,this._minBufferSize=1;this._mode=n.call(e,this,t&&t.words)},_doProcessBlock:function(e,t){this._mode.processBlock(e,t)},_doFinalize:function(){var e=this.cfg.padding;if(this._xformMode==this._ENC_XFORM_MODE){e.pad(this._data,this.blockSize);var t=this._process(!0)}else t=this._process(!0),e.unpad(t);return t},blockSize:4});var d=r.CipherParams=i.extend({init:function(e){this.mixIn(e)},toString:function(e){return(e||this.formatter).stringify(this)}}),l=(t.format={}).OpenSSL={stringify:function(e){var t=e.ciphertext;return e=e.salt,(e?o.create([1398893684,1701076831]).concat(e).concat(t):t).toString(a)},parse:function(e){e=a.parse(e);var t=e.words;if(1398893684==t[0]&&1701076831==t[1]){var n=o.create(t.slice(2,4));t.splice(0,4),e.sigBytes-=16}return d.create({ciphertext:e,salt:n})}},p=r.SerializableCipher=i.extend({cfg:i.extend({format:l}),encrypt:function(e,t,n,r){r=this.cfg.extend(r);var i=e.createEncryptor(n,r);return t=i.finalize(t),i=i.cfg,d.create({ciphertext:t,key:n,iv:i.iv,algorithm:e,mode:i.mode,padding:i.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}}),t=(t.kdf={}).OpenSSL={execute:function(e,t,n,r){return r||(r=o.random(8)),e=u.create({keySize:t+n}).compute(e,r),n=o.create(e.words.slice(t),4*n),e.sigBytes=4*t,d.create({key:e,iv:n,salt:r})}},g=r.PasswordBasedCipher=p.extend({cfg:p.cfg.extend({kdf:t}),encrypt:function(e,t,n,r){return r=this.cfg.extend(r),n=r.kdf.execute(n,e.keySize,e.ivSize),r.iv=n.iv,e=p.encrypt.call(this,e,t,n.key,r),e.mixIn(n),e},decrypt:function(e,t,n,r){return r=this.cfg.extend(r),t=this._parse(t,r.format),n=r.kdf.execute(n,e.keySize,e.ivSize,t.salt),r.iv=n.iv,p.decrypt.call(this,e,t,n.key,r)}})}(),function(){for(var e=n,t=e.lib.BlockCipher,r=e.algo,i=[],o=[],s=[],a=[],u=[],c=[],l=[],f=[],h=[],d=[],p=[],g=0;256>g;g++)p[g]=128>g?g<<1:g<<1^283;for(var y=0,b=0,g=0;256>g;g++){var v=b^b<<1^b<<2^b<<3^b<<4,v=v>>>8^255&v^99;i[y]=v,o[v]=y;var _=p[y],m=p[_],k=p[m],P=257*p[v]^16843008*v;s[y]=P<<24|P>>>8,a[y]=P<<16|P>>>16,u[y]=P<<8|P>>>24,c[y]=P,P=16843009*k^65537*m^257*_^16843008*y,l[v]=P<<24|P>>>8,f[v]=P<<16|P>>>16,h[v]=P<<8|P>>>24,d[v]=P,y?(y=_^p[p[p[k^_]]],b^=p[p[b]]):y=b=1}var S=[0,1,2,4,8,16,32,64,128,27,54],r=r.AES=t.extend({_doReset:function(){for(var e=this._key,t=e.words,n=e.sigBytes/4,e=4*((this._nRounds=n+6)+1),r=this._keySchedule=[],o=0;o>>24]<<24|i[s>>>16&255]<<16|i[s>>>8&255]<<8|i[255&s]):(s=s<<8|s>>>24,s=i[s>>>24]<<24|i[s>>>16&255]<<16|i[s>>>8&255]<<8|i[255&s],s^=S[o/n|0]<<24),r[o]=r[o-n]^s}for(t=this._invKeySchedule=[],n=0;nn||4>=o?s:l[i[s>>>24]]^f[i[s>>>16&255]]^h[i[s>>>8&255]]^d[i[255&s]]},encryptBlock:function(e,t){this._doCryptBlock(e,t,this._keySchedule,s,a,u,c,i)},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,h,d,o),n=e[t+1],e[t+1]=e[t+3],e[t+3]=n},_doCryptBlock:function(e,t,n,r,i,o,s,a){for(var u=this._nRounds,c=e[t]^n[0],l=e[t+1]^n[1],f=e[t+2]^n[2],h=e[t+3]^n[3],d=4,p=1;p>>24]^i[l>>>16&255]^o[f>>>8&255]^s[255&h]^n[d++],y=r[l>>>24]^i[f>>>16&255]^o[h>>>8&255]^s[255&c]^n[d++],b=r[f>>>24]^i[h>>>16&255]^o[c>>>8&255]^s[255&l]^n[d++],h=r[h>>>24]^i[c>>>16&255]^o[l>>>8&255]^s[255&f]^n[d++],c=g,l=y,f=b;g=(a[c>>>24]<<24|a[l>>>16&255]<<16|a[f>>>8&255]<<8|a[255&h])^n[d++],y=(a[l>>>24]<<24|a[f>>>16&255]<<16|a[h>>>8&255]<<8|a[255&c])^n[d++],b=(a[f>>>24]<<24|a[h>>>16&255]<<16|a[c>>>8&255]<<8|a[255&l])^n[d++],h=(a[h>>>24]<<24|a[c>>>16&255]<<16|a[l>>>8&255]<<8|a[255&f])^n[d++],e[t]=g,e[t+1]=y,e[t+2]=b,e[t+3]=h},keySize:8});e.AES=t._createHelper(r)}(),n.mode.ECB=function(){var e=n.lib.BlockCipherMode.extend();return e.Encryptor=e.extend({processBlock:function(e,t){this._cipher.encryptBlock(e,t)}}),e.Decryptor=e.extend({processBlock:function(e,t){this._cipher.decryptBlock(e,t)}}),e}(),e.exports=n},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e,t){for(var n=0;n=s){var u={};u.category=y.default.PNRequestMessageCountExceededCategory,u.operation=e.operation,this._listenerManager.announceStatus(u)}i.forEach(function(e){var t=e.channel,r=e.subscriptionMatch,i=e.publishMetaData;if(t===r&&(r=null),a){if(n._dedupingManager.isDuplicate(e))return;n._dedupingManager.addEntry(e)}if(p.default.endsWith(e.channel,"-pnpres")){var o={};o.channel=null,o.subscription=null,o.actualChannel=null!=r?t:null,o.subscribedChannel=null!=r?r:t,t&&(o.channel=t.substring(0,t.lastIndexOf("-pnpres"))),r&&(o.subscription=r.substring(0,r.lastIndexOf("-pnpres"))),o.action=e.payload.action,o.state=e.payload.data,o.timetoken=i.publishTimetoken,o.occupancy=e.payload.occupancy,o.uuid=e.payload.uuid,o.timestamp=e.payload.timestamp,e.payload.join&&(o.join=e.payload.join),e.payload.leave&&(o.leave=e.payload.leave),e.payload.timeout&&(o.timeout=e.payload.timeout),n._listenerManager.announcePresence(o)}else{var s={};s.channel=null,s.subscription=null,s.actualChannel=null!=r?t:null,s.subscribedChannel=null!=r?r:t,s.channel=t,s.subscription=r,s.timetoken=i.publishTimetoken,s.publisher=e.issuingClientId,e.userMetadata&&(s.userMetadata=e.userMetadata),n._config.cipherKey?s.message=n._crypto.decrypt(e.payload):s.message=e.payload,n._listenerManager.announceMessage(s)}}),this._region=t.metadata.region,this._startSubscribeLoop()}},{key:"_stopSubscribeLoop",value:function(){this._subscribeCall&&("function"==typeof this._subscribeCall.abort&&this._subscribeCall.abort(),this._subscribeCall=null)}}]),e}();t.default=b,e.exports=t.default},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n=this._config.maximumCacheSize&&this.hashHistory.shift(),this.hashHistory.push(this.getKey(e))}},{key:"clearHistory",value:function(){this.hashHistory=[]}}]),e}();t.default=a,e.exports=t.default},function(e,t){"use strict";function n(e){var t=[];return Object.keys(e).forEach(function(e){return t.push(e)}),t}function r(e){return encodeURIComponent(e).replace(/[!~*'()]/g,function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()})}function i(e){return n(e).sort()}function o(e){return i(e).map(function(t){return t+"="+r(e[t])}).join("&")}function s(e,t){return-1!==e.indexOf(t,this.length-t.length)}function a(){var e=void 0,t=void 0;return{promise:new Promise(function(n,r){e=n,t=r}),reject:t,fulfill:e}}e.exports={signPamFromParams:o,endsWith:s,createPromise:a,encodeString:r}},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function a(e,t){return e.type=t,e.error=!0,e}function u(e){return a({message:e},"validationError")}function c(e,t,n){return e.usePost&&e.usePost(t,n)?e.postURL(t,n):e.getURL(t,n)}function l(e){if(e.sdkName)return e.sdkName;var t="PubNub-JS-"+e.sdkFamily;return e.partnerId&&(t+="-"+e.partnerId),t+="/"+e.getVersion()}function f(e,t,n){var r=e.config,i=e.crypto;n.timestamp=Math.floor((new Date).getTime()/1e3);var o=r.subscribeKey+"\n"+r.publishKey+"\n"+t+"\n";o+=g.default.signPamFromParams(n);var s=i.HMACSHA256(o);s=s.replace(/\+/g,"-"),s=s.replace(/\//g,"_"),n.signature=s}Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){var n=e.networking,r=e.config,i=null,o=null,s={};t.getOperation()===v.default.PNTimeOperation||t.getOperation()===v.default.PNChannelGroupsOperation?i=arguments.length<=2?void 0:arguments[2]:(s=arguments.length<=2?void 0:arguments[2],i=arguments.length<=3?void 0:arguments[3]),"undefined"==typeof Promise||i||(o=g.default.createPromise());var a=t.validateParams(e,s);if(!a){var h=t.prepareParams(e,s),p=c(t,e,s),y=void 0,b={url:p,operation:t.getOperation(),timeout:t.getRequestTimeout(e)};h.uuid=r.UUID,h.pnsdk=l(r),r.useInstanceId&&(h.instanceid=r.instanceId),r.useRequestId&&(h.requestid=d.default.createUUID()),t.isAuthSupported()&&r.getAuthKey()&&(h.auth=r.getAuthKey()),r.secretKey&&f(e,p,h);var m=function(n,r){if(n.error)return void(i?i(n):o&&o.reject(new _("PubNub call failed, check status for details",n)));var a=t.handleResponse(e,r,s);i?i(n,a):o&&o.fulfill(a)};if(t.usePost&&t.usePost(e,s)){var k=t.postPayload(e,s);y=n.POST(h,k,b,m)}else y=t.useDelete&&t.useDelete()?n.DELETE(h,b,m):n.GET(h,b,m);return t.getOperation()===v.default.PNSubscribeOperation?y:o?o.promise:void 0}return i?i(u(a)):o?(o.reject(new _("Validation failed, check status for details",u(a))),o.promise):void 0};var h=n(3),d=r(h),p=(n(5),n(15)),g=r(p),y=n(2),b=(r(y),n(13)),v=r(b),_=function(e){function t(e,n){i(this,t);var r=o(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return r.name=r.constructor.name,r.status=n,r.message=e,r}return s(t,e),t}(Error);e.exports=t.default},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return h.default.PNAddChannelsToGroupOperation}function o(e,t){var n=t.channels,r=t.channelGroup,i=e.config;return r?n&&0!==n.length?i.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channels":"Missing Channel Group"}function s(e,t){var n=t.channelGroup;return"/v1/channel-registration/sub-key/"+e.config.subscribeKey+"/channel-group/"+p.default.encodeString(n)}function a(e){return e.config.getTransactionTimeout()}function u(){return!0}function c(e,t){var n=t.channels;return{add:(void 0===n?[]:n).join(",")}}function l(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=o,t.getURL=s,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var f=(n(5),n(13)),h=r(f),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return h.default.PNRemoveChannelsFromGroupOperation}function o(e,t){var n=t.channels,r=t.channelGroup,i=e.config;return r?n&&0!==n.length?i.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channels":"Missing Channel Group"}function s(e,t){var n=t.channelGroup;return"/v1/channel-registration/sub-key/"+e.config.subscribeKey+"/channel-group/"+p.default.encodeString(n)}function a(e){return e.config.getTransactionTimeout()}function u(){return!0}function c(e,t){var n=t.channels;return{remove:(void 0===n?[]:n).join(",")}}function l(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=o,t.getURL=s,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var f=(n(5),n(13)),h=r(f),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return h.default.PNRemoveGroupOperation}function o(e,t){var n=t.channelGroup,r=e.config;return n?r.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channel Group"}function s(e,t){var n=t.channelGroup;return"/v1/channel-registration/sub-key/"+e.config.subscribeKey+"/channel-group/"+p.default.encodeString(n)+"/remove"}function a(){return!0}function u(e){return e.config.getTransactionTimeout()}function c(){return{}}function l(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=o,t.getURL=s,t.isAuthSupported=a,t.getRequestTimeout=u,t.prepareParams=c,t.handleResponse=l;var f=(n(5),n(13)),h=r(f),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(){return f.default.PNChannelGroupsOperation}function i(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function o(e){return"/v1/channel-registration/sub-key/"+e.config.subscribeKey+"/channel-group"}function s(e){return e.config.getTransactionTimeout()}function a(){return!0}function u(){return{}}function c(e,t){return{groups:t.payload.groups}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=o,t.getRequestTimeout=s,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),f=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return h.default.PNChannelsForGroupOperation}function o(e,t){var n=t.channelGroup,r=e.config;return n?r.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channel Group"}function s(e,t){var n=t.channelGroup;return"/v1/channel-registration/sub-key/"+e.config.subscribeKey+"/channel-group/"+p.default.encodeString(n)}function a(e){return e.config.getTransactionTimeout()}function u(){return!0}function c(){return{}}function l(e,t){return{channels:t.payload.channels}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=o,t.getURL=s,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var f=(n(5),n(13)),h=r(f),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(){return f.default.PNPushNotificationEnabledChannelsOperation}function i(e,t){var n=t.device,r=t.pushGateway,i=t.channels,o=e.config;return n?r?i&&0!==i.length?o.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channels":"Missing GW Type (pushGateway: gcm or apns)":"Missing Device ID (device)"}function o(e,t){var n=t.device;return"/v1/push/sub-key/"+e.config.subscribeKey+"/devices/"+n}function s(e){return e.config.getTransactionTimeout()}function a(){return!0}function u(e,t){var n=t.pushGateway,r=t.channels;return{type:n,add:(void 0===r?[]:r).join(",")}}function c(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=o,t.getRequestTimeout=s,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),f=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(){return f.default.PNPushNotificationEnabledChannelsOperation}function i(e,t){var n=t.device,r=t.pushGateway,i=t.channels,o=e.config;return n?r?i&&0!==i.length?o.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channels":"Missing GW Type (pushGateway: gcm or apns)":"Missing Device ID (device)"}function o(e,t){var n=t.device;return"/v1/push/sub-key/"+e.config.subscribeKey+"/devices/"+n}function s(e){return e.config.getTransactionTimeout()}function a(){return!0}function u(e,t){var n=t.pushGateway,r=t.channels;return{type:n,remove:(void 0===r?[]:r).join(",")}}function c(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=o,t.getRequestTimeout=s,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),f=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(){return f.default.PNPushNotificationEnabledChannelsOperation}function i(e,t){var n=t.device,r=t.pushGateway,i=e.config;return n?r?i.subscribeKey?void 0:"Missing Subscribe Key":"Missing GW Type (pushGateway: gcm or apns)":"Missing Device ID (device)"}function o(e,t){var n=t.device;return"/v1/push/sub-key/"+e.config.subscribeKey+"/devices/"+n}function s(e){return e.config.getTransactionTimeout()}function a(){return!0}function u(e,t){return{type:t.pushGateway}}function c(e,t){return{channels:t}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=o,t.getRequestTimeout=s,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),f=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(){return f.default.PNRemoveAllPushNotificationsOperation}function i(e,t){var n=t.device,r=t.pushGateway,i=e.config;return n?r?i.subscribeKey?void 0:"Missing Subscribe Key":"Missing GW Type (pushGateway: gcm or apns)":"Missing Device ID (device)"}function o(e,t){var n=t.device;return"/v1/push/sub-key/"+e.config.subscribeKey+"/devices/"+n+"/remove"}function s(e){return e.config.getTransactionTimeout()}function a(){return!0}function u(e,t){return{type:t.pushGateway}}function c(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=o,t.getRequestTimeout=s,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),f=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return h.default.PNUnsubscribeOperation}function o(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function s(e,t){var n=e.config,r=t.channels,i=void 0===r?[]:r,o=i.length>0?i.join(","):",";return"/v2/presence/sub-key/"+n.subscribeKey+"/channel/"+p.default.encodeString(o)+"/leave"}function a(e){return e.config.getTransactionTimeout()}function u(){return!0}function c(e,t){var n=t.channelGroups,r=void 0===n?[]:n,i={};return r.length>0&&(i["channel-group"]=r.join(",")),i}function l(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=o,t.getURL=s,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var f=(n(5),n(13)),h=r(f),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(){return f.default.PNWhereNowOperation}function i(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function o(e,t){var n=e.config,r=t.uuid,i=void 0===r?n.UUID:r;return"/v2/presence/sub-key/"+n.subscribeKey+"/uuid/"+i}function s(e){return e.config.getTransactionTimeout()}function a(){return!0}function u(){return{}}function c(e,t){return t.payload?{channels:t.payload.channels}:{channels:[]}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=o,t.getRequestTimeout=s,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),f=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return h.default.PNHeartbeatOperation}function o(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function s(e,t){var n=e.config,r=t.channels,i=void 0===r?[]:r,o=i.length>0?i.join(","):",";return"/v2/presence/sub-key/"+n.subscribeKey+"/channel/"+p.default.encodeString(o)+"/heartbeat"}function a(){return!0}function u(e){return e.config.getTransactionTimeout()}function c(e,t){var n=t.channelGroups,r=void 0===n?[]:n,i=t.state,o=void 0===i?{}:i,s=e.config,a={};return r.length>0&&(a["channel-group"]=r.join(",")),a.state=JSON.stringify(o),a.heartbeat=s.getPresenceTimeout(),a}function l(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=o,t.getURL=s,t.isAuthSupported=a,t.getRequestTimeout=u,t.prepareParams=c,t.handleResponse=l;var f=(n(5),n(13)),h=r(f),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return h.default.PNGetStateOperation}function o(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function s(e,t){var n=e.config,r=t.uuid,i=void 0===r?n.UUID:r,o=t.channels,s=void 0===o?[]:o,a=s.length>0?s.join(","):",";return"/v2/presence/sub-key/"+n.subscribeKey+"/channel/"+p.default.encodeString(a)+"/uuid/"+i}function a(e){return e.config.getTransactionTimeout()}function u(){return!0}function c(e,t){var n=t.channelGroups,r=void 0===n?[]:n,i={};return r.length>0&&(i["channel-group"]=r.join(",")),i}function l(e,t,n){var r=n.channels,i=void 0===r?[]:r,o=n.channelGroups,s=void 0===o?[]:o,a={};return 1===i.length&&0===s.length?a[i[0]]=t.payload:a=t.payload,{channels:a}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=o,t.getURL=s,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var f=(n(5),n(13)),h=r(f),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return h.default.PNSetStateOperation}function o(e,t){var n=e.config,r=t.state,i=t.channels,o=void 0===i?[]:i,s=t.channelGroups,a=void 0===s?[]:s;return r?n.subscribeKey?0===o.length&&0===a.length?"Please provide a list of channels and/or channel-groups":void 0:"Missing Subscribe Key":"Missing State"}function s(e,t){var n=e.config,r=t.channels,i=void 0===r?[]:r,o=i.length>0?i.join(","):",";return"/v2/presence/sub-key/"+n.subscribeKey+"/channel/"+p.default.encodeString(o)+"/uuid/"+n.UUID+"/data"}function a(e){return e.config.getTransactionTimeout()}function u(){return!0}function c(e,t){var n=t.state,r=t.channelGroups,i=void 0===r?[]:r,o={};return o.state=JSON.stringify(n),i.length>0&&(o["channel-group"]=i.join(",")),o}function l(e,t){return{state:t.payload}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=o,t.getURL=s,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var f=(n(5),n(13)),h=r(f),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return h.default.PNHereNowOperation}function o(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function s(e,t){var n=e.config,r=t.channels,i=void 0===r?[]:r,o=t.channelGroups,s=void 0===o?[]:o,a="/v2/presence/sub-key/"+n.subscribeKey;if(i.length>0||s.length>0){var u=i.length>0?i.join(","):",";a+="/channel/"+p.default.encodeString(u)}return a}function a(e){return e.config.getTransactionTimeout()}function u(){return!0}function c(e,t){var n=t.channelGroups,r=void 0===n?[]:n,i=t.includeUUIDs,o=void 0===i||i,s=t.includeState,a=void 0!==s&&s,u={};return o||(u.disable_uuids=1),a&&(u.state=1),r.length>0&&(u["channel-group"]=r.join(",")),u}function l(e,t,n){var r=n.channels,i=void 0===r?[]:r,o=n.channelGroups,s=void 0===o?[]:o,a=n.includeUUIDs,u=void 0===a||a,c=n.includeState,l=void 0!==c&&c;return i.length>1||s.length>0||0===s.length&&0===i.length?function(){var e={};return e.totalChannels=t.payload.total_channels,e.totalOccupancy=t.payload.total_occupancy,e.channels={},Object.keys(t.payload.channels).forEach(function(n){var r=t.payload.channels[n],i=[];return e.channels[n]={occupants:i,name:n,occupancy:r.occupancy},u&&r.uuids.forEach(function(e){l?i.push({state:e.state,uuid:e.uuid}):i.push({state:null,uuid:e})}),e}),e}():function(){var e={},n=[];return e.totalChannels=1,e.totalOccupancy=t.occupancy,e.channels={},e.channels[i[0]]={occupants:n,name:i[0],occupancy:t.occupancy},u&&t.uuids&&t.uuids.forEach(function(e){l?n.push({state:e.state,uuid:e.uuid}):n.push({state:null,uuid:e})}),e}()}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=o,t.getURL=s,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var f=(n(5),n(13)),h=r(f),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(){return f.default.PNAccessManagerAudit}function i(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function o(e){return"/v2/auth/audit/sub-key/"+e.config.subscribeKey}function s(e){return e.config.getTransactionTimeout()}function a(){return!1}function u(e,t){var n=t.channel,r=t.channelGroup,i=t.authKeys,o=void 0===i?[]:i,s={};return n&&(s.channel=n),r&&(s["channel-group"]=r),o.length>0&&(s.auth=o.join(",")),s}function c(e,t){return t.payload}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=o,t.getRequestTimeout=s,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),f=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(){return f.default.PNAccessManagerGrant}function i(e){var t=e.config;return t.subscribeKey?t.publishKey?t.secretKey?void 0:"Missing Secret Key":"Missing Publish Key":"Missing Subscribe Key"}function o(e){return"/v2/auth/grant/sub-key/"+e.config.subscribeKey}function s(e){return e.config.getTransactionTimeout()}function a(){return!1}function u(e,t){var n=t.channels,r=void 0===n?[]:n,i=t.channelGroups,o=void 0===i?[]:i,s=t.ttl,a=t.read,u=void 0!==a&&a,c=t.write,l=void 0!==c&&c,f=t.manage,h=void 0!==f&&f,d=t.authKeys,p=void 0===d?[]:d,g={};return g.r=u?"1":"0",g.w=l?"1":"0",g.m=h?"1":"0",r.length>0&&(g.channel=r.join(",")),o.length>0&&(g["channel-group"]=o.join(",")),p.length>0&&(g.auth=p.join(",")),(s||0===s)&&(g.ttl=s),g}function c(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=o,t.getRequestTimeout=s,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),f=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){var n=e.crypto,r=e.config,i=JSON.stringify(t) -;return r.cipherKey&&(i=n.encrypt(i),i=JSON.stringify(i)),i}function o(){return b.default.PNPublishOperation}function s(e,t){var n=e.config,r=t.message;return t.channel?r?n.subscribeKey?void 0:"Missing Subscribe Key":"Missing Message":"Missing Channel"}function a(e,t){var n=t.sendByPost;return void 0!==n&&n}function u(e,t){var n=e.config,r=t.channel,o=t.message,s=i(e,o);return"/publish/"+n.publishKey+"/"+n.subscribeKey+"/0/"+_.default.encodeString(r)+"/0/"+_.default.encodeString(s)}function c(e,t){var n=e.config,r=t.channel;return"/publish/"+n.publishKey+"/"+n.subscribeKey+"/0/"+_.default.encodeString(r)+"/0"}function l(e){return e.config.getTransactionTimeout()}function f(){return!0}function h(e,t){return i(e,t.message)}function d(e,t){var n=t.meta,r=t.replicate,i=void 0===r||r,o=t.storeInHistory,s=t.ttl,a={};return null!=o&&(a.store=o?"1":"0"),s&&(a.ttl=s),!1===i&&(a.norep="true"),n&&"object"===(void 0===n?"undefined":g(n))&&(a.meta=JSON.stringify(n)),a}function p(e,t){return{timetoken:t[2]}}Object.defineProperty(t,"__esModule",{value:!0});var g="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};t.getOperation=o,t.validateParams=s,t.usePost=a,t.getURL=u,t.postURL=c,t.getRequestTimeout=l,t.isAuthSupported=f,t.postPayload=h,t.prepareParams=d,t.handleResponse=p;var y=(n(5),n(13)),b=r(y),v=n(15),_=r(v)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){var n=e.config,r=e.crypto;if(!n.cipherKey)return t;try{return r.decrypt(t)}catch(e){return t}}function o(){return d.default.PNHistoryOperation}function s(e,t){var n=t.channel,r=e.config;return n?r.subscribeKey?void 0:"Missing Subscribe Key":"Missing channel"}function a(e,t){var n=t.channel;return"/v2/history/sub-key/"+e.config.subscribeKey+"/channel/"+g.default.encodeString(n)}function u(e){return e.config.getTransactionTimeout()}function c(){return!0}function l(e,t){var n=t.start,r=t.end,i=t.reverse,o=t.count,s=void 0===o?100:o,a=t.stringifiedTimeToken,u=void 0!==a&&a,c={include_token:"true"};return c.count=s,n&&(c.start=n),r&&(c.end=r),u&&(c.string_message_token="true"),null!=i&&(c.reverse=i.toString()),c}function f(e,t){var n={messages:[],startTimeToken:t[1],endTimeToken:t[2]};return t[0].forEach(function(t){var r={timetoken:t.timetoken,entry:i(e,t.message)};n.messages.push(r)}),n}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=o,t.validateParams=s,t.getURL=a,t.getRequestTimeout=u,t.isAuthSupported=c,t.prepareParams=l,t.handleResponse=f;var h=(n(5),n(13)),d=r(h),p=n(15),g=r(p)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return d.default.PNDeleteMessagesOperation}function o(e,t){var n=t.channel,r=e.config;return n?r.subscribeKey?void 0:"Missing Subscribe Key":"Missing channel"}function s(){return!0}function a(e,t){var n=t.channel,r=t.start,i=t.end,o=e.config,s="";return r&&(s="?start="+r),i&&(s+=(""!==s?"&":"?")+"end="+i),"/v3/history/sub-key/"+o.subscribeKey+"/channel/"+g.default.encodeString(n)+s}function u(e){return e.config.getTransactionTimeout()}function c(){return!0}function l(e,t){var n=t.start,r=t.end,i={};return n&&(i.start=n),r&&(i.end=r),{}}function f(e,t){return t.payload}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=o,t.useDelete=s,t.getURL=a,t.getRequestTimeout=u,t.isAuthSupported=c,t.prepareParams=l,t.handleResponse=f;var h=(n(5),n(13)),d=r(h),p=n(15),g=r(p)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){var n=e.config,r=e.crypto;if(!n.cipherKey)return t;try{return r.decrypt(t)}catch(e){return t}}function o(){return d.default.PNFetchMessagesOperation}function s(e,t){var n=t.channels,r=e.config;return n&&0!==n.length?r.subscribeKey?void 0:"Missing Subscribe Key":"Missing channels"}function a(e,t){var n=t.channels,r=void 0===n?[]:n,i=e.config,o=r.length>0?r.join(","):",";return"/v3/history/sub-key/"+i.subscribeKey+"/channel/"+g.default.encodeString(o)}function u(e){return e.config.getTransactionTimeout()}function c(){return!0}function l(e,t){var n=t.start,r=t.end,i=t.count,o={};return i&&(o.max=i),n&&(o.start=n),r&&(o.end=r),o}function f(e,t){var n={channels:{}};return Object.keys(t.channels||{}).forEach(function(r){n.channels[r]=[],(t.channels[r]||[]).forEach(function(t){var o={};o.channel=r,o.subscription=null,o.timetoken=t.timetoken,o.message=i(e,t.message),n.channels[r].push(o)})}),n}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=o,t.validateParams=s,t.getURL=a,t.getRequestTimeout=u,t.isAuthSupported=c,t.prepareParams=l,t.handleResponse=f;var h=(n(5),n(13)),d=r(h),p=n(15),g=r(p)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return h.default.PNSubscribeOperation}function o(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function s(e,t){var n=e.config,r=t.channels,i=void 0===r?[]:r,o=i.length>0?i.join(","):",";return"/v2/subscribe/"+n.subscribeKey+"/"+p.default.encodeString(o)+"/0"}function a(e){return e.config.getSubscribeTimeout()}function u(){return!0}function c(e,t){var n=e.config,r=t.channelGroups,i=void 0===r?[]:r,o=t.timetoken,s=t.filterExpression,a=t.region,u={heartbeat:n.getPresenceTimeout()};return i.length>0&&(u["channel-group"]=i.join(",")),s&&s.length>0&&(u["filter-expr"]=s),o&&(u.tt=o),a&&(u.tr=a),u}function l(e,t){var n=[];t.m.forEach(function(e){var t={publishTimetoken:e.p.t,region:e.p.r},r={shard:parseInt(e.a,10),subscriptionMatch:e.b,channel:e.c,payload:e.d,flags:e.f,issuingClientId:e.i,subscribeKey:e.k,originationTimetoken:e.o,userMetadata:e.u,publishMetaData:t};n.push(r)});var r={timetoken:t.t.t,region:t.t.r};return{messages:n,metadata:r}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=o,t.getURL=s,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var f=(n(5),n(13)),h=r(f),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e,t){for(var n=0;n=this._maxSubDomain&&(this._currentSubDomain=1),e=this._currentSubDomain.toString(),this._providedFQDN.replace("pubsub","ps"+e)}},{key:"hasModule",value:function(e){return e in this._modules}},{key:"shiftStandardOrigin",value:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return this._standardOrigin=this.nextOrigin(e),this._standardOrigin}},{key:"getStandardOrigin",value:function(){return this._standardOrigin}},{key:"POST",value:function(e,t,n,r){return this._modules.post(e,t,n,r)}},{key:"GET",value:function(e,t,n){return this._modules.get(e,t,n)}},{key:"DELETE",value:function(e,t,n){return this._modules.del(e,t,n)}},{key:"_detectErrorCategory",value:function(e){if("ENOTFOUND"===e.code)return u.default.PNNetworkIssuesCategory;if("ECONNREFUSED"===e.code)return u.default.PNNetworkIssuesCategory;if("ECONNRESET"===e.code)return u.default.PNNetworkIssuesCategory;if("EAI_AGAIN"===e.code)return u.default.PNNetworkIssuesCategory;if(0===e.status||e.hasOwnProperty("status")&&void 0===e.status)return u.default.PNNetworkIssuesCategory;if(e.timeout)return u.default.PNTimeoutCategory;if(e.response){if(e.response.badRequest)return u.default.PNBadRequestCategory;if(e.response.forbidden)return u.default.PNAccessDeniedCategory}return u.default.PNUnknownCategory}}]),e}());t.default=c,e.exports=t.default},function(e,t){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var r=function(){function e(e,t){for(var n=0;n>>>>>"),o.log("["+u+" / "+a+"]","\n",e,"\n",t,"\n",n),o.log("-----")}function i(){return"mobileweb"===Ti.Platform.osname?new XMLHttpRequest:Ti.Network.createHTTPClient()}function o(e){"mobileweb"!==Ti.Platform.osname&&this._config.keepAlive&&(e.enableKeepAlive=!0)}function s(e,t,n,i,s,a,u){var c=this,f={};f.operation=a.operation,e.open(t,(0,l.buildUrl)(n,i),!0),o.call(this,e),e.onload=function(){f.error=!1,e.status&&(f.statusCode=e.status);var t=JSON.parse(e.responseText);return c._config.logVerbosity&&r(n,i,e.responseText),u(f,t)},e.onerror=function(e){return f.error=!0,f.errorData=e.error,f.category=c._detectErrorCategory(e.error),u(f,null)},e.timeout="android"===Ti.Platform.osname?2147483647:1/0,e.send(s)}function a(e,t,n){var r=i(),o=this.getStandardOrigin()+t.url;return s.call(this,r,"GET",o,e,{},t,n)}function u(e,t,n,r){var o=i(),a=this.getStandardOrigin()+n.url;return s.call(this,o,"POST",a,e,JSON.parse(t),n,r)}function c(e,t,n){var r=i(),o=this.getStandardOrigin()+t.url;return s.call(this,r,"DELETE",o,e,{},t,n)}Object.defineProperty(t,"__esModule",{value:!0}),t.get=a,t.post=u,t.del=c;var l=(n(5),n(42))},function(e,t){"use strict";function n(e,t,r){null!=r?Array.isArray(r)?r.forEach(function(r){n(e,t,r)}):"object"===(void 0===r?"undefined":i(r))?Object.keys(r).forEach(function(i){n(e,t+"["+i+"]",r[i])}):e.push(encodeURIComponent(t)+"="+encodeURIComponent(r)):null===r&&e.push(encodeURIComponent(""+encodeURIComponent(t)))}function r(e,t){var r=[];return Object.keys(t).forEach(function(e){n(r,e,t[e])}),e+"?"+r.join("&")}Object.defineProperty(t,"__esModule",{value:!0});var i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};t.encodedKeyValuePair=n,t.buildUrl=r}])}); \ No newline at end of file +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.PubNub=t():e.PubNub=t()}(this,function(){return function(e){function t(r){if(n[r])return n[r].exports;var i=n[r]={exports:{},id:r,loaded:!1};return e[r].call(i.exports,i,i.exports,t),i.loaded=!0,i.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var a=n(1),u=r(a),c=n(39),l=r(c),f=n(40),h=r(f),d=n(41),p=(n(5),function(e){function t(e){return i(this,t),e.db=new h.default,e.sdkFamily="TitaniumSDK",e.networking=new l.default({del:d.del,get:d.get,post:d.post}),o(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e))}return s(t,e),t}(u.default));t.default=p,e.exports=t.default},function(e,t,n){"use strict";function r(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}function i(e){return e&&e.__esModule?e:{default:e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var s=function(){function e(e,t){for(var n=0;n>>2]|=(n[i>>>2]>>>24-i%4*8&255)<<24-(r+i)%4*8;else if(65535>>2]=n[i>>>2];else t.push.apply(t,n);return this.sigBytes+=e,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=o.clone.call(this);return e.words=this.words.slice(0),e},random:function(t){for(var n=[],r=0;r>>2]>>>24-r%4*8&255;n.push((i>>>4).toString(16)),n.push((15&i).toString(16))}return n.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 s.init(n,t/2)}},c=a.Latin1={stringify:function(e){var t=e.words;e=e.sigBytes;for(var n=[],r=0;r>>2]>>>24-r%4*8&255));return n.join("")},parse:function(e){for(var t=e.length,n=[],r=0;r>>2]|=(255&e.charCodeAt(r))<<24-r%4*8;return new s.init(n,t)}},l=a.Utf8={stringify:function(e){try{return decodeURIComponent(escape(c.stringify(e)))}catch(e){throw Error("Malformed UTF-8 data")}},parse:function(e){return c.parse(unescape(encodeURIComponent(e)))}},f=r.BufferedBlockAlgorithm=o.extend({reset:function(){this._data=new s.init,this._nDataBytes=0},_append:function(e){"string"==typeof e&&(e=l.parse(e)),this._data.concat(e),this._nDataBytes+=e.sigBytes},_process:function(t){var n=this._data,r=n.words,i=n.sigBytes,o=this.blockSize,a=i/(4*o),a=t?e.ceil(a):e.max((0|a)-this._minBufferSize,0);if(t=a*o,i=e.min(4*t,i),t){for(var u=0;ul;){var f;e:{f=c;for(var h=e.sqrt(f),d=2;d<=h;d++)if(!(f%d)){f=!1;break e}f=!0}f&&(8>l&&(s[l]=u(e.pow(c,.5))),a[l]=u(e.pow(c,1/3)),l++),c++}var p=[],r=r.SHA256=o.extend({_doReset:function(){this._hash=new i.init(s.slice(0))},_doProcessBlock:function(e,t){for(var n=this._hash.words,r=n[0],i=n[1],o=n[2],s=n[3],u=n[4],c=n[5],l=n[6],f=n[7],h=0;64>h;h++){if(16>h)p[h]=0|e[t+h];else{var d=p[h-15],g=p[h-2];p[h]=((d<<25|d>>>7)^(d<<14|d>>>18)^d>>>3)+p[h-7]+((g<<15|g>>>17)^(g<<13|g>>>19)^g>>>10)+p[h-16]}d=f+((u<<26|u>>>6)^(u<<21|u>>>11)^(u<<7|u>>>25))+(u&c^~u&l)+a[h]+p[h],g=((r<<30|r>>>2)^(r<<19|r>>>13)^(r<<10|r>>>22))+(r&i^r&o^i&o),f=l,l=c,c=u,u=s+d|0,s=o,o=i,i=r,r=d+g|0}n[0]=n[0]+r|0,n[1]=n[1]+i|0,n[2]=n[2]+o|0,n[3]=n[3]+s|0,n[4]=n[4]+u|0,n[5]=n[5]+c|0,n[6]=n[6]+l|0,n[7]=n[7]+f|0},_doFinalize:function(){var t=this._data,n=t.words,r=8*this._nDataBytes,i=8*t.sigBytes;return n[i>>>5]|=128<<24-i%32,n[14+(i+64>>>9<<4)]=e.floor(r/4294967296),n[15+(i+64>>>9<<4)]=r,t.sigBytes=4*n.length,this._process(),this._hash},clone:function(){var e=o.clone.call(this);return e._hash=this._hash.clone(),e}});t.SHA256=o._createHelper(r),t.HmacSHA256=o._createHmacHelper(r)}(Math),function(){var e=n,t=e.enc.Utf8;e.algo.HMAC=e.lib.Base.extend({init:function(e,n){e=this._hasher=new e.init,"string"==typeof n&&(n=t.parse(n));var r=e.blockSize,i=4*r;n.sigBytes>i&&(n=e.finalize(n)),n.clamp();for(var o=this._oKey=n.clone(),s=this._iKey=n.clone(),a=o.words,u=s.words,c=0;c>>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;4>s&&i+.75*s>>6*(3-s)&63));if(t=r.charAt(64))for(;e.length%4;)e.push(t);return e.join("")},parse:function(e){var n=e.length,r=this._map,i=r.charAt(64);i&&-1!=(i=e.indexOf(i))&&(n=i);for(var i=[],o=0,s=0;s>>6-s%4*2;i[o>>>2]|=(a|u)<<24-o%4*8,o++}return t.create(i,o)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="}}(),function(e){function t(e,t,n,r,i,o,s){return((e=e+(t&n|~t&r)+i+s)<>>32-o)+t}function r(e,t,n,r,i,o,s){return((e=e+(t&r|n&~r)+i+s)<>>32-o)+t}function i(e,t,n,r,i,o,s){return((e=e+(t^n^r)+i+s)<>>32-o)+t}function o(e,t,n,r,i,o,s){return((e=e+(n^(t|~r))+i+s)<>>32-o)+t}for(var s=n,a=s.lib,u=a.WordArray,c=a.Hasher,a=s.algo,l=[],f=0;64>f;f++)l[f]=4294967296*e.abs(e.sin(f+1))|0;a=a.MD5=c.extend({_doReset:function(){this._hash=new u.init([1732584193,4023233417,2562383102,271733878])},_doProcessBlock:function(e,n){for(var s=0;16>s;s++){var a=n+s,u=e[a];e[a]=16711935&(u<<8|u>>>24)|4278255360&(u<<24|u>>>8)}var s=this._hash.words,a=e[n+0],u=e[n+1],c=e[n+2],f=e[n+3],h=e[n+4],d=e[n+5],p=e[n+6],g=e[n+7],y=e[n+8],b=e[n+9],v=e[n+10],_=e[n+11],m=e[n+12],k=e[n+13],P=e[n+14],S=e[n+15],O=s[0],C=s[1],M=s[2],T=s[3],O=t(O,C,M,T,a,7,l[0]),T=t(T,O,C,M,u,12,l[1]),M=t(M,T,O,C,c,17,l[2]),C=t(C,M,T,O,f,22,l[3]),O=t(O,C,M,T,h,7,l[4]),T=t(T,O,C,M,d,12,l[5]),M=t(M,T,O,C,p,17,l[6]),C=t(C,M,T,O,g,22,l[7]),O=t(O,C,M,T,y,7,l[8]),T=t(T,O,C,M,b,12,l[9]),M=t(M,T,O,C,v,17,l[10]),C=t(C,M,T,O,_,22,l[11]),O=t(O,C,M,T,m,7,l[12]),T=t(T,O,C,M,k,12,l[13]),M=t(M,T,O,C,P,17,l[14]),C=t(C,M,T,O,S,22,l[15]),O=r(O,C,M,T,u,5,l[16]),T=r(T,O,C,M,p,9,l[17]),M=r(M,T,O,C,_,14,l[18]),C=r(C,M,T,O,a,20,l[19]),O=r(O,C,M,T,d,5,l[20]),T=r(T,O,C,M,v,9,l[21]),M=r(M,T,O,C,S,14,l[22]),C=r(C,M,T,O,h,20,l[23]),O=r(O,C,M,T,b,5,l[24]),T=r(T,O,C,M,P,9,l[25]),M=r(M,T,O,C,f,14,l[26]),C=r(C,M,T,O,y,20,l[27]),O=r(O,C,M,T,k,5,l[28]),T=r(T,O,C,M,c,9,l[29]),M=r(M,T,O,C,g,14,l[30]),C=r(C,M,T,O,m,20,l[31]),O=i(O,C,M,T,d,4,l[32]),T=i(T,O,C,M,y,11,l[33]),M=i(M,T,O,C,_,16,l[34]),C=i(C,M,T,O,P,23,l[35]),O=i(O,C,M,T,u,4,l[36]),T=i(T,O,C,M,h,11,l[37]),M=i(M,T,O,C,g,16,l[38]),C=i(C,M,T,O,v,23,l[39]),O=i(O,C,M,T,k,4,l[40]),T=i(T,O,C,M,a,11,l[41]),M=i(M,T,O,C,f,16,l[42]),C=i(C,M,T,O,p,23,l[43]),O=i(O,C,M,T,b,4,l[44]),T=i(T,O,C,M,m,11,l[45]),M=i(M,T,O,C,S,16,l[46]),C=i(C,M,T,O,c,23,l[47]),O=o(O,C,M,T,a,6,l[48]),T=o(T,O,C,M,g,10,l[49]),M=o(M,T,O,C,P,15,l[50]),C=o(C,M,T,O,d,21,l[51]),O=o(O,C,M,T,m,6,l[52]),T=o(T,O,C,M,f,10,l[53]),M=o(M,T,O,C,v,15,l[54]),C=o(C,M,T,O,u,21,l[55]),O=o(O,C,M,T,y,6,l[56]),T=o(T,O,C,M,S,10,l[57]),M=o(M,T,O,C,p,15,l[58]),C=o(C,M,T,O,k,21,l[59]),O=o(O,C,M,T,h,6,l[60]),T=o(T,O,C,M,_,10,l[61]),M=o(M,T,O,C,c,15,l[62]),C=o(C,M,T,O,b,21,l[63]);s[0]=s[0]+O|0,s[1]=s[1]+C|0,s[2]=s[2]+M|0,s[3]=s[3]+T|0},_doFinalize:function(){var t=this._data,n=t.words,r=8*this._nDataBytes,i=8*t.sigBytes;n[i>>>5]|=128<<24-i%32;var o=e.floor(r/4294967296);for(n[15+(i+64>>>9<<4)]=16711935&(o<<8|o>>>24)|4278255360&(o<<24|o>>>8),n[14+(i+64>>>9<<4)]=16711935&(r<<8|r>>>24)|4278255360&(r<<24|r>>>8),t.sigBytes=4*(n.length+1),this._process(),t=this._hash,n=t.words,r=0;4>r;r++)i=n[r],n[r]=16711935&(i<<8|i>>>24)|4278255360&(i<<24|i>>>8);return t},clone:function(){var e=c.clone.call(this);return e._hash=this._hash.clone(),e}}),s.MD5=c._createHelper(a),s.HmacMD5=c._createHmacHelper(a)}(Math),function(){var e=n,t=e.lib,r=t.Base,i=t.WordArray,t=e.algo,o=t.EvpKDF=r.extend({cfg:r.extend({keySize:4,hasher:t.MD5,iterations:1}),init:function(e){this.cfg=this.cfg.extend(e)},compute:function(e,t){for(var n=this.cfg,r=n.hasher.create(),o=i.create(),s=o.words,a=n.keySize,n=n.iterations;s.length>>2]}},r.BlockCipher=c.extend({cfg:c.cfg.extend({mode:l,padding:h}),reset:function(){c.reset.call(this);var e=this.cfg,t=e.iv,e=e.mode;if(this._xformMode==this._ENC_XFORM_MODE)var n=e.createEncryptor;else n=e.createDecryptor,this._minBufferSize=1;this._mode=n.call(e,this,t&&t.words)},_doProcessBlock:function(e,t){this._mode.processBlock(e,t)},_doFinalize:function(){var e=this.cfg.padding;if(this._xformMode==this._ENC_XFORM_MODE){e.pad(this._data,this.blockSize);var t=this._process(!0)}else t=this._process(!0),e.unpad(t);return t},blockSize:4});var d=r.CipherParams=i.extend({init:function(e){this.mixIn(e)},toString:function(e){return(e||this.formatter).stringify(this)}}),l=(t.format={}).OpenSSL={stringify:function(e){var t=e.ciphertext;return e=e.salt,(e?o.create([1398893684,1701076831]).concat(e).concat(t):t).toString(a)},parse:function(e){e=a.parse(e);var t=e.words;if(1398893684==t[0]&&1701076831==t[1]){var n=o.create(t.slice(2,4));t.splice(0,4),e.sigBytes-=16}return d.create({ciphertext:e,salt:n})}},p=r.SerializableCipher=i.extend({cfg:i.extend({format:l}),encrypt:function(e,t,n,r){r=this.cfg.extend(r);var i=e.createEncryptor(n,r);return t=i.finalize(t),i=i.cfg,d.create({ciphertext:t,key:n,iv:i.iv,algorithm:e,mode:i.mode,padding:i.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}}),t=(t.kdf={}).OpenSSL={execute:function(e,t,n,r){return r||(r=o.random(8)),e=u.create({keySize:t+n}).compute(e,r),n=o.create(e.words.slice(t),4*n),e.sigBytes=4*t,d.create({key:e,iv:n,salt:r})}},g=r.PasswordBasedCipher=p.extend({cfg:p.cfg.extend({kdf:t}),encrypt:function(e,t,n,r){return r=this.cfg.extend(r),n=r.kdf.execute(n,e.keySize,e.ivSize),r.iv=n.iv,e=p.encrypt.call(this,e,t,n.key,r),e.mixIn(n),e},decrypt:function(e,t,n,r){return r=this.cfg.extend(r),t=this._parse(t,r.format),n=r.kdf.execute(n,e.keySize,e.ivSize,t.salt),r.iv=n.iv,p.decrypt.call(this,e,t,n.key,r)}})}(),function(){for(var e=n,t=e.lib.BlockCipher,r=e.algo,i=[],o=[],s=[],a=[],u=[],c=[],l=[],f=[],h=[],d=[],p=[],g=0;256>g;g++)p[g]=128>g?g<<1:g<<1^283;for(var y=0,b=0,g=0;256>g;g++){var v=b^b<<1^b<<2^b<<3^b<<4,v=v>>>8^255&v^99;i[y]=v,o[v]=y;var _=p[y],m=p[_],k=p[m],P=257*p[v]^16843008*v;s[y]=P<<24|P>>>8,a[y]=P<<16|P>>>16,u[y]=P<<8|P>>>24,c[y]=P,P=16843009*k^65537*m^257*_^16843008*y,l[v]=P<<24|P>>>8,f[v]=P<<16|P>>>16,h[v]=P<<8|P>>>24,d[v]=P,y?(y=_^p[p[p[k^_]]],b^=p[p[b]]):y=b=1}var S=[0,1,2,4,8,16,32,64,128,27,54],r=r.AES=t.extend({_doReset:function(){for(var e=this._key,t=e.words,n=e.sigBytes/4,e=4*((this._nRounds=n+6)+1),r=this._keySchedule=[],o=0;o>>24]<<24|i[s>>>16&255]<<16|i[s>>>8&255]<<8|i[255&s]):(s=s<<8|s>>>24,s=i[s>>>24]<<24|i[s>>>16&255]<<16|i[s>>>8&255]<<8|i[255&s],s^=S[o/n|0]<<24),r[o]=r[o-n]^s}for(t=this._invKeySchedule=[],n=0;nn||4>=o?s:l[i[s>>>24]]^f[i[s>>>16&255]]^h[i[s>>>8&255]]^d[i[255&s]]},encryptBlock:function(e,t){this._doCryptBlock(e,t,this._keySchedule,s,a,u,c,i)},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,h,d,o),n=e[t+1],e[t+1]=e[t+3],e[t+3]=n},_doCryptBlock:function(e,t,n,r,i,o,s,a){for(var u=this._nRounds,c=e[t]^n[0],l=e[t+1]^n[1],f=e[t+2]^n[2],h=e[t+3]^n[3],d=4,p=1;p>>24]^i[l>>>16&255]^o[f>>>8&255]^s[255&h]^n[d++],y=r[l>>>24]^i[f>>>16&255]^o[h>>>8&255]^s[255&c]^n[d++],b=r[f>>>24]^i[h>>>16&255]^o[c>>>8&255]^s[255&l]^n[d++],h=r[h>>>24]^i[c>>>16&255]^o[l>>>8&255]^s[255&f]^n[d++],c=g,l=y,f=b;g=(a[c>>>24]<<24|a[l>>>16&255]<<16|a[f>>>8&255]<<8|a[255&h])^n[d++],y=(a[l>>>24]<<24|a[f>>>16&255]<<16|a[h>>>8&255]<<8|a[255&c])^n[d++],b=(a[f>>>24]<<24|a[h>>>16&255]<<16|a[c>>>8&255]<<8|a[255&l])^n[d++],h=(a[h>>>24]<<24|a[c>>>16&255]<<16|a[l>>>8&255]<<8|a[255&f])^n[d++],e[t]=g,e[t+1]=y,e[t+2]=b,e[t+3]=h},keySize:8});e.AES=t._createHelper(r)}(),n.mode.ECB=function(){var e=n.lib.BlockCipherMode.extend();return e.Encryptor=e.extend({processBlock:function(e,t){this._cipher.encryptBlock(e,t)}}),e.Decryptor=e.extend({processBlock:function(e,t){this._cipher.decryptBlock(e,t)}}),e}(),e.exports=n},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e,t){for(var n=0;n=s){var u={};u.category=y.default.PNRequestMessageCountExceededCategory,u.operation=e.operation,this._listenerManager.announceStatus(u)}i.forEach(function(e){var t=e.channel,r=e.subscriptionMatch,i=e.publishMetaData;if(t===r&&(r=null),a){if(n._dedupingManager.isDuplicate(e))return;n._dedupingManager.addEntry(e)}if(p.default.endsWith(e.channel,"-pnpres")){var o={};o.channel=null,o.subscription=null,o.actualChannel=null!=r?t:null,o.subscribedChannel=null!=r?r:t,t&&(o.channel=t.substring(0,t.lastIndexOf("-pnpres"))),r&&(o.subscription=r.substring(0,r.lastIndexOf("-pnpres"))),o.action=e.payload.action,o.state=e.payload.data,o.timetoken=i.publishTimetoken,o.occupancy=e.payload.occupancy,o.uuid=e.payload.uuid,o.timestamp=e.payload.timestamp,e.payload.join&&(o.join=e.payload.join),e.payload.leave&&(o.leave=e.payload.leave),e.payload.timeout&&(o.timeout=e.payload.timeout),n._listenerManager.announcePresence(o)}else{var s={};s.channel=null,s.subscription=null,s.actualChannel=null!=r?t:null,s.subscribedChannel=null!=r?r:t,s.channel=t,s.subscription=r,s.timetoken=i.publishTimetoken,s.publisher=e.issuingClientId,e.userMetadata&&(s.userMetadata=e.userMetadata),n._config.cipherKey?s.message=n._crypto.decrypt(e.payload):s.message=e.payload,n._listenerManager.announceMessage(s)}}),this._region=t.metadata.region,this._startSubscribeLoop()}},{key:"_stopSubscribeLoop",value:function(){this._subscribeCall&&("function"==typeof this._subscribeCall.abort&&this._subscribeCall.abort(),this._subscribeCall=null)}}]),e}();t.default=b,e.exports=t.default},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n=this._config.maximumCacheSize&&this.hashHistory.shift(),this.hashHistory.push(this.getKey(e))}},{key:"clearHistory",value:function(){this.hashHistory=[]}}]),e}();t.default=a,e.exports=t.default},function(e,t){"use strict";function n(e){var t=[];return Object.keys(e).forEach(function(e){return t.push(e)}),t}function r(e){return encodeURIComponent(e).replace(/[!~*'()]/g,function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()})}function i(e){return n(e).sort()}function o(e){return i(e).map(function(t){return t+"="+r(e[t])}).join("&")}function s(e,t){return-1!==e.indexOf(t,this.length-t.length)}function a(){var e=void 0,t=void 0;return{promise:new Promise(function(n,r){e=n,t=r}),reject:t,fulfill:e}}e.exports={signPamFromParams:o,endsWith:s,createPromise:a,encodeString:r}},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function a(e,t){return e.type=t,e.error=!0,e}function u(e){return a({message:e},"validationError")}function c(e,t,n){return e.usePost&&e.usePost(t,n)?e.postURL(t,n):e.getURL(t,n)}function l(e){if(e.sdkName)return e.sdkName;var t="PubNub-JS-"+e.sdkFamily;return e.partnerId&&(t+="-"+e.partnerId),t+="/"+e.getVersion()}function f(e,t,n){var r=e.config,i=e.crypto;n.timestamp=Math.floor((new Date).getTime()/1e3);var o=r.subscribeKey+"\n"+r.publishKey+"\n"+t+"\n";o+=g.default.signPamFromParams(n);var s=i.HMACSHA256(o);s=s.replace(/\+/g,"-"),s=s.replace(/\//g,"_"),n.signature=s}Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){var n=e.networking,r=e.config,i=null,o=null,s={};t.getOperation()===v.default.PNTimeOperation||t.getOperation()===v.default.PNChannelGroupsOperation?i=arguments.length<=2?void 0:arguments[2]:(s=arguments.length<=2?void 0:arguments[2],i=arguments.length<=3?void 0:arguments[3]),"undefined"==typeof Promise||i||(o=g.default.createPromise());var a=t.validateParams(e,s);if(!a){var h=t.prepareParams(e,s),p=c(t,e,s),y=void 0,b={url:p,operation:t.getOperation(),timeout:t.getRequestTimeout(e)};h.uuid=r.UUID,h.pnsdk=l(r),r.useInstanceId&&(h.instanceid=r.instanceId),r.useRequestId&&(h.requestid=d.default.createUUID()),t.isAuthSupported()&&r.getAuthKey()&&(h.auth=r.getAuthKey()),r.secretKey&&f(e,p,h);var m=function(n,r){if(n.error)return void(i?i(n):o&&o.reject(new _("PubNub call failed, check status for details",n)));var a=t.handleResponse(e,r,s);i?i(n,a):o&&o.fulfill(a)};if(t.usePost&&t.usePost(e,s)){var k=t.postPayload(e,s);y=n.POST(h,k,b,m)}else y=t.useDelete&&t.useDelete()?n.DELETE(h,b,m):n.GET(h,b,m);return t.getOperation()===v.default.PNSubscribeOperation?y:o?o.promise:void 0}return i?i(u(a)):o?(o.reject(new _("Validation failed, check status for details",u(a))),o.promise):void 0};var h=n(3),d=r(h),p=(n(5),n(15)),g=r(p),y=n(2),b=(r(y),n(13)),v=r(b),_=function(e){function t(e,n){i(this,t);var r=o(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return r.name=r.constructor.name,r.status=n,r.message=e,r}return s(t,e),t}(Error);e.exports=t.default},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return h.default.PNAddChannelsToGroupOperation}function o(e,t){var n=t.channels,r=t.channelGroup,i=e.config;return r?n&&0!==n.length?i.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channels":"Missing Channel Group"}function s(e,t){var n=t.channelGroup;return"/v1/channel-registration/sub-key/"+e.config.subscribeKey+"/channel-group/"+p.default.encodeString(n)}function a(e){return e.config.getTransactionTimeout()}function u(){return!0}function c(e,t){var n=t.channels;return{add:(void 0===n?[]:n).join(",")}}function l(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=o,t.getURL=s,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var f=(n(5),n(13)),h=r(f),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return h.default.PNRemoveChannelsFromGroupOperation}function o(e,t){var n=t.channels,r=t.channelGroup,i=e.config;return r?n&&0!==n.length?i.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channels":"Missing Channel Group"}function s(e,t){var n=t.channelGroup;return"/v1/channel-registration/sub-key/"+e.config.subscribeKey+"/channel-group/"+p.default.encodeString(n)}function a(e){return e.config.getTransactionTimeout()}function u(){return!0}function c(e,t){var n=t.channels;return{remove:(void 0===n?[]:n).join(",")}}function l(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=o,t.getURL=s,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var f=(n(5),n(13)),h=r(f),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return h.default.PNRemoveGroupOperation}function o(e,t){var n=t.channelGroup,r=e.config;return n?r.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channel Group"}function s(e,t){var n=t.channelGroup;return"/v1/channel-registration/sub-key/"+e.config.subscribeKey+"/channel-group/"+p.default.encodeString(n)+"/remove"}function a(){return!0}function u(e){return e.config.getTransactionTimeout()}function c(){return{}}function l(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=o,t.getURL=s,t.isAuthSupported=a,t.getRequestTimeout=u,t.prepareParams=c,t.handleResponse=l;var f=(n(5),n(13)),h=r(f),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(){return f.default.PNChannelGroupsOperation}function i(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function o(e){return"/v1/channel-registration/sub-key/"+e.config.subscribeKey+"/channel-group"}function s(e){return e.config.getTransactionTimeout()}function a(){return!0}function u(){return{}}function c(e,t){return{groups:t.payload.groups}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=o,t.getRequestTimeout=s,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),f=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return h.default.PNChannelsForGroupOperation}function o(e,t){var n=t.channelGroup,r=e.config;return n?r.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channel Group"}function s(e,t){var n=t.channelGroup;return"/v1/channel-registration/sub-key/"+e.config.subscribeKey+"/channel-group/"+p.default.encodeString(n)}function a(e){return e.config.getTransactionTimeout()}function u(){return!0}function c(){return{}}function l(e,t){return{channels:t.payload.channels}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=o,t.getURL=s,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var f=(n(5),n(13)),h=r(f),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(){return f.default.PNPushNotificationEnabledChannelsOperation}function i(e,t){var n=t.device,r=t.pushGateway,i=t.channels,o=e.config;return n?r?i&&0!==i.length?o.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channels":"Missing GW Type (pushGateway: gcm or apns)":"Missing Device ID (device)"}function o(e,t){var n=t.device;return"/v1/push/sub-key/"+e.config.subscribeKey+"/devices/"+n}function s(e){return e.config.getTransactionTimeout()}function a(){return!0}function u(e,t){var n=t.pushGateway,r=t.channels;return{type:n,add:(void 0===r?[]:r).join(",")}}function c(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=o,t.getRequestTimeout=s,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),f=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(){return f.default.PNPushNotificationEnabledChannelsOperation}function i(e,t){var n=t.device,r=t.pushGateway,i=t.channels,o=e.config;return n?r?i&&0!==i.length?o.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channels":"Missing GW Type (pushGateway: gcm or apns)":"Missing Device ID (device)"}function o(e,t){var n=t.device;return"/v1/push/sub-key/"+e.config.subscribeKey+"/devices/"+n}function s(e){return e.config.getTransactionTimeout()}function a(){return!0}function u(e,t){var n=t.pushGateway,r=t.channels;return{type:n,remove:(void 0===r?[]:r).join(",")}}function c(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=o,t.getRequestTimeout=s,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),f=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(){return f.default.PNPushNotificationEnabledChannelsOperation}function i(e,t){var n=t.device,r=t.pushGateway,i=e.config;return n?r?i.subscribeKey?void 0:"Missing Subscribe Key":"Missing GW Type (pushGateway: gcm or apns)":"Missing Device ID (device)"}function o(e,t){var n=t.device;return"/v1/push/sub-key/"+e.config.subscribeKey+"/devices/"+n}function s(e){return e.config.getTransactionTimeout()}function a(){return!0}function u(e,t){return{type:t.pushGateway}}function c(e,t){return{channels:t}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=o,t.getRequestTimeout=s,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),f=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(){return f.default.PNRemoveAllPushNotificationsOperation}function i(e,t){var n=t.device,r=t.pushGateway,i=e.config;return n?r?i.subscribeKey?void 0:"Missing Subscribe Key":"Missing GW Type (pushGateway: gcm or apns)":"Missing Device ID (device)"}function o(e,t){var n=t.device;return"/v1/push/sub-key/"+e.config.subscribeKey+"/devices/"+n+"/remove"}function s(e){return e.config.getTransactionTimeout()}function a(){return!0}function u(e,t){return{type:t.pushGateway}}function c(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=o,t.getRequestTimeout=s,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),f=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return h.default.PNUnsubscribeOperation}function o(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function s(e,t){var n=e.config,r=t.channels,i=void 0===r?[]:r,o=i.length>0?i.join(","):",";return"/v2/presence/sub-key/"+n.subscribeKey+"/channel/"+p.default.encodeString(o)+"/leave"}function a(e){return e.config.getTransactionTimeout()}function u(){return!0}function c(e,t){var n=t.channelGroups,r=void 0===n?[]:n,i={};return r.length>0&&(i["channel-group"]=r.join(",")),i}function l(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=o,t.getURL=s,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var f=(n(5),n(13)),h=r(f),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(){return f.default.PNWhereNowOperation}function i(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function o(e,t){var n=e.config,r=t.uuid,i=void 0===r?n.UUID:r;return"/v2/presence/sub-key/"+n.subscribeKey+"/uuid/"+i}function s(e){return e.config.getTransactionTimeout()}function a(){return!0}function u(){return{}}function c(e,t){return t.payload?{channels:t.payload.channels}:{channels:[]}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=o,t.getRequestTimeout=s,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),f=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return h.default.PNHeartbeatOperation}function o(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function s(e,t){var n=e.config,r=t.channels,i=void 0===r?[]:r,o=i.length>0?i.join(","):",";return"/v2/presence/sub-key/"+n.subscribeKey+"/channel/"+p.default.encodeString(o)+"/heartbeat"}function a(){return!0}function u(e){return e.config.getTransactionTimeout()}function c(e,t){var n=t.channelGroups,r=void 0===n?[]:n,i=t.state,o=void 0===i?{}:i,s=e.config,a={};return r.length>0&&(a["channel-group"]=r.join(",")),a.state=JSON.stringify(o),a.heartbeat=s.getPresenceTimeout(),a}function l(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=o,t.getURL=s,t.isAuthSupported=a,t.getRequestTimeout=u,t.prepareParams=c,t.handleResponse=l;var f=(n(5),n(13)),h=r(f),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return h.default.PNGetStateOperation}function o(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function s(e,t){var n=e.config,r=t.uuid,i=void 0===r?n.UUID:r,o=t.channels,s=void 0===o?[]:o,a=s.length>0?s.join(","):",";return"/v2/presence/sub-key/"+n.subscribeKey+"/channel/"+p.default.encodeString(a)+"/uuid/"+i}function a(e){return e.config.getTransactionTimeout()}function u(){return!0}function c(e,t){var n=t.channelGroups,r=void 0===n?[]:n,i={};return r.length>0&&(i["channel-group"]=r.join(",")),i}function l(e,t,n){var r=n.channels,i=void 0===r?[]:r,o=n.channelGroups,s=void 0===o?[]:o,a={};return 1===i.length&&0===s.length?a[i[0]]=t.payload:a=t.payload,{channels:a}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=o,t.getURL=s,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var f=(n(5),n(13)),h=r(f),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return h.default.PNSetStateOperation}function o(e,t){var n=e.config,r=t.state,i=t.channels,o=void 0===i?[]:i,s=t.channelGroups,a=void 0===s?[]:s;return r?n.subscribeKey?0===o.length&&0===a.length?"Please provide a list of channels and/or channel-groups":void 0:"Missing Subscribe Key":"Missing State"}function s(e,t){var n=e.config,r=t.channels,i=void 0===r?[]:r,o=i.length>0?i.join(","):",";return"/v2/presence/sub-key/"+n.subscribeKey+"/channel/"+p.default.encodeString(o)+"/uuid/"+n.UUID+"/data"}function a(e){return e.config.getTransactionTimeout()}function u(){return!0}function c(e,t){var n=t.state,r=t.channelGroups,i=void 0===r?[]:r,o={};return o.state=JSON.stringify(n),i.length>0&&(o["channel-group"]=i.join(",")),o}function l(e,t){return{state:t.payload}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=o,t.getURL=s,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var f=(n(5),n(13)),h=r(f),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return h.default.PNHereNowOperation}function o(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function s(e,t){var n=e.config,r=t.channels,i=void 0===r?[]:r,o=t.channelGroups,s=void 0===o?[]:o,a="/v2/presence/sub-key/"+n.subscribeKey;if(i.length>0||s.length>0){var u=i.length>0?i.join(","):",";a+="/channel/"+p.default.encodeString(u)}return a}function a(e){return e.config.getTransactionTimeout()}function u(){return!0}function c(e,t){var n=t.channelGroups,r=void 0===n?[]:n,i=t.includeUUIDs,o=void 0===i||i,s=t.includeState,a=void 0!==s&&s,u={};return o||(u.disable_uuids=1),a&&(u.state=1),r.length>0&&(u["channel-group"]=r.join(",")),u}function l(e,t,n){var r=n.channels,i=void 0===r?[]:r,o=n.channelGroups,s=void 0===o?[]:o,a=n.includeUUIDs,u=void 0===a||a,c=n.includeState,l=void 0!==c&&c;return i.length>1||s.length>0||0===s.length&&0===i.length?function(){var e={};return e.totalChannels=t.payload.total_channels,e.totalOccupancy=t.payload.total_occupancy,e.channels={},Object.keys(t.payload.channels).forEach(function(n){var r=t.payload.channels[n],i=[];return e.channels[n]={occupants:i,name:n,occupancy:r.occupancy},u&&r.uuids.forEach(function(e){l?i.push({state:e.state,uuid:e.uuid}):i.push({state:null,uuid:e})}),e}),e}():function(){var e={},n=[];return e.totalChannels=1,e.totalOccupancy=t.occupancy,e.channels={},e.channels[i[0]]={occupants:n,name:i[0],occupancy:t.occupancy},u&&t.uuids&&t.uuids.forEach(function(e){l?n.push({state:e.state,uuid:e.uuid}):n.push({state:null,uuid:e})}),e}()}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=o,t.getURL=s,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var f=(n(5),n(13)),h=r(f),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(){return f.default.PNAccessManagerAudit}function i(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function o(e){return"/v2/auth/audit/sub-key/"+e.config.subscribeKey}function s(e){return e.config.getTransactionTimeout()}function a(){return!1}function u(e,t){var n=t.channel,r=t.channelGroup,i=t.authKeys,o=void 0===i?[]:i,s={};return n&&(s.channel=n),r&&(s["channel-group"]=r),o.length>0&&(s.auth=o.join(",")),s}function c(e,t){return t.payload}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=o,t.getRequestTimeout=s,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),f=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(){return f.default.PNAccessManagerGrant}function i(e){var t=e.config;return t.subscribeKey?t.publishKey?t.secretKey?void 0:"Missing Secret Key":"Missing Publish Key":"Missing Subscribe Key"}function o(e){return"/v2/auth/grant/sub-key/"+e.config.subscribeKey}function s(e){return e.config.getTransactionTimeout()}function a(){return!1}function u(e,t){var n=t.channels,r=void 0===n?[]:n,i=t.channelGroups,o=void 0===i?[]:i,s=t.ttl,a=t.read,u=void 0!==a&&a,c=t.write,l=void 0!==c&&c,f=t.manage,h=void 0!==f&&f,d=t.authKeys,p=void 0===d?[]:d,g={};return g.r=u?"1":"0",g.w=l?"1":"0",g.m=h?"1":"0",r.length>0&&(g.channel=r.join(",")),o.length>0&&(g["channel-group"]=o.join(",")),p.length>0&&(g.auth=p.join(",")),(s||0===s)&&(g.ttl=s),g}function c(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=o,t.getRequestTimeout=s,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),f=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){var n=e.crypto,r=e.config,i=JSON.stringify(t);return r.cipherKey&&(i=n.encrypt(i),i=JSON.stringify(i)),i}function o(){return b.default.PNPublishOperation}function s(e,t){var n=e.config,r=t.message +;return t.channel?r?n.subscribeKey?void 0:"Missing Subscribe Key":"Missing Message":"Missing Channel"}function a(e,t){var n=t.sendByPost;return void 0!==n&&n}function u(e,t){var n=e.config,r=t.channel,o=t.message,s=i(e,o);return"/publish/"+n.publishKey+"/"+n.subscribeKey+"/0/"+_.default.encodeString(r)+"/0/"+_.default.encodeString(s)}function c(e,t){var n=e.config,r=t.channel;return"/publish/"+n.publishKey+"/"+n.subscribeKey+"/0/"+_.default.encodeString(r)+"/0"}function l(e){return e.config.getTransactionTimeout()}function f(){return!0}function h(e,t){return i(e,t.message)}function d(e,t){var n=t.meta,r=t.replicate,i=void 0===r||r,o=t.storeInHistory,s=t.ttl,a={};return null!=o&&(a.store=o?"1":"0"),s&&(a.ttl=s),!1===i&&(a.norep="true"),n&&"object"===(void 0===n?"undefined":g(n))&&(a.meta=JSON.stringify(n)),a}function p(e,t){return{timetoken:t[2]}}Object.defineProperty(t,"__esModule",{value:!0});var g="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};t.getOperation=o,t.validateParams=s,t.usePost=a,t.getURL=u,t.postURL=c,t.getRequestTimeout=l,t.isAuthSupported=f,t.postPayload=h,t.prepareParams=d,t.handleResponse=p;var y=(n(5),n(13)),b=r(y),v=n(15),_=r(v)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){var n=e.config,r=e.crypto;if(!n.cipherKey)return t;try{return r.decrypt(t)}catch(e){return t}}function o(){return d.default.PNHistoryOperation}function s(e,t){var n=t.channel,r=e.config;return n?r.subscribeKey?void 0:"Missing Subscribe Key":"Missing channel"}function a(e,t){var n=t.channel;return"/v2/history/sub-key/"+e.config.subscribeKey+"/channel/"+g.default.encodeString(n)}function u(e){return e.config.getTransactionTimeout()}function c(){return!0}function l(e,t){var n=t.start,r=t.end,i=t.reverse,o=t.count,s=void 0===o?100:o,a=t.stringifiedTimeToken,u=void 0!==a&&a,c={include_token:"true"};return c.count=s,n&&(c.start=n),r&&(c.end=r),u&&(c.string_message_token="true"),null!=i&&(c.reverse=i.toString()),c}function f(e,t){var n={messages:[],startTimeToken:t[1],endTimeToken:t[2]};return t[0].forEach(function(t){var r={timetoken:t.timetoken,entry:i(e,t.message)};n.messages.push(r)}),n}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=o,t.validateParams=s,t.getURL=a,t.getRequestTimeout=u,t.isAuthSupported=c,t.prepareParams=l,t.handleResponse=f;var h=(n(5),n(13)),d=r(h),p=n(15),g=r(p)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return d.default.PNDeleteMessagesOperation}function o(e,t){var n=t.channel,r=e.config;return n?r.subscribeKey?void 0:"Missing Subscribe Key":"Missing channel"}function s(){return!0}function a(e,t){var n=t.channel,r=t.start,i=t.end,o=e.config,s="";return r&&(s="?start="+r),i&&(s+=(""!==s?"&":"?")+"end="+i),"/v3/history/sub-key/"+o.subscribeKey+"/channel/"+g.default.encodeString(n)+s}function u(e){return e.config.getTransactionTimeout()}function c(){return!0}function l(e,t){var n=t.start,r=t.end,i={};return n&&(i.start=n),r&&(i.end=r),{}}function f(e,t){return t.payload}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=o,t.useDelete=s,t.getURL=a,t.getRequestTimeout=u,t.isAuthSupported=c,t.prepareParams=l,t.handleResponse=f;var h=(n(5),n(13)),d=r(h),p=n(15),g=r(p)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){var n=e.config,r=e.crypto;if(!n.cipherKey)return t;try{return r.decrypt(t)}catch(e){return t}}function o(){return d.default.PNFetchMessagesOperation}function s(e,t){var n=t.channels,r=e.config;return n&&0!==n.length?r.subscribeKey?void 0:"Missing Subscribe Key":"Missing channels"}function a(e,t){var n=t.channels,r=void 0===n?[]:n,i=e.config,o=r.length>0?r.join(","):",";return"/v3/history/sub-key/"+i.subscribeKey+"/channel/"+g.default.encodeString(o)}function u(e){return e.config.getTransactionTimeout()}function c(){return!0}function l(e,t){var n=t.start,r=t.end,i=t.count,o={};return i&&(o.max=i),n&&(o.start=n),r&&(o.end=r),o}function f(e,t){var n={channels:{}};return Object.keys(t.channels||{}).forEach(function(r){n.channels[r]=[],(t.channels[r]||[]).forEach(function(t){var o={};o.channel=r,o.subscription=null,o.timetoken=t.timetoken,o.message=i(e,t.message),n.channels[r].push(o)})}),n}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=o,t.validateParams=s,t.getURL=a,t.getRequestTimeout=u,t.isAuthSupported=c,t.prepareParams=l,t.handleResponse=f;var h=(n(5),n(13)),d=r(h),p=n(15),g=r(p)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return h.default.PNSubscribeOperation}function o(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function s(e,t){var n=e.config,r=t.channels,i=void 0===r?[]:r,o=i.length>0?i.join(","):",";return"/v2/subscribe/"+n.subscribeKey+"/"+p.default.encodeString(o)+"/0"}function a(e){return e.config.getSubscribeTimeout()}function u(){return!0}function c(e,t){var n=e.config,r=t.channelGroups,i=void 0===r?[]:r,o=t.timetoken,s=t.filterExpression,a=t.region,u={heartbeat:n.getPresenceTimeout()};return i.length>0&&(u["channel-group"]=i.join(",")),s&&s.length>0&&(u["filter-expr"]=s),o&&(u.tt=o),a&&(u.tr=a),u}function l(e,t){var n=[];t.m.forEach(function(e){var t={publishTimetoken:e.p.t,region:e.p.r},r={shard:parseInt(e.a,10),subscriptionMatch:e.b,channel:e.c,payload:e.d,flags:e.f,issuingClientId:e.i,subscribeKey:e.k,originationTimetoken:e.o,userMetadata:e.u,publishMetaData:t};n.push(r)});var r={timetoken:t.t.t,region:t.t.r};return{messages:n,metadata:r}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=o,t.getURL=s,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var f=(n(5),n(13)),h=r(f),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e,t){for(var n=0;n=this._maxSubDomain&&(this._currentSubDomain=1),e=this._currentSubDomain.toString(),this._providedFQDN.replace("pubsub","ps"+e)}},{key:"hasModule",value:function(e){return e in this._modules}},{key:"shiftStandardOrigin",value:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return this._standardOrigin=this.nextOrigin(e),this._standardOrigin}},{key:"getStandardOrigin",value:function(){return this._standardOrigin}},{key:"POST",value:function(e,t,n,r){return this._modules.post(e,t,n,r)}},{key:"GET",value:function(e,t,n){return this._modules.get(e,t,n)}},{key:"DELETE",value:function(e,t,n){return this._modules.del(e,t,n)}},{key:"_detectErrorCategory",value:function(e){if("ENOTFOUND"===e.code)return u.default.PNNetworkIssuesCategory;if("ECONNREFUSED"===e.code)return u.default.PNNetworkIssuesCategory;if("ECONNRESET"===e.code)return u.default.PNNetworkIssuesCategory;if("EAI_AGAIN"===e.code)return u.default.PNNetworkIssuesCategory;if(0===e.status||e.hasOwnProperty("status")&&void 0===e.status)return u.default.PNNetworkIssuesCategory;if(e.timeout)return u.default.PNTimeoutCategory;if(e.response){if(e.response.badRequest)return u.default.PNBadRequestCategory;if(e.response.forbidden)return u.default.PNAccessDeniedCategory}return u.default.PNUnknownCategory}}]),e}());t.default=c,e.exports=t.default},function(e,t){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var r=function(){function e(e,t){for(var n=0;n>>>>>"),o.log("["+u+" / "+a+"]","\n",e,"\n",t,"\n",n),o.log("-----")}function i(){return"mobileweb"===Ti.Platform.osname?new XMLHttpRequest:Ti.Network.createHTTPClient()}function o(e){"mobileweb"!==Ti.Platform.osname&&this._config.keepAlive&&(e.enableKeepAlive=!0)}function s(e,t,n,i,s,a,u){var c=this,f={};f.operation=a.operation,e.open(t,(0,l.buildUrl)(n,i),!0),o.call(this,e),e.onload=function(){f.error=!1,e.status&&(f.statusCode=e.status);var t=JSON.parse(e.responseText);return c._config.logVerbosity&&r(n,i,e.responseText),u(f,t)},e.onerror=function(e){return f.error=!0,f.errorData=e.error,f.category=c._detectErrorCategory(e.error),u(f,null)},e.timeout="android"===Ti.Platform.osname?2147483647:1/0,e.send(s)}function a(e,t,n){var r=i(),o=this.getStandardOrigin()+t.url;return s.call(this,r,"GET",o,e,{},t,n)}function u(e,t,n,r){var o=i(),a=this.getStandardOrigin()+n.url;return s.call(this,o,"POST",a,e,JSON.parse(t),n,r)}function c(e,t,n){var r=i(),o=this.getStandardOrigin()+t.url;return s.call(this,r,"DELETE",o,e,{},t,n)}Object.defineProperty(t,"__esModule",{value:!0}),t.get=a,t.post=u,t.del=c;var l=(n(5),n(42))},function(e,t){"use strict";function n(e,t,r){null!=r?Array.isArray(r)?r.forEach(function(r){n(e,t,r)}):"object"===(void 0===r?"undefined":i(r))?Object.keys(r).forEach(function(i){n(e,t+"["+i+"]",r[i])}):e.push(encodeURIComponent(t)+"="+encodeURIComponent(r)):null===r&&e.push(encodeURIComponent(""+encodeURIComponent(t)))}function r(e,t){var r=[];return Object.keys(t).forEach(function(e){n(r,e,t[e])}),e+"?"+r.join("&")}Object.defineProperty(t,"__esModule",{value:!0});var i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};t.encodedKeyValuePair=n,t.buildUrl=r}])}); \ No newline at end of file diff --git a/dist/web/pubnub.js b/dist/web/pubnub.js index 70df24594..42987a697 100644 --- a/dist/web/pubnub.js +++ b/dist/web/pubnub.js @@ -1429,9 +1429,6 @@ return /******/ (function(modules) { // webpackBootstrap this._pendingChannelSubscriptions = []; this._pendingChannelGroupSubscriptions = []; - this._pendingHeartbeatChannels = []; - this._pendingHeartbeatChannelGroups = []; - this._currentTimetoken = 0; this._lastTimetoken = 0; this._storedTimetoken = null; @@ -1481,12 +1478,10 @@ return /******/ (function(modules) { // webpackBootstrap if (connected) { channels.forEach(function (channel) { _this2._heartbeatChannels[channel] = { state: {} }; - _this2._pendingHeartbeatChannels.push(channel); }); channelGroups.forEach(function (channelGroup) { _this2._heartbeatChannelGroups[channelGroup] = { state: {} }; - _this2._pendingHeartbeatChannelGroups.push(channelGroup); }); } else { channels.forEach(function (channel) { diff --git a/dist/web/pubnub.min.js b/dist/web/pubnub.min.js index 40d5f39fe..0f919f277 100644 --- a/dist/web/pubnub.min.js +++ b/dist/web/pubnub.min.js @@ -1,3 +1,3 @@ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.PubNub=t():e.PubNub=t()}(this,function(){return function(e){function t(r){if(n[r])return n[r].exports;var i=n[r]={exports:{},id:r,loaded:!1};return e[r].call(i.exports,i,i.exports,t),i.loaded=!0,i.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function o(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function a(e){if(!navigator||!navigator.sendBeacon)return!1;navigator.sendBeacon(e)}Object.defineProperty(t,"__esModule",{value:!0});var u=n(1),c=r(u),l=n(39),h=r(l),f=n(40),d=r(f),p=n(41),g=(n(5),function(e){function t(e){i(this,t);var n=e.listenToBrowserNetworkEvents,r=void 0===n||n;e.db=d.default,e.sdkFamily="Web",e.networking=new h.default({del:p.del,get:p.get,post:p.post,sendBeacon:a});var o=s(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return r&&(window.addEventListener("offline",function(){o.networkDownDetected()}),window.addEventListener("online",function(){o.networkUpDetected()})),o}return o(t,e),t}(c.default));t.default=g,e.exports=t.default},function(e,t,n){"use strict";function r(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}function i(e){return e&&e.__esModule?e:{default:e}}function s(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e,t){for(var n=0;n>>2]|=(n[i>>>2]>>>24-i%4*8&255)<<24-(r+i)%4*8;else if(65535>>2]=n[i>>>2];else t.push.apply(t,n);return this.sigBytes+=e,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=s.clone.call(this);return e.words=this.words.slice(0),e},random:function(t){for(var n=[],r=0;r>>2]>>>24-r%4*8&255;n.push((i>>>4).toString(16)),n.push((15&i).toString(16))}return n.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 o.init(n,t/2)}},c=a.Latin1={stringify:function(e){var t=e.words;e=e.sigBytes;for(var n=[],r=0;r>>2]>>>24-r%4*8&255));return n.join("")},parse:function(e){for(var t=e.length,n=[],r=0;r>>2]|=(255&e.charCodeAt(r))<<24-r%4*8;return new o.init(n,t)}},l=a.Utf8={stringify:function(e){try{return decodeURIComponent(escape(c.stringify(e)))}catch(e){throw Error("Malformed UTF-8 data")}},parse:function(e){return c.parse(unescape(encodeURIComponent(e)))}},h=r.BufferedBlockAlgorithm=s.extend({reset:function(){this._data=new o.init,this._nDataBytes=0},_append:function(e){"string"==typeof e&&(e=l.parse(e)),this._data.concat(e),this._nDataBytes+=e.sigBytes},_process:function(t){var n=this._data,r=n.words,i=n.sigBytes,s=this.blockSize,a=i/(4*s),a=t?e.ceil(a):e.max((0|a)-this._minBufferSize,0);if(t=a*s,i=e.min(4*t,i),t){for(var u=0;ul;){var h;e:{h=c;for(var f=e.sqrt(h),d=2;d<=f;d++)if(!(h%d)){h=!1;break e}h=!0}h&&(8>l&&(o[l]=u(e.pow(c,.5))),a[l]=u(e.pow(c,1/3)),l++),c++}var p=[],r=r.SHA256=s.extend({_doReset:function(){this._hash=new i.init(o.slice(0))},_doProcessBlock:function(e,t){for(var n=this._hash.words,r=n[0],i=n[1],s=n[2],o=n[3],u=n[4],c=n[5],l=n[6],h=n[7],f=0;64>f;f++){if(16>f)p[f]=0|e[t+f];else{var d=p[f-15],g=p[f-2];p[f]=((d<<25|d>>>7)^(d<<14|d>>>18)^d>>>3)+p[f-7]+((g<<15|g>>>17)^(g<<13|g>>>19)^g>>>10)+p[f-16]}d=h+((u<<26|u>>>6)^(u<<21|u>>>11)^(u<<7|u>>>25))+(u&c^~u&l)+a[f]+p[f],g=((r<<30|r>>>2)^(r<<19|r>>>13)^(r<<10|r>>>22))+(r&i^r&s^i&s),h=l,l=c,c=u,u=o+d|0,o=s,s=i,i=r,r=d+g|0}n[0]=n[0]+r|0,n[1]=n[1]+i|0,n[2]=n[2]+s|0,n[3]=n[3]+o|0,n[4]=n[4]+u|0,n[5]=n[5]+c|0,n[6]=n[6]+l|0,n[7]=n[7]+h|0},_doFinalize:function(){var t=this._data,n=t.words,r=8*this._nDataBytes,i=8*t.sigBytes;return n[i>>>5]|=128<<24-i%32,n[14+(i+64>>>9<<4)]=e.floor(r/4294967296),n[15+(i+64>>>9<<4)]=r,t.sigBytes=4*n.length,this._process(),this._hash},clone:function(){var e=s.clone.call(this);return e._hash=this._hash.clone(),e}});t.SHA256=s._createHelper(r),t.HmacSHA256=s._createHmacHelper(r)}(Math),function(){var e=n,t=e.enc.Utf8;e.algo.HMAC=e.lib.Base.extend({init:function(e,n){e=this._hasher=new e.init,"string"==typeof n&&(n=t.parse(n));var r=e.blockSize,i=4*r;n.sigBytes>i&&(n=e.finalize(n)),n.clamp();for(var s=this._oKey=n.clone(),o=this._iKey=n.clone(),a=s.words,u=o.words,c=0;c>>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,o=0;4>o&&i+.75*o>>6*(3-o)&63));if(t=r.charAt(64))for(;e.length%4;)e.push(t);return e.join("")},parse:function(e){var n=e.length,r=this._map,i=r.charAt(64);i&&-1!=(i=e.indexOf(i))&&(n=i);for(var i=[],s=0,o=0;o>>6-o%4*2;i[s>>>2]|=(a|u)<<24-s%4*8,s++}return t.create(i,s)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="}}(),function(e){function t(e,t,n,r,i,s,o){return((e=e+(t&n|~t&r)+i+o)<>>32-s)+t}function r(e,t,n,r,i,s,o){return((e=e+(t&r|n&~r)+i+o)<>>32-s)+t}function i(e,t,n,r,i,s,o){return((e=e+(t^n^r)+i+o)<>>32-s)+t}function s(e,t,n,r,i,s,o){return((e=e+(n^(t|~r))+i+o)<>>32-s)+t}for(var o=n,a=o.lib,u=a.WordArray,c=a.Hasher,a=o.algo,l=[],h=0;64>h;h++)l[h]=4294967296*e.abs(e.sin(h+1))|0;a=a.MD5=c.extend({_doReset:function(){this._hash=new u.init([1732584193,4023233417,2562383102,271733878])},_doProcessBlock:function(e,n){for(var o=0;16>o;o++){var a=n+o,u=e[a];e[a]=16711935&(u<<8|u>>>24)|4278255360&(u<<24|u>>>8)}var o=this._hash.words,a=e[n+0],u=e[n+1],c=e[n+2],h=e[n+3],f=e[n+4],d=e[n+5],p=e[n+6],g=e[n+7],y=e[n+8],b=e[n+9],v=e[n+10],_=e[n+11],m=e[n+12],k=e[n+13],P=e[n+14],S=e[n+15],O=o[0],w=o[1],C=o[2],T=o[3],O=t(O,w,C,T,a,7,l[0]),T=t(T,O,w,C,u,12,l[1]),C=t(C,T,O,w,c,17,l[2]),w=t(w,C,T,O,h,22,l[3]),O=t(O,w,C,T,f,7,l[4]),T=t(T,O,w,C,d,12,l[5]),C=t(C,T,O,w,p,17,l[6]),w=t(w,C,T,O,g,22,l[7]),O=t(O,w,C,T,y,7,l[8]),T=t(T,O,w,C,b,12,l[9]),C=t(C,T,O,w,v,17,l[10]),w=t(w,C,T,O,_,22,l[11]),O=t(O,w,C,T,m,7,l[12]),T=t(T,O,w,C,k,12,l[13]),C=t(C,T,O,w,P,17,l[14]),w=t(w,C,T,O,S,22,l[15]),O=r(O,w,C,T,u,5,l[16]),T=r(T,O,w,C,p,9,l[17]),C=r(C,T,O,w,_,14,l[18]),w=r(w,C,T,O,a,20,l[19]),O=r(O,w,C,T,d,5,l[20]),T=r(T,O,w,C,v,9,l[21]),C=r(C,T,O,w,S,14,l[22]),w=r(w,C,T,O,f,20,l[23]),O=r(O,w,C,T,b,5,l[24]),T=r(T,O,w,C,P,9,l[25]),C=r(C,T,O,w,h,14,l[26]),w=r(w,C,T,O,y,20,l[27]),O=r(O,w,C,T,k,5,l[28]),T=r(T,O,w,C,c,9,l[29]),C=r(C,T,O,w,g,14,l[30]),w=r(w,C,T,O,m,20,l[31]),O=i(O,w,C,T,d,4,l[32]),T=i(T,O,w,C,y,11,l[33]),C=i(C,T,O,w,_,16,l[34]),w=i(w,C,T,O,P,23,l[35]),O=i(O,w,C,T,u,4,l[36]),T=i(T,O,w,C,f,11,l[37]),C=i(C,T,O,w,g,16,l[38]),w=i(w,C,T,O,v,23,l[39]),O=i(O,w,C,T,k,4,l[40]),T=i(T,O,w,C,a,11,l[41]),C=i(C,T,O,w,h,16,l[42]),w=i(w,C,T,O,p,23,l[43]),O=i(O,w,C,T,b,4,l[44]),T=i(T,O,w,C,m,11,l[45]),C=i(C,T,O,w,S,16,l[46]),w=i(w,C,T,O,c,23,l[47]),O=s(O,w,C,T,a,6,l[48]),T=s(T,O,w,C,g,10,l[49]),C=s(C,T,O,w,P,15,l[50]),w=s(w,C,T,O,d,21,l[51]),O=s(O,w,C,T,m,6,l[52]),T=s(T,O,w,C,h,10,l[53]),C=s(C,T,O,w,v,15,l[54]),w=s(w,C,T,O,u,21,l[55]),O=s(O,w,C,T,y,6,l[56]),T=s(T,O,w,C,S,10,l[57]),C=s(C,T,O,w,p,15,l[58]),w=s(w,C,T,O,k,21,l[59]),O=s(O,w,C,T,f,6,l[60]),T=s(T,O,w,C,_,10,l[61]),C=s(C,T,O,w,c,15,l[62]),w=s(w,C,T,O,b,21,l[63]);o[0]=o[0]+O|0,o[1]=o[1]+w|0,o[2]=o[2]+C|0,o[3]=o[3]+T|0},_doFinalize:function(){var t=this._data,n=t.words,r=8*this._nDataBytes,i=8*t.sigBytes;n[i>>>5]|=128<<24-i%32;var s=e.floor(r/4294967296);for(n[15+(i+64>>>9<<4)]=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),n[14+(i+64>>>9<<4)]=16711935&(r<<8|r>>>24)|4278255360&(r<<24|r>>>8),t.sigBytes=4*(n.length+1),this._process(),t=this._hash,n=t.words,r=0;4>r;r++)i=n[r],n[r]=16711935&(i<<8|i>>>24)|4278255360&(i<<24|i>>>8);return t},clone:function(){var e=c.clone.call(this);return e._hash=this._hash.clone(),e}}),o.MD5=c._createHelper(a),o.HmacMD5=c._createHmacHelper(a)}(Math),function(){var e=n,t=e.lib,r=t.Base,i=t.WordArray,t=e.algo,s=t.EvpKDF=r.extend({cfg:r.extend({keySize:4,hasher:t.MD5,iterations:1}),init:function(e){this.cfg=this.cfg.extend(e)},compute:function(e,t){for(var n=this.cfg,r=n.hasher.create(),s=i.create(),o=s.words,a=n.keySize,n=n.iterations;o.length>>2]}},r.BlockCipher=c.extend({cfg:c.cfg.extend({mode:l,padding:f}),reset:function(){c.reset.call(this);var e=this.cfg,t=e.iv,e=e.mode;if(this._xformMode==this._ENC_XFORM_MODE)var n=e.createEncryptor;else n=e.createDecryptor,this._minBufferSize=1;this._mode=n.call(e,this,t&&t.words)},_doProcessBlock:function(e,t){this._mode.processBlock(e,t)},_doFinalize:function(){var e=this.cfg.padding;if(this._xformMode==this._ENC_XFORM_MODE){e.pad(this._data,this.blockSize);var t=this._process(!0)}else t=this._process(!0),e.unpad(t);return t},blockSize:4});var d=r.CipherParams=i.extend({init:function(e){this.mixIn(e)},toString:function(e){return(e||this.formatter).stringify(this)}}),l=(t.format={}).OpenSSL={stringify:function(e){var t=e.ciphertext;return e=e.salt,(e?s.create([1398893684,1701076831]).concat(e).concat(t):t).toString(a)},parse:function(e){e=a.parse(e);var t=e.words;if(1398893684==t[0]&&1701076831==t[1]){var n=s.create(t.slice(2,4));t.splice(0,4),e.sigBytes-=16}return d.create({ciphertext:e,salt:n})}},p=r.SerializableCipher=i.extend({cfg:i.extend({format:l}),encrypt:function(e,t,n,r){r=this.cfg.extend(r);var i=e.createEncryptor(n,r);return t=i.finalize(t),i=i.cfg,d.create({ciphertext:t,key:n,iv:i.iv,algorithm:e,mode:i.mode,padding:i.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}}),t=(t.kdf={}).OpenSSL={execute:function(e,t,n,r){return r||(r=s.random(8)),e=u.create({keySize:t+n}).compute(e,r),n=s.create(e.words.slice(t),4*n),e.sigBytes=4*t,d.create({key:e,iv:n,salt:r})}},g=r.PasswordBasedCipher=p.extend({cfg:p.cfg.extend({kdf:t}),encrypt:function(e,t,n,r){return r=this.cfg.extend(r),n=r.kdf.execute(n,e.keySize,e.ivSize),r.iv=n.iv,e=p.encrypt.call(this,e,t,n.key,r),e.mixIn(n),e},decrypt:function(e,t,n,r){return r=this.cfg.extend(r),t=this._parse(t,r.format),n=r.kdf.execute(n,e.keySize,e.ivSize,t.salt),r.iv=n.iv,p.decrypt.call(this,e,t,n.key,r)}})}(),function(){for(var e=n,t=e.lib.BlockCipher,r=e.algo,i=[],s=[],o=[],a=[],u=[],c=[],l=[],h=[],f=[],d=[],p=[],g=0;256>g;g++)p[g]=128>g?g<<1:g<<1^283;for(var y=0,b=0,g=0;256>g;g++){var v=b^b<<1^b<<2^b<<3^b<<4,v=v>>>8^255&v^99;i[y]=v,s[v]=y;var _=p[y],m=p[_],k=p[m],P=257*p[v]^16843008*v;o[y]=P<<24|P>>>8,a[y]=P<<16|P>>>16,u[y]=P<<8|P>>>24,c[y]=P,P=16843009*k^65537*m^257*_^16843008*y,l[v]=P<<24|P>>>8,h[v]=P<<16|P>>>16,f[v]=P<<8|P>>>24,d[v]=P,y?(y=_^p[p[p[k^_]]],b^=p[p[b]]):y=b=1}var S=[0,1,2,4,8,16,32,64,128,27,54],r=r.AES=t.extend({_doReset:function(){for(var e=this._key,t=e.words,n=e.sigBytes/4,e=4*((this._nRounds=n+6)+1),r=this._keySchedule=[],s=0;s>>24]<<24|i[o>>>16&255]<<16|i[o>>>8&255]<<8|i[255&o]):(o=o<<8|o>>>24,o=i[o>>>24]<<24|i[o>>>16&255]<<16|i[o>>>8&255]<<8|i[255&o],o^=S[s/n|0]<<24),r[s]=r[s-n]^o}for(t=this._invKeySchedule=[],n=0;nn||4>=s?o:l[i[o>>>24]]^h[i[o>>>16&255]]^f[i[o>>>8&255]]^d[i[255&o]]},encryptBlock:function(e,t){this._doCryptBlock(e,t,this._keySchedule,o,a,u,c,i)},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,h,f,d,s),n=e[t+1],e[t+1]=e[t+3],e[t+3]=n},_doCryptBlock:function(e,t,n,r,i,s,o,a){for(var u=this._nRounds,c=e[t]^n[0],l=e[t+1]^n[1],h=e[t+2]^n[2],f=e[t+3]^n[3],d=4,p=1;p>>24]^i[l>>>16&255]^s[h>>>8&255]^o[255&f]^n[d++],y=r[l>>>24]^i[h>>>16&255]^s[f>>>8&255]^o[255&c]^n[d++],b=r[h>>>24]^i[f>>>16&255]^s[c>>>8&255]^o[255&l]^n[d++],f=r[f>>>24]^i[c>>>16&255]^s[l>>>8&255]^o[255&h]^n[d++],c=g,l=y,h=b;g=(a[c>>>24]<<24|a[l>>>16&255]<<16|a[h>>>8&255]<<8|a[255&f])^n[d++],y=(a[l>>>24]<<24|a[h>>>16&255]<<16|a[f>>>8&255]<<8|a[255&c])^n[d++],b=(a[h>>>24]<<24|a[f>>>16&255]<<16|a[c>>>8&255]<<8|a[255&l])^n[d++],f=(a[f>>>24]<<24|a[c>>>16&255]<<16|a[l>>>8&255]<<8|a[255&h])^n[d++],e[t]=g,e[t+1]=y,e[t+2]=b,e[t+3]=f},keySize:8});e.AES=t._createHelper(r)}(),n.mode.ECB=function(){var e=n.lib.BlockCipherMode.extend();return e.Encryptor=e.extend({processBlock:function(e,t){this._cipher.encryptBlock(e,t)}}),e.Decryptor=e.extend({processBlock:function(e,t){this._cipher.decryptBlock(e,t)}}),e}(),e.exports=n},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var s=function(){function e(e,t){for(var n=0;n=o){var u={};u.category=y.default.PNRequestMessageCountExceededCategory,u.operation=e.operation,this._listenerManager.announceStatus(u)}i.forEach(function(e){var t=e.channel,r=e.subscriptionMatch,i=e.publishMetaData;if(t===r&&(r=null),a){if(n._dedupingManager.isDuplicate(e))return;n._dedupingManager.addEntry(e)}if(p.default.endsWith(e.channel,"-pnpres")){var s={};s.channel=null,s.subscription=null,s.actualChannel=null!=r?t:null,s.subscribedChannel=null!=r?r:t,t&&(s.channel=t.substring(0,t.lastIndexOf("-pnpres"))),r&&(s.subscription=r.substring(0,r.lastIndexOf("-pnpres"))),s.action=e.payload.action,s.state=e.payload.data,s.timetoken=i.publishTimetoken,s.occupancy=e.payload.occupancy,s.uuid=e.payload.uuid,s.timestamp=e.payload.timestamp,e.payload.join&&(s.join=e.payload.join),e.payload.leave&&(s.leave=e.payload.leave),e.payload.timeout&&(s.timeout=e.payload.timeout),n._listenerManager.announcePresence(s)}else{var o={};o.channel=null,o.subscription=null,o.actualChannel=null!=r?t:null,o.subscribedChannel=null!=r?r:t,o.channel=t,o.subscription=r,o.timetoken=i.publishTimetoken,o.publisher=e.issuingClientId,e.userMetadata&&(o.userMetadata=e.userMetadata),n._config.cipherKey?o.message=n._crypto.decrypt(e.payload):o.message=e.payload,n._listenerManager.announceMessage(o)}}),this._region=t.metadata.region,this._startSubscribeLoop()}},{key:"_stopSubscribeLoop",value:function(){this._subscribeCall&&("function"==typeof this._subscribeCall.abort&&this._subscribeCall.abort(),this._subscribeCall=null)}}]),e}();t.default=b,e.exports=t.default},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n=this._config.maximumCacheSize&&this.hashHistory.shift(),this.hashHistory.push(this.getKey(e))}},{key:"clearHistory",value:function(){this.hashHistory=[]}}]),e}();t.default=a,e.exports=t.default},function(e,t){"use strict";function n(e){var t=[];return Object.keys(e).forEach(function(e){return t.push(e)}),t}function r(e){return encodeURIComponent(e).replace(/[!~*'()]/g,function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()})}function i(e){return n(e).sort()}function s(e){return i(e).map(function(t){return t+"="+r(e[t])}).join("&")}function o(e,t){return-1!==e.indexOf(t,this.length-t.length)}function a(){var e=void 0,t=void 0;return{promise:new Promise(function(n,r){e=n,t=r}),reject:t,fulfill:e}}e.exports={signPamFromParams:s,endsWith:o,createPromise:a,encodeString:r}},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function o(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function a(e,t){return e.type=t,e.error=!0,e}function u(e){return a({message:e},"validationError")}function c(e,t,n){return e.usePost&&e.usePost(t,n)?e.postURL(t,n):e.getURL(t,n)}function l(e){if(e.sdkName)return e.sdkName;var t="PubNub-JS-"+e.sdkFamily;return e.partnerId&&(t+="-"+e.partnerId),t+="/"+e.getVersion()}function h(e,t,n){var r=e.config,i=e.crypto;n.timestamp=Math.floor((new Date).getTime()/1e3);var s=r.subscribeKey+"\n"+r.publishKey+"\n"+t+"\n";s+=g.default.signPamFromParams(n);var o=i.HMACSHA256(s);o=o.replace(/\+/g,"-"),o=o.replace(/\//g,"_"),n.signature=o}Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){var n=e.networking,r=e.config,i=null,s=null,o={};t.getOperation()===v.default.PNTimeOperation||t.getOperation()===v.default.PNChannelGroupsOperation?i=arguments.length<=2?void 0:arguments[2]:(o=arguments.length<=2?void 0:arguments[2],i=arguments.length<=3?void 0:arguments[3]),"undefined"==typeof Promise||i||(s=g.default.createPromise());var a=t.validateParams(e,o);if(!a){var f=t.prepareParams(e,o),p=c(t,e,o),y=void 0,b={url:p,operation:t.getOperation(),timeout:t.getRequestTimeout(e)};f.uuid=r.UUID,f.pnsdk=l(r),r.useInstanceId&&(f.instanceid=r.instanceId),r.useRequestId&&(f.requestid=d.default.createUUID()),t.isAuthSupported()&&r.getAuthKey()&&(f.auth=r.getAuthKey()),r.secretKey&&h(e,p,f);var m=function(n,r){if(n.error)return void(i?i(n):s&&s.reject(new _("PubNub call failed, check status for details",n)));var a=t.handleResponse(e,r,o);i?i(n,a):s&&s.fulfill(a)};if(t.usePost&&t.usePost(e,o)){var k=t.postPayload(e,o);y=n.POST(f,k,b,m)}else y=t.useDelete&&t.useDelete()?n.DELETE(f,b,m):n.GET(f,b,m);return t.getOperation()===v.default.PNSubscribeOperation?y:s?s.promise:void 0}return i?i(u(a)):s?(s.reject(new _("Validation failed, check status for details",u(a))),s.promise):void 0};var f=n(3),d=r(f),p=(n(5),n(15)),g=r(p),y=n(2),b=(r(y),n(13)),v=r(b),_=function(e){function t(e,n){i(this,t);var r=s(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return r.name=r.constructor.name,r.status=n,r.message=e,r}return o(t,e),t}(Error);e.exports=t.default},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return f.default.PNAddChannelsToGroupOperation}function s(e,t){var n=t.channels,r=t.channelGroup,i=e.config;return r?n&&0!==n.length?i.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channels":"Missing Channel Group"}function o(e,t){var n=t.channelGroup;return"/v1/channel-registration/sub-key/"+e.config.subscribeKey+"/channel-group/"+p.default.encodeString(n)}function a(e){return e.config.getTransactionTimeout()}function u(){return!0}function c(e,t){var n=t.channels;return{add:(void 0===n?[]:n).join(",")}}function l(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=s,t.getURL=o,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var h=(n(5),n(13)),f=r(h),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return f.default.PNRemoveChannelsFromGroupOperation}function s(e,t){var n=t.channels,r=t.channelGroup,i=e.config;return r?n&&0!==n.length?i.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channels":"Missing Channel Group"}function o(e,t){var n=t.channelGroup;return"/v1/channel-registration/sub-key/"+e.config.subscribeKey+"/channel-group/"+p.default.encodeString(n)}function a(e){return e.config.getTransactionTimeout()}function u(){return!0}function c(e,t){var n=t.channels;return{remove:(void 0===n?[]:n).join(",")}}function l(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=s,t.getURL=o,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var h=(n(5),n(13)),f=r(h),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return f.default.PNRemoveGroupOperation}function s(e,t){var n=t.channelGroup,r=e.config;return n?r.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channel Group"}function o(e,t){var n=t.channelGroup;return"/v1/channel-registration/sub-key/"+e.config.subscribeKey+"/channel-group/"+p.default.encodeString(n)+"/remove"}function a(){return!0}function u(e){return e.config.getTransactionTimeout()}function c(){return{}}function l(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=s,t.getURL=o,t.isAuthSupported=a,t.getRequestTimeout=u,t.prepareParams=c,t.handleResponse=l;var h=(n(5),n(13)),f=r(h),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(){return h.default.PNChannelGroupsOperation}function i(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function s(e){return"/v1/channel-registration/sub-key/"+e.config.subscribeKey+"/channel-group"}function o(e){return e.config.getTransactionTimeout()}function a(){return!0}function u(){return{}}function c(e,t){return{groups:t.payload.groups}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=s,t.getRequestTimeout=o,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),h=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return f.default.PNChannelsForGroupOperation}function s(e,t){var n=t.channelGroup,r=e.config;return n?r.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channel Group"}function o(e,t){var n=t.channelGroup;return"/v1/channel-registration/sub-key/"+e.config.subscribeKey+"/channel-group/"+p.default.encodeString(n)}function a(e){return e.config.getTransactionTimeout()}function u(){return!0}function c(){return{}}function l(e,t){return{channels:t.payload.channels}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=s,t.getURL=o,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var h=(n(5),n(13)),f=r(h),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(){return h.default.PNPushNotificationEnabledChannelsOperation}function i(e,t){var n=t.device,r=t.pushGateway,i=t.channels,s=e.config;return n?r?i&&0!==i.length?s.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channels":"Missing GW Type (pushGateway: gcm or apns)":"Missing Device ID (device)"}function s(e,t){var n=t.device;return"/v1/push/sub-key/"+e.config.subscribeKey+"/devices/"+n}function o(e){return e.config.getTransactionTimeout()}function a(){return!0}function u(e,t){var n=t.pushGateway,r=t.channels;return{type:n,add:(void 0===r?[]:r).join(",")}}function c(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=s,t.getRequestTimeout=o,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),h=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(){return h.default.PNPushNotificationEnabledChannelsOperation}function i(e,t){var n=t.device,r=t.pushGateway,i=t.channels,s=e.config;return n?r?i&&0!==i.length?s.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channels":"Missing GW Type (pushGateway: gcm or apns)":"Missing Device ID (device)"}function s(e,t){var n=t.device;return"/v1/push/sub-key/"+e.config.subscribeKey+"/devices/"+n}function o(e){return e.config.getTransactionTimeout()}function a(){return!0}function u(e,t){var n=t.pushGateway,r=t.channels;return{type:n,remove:(void 0===r?[]:r).join(",")}}function c(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=s,t.getRequestTimeout=o,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),h=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(){return h.default.PNPushNotificationEnabledChannelsOperation}function i(e,t){var n=t.device,r=t.pushGateway,i=e.config;return n?r?i.subscribeKey?void 0:"Missing Subscribe Key":"Missing GW Type (pushGateway: gcm or apns)":"Missing Device ID (device)"}function s(e,t){var n=t.device;return"/v1/push/sub-key/"+e.config.subscribeKey+"/devices/"+n}function o(e){return e.config.getTransactionTimeout()}function a(){return!0}function u(e,t){return{type:t.pushGateway}}function c(e,t){return{channels:t}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=s,t.getRequestTimeout=o,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),h=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(){return h.default.PNRemoveAllPushNotificationsOperation}function i(e,t){var n=t.device,r=t.pushGateway,i=e.config;return n?r?i.subscribeKey?void 0:"Missing Subscribe Key":"Missing GW Type (pushGateway: gcm or apns)":"Missing Device ID (device)"}function s(e,t){var n=t.device;return"/v1/push/sub-key/"+e.config.subscribeKey+"/devices/"+n+"/remove"}function o(e){return e.config.getTransactionTimeout()}function a(){return!0}function u(e,t){return{type:t.pushGateway}}function c(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=s,t.getRequestTimeout=o,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),h=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return f.default.PNUnsubscribeOperation}function s(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function o(e,t){var n=e.config,r=t.channels,i=void 0===r?[]:r,s=i.length>0?i.join(","):",";return"/v2/presence/sub-key/"+n.subscribeKey+"/channel/"+p.default.encodeString(s)+"/leave"}function a(e){return e.config.getTransactionTimeout()}function u(){return!0}function c(e,t){var n=t.channelGroups,r=void 0===n?[]:n,i={};return r.length>0&&(i["channel-group"]=r.join(",")),i}function l(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=s,t.getURL=o,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var h=(n(5),n(13)),f=r(h),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(){return h.default.PNWhereNowOperation}function i(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function s(e,t){var n=e.config,r=t.uuid,i=void 0===r?n.UUID:r;return"/v2/presence/sub-key/"+n.subscribeKey+"/uuid/"+i}function o(e){return e.config.getTransactionTimeout()}function a(){return!0}function u(){return{}}function c(e,t){return t.payload?{channels:t.payload.channels}:{channels:[]}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=s,t.getRequestTimeout=o,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),h=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return f.default.PNHeartbeatOperation}function s(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function o(e,t){var n=e.config,r=t.channels,i=void 0===r?[]:r,s=i.length>0?i.join(","):",";return"/v2/presence/sub-key/"+n.subscribeKey+"/channel/"+p.default.encodeString(s)+"/heartbeat"}function a(){return!0}function u(e){return e.config.getTransactionTimeout()}function c(e,t){var n=t.channelGroups,r=void 0===n?[]:n,i=t.state,s=void 0===i?{}:i,o=e.config,a={};return r.length>0&&(a["channel-group"]=r.join(",")),a.state=JSON.stringify(s),a.heartbeat=o.getPresenceTimeout(),a}function l(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=s,t.getURL=o,t.isAuthSupported=a,t.getRequestTimeout=u,t.prepareParams=c,t.handleResponse=l;var h=(n(5),n(13)),f=r(h),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return f.default.PNGetStateOperation}function s(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function o(e,t){var n=e.config,r=t.uuid,i=void 0===r?n.UUID:r,s=t.channels,o=void 0===s?[]:s,a=o.length>0?o.join(","):",";return"/v2/presence/sub-key/"+n.subscribeKey+"/channel/"+p.default.encodeString(a)+"/uuid/"+i}function a(e){return e.config.getTransactionTimeout()}function u(){return!0}function c(e,t){var n=t.channelGroups,r=void 0===n?[]:n,i={};return r.length>0&&(i["channel-group"]=r.join(",")),i}function l(e,t,n){var r=n.channels,i=void 0===r?[]:r,s=n.channelGroups,o=void 0===s?[]:s,a={};return 1===i.length&&0===o.length?a[i[0]]=t.payload:a=t.payload,{channels:a}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=s,t.getURL=o,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var h=(n(5),n(13)),f=r(h),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return f.default.PNSetStateOperation}function s(e,t){var n=e.config,r=t.state,i=t.channels,s=void 0===i?[]:i,o=t.channelGroups,a=void 0===o?[]:o;return r?n.subscribeKey?0===s.length&&0===a.length?"Please provide a list of channels and/or channel-groups":void 0:"Missing Subscribe Key":"Missing State"}function o(e,t){var n=e.config,r=t.channels,i=void 0===r?[]:r,s=i.length>0?i.join(","):",";return"/v2/presence/sub-key/"+n.subscribeKey+"/channel/"+p.default.encodeString(s)+"/uuid/"+n.UUID+"/data"}function a(e){return e.config.getTransactionTimeout()}function u(){return!0}function c(e,t){var n=t.state,r=t.channelGroups,i=void 0===r?[]:r,s={};return s.state=JSON.stringify(n),i.length>0&&(s["channel-group"]=i.join(",")),s}function l(e,t){return{state:t.payload}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=s,t.getURL=o,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var h=(n(5),n(13)),f=r(h),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return f.default.PNHereNowOperation}function s(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function o(e,t){var n=e.config,r=t.channels,i=void 0===r?[]:r,s=t.channelGroups,o=void 0===s?[]:s,a="/v2/presence/sub-key/"+n.subscribeKey;if(i.length>0||o.length>0){var u=i.length>0?i.join(","):",";a+="/channel/"+p.default.encodeString(u)}return a}function a(e){return e.config.getTransactionTimeout()}function u(){return!0}function c(e,t){var n=t.channelGroups,r=void 0===n?[]:n,i=t.includeUUIDs,s=void 0===i||i,o=t.includeState,a=void 0!==o&&o,u={};return s||(u.disable_uuids=1),a&&(u.state=1),r.length>0&&(u["channel-group"]=r.join(",")),u}function l(e,t,n){var r=n.channels,i=void 0===r?[]:r,s=n.channelGroups,o=void 0===s?[]:s,a=n.includeUUIDs,u=void 0===a||a,c=n.includeState,l=void 0!==c&&c;return i.length>1||o.length>0||0===o.length&&0===i.length?function(){var e={};return e.totalChannels=t.payload.total_channels,e.totalOccupancy=t.payload.total_occupancy,e.channels={},Object.keys(t.payload.channels).forEach(function(n){var r=t.payload.channels[n],i=[];return e.channels[n]={occupants:i,name:n,occupancy:r.occupancy},u&&r.uuids.forEach(function(e){l?i.push({state:e.state,uuid:e.uuid}):i.push({state:null,uuid:e})}),e}),e}():function(){var e={},n=[];return e.totalChannels=1,e.totalOccupancy=t.occupancy,e.channels={},e.channels[i[0]]={occupants:n,name:i[0],occupancy:t.occupancy},u&&t.uuids&&t.uuids.forEach(function(e){l?n.push({state:e.state,uuid:e.uuid}):n.push({state:null,uuid:e})}),e}()}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=s,t.getURL=o,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var h=(n(5),n(13)),f=r(h),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(){return h.default.PNAccessManagerAudit}function i(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function s(e){return"/v2/auth/audit/sub-key/"+e.config.subscribeKey}function o(e){return e.config.getTransactionTimeout()}function a(){return!1}function u(e,t){var n=t.channel,r=t.channelGroup,i=t.authKeys,s=void 0===i?[]:i,o={};return n&&(o.channel=n),r&&(o["channel-group"]=r),s.length>0&&(o.auth=s.join(",")),o}function c(e,t){return t.payload}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=s,t.getRequestTimeout=o,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),h=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(){return h.default.PNAccessManagerGrant}function i(e){var t=e.config;return t.subscribeKey?t.publishKey?t.secretKey?void 0:"Missing Secret Key":"Missing Publish Key":"Missing Subscribe Key"}function s(e){return"/v2/auth/grant/sub-key/"+e.config.subscribeKey}function o(e){return e.config.getTransactionTimeout()}function a(){return!1}function u(e,t){var n=t.channels,r=void 0===n?[]:n,i=t.channelGroups,s=void 0===i?[]:i,o=t.ttl,a=t.read,u=void 0!==a&&a,c=t.write,l=void 0!==c&&c,h=t.manage,f=void 0!==h&&h,d=t.authKeys,p=void 0===d?[]:d,g={};return g.r=u?"1":"0",g.w=l?"1":"0",g.m=f?"1":"0",r.length>0&&(g.channel=r.join(",")),s.length>0&&(g["channel-group"]=s.join(",")),p.length>0&&(g.auth=p.join(",")),(o||0===o)&&(g.ttl=o),g}function c(){return{}} -Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=s,t.getRequestTimeout=o,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),h=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){var n=e.crypto,r=e.config,i=JSON.stringify(t);return r.cipherKey&&(i=n.encrypt(i),i=JSON.stringify(i)),i}function s(){return b.default.PNPublishOperation}function o(e,t){var n=e.config,r=t.message;return t.channel?r?n.subscribeKey?void 0:"Missing Subscribe Key":"Missing Message":"Missing Channel"}function a(e,t){var n=t.sendByPost;return void 0!==n&&n}function u(e,t){var n=e.config,r=t.channel,s=t.message,o=i(e,s);return"/publish/"+n.publishKey+"/"+n.subscribeKey+"/0/"+_.default.encodeString(r)+"/0/"+_.default.encodeString(o)}function c(e,t){var n=e.config,r=t.channel;return"/publish/"+n.publishKey+"/"+n.subscribeKey+"/0/"+_.default.encodeString(r)+"/0"}function l(e){return e.config.getTransactionTimeout()}function h(){return!0}function f(e,t){return i(e,t.message)}function d(e,t){var n=t.meta,r=t.replicate,i=void 0===r||r,s=t.storeInHistory,o=t.ttl,a={};return null!=s&&(a.store=s?"1":"0"),o&&(a.ttl=o),!1===i&&(a.norep="true"),n&&"object"===(void 0===n?"undefined":g(n))&&(a.meta=JSON.stringify(n)),a}function p(e,t){return{timetoken:t[2]}}Object.defineProperty(t,"__esModule",{value:!0});var g="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};t.getOperation=s,t.validateParams=o,t.usePost=a,t.getURL=u,t.postURL=c,t.getRequestTimeout=l,t.isAuthSupported=h,t.postPayload=f,t.prepareParams=d,t.handleResponse=p;var y=(n(5),n(13)),b=r(y),v=n(15),_=r(v)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){var n=e.config,r=e.crypto;if(!n.cipherKey)return t;try{return r.decrypt(t)}catch(e){return t}}function s(){return d.default.PNHistoryOperation}function o(e,t){var n=t.channel,r=e.config;return n?r.subscribeKey?void 0:"Missing Subscribe Key":"Missing channel"}function a(e,t){var n=t.channel;return"/v2/history/sub-key/"+e.config.subscribeKey+"/channel/"+g.default.encodeString(n)}function u(e){return e.config.getTransactionTimeout()}function c(){return!0}function l(e,t){var n=t.start,r=t.end,i=t.reverse,s=t.count,o=void 0===s?100:s,a=t.stringifiedTimeToken,u=void 0!==a&&a,c={include_token:"true"};return c.count=o,n&&(c.start=n),r&&(c.end=r),u&&(c.string_message_token="true"),null!=i&&(c.reverse=i.toString()),c}function h(e,t){var n={messages:[],startTimeToken:t[1],endTimeToken:t[2]};return t[0].forEach(function(t){var r={timetoken:t.timetoken,entry:i(e,t.message)};n.messages.push(r)}),n}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=s,t.validateParams=o,t.getURL=a,t.getRequestTimeout=u,t.isAuthSupported=c,t.prepareParams=l,t.handleResponse=h;var f=(n(5),n(13)),d=r(f),p=n(15),g=r(p)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return d.default.PNDeleteMessagesOperation}function s(e,t){var n=t.channel,r=e.config;return n?r.subscribeKey?void 0:"Missing Subscribe Key":"Missing channel"}function o(){return!0}function a(e,t){var n=t.channel,r=t.start,i=t.end,s=e.config,o="";return r&&(o="?start="+r),i&&(o+=(""!==o?"&":"?")+"end="+i),"/v3/history/sub-key/"+s.subscribeKey+"/channel/"+g.default.encodeString(n)+o}function u(e){return e.config.getTransactionTimeout()}function c(){return!0}function l(e,t){var n=t.start,r=t.end,i={};return n&&(i.start=n),r&&(i.end=r),{}}function h(e,t){return t.payload}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=s,t.useDelete=o,t.getURL=a,t.getRequestTimeout=u,t.isAuthSupported=c,t.prepareParams=l,t.handleResponse=h;var f=(n(5),n(13)),d=r(f),p=n(15),g=r(p)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){var n=e.config,r=e.crypto;if(!n.cipherKey)return t;try{return r.decrypt(t)}catch(e){return t}}function s(){return d.default.PNFetchMessagesOperation}function o(e,t){var n=t.channels,r=e.config;return n&&0!==n.length?r.subscribeKey?void 0:"Missing Subscribe Key":"Missing channels"}function a(e,t){var n=t.channels,r=void 0===n?[]:n,i=e.config,s=r.length>0?r.join(","):",";return"/v3/history/sub-key/"+i.subscribeKey+"/channel/"+g.default.encodeString(s)}function u(e){return e.config.getTransactionTimeout()}function c(){return!0}function l(e,t){var n=t.start,r=t.end,i=t.count,s={};return i&&(s.max=i),n&&(s.start=n),r&&(s.end=r),s}function h(e,t){var n={channels:{}};return Object.keys(t.channels||{}).forEach(function(r){n.channels[r]=[],(t.channels[r]||[]).forEach(function(t){var s={};s.channel=r,s.subscription=null,s.timetoken=t.timetoken,s.message=i(e,t.message),n.channels[r].push(s)})}),n}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=s,t.validateParams=o,t.getURL=a,t.getRequestTimeout=u,t.isAuthSupported=c,t.prepareParams=l,t.handleResponse=h;var f=(n(5),n(13)),d=r(f),p=n(15),g=r(p)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return f.default.PNSubscribeOperation}function s(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function o(e,t){var n=e.config,r=t.channels,i=void 0===r?[]:r,s=i.length>0?i.join(","):",";return"/v2/subscribe/"+n.subscribeKey+"/"+p.default.encodeString(s)+"/0"}function a(e){return e.config.getSubscribeTimeout()}function u(){return!0}function c(e,t){var n=e.config,r=t.channelGroups,i=void 0===r?[]:r,s=t.timetoken,o=t.filterExpression,a=t.region,u={heartbeat:n.getPresenceTimeout()};return i.length>0&&(u["channel-group"]=i.join(",")),o&&o.length>0&&(u["filter-expr"]=o),s&&(u.tt=s),a&&(u.tr=a),u}function l(e,t){var n=[];t.m.forEach(function(e){var t={publishTimetoken:e.p.t,region:e.p.r},r={shard:parseInt(e.a,10),subscriptionMatch:e.b,channel:e.c,payload:e.d,flags:e.f,issuingClientId:e.i,subscribeKey:e.k,originationTimetoken:e.o,userMetadata:e.u,publishMetaData:t};n.push(r)});var r={timetoken:t.t.t,region:t.t.r};return{messages:n,metadata:r}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=s,t.getURL=o,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var h=(n(5),n(13)),f=r(h),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var s=function(){function e(e,t){for(var n=0;n=this._maxSubDomain&&(this._currentSubDomain=1),e=this._currentSubDomain.toString(),this._providedFQDN.replace("pubsub","ps"+e)}},{key:"hasModule",value:function(e){return e in this._modules}},{key:"shiftStandardOrigin",value:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return this._standardOrigin=this.nextOrigin(e),this._standardOrigin}},{key:"getStandardOrigin",value:function(){return this._standardOrigin}},{key:"POST",value:function(e,t,n,r){return this._modules.post(e,t,n,r)}},{key:"GET",value:function(e,t,n){return this._modules.get(e,t,n)}},{key:"DELETE",value:function(e,t,n){return this._modules.del(e,t,n)}},{key:"_detectErrorCategory",value:function(e){if("ENOTFOUND"===e.code)return u.default.PNNetworkIssuesCategory;if("ECONNREFUSED"===e.code)return u.default.PNNetworkIssuesCategory;if("ECONNRESET"===e.code)return u.default.PNNetworkIssuesCategory;if("EAI_AGAIN"===e.code)return u.default.PNNetworkIssuesCategory;if(0===e.status||e.hasOwnProperty("status")&&void 0===e.status)return u.default.PNNetworkIssuesCategory;if(e.timeout)return u.default.PNTimeoutCategory;if(e.response){if(e.response.badRequest)return u.default.PNBadRequestCategory;if(e.response.forbidden)return u.default.PNAccessDeniedCategory}return u.default.PNUnknownCategory}}]),e}());t.default=c,e.exports=t.default},function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={get:function(e){try{return localStorage.getItem(e)}catch(e){return null}},set:function(e,t){try{return localStorage.setItem(e,t)}catch(e){return null}}},e.exports=t.default},function(e,t,n){"use strict";function r(e){var t=(new Date).getTime(),n=(new Date).toISOString(),r=function(){return console&&console.log?console:window&&window.console&&window.console.log?window.console:console}();r.log("<<<<<"),r.log("["+n+"]","\n",e.url,"\n",e.qs),r.log("-----"),e.on("response",function(n){var i=(new Date).getTime(),s=i-t,o=(new Date).toISOString();r.log(">>>>>>"),r.log("["+o+" / "+s+"]","\n",e.url,"\n",e.qs,"\n",n.text),r.log("-----")})}function i(e,t,n){var i=this;return this._config.logVerbosity&&(e=e.use(r)),this._config.proxy&&this._modules.proxy&&(e=this._modules.proxy.call(this,e)),this._config.keepAlive&&this._modules.keepAlive&&(e=this._modules.keepAlive(e)),e.timeout(t.timeout).end(function(e,r){var s={};if(s.error=null!==e,s.operation=t.operation,r&&r.status&&(s.statusCode=r.status),e)return s.errorData=e,s.category=i._detectErrorCategory(e),n(s,null);var o=JSON.parse(r.text);return o.error&&1===o.error&&o.status&&o.message&&o.service?(s.errorData=o,s.statusCode=o.status,s.error=!0,s.category=i._detectErrorCategory(s),n(s,null)):n(s,o)})}function s(e,t,n){var r=c.default.get(this.getStandardOrigin()+t.url).query(e);return i.call(this,r,t,n)}function o(e,t,n,r){var s=c.default.post(this.getStandardOrigin()+n.url).query(e).send(t);return i.call(this,s,n,r)}function a(e,t,n){var r=c.default.delete(this.getStandardOrigin()+t.url).query(e);return i.call(this,r,t,n)}Object.defineProperty(t,"__esModule",{value:!0}),t.get=s,t.post=o,t.del=a;var u=n(42),c=function(e){return e&&e.__esModule?e:{default:e}}(u);n(5)},function(e,t,n){function r(){}function i(e){if(!b(e))return e;var t=[];for(var n in e)s(t,n,e[n]);return t.join("&")}function s(e,t,n){if(null!=n)if(Array.isArray(n))n.forEach(function(n){s(e,t,n)});else if(b(n))for(var r in n)s(e,t+"["+r+"]",n[r]);else e.push(encodeURIComponent(t)+"="+encodeURIComponent(n));else null===n&&e.push(encodeURIComponent(t))}function o(e){for(var t,n,r={},i=e.split("&"),s=0,o=i.length;s=300)&&(r=new Error(t.statusText||"Unsuccessful HTTP response"),r.original=e,r.response=t,r.status=t.status)}catch(e){r=e}r?n.callback(r,t):n.callback(null,t)})}function d(e,t){var n=v("DELETE",e);return t&&n.end(t),n}var p;"undefined"!=typeof window?p=window:"undefined"!=typeof self?p=self:(console.warn("Using browser-only version of superagent in non-browser environment"),p=this);var g=n(43),y=n(44),b=n(45),v=e.exports=n(46).bind(null,f);v.getXHR=function(){if(!(!p.XMLHttpRequest||p.location&&"file:"==p.location.protocol&&p.ActiveXObject))return new XMLHttpRequest;try{return new ActiveXObject("Microsoft.XMLHTTP")}catch(e){}try{return new ActiveXObject("Msxml2.XMLHTTP.6.0")}catch(e){}try{return new ActiveXObject("Msxml2.XMLHTTP.3.0")}catch(e){}try{return new ActiveXObject("Msxml2.XMLHTTP")}catch(e){}throw Error("Browser-only verison of superagent could not find XHR")};var _="".trim?function(e){return e.trim()}:function(e){return e.replace(/(^\s*|\s*$)/g,"")};v.serializeObject=i,v.parseString=o,v.types={html:"text/html",json:"application/json",xml:"application/xml",urlencoded:"application/x-www-form-urlencoded",form:"application/x-www-form-urlencoded","form-data":"application/x-www-form-urlencoded"},v.serialize={"application/x-www-form-urlencoded":i,"application/json":JSON.stringify},v.parse={"application/x-www-form-urlencoded":o,"application/json":JSON.parse},h.prototype.get=function(e){return this.header[e.toLowerCase()]},h.prototype._setHeaderProperties=function(e){var t=this.header["content-type"]||"";this.type=c(t);var n=l(t);for(var r in n)this[r]=n[r]},h.prototype._parseBody=function(e){var t=v.parse[this.type];return!t&&u(this.type)&&(t=v.parse["application/json"]),t&&e&&(e.length||e instanceof Object)?t(e):null},h.prototype._setStatusProperties=function(e){1223===e&&(e=204);var t=e/100|0;this.status=this.statusCode=e,this.statusType=t,this.info=1==t,this.ok=2==t,this.clientError=4==t,this.serverError=5==t,this.error=(4==t||5==t)&&this.toError(),this.accepted=202==e,this.noContent=204==e,this.badRequest=400==e,this.unauthorized=401==e,this.notAcceptable=406==e,this.notFound=404==e,this.forbidden=403==e},h.prototype.toError=function(){var e=this.req,t=e.method,n=e.url,r="cannot "+t+" "+n+" ("+this.status+")",i=new Error(r);return i.status=this.status,i.method=t,i.url=n,i},v.Response=h,g(f.prototype);for(var m in y)f.prototype[m]=y[m];f.prototype.type=function(e){return this.set("Content-Type",v.types[e]||e),this},f.prototype.responseType=function(e){return this._responseType=e,this},f.prototype.accept=function(e){return this.set("Accept",v.types[e]||e),this},f.prototype.auth=function(e,t,n){switch(n||(n={type:"basic"}),n.type){case"basic":var r=btoa(e+":"+t);this.set("Authorization","Basic "+r);break;case"auto":this.username=e,this.password=t}return this},f.prototype.query=function(e){return"string"!=typeof e&&(e=i(e)),e&&this._query.push(e),this},f.prototype.attach=function(e,t,n){return this._getFormData().append(e,t,n||t.name),this},f.prototype._getFormData=function(){return this._formData||(this._formData=new p.FormData),this._formData},f.prototype.callback=function(e,t){var n=this._callback;this.clearTimeout(),n(e,t)},f.prototype.crossDomainError=function(){var e=new Error("Request has been terminated\nPossible causes: the network is offline, Origin is not allowed by Access-Control-Allow-Origin, the page is being unloaded, etc.");e.crossDomain=!0,e.status=this.status,e.method=this.method,e.url=this.url,this.callback(e)},f.prototype._timeoutError=function(){var e=this._timeout,t=new Error("timeout of "+e+"ms exceeded");t.timeout=e,this.callback(t)},f.prototype._appendQueryString=function(){var e=this._query.join("&");e&&(this.url+=~this.url.indexOf("?")?"&"+e:"?"+e)},f.prototype.end=function(e){var t=this,n=this.xhr=v.getXHR(),i=this._timeout,s=this._formData||this._data;this._callback=e||r,n.onreadystatechange=function(){if(4==n.readyState){var e;try{e=n.status}catch(t){e=0}if(0==e){if(t.timedout)return t._timeoutError();if(t._aborted)return;return t.crossDomainError()}t.emit("end")}};var o=function(e,n){n.total>0&&(n.percent=n.loaded/n.total*100),n.direction=e,t.emit("progress",n)};if(this.hasListeners("progress"))try{n.onprogress=o.bind(null,"download"),n.upload&&(n.upload.onprogress=o.bind(null,"upload"))}catch(e){}if(i&&!this._timer&&(this._timer=setTimeout(function(){t.timedout=!0,t.abort()},i)),this._appendQueryString(),this.username&&this.password?n.open(this.method,this.url,!0,this.username,this.password):n.open(this.method,this.url,!0),this._withCredentials&&(n.withCredentials=!0),"GET"!=this.method&&"HEAD"!=this.method&&"string"!=typeof s&&!this._isHost(s)){var a=this._header["content-type"],c=this._serializer||v.serialize[a?a.split(";")[0]:""];!c&&u(a)&&(c=v.serialize["application/json"]),c&&(s=c(s))}for(var l in this.header)null!=this.header[l]&&n.setRequestHeader(l,this.header[l]);return this._responseType&&(n.responseType=this._responseType),this.emit("request",this),n.send(void 0!==s?s:null),this},v.Request=f,v.get=function(e,t,n){var r=v("GET",e);return"function"==typeof t&&(n=t,t=null),t&&r.query(t),n&&r.end(n),r},v.head=function(e,t,n){var r=v("HEAD",e);return"function"==typeof t&&(n=t,t=null),t&&r.send(t),n&&r.end(n),r},v.options=function(e,t,n){var r=v("OPTIONS",e);return"function"==typeof t&&(n=t,t=null),t&&r.send(t),n&&r.end(n),r},v.del=d,v.delete=d,v.patch=function(e,t,n){var r=v("PATCH",e);return"function"==typeof t&&(n=t,t=null),t&&r.send(t),n&&r.end(n),r},v.post=function(e,t,n){var r=v("POST",e);return"function"==typeof t&&(n=t,t=null),t&&r.send(t),n&&r.end(n),r},v.put=function(e,t,n){var r=v("PUT",e);return"function"==typeof t&&(n=t,t=null),t&&r.send(t),n&&r.end(n),r}},function(e,t,n){function r(e){if(e)return i(e)}function i(e){for(var t in r.prototype)e[t]=r.prototype[t];return e}e.exports=r,r.prototype.on=r.prototype.addEventListener=function(e,t){return this._callbacks=this._callbacks||{},(this._callbacks["$"+e]=this._callbacks["$"+e]||[]).push(t),this},r.prototype.once=function(e,t){function n(){this.off(e,n),t.apply(this,arguments)}return n.fn=t,this.on(e,n),this},r.prototype.off=r.prototype.removeListener=r.prototype.removeAllListeners=r.prototype.removeEventListener=function(e,t){if(this._callbacks=this._callbacks||{},0==arguments.length)return this._callbacks={},this;var n=this._callbacks["$"+e];if(!n)return this;if(1==arguments.length)return delete this._callbacks["$"+e],this;for(var r,i=0;i>>2]|=(n[i>>>2]>>>24-i%4*8&255)<<24-(r+i)%4*8;else if(65535>>2]=n[i>>>2];else t.push.apply(t,n);return this.sigBytes+=e,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=s.clone.call(this);return e.words=this.words.slice(0),e},random:function(t){for(var n=[],r=0;r>>2]>>>24-r%4*8&255;n.push((i>>>4).toString(16)),n.push((15&i).toString(16))}return n.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 o.init(n,t/2)}},c=a.Latin1={stringify:function(e){var t=e.words;e=e.sigBytes;for(var n=[],r=0;r>>2]>>>24-r%4*8&255));return n.join("")},parse:function(e){for(var t=e.length,n=[],r=0;r>>2]|=(255&e.charCodeAt(r))<<24-r%4*8;return new o.init(n,t)}},l=a.Utf8={stringify:function(e){try{return decodeURIComponent(escape(c.stringify(e)))}catch(e){throw Error("Malformed UTF-8 data")}},parse:function(e){return c.parse(unescape(encodeURIComponent(e)))}},h=r.BufferedBlockAlgorithm=s.extend({reset:function(){this._data=new o.init,this._nDataBytes=0},_append:function(e){"string"==typeof e&&(e=l.parse(e)),this._data.concat(e),this._nDataBytes+=e.sigBytes},_process:function(t){var n=this._data,r=n.words,i=n.sigBytes,s=this.blockSize,a=i/(4*s),a=t?e.ceil(a):e.max((0|a)-this._minBufferSize,0);if(t=a*s,i=e.min(4*t,i),t){for(var u=0;ul;){var h;e:{h=c;for(var f=e.sqrt(h),d=2;d<=f;d++)if(!(h%d)){h=!1;break e}h=!0}h&&(8>l&&(o[l]=u(e.pow(c,.5))),a[l]=u(e.pow(c,1/3)),l++),c++}var p=[],r=r.SHA256=s.extend({_doReset:function(){this._hash=new i.init(o.slice(0))},_doProcessBlock:function(e,t){for(var n=this._hash.words,r=n[0],i=n[1],s=n[2],o=n[3],u=n[4],c=n[5],l=n[6],h=n[7],f=0;64>f;f++){if(16>f)p[f]=0|e[t+f];else{var d=p[f-15],g=p[f-2];p[f]=((d<<25|d>>>7)^(d<<14|d>>>18)^d>>>3)+p[f-7]+((g<<15|g>>>17)^(g<<13|g>>>19)^g>>>10)+p[f-16]}d=h+((u<<26|u>>>6)^(u<<21|u>>>11)^(u<<7|u>>>25))+(u&c^~u&l)+a[f]+p[f],g=((r<<30|r>>>2)^(r<<19|r>>>13)^(r<<10|r>>>22))+(r&i^r&s^i&s),h=l,l=c,c=u,u=o+d|0,o=s,s=i,i=r,r=d+g|0}n[0]=n[0]+r|0,n[1]=n[1]+i|0,n[2]=n[2]+s|0,n[3]=n[3]+o|0,n[4]=n[4]+u|0,n[5]=n[5]+c|0,n[6]=n[6]+l|0,n[7]=n[7]+h|0},_doFinalize:function(){var t=this._data,n=t.words,r=8*this._nDataBytes,i=8*t.sigBytes;return n[i>>>5]|=128<<24-i%32,n[14+(i+64>>>9<<4)]=e.floor(r/4294967296),n[15+(i+64>>>9<<4)]=r,t.sigBytes=4*n.length,this._process(),this._hash},clone:function(){var e=s.clone.call(this);return e._hash=this._hash.clone(),e}});t.SHA256=s._createHelper(r),t.HmacSHA256=s._createHmacHelper(r)}(Math),function(){var e=n,t=e.enc.Utf8;e.algo.HMAC=e.lib.Base.extend({init:function(e,n){e=this._hasher=new e.init,"string"==typeof n&&(n=t.parse(n));var r=e.blockSize,i=4*r;n.sigBytes>i&&(n=e.finalize(n)),n.clamp();for(var s=this._oKey=n.clone(),o=this._iKey=n.clone(),a=s.words,u=o.words,c=0;c>>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,o=0;4>o&&i+.75*o>>6*(3-o)&63));if(t=r.charAt(64))for(;e.length%4;)e.push(t);return e.join("")},parse:function(e){var n=e.length,r=this._map,i=r.charAt(64);i&&-1!=(i=e.indexOf(i))&&(n=i);for(var i=[],s=0,o=0;o>>6-o%4*2;i[s>>>2]|=(a|u)<<24-s%4*8,s++}return t.create(i,s)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="}}(),function(e){function t(e,t,n,r,i,s,o){return((e=e+(t&n|~t&r)+i+o)<>>32-s)+t}function r(e,t,n,r,i,s,o){return((e=e+(t&r|n&~r)+i+o)<>>32-s)+t}function i(e,t,n,r,i,s,o){return((e=e+(t^n^r)+i+o)<>>32-s)+t}function s(e,t,n,r,i,s,o){return((e=e+(n^(t|~r))+i+o)<>>32-s)+t}for(var o=n,a=o.lib,u=a.WordArray,c=a.Hasher,a=o.algo,l=[],h=0;64>h;h++)l[h]=4294967296*e.abs(e.sin(h+1))|0;a=a.MD5=c.extend({_doReset:function(){this._hash=new u.init([1732584193,4023233417,2562383102,271733878])},_doProcessBlock:function(e,n){for(var o=0;16>o;o++){var a=n+o,u=e[a];e[a]=16711935&(u<<8|u>>>24)|4278255360&(u<<24|u>>>8)}var o=this._hash.words,a=e[n+0],u=e[n+1],c=e[n+2],h=e[n+3],f=e[n+4],d=e[n+5],p=e[n+6],g=e[n+7],y=e[n+8],b=e[n+9],v=e[n+10],_=e[n+11],m=e[n+12],k=e[n+13],P=e[n+14],S=e[n+15],O=o[0],w=o[1],C=o[2],T=o[3],O=t(O,w,C,T,a,7,l[0]),T=t(T,O,w,C,u,12,l[1]),C=t(C,T,O,w,c,17,l[2]),w=t(w,C,T,O,h,22,l[3]),O=t(O,w,C,T,f,7,l[4]),T=t(T,O,w,C,d,12,l[5]),C=t(C,T,O,w,p,17,l[6]),w=t(w,C,T,O,g,22,l[7]),O=t(O,w,C,T,y,7,l[8]),T=t(T,O,w,C,b,12,l[9]),C=t(C,T,O,w,v,17,l[10]),w=t(w,C,T,O,_,22,l[11]),O=t(O,w,C,T,m,7,l[12]),T=t(T,O,w,C,k,12,l[13]),C=t(C,T,O,w,P,17,l[14]),w=t(w,C,T,O,S,22,l[15]),O=r(O,w,C,T,u,5,l[16]),T=r(T,O,w,C,p,9,l[17]),C=r(C,T,O,w,_,14,l[18]),w=r(w,C,T,O,a,20,l[19]),O=r(O,w,C,T,d,5,l[20]),T=r(T,O,w,C,v,9,l[21]),C=r(C,T,O,w,S,14,l[22]),w=r(w,C,T,O,f,20,l[23]),O=r(O,w,C,T,b,5,l[24]),T=r(T,O,w,C,P,9,l[25]),C=r(C,T,O,w,h,14,l[26]),w=r(w,C,T,O,y,20,l[27]),O=r(O,w,C,T,k,5,l[28]),T=r(T,O,w,C,c,9,l[29]),C=r(C,T,O,w,g,14,l[30]),w=r(w,C,T,O,m,20,l[31]),O=i(O,w,C,T,d,4,l[32]),T=i(T,O,w,C,y,11,l[33]),C=i(C,T,O,w,_,16,l[34]),w=i(w,C,T,O,P,23,l[35]),O=i(O,w,C,T,u,4,l[36]),T=i(T,O,w,C,f,11,l[37]),C=i(C,T,O,w,g,16,l[38]),w=i(w,C,T,O,v,23,l[39]),O=i(O,w,C,T,k,4,l[40]),T=i(T,O,w,C,a,11,l[41]),C=i(C,T,O,w,h,16,l[42]),w=i(w,C,T,O,p,23,l[43]),O=i(O,w,C,T,b,4,l[44]),T=i(T,O,w,C,m,11,l[45]),C=i(C,T,O,w,S,16,l[46]),w=i(w,C,T,O,c,23,l[47]),O=s(O,w,C,T,a,6,l[48]),T=s(T,O,w,C,g,10,l[49]),C=s(C,T,O,w,P,15,l[50]),w=s(w,C,T,O,d,21,l[51]),O=s(O,w,C,T,m,6,l[52]),T=s(T,O,w,C,h,10,l[53]),C=s(C,T,O,w,v,15,l[54]),w=s(w,C,T,O,u,21,l[55]),O=s(O,w,C,T,y,6,l[56]),T=s(T,O,w,C,S,10,l[57]),C=s(C,T,O,w,p,15,l[58]),w=s(w,C,T,O,k,21,l[59]),O=s(O,w,C,T,f,6,l[60]),T=s(T,O,w,C,_,10,l[61]),C=s(C,T,O,w,c,15,l[62]),w=s(w,C,T,O,b,21,l[63]);o[0]=o[0]+O|0,o[1]=o[1]+w|0,o[2]=o[2]+C|0,o[3]=o[3]+T|0},_doFinalize:function(){var t=this._data,n=t.words,r=8*this._nDataBytes,i=8*t.sigBytes;n[i>>>5]|=128<<24-i%32;var s=e.floor(r/4294967296);for(n[15+(i+64>>>9<<4)]=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),n[14+(i+64>>>9<<4)]=16711935&(r<<8|r>>>24)|4278255360&(r<<24|r>>>8),t.sigBytes=4*(n.length+1),this._process(),t=this._hash,n=t.words,r=0;4>r;r++)i=n[r],n[r]=16711935&(i<<8|i>>>24)|4278255360&(i<<24|i>>>8);return t},clone:function(){var e=c.clone.call(this);return e._hash=this._hash.clone(),e}}),o.MD5=c._createHelper(a),o.HmacMD5=c._createHmacHelper(a)}(Math),function(){var e=n,t=e.lib,r=t.Base,i=t.WordArray,t=e.algo,s=t.EvpKDF=r.extend({cfg:r.extend({keySize:4,hasher:t.MD5,iterations:1}),init:function(e){this.cfg=this.cfg.extend(e)},compute:function(e,t){for(var n=this.cfg,r=n.hasher.create(),s=i.create(),o=s.words,a=n.keySize,n=n.iterations;o.length>>2]}},r.BlockCipher=c.extend({cfg:c.cfg.extend({mode:l,padding:f}),reset:function(){c.reset.call(this);var e=this.cfg,t=e.iv,e=e.mode;if(this._xformMode==this._ENC_XFORM_MODE)var n=e.createEncryptor;else n=e.createDecryptor,this._minBufferSize=1;this._mode=n.call(e,this,t&&t.words)},_doProcessBlock:function(e,t){this._mode.processBlock(e,t)},_doFinalize:function(){var e=this.cfg.padding;if(this._xformMode==this._ENC_XFORM_MODE){e.pad(this._data,this.blockSize);var t=this._process(!0)}else t=this._process(!0),e.unpad(t);return t},blockSize:4});var d=r.CipherParams=i.extend({init:function(e){this.mixIn(e)},toString:function(e){return(e||this.formatter).stringify(this)}}),l=(t.format={}).OpenSSL={stringify:function(e){var t=e.ciphertext;return e=e.salt,(e?s.create([1398893684,1701076831]).concat(e).concat(t):t).toString(a)},parse:function(e){e=a.parse(e);var t=e.words;if(1398893684==t[0]&&1701076831==t[1]){var n=s.create(t.slice(2,4));t.splice(0,4),e.sigBytes-=16}return d.create({ciphertext:e,salt:n})}},p=r.SerializableCipher=i.extend({cfg:i.extend({format:l}),encrypt:function(e,t,n,r){r=this.cfg.extend(r);var i=e.createEncryptor(n,r);return t=i.finalize(t),i=i.cfg,d.create({ciphertext:t,key:n,iv:i.iv,algorithm:e,mode:i.mode,padding:i.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}}),t=(t.kdf={}).OpenSSL={execute:function(e,t,n,r){return r||(r=s.random(8)),e=u.create({keySize:t+n}).compute(e,r),n=s.create(e.words.slice(t),4*n),e.sigBytes=4*t,d.create({key:e,iv:n,salt:r})}},g=r.PasswordBasedCipher=p.extend({cfg:p.cfg.extend({kdf:t}),encrypt:function(e,t,n,r){return r=this.cfg.extend(r),n=r.kdf.execute(n,e.keySize,e.ivSize),r.iv=n.iv,e=p.encrypt.call(this,e,t,n.key,r),e.mixIn(n),e},decrypt:function(e,t,n,r){return r=this.cfg.extend(r),t=this._parse(t,r.format),n=r.kdf.execute(n,e.keySize,e.ivSize,t.salt),r.iv=n.iv,p.decrypt.call(this,e,t,n.key,r)}})}(),function(){for(var e=n,t=e.lib.BlockCipher,r=e.algo,i=[],s=[],o=[],a=[],u=[],c=[],l=[],h=[],f=[],d=[],p=[],g=0;256>g;g++)p[g]=128>g?g<<1:g<<1^283;for(var y=0,b=0,g=0;256>g;g++){var v=b^b<<1^b<<2^b<<3^b<<4,v=v>>>8^255&v^99;i[y]=v,s[v]=y;var _=p[y],m=p[_],k=p[m],P=257*p[v]^16843008*v;o[y]=P<<24|P>>>8,a[y]=P<<16|P>>>16,u[y]=P<<8|P>>>24,c[y]=P,P=16843009*k^65537*m^257*_^16843008*y,l[v]=P<<24|P>>>8,h[v]=P<<16|P>>>16,f[v]=P<<8|P>>>24,d[v]=P,y?(y=_^p[p[p[k^_]]],b^=p[p[b]]):y=b=1}var S=[0,1,2,4,8,16,32,64,128,27,54],r=r.AES=t.extend({_doReset:function(){for(var e=this._key,t=e.words,n=e.sigBytes/4,e=4*((this._nRounds=n+6)+1),r=this._keySchedule=[],s=0;s>>24]<<24|i[o>>>16&255]<<16|i[o>>>8&255]<<8|i[255&o]):(o=o<<8|o>>>24,o=i[o>>>24]<<24|i[o>>>16&255]<<16|i[o>>>8&255]<<8|i[255&o],o^=S[s/n|0]<<24),r[s]=r[s-n]^o}for(t=this._invKeySchedule=[],n=0;nn||4>=s?o:l[i[o>>>24]]^h[i[o>>>16&255]]^f[i[o>>>8&255]]^d[i[255&o]]},encryptBlock:function(e,t){this._doCryptBlock(e,t,this._keySchedule,o,a,u,c,i)},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,h,f,d,s),n=e[t+1],e[t+1]=e[t+3],e[t+3]=n},_doCryptBlock:function(e,t,n,r,i,s,o,a){for(var u=this._nRounds,c=e[t]^n[0],l=e[t+1]^n[1],h=e[t+2]^n[2],f=e[t+3]^n[3],d=4,p=1;p>>24]^i[l>>>16&255]^s[h>>>8&255]^o[255&f]^n[d++],y=r[l>>>24]^i[h>>>16&255]^s[f>>>8&255]^o[255&c]^n[d++],b=r[h>>>24]^i[f>>>16&255]^s[c>>>8&255]^o[255&l]^n[d++],f=r[f>>>24]^i[c>>>16&255]^s[l>>>8&255]^o[255&h]^n[d++],c=g,l=y,h=b;g=(a[c>>>24]<<24|a[l>>>16&255]<<16|a[h>>>8&255]<<8|a[255&f])^n[d++],y=(a[l>>>24]<<24|a[h>>>16&255]<<16|a[f>>>8&255]<<8|a[255&c])^n[d++],b=(a[h>>>24]<<24|a[f>>>16&255]<<16|a[c>>>8&255]<<8|a[255&l])^n[d++],f=(a[f>>>24]<<24|a[c>>>16&255]<<16|a[l>>>8&255]<<8|a[255&h])^n[d++],e[t]=g,e[t+1]=y,e[t+2]=b,e[t+3]=f},keySize:8});e.AES=t._createHelper(r)}(),n.mode.ECB=function(){var e=n.lib.BlockCipherMode.extend();return e.Encryptor=e.extend({processBlock:function(e,t){this._cipher.encryptBlock(e,t)}}),e.Decryptor=e.extend({processBlock:function(e,t){this._cipher.decryptBlock(e,t)}}),e}(),e.exports=n},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var s=function(){function e(e,t){for(var n=0;n=o){var u={};u.category=y.default.PNRequestMessageCountExceededCategory,u.operation=e.operation,this._listenerManager.announceStatus(u)}i.forEach(function(e){var t=e.channel,r=e.subscriptionMatch,i=e.publishMetaData;if(t===r&&(r=null),a){if(n._dedupingManager.isDuplicate(e))return;n._dedupingManager.addEntry(e)}if(p.default.endsWith(e.channel,"-pnpres")){var s={};s.channel=null,s.subscription=null,s.actualChannel=null!=r?t:null,s.subscribedChannel=null!=r?r:t,t&&(s.channel=t.substring(0,t.lastIndexOf("-pnpres"))),r&&(s.subscription=r.substring(0,r.lastIndexOf("-pnpres"))),s.action=e.payload.action,s.state=e.payload.data,s.timetoken=i.publishTimetoken,s.occupancy=e.payload.occupancy,s.uuid=e.payload.uuid,s.timestamp=e.payload.timestamp,e.payload.join&&(s.join=e.payload.join),e.payload.leave&&(s.leave=e.payload.leave),e.payload.timeout&&(s.timeout=e.payload.timeout),n._listenerManager.announcePresence(s)}else{var o={};o.channel=null,o.subscription=null,o.actualChannel=null!=r?t:null,o.subscribedChannel=null!=r?r:t,o.channel=t,o.subscription=r,o.timetoken=i.publishTimetoken,o.publisher=e.issuingClientId,e.userMetadata&&(o.userMetadata=e.userMetadata),n._config.cipherKey?o.message=n._crypto.decrypt(e.payload):o.message=e.payload,n._listenerManager.announceMessage(o)}}),this._region=t.metadata.region,this._startSubscribeLoop()}},{key:"_stopSubscribeLoop",value:function(){this._subscribeCall&&("function"==typeof this._subscribeCall.abort&&this._subscribeCall.abort(),this._subscribeCall=null)}}]),e}();t.default=b,e.exports=t.default},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n=this._config.maximumCacheSize&&this.hashHistory.shift(),this.hashHistory.push(this.getKey(e))}},{key:"clearHistory",value:function(){this.hashHistory=[]}}]),e}();t.default=a,e.exports=t.default},function(e,t){"use strict";function n(e){var t=[];return Object.keys(e).forEach(function(e){return t.push(e)}),t}function r(e){return encodeURIComponent(e).replace(/[!~*'()]/g,function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()})}function i(e){return n(e).sort()}function s(e){return i(e).map(function(t){return t+"="+r(e[t])}).join("&")}function o(e,t){return-1!==e.indexOf(t,this.length-t.length)}function a(){var e=void 0,t=void 0;return{promise:new Promise(function(n,r){e=n,t=r}),reject:t,fulfill:e}}e.exports={signPamFromParams:s,endsWith:o,createPromise:a,encodeString:r}},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function o(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function a(e,t){return e.type=t,e.error=!0,e}function u(e){return a({message:e},"validationError")}function c(e,t,n){return e.usePost&&e.usePost(t,n)?e.postURL(t,n):e.getURL(t,n)}function l(e){if(e.sdkName)return e.sdkName;var t="PubNub-JS-"+e.sdkFamily;return e.partnerId&&(t+="-"+e.partnerId),t+="/"+e.getVersion()}function h(e,t,n){var r=e.config,i=e.crypto;n.timestamp=Math.floor((new Date).getTime()/1e3);var s=r.subscribeKey+"\n"+r.publishKey+"\n"+t+"\n";s+=g.default.signPamFromParams(n);var o=i.HMACSHA256(s);o=o.replace(/\+/g,"-"),o=o.replace(/\//g,"_"),n.signature=o}Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){var n=e.networking,r=e.config,i=null,s=null,o={};t.getOperation()===v.default.PNTimeOperation||t.getOperation()===v.default.PNChannelGroupsOperation?i=arguments.length<=2?void 0:arguments[2]:(o=arguments.length<=2?void 0:arguments[2],i=arguments.length<=3?void 0:arguments[3]),"undefined"==typeof Promise||i||(s=g.default.createPromise());var a=t.validateParams(e,o);if(!a){var f=t.prepareParams(e,o),p=c(t,e,o),y=void 0,b={url:p,operation:t.getOperation(),timeout:t.getRequestTimeout(e)};f.uuid=r.UUID,f.pnsdk=l(r),r.useInstanceId&&(f.instanceid=r.instanceId),r.useRequestId&&(f.requestid=d.default.createUUID()),t.isAuthSupported()&&r.getAuthKey()&&(f.auth=r.getAuthKey()),r.secretKey&&h(e,p,f);var m=function(n,r){if(n.error)return void(i?i(n):s&&s.reject(new _("PubNub call failed, check status for details",n)));var a=t.handleResponse(e,r,o);i?i(n,a):s&&s.fulfill(a)};if(t.usePost&&t.usePost(e,o)){var k=t.postPayload(e,o);y=n.POST(f,k,b,m)}else y=t.useDelete&&t.useDelete()?n.DELETE(f,b,m):n.GET(f,b,m);return t.getOperation()===v.default.PNSubscribeOperation?y:s?s.promise:void 0}return i?i(u(a)):s?(s.reject(new _("Validation failed, check status for details",u(a))),s.promise):void 0};var f=n(3),d=r(f),p=(n(5),n(15)),g=r(p),y=n(2),b=(r(y),n(13)),v=r(b),_=function(e){function t(e,n){i(this,t);var r=s(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return r.name=r.constructor.name,r.status=n,r.message=e,r}return o(t,e),t}(Error);e.exports=t.default},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return f.default.PNAddChannelsToGroupOperation}function s(e,t){var n=t.channels,r=t.channelGroup,i=e.config;return r?n&&0!==n.length?i.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channels":"Missing Channel Group"}function o(e,t){var n=t.channelGroup;return"/v1/channel-registration/sub-key/"+e.config.subscribeKey+"/channel-group/"+p.default.encodeString(n)}function a(e){return e.config.getTransactionTimeout()}function u(){return!0}function c(e,t){var n=t.channels;return{add:(void 0===n?[]:n).join(",")}}function l(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=s,t.getURL=o,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var h=(n(5),n(13)),f=r(h),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return f.default.PNRemoveChannelsFromGroupOperation}function s(e,t){var n=t.channels,r=t.channelGroup,i=e.config;return r?n&&0!==n.length?i.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channels":"Missing Channel Group"}function o(e,t){var n=t.channelGroup;return"/v1/channel-registration/sub-key/"+e.config.subscribeKey+"/channel-group/"+p.default.encodeString(n)}function a(e){return e.config.getTransactionTimeout()}function u(){return!0}function c(e,t){var n=t.channels;return{remove:(void 0===n?[]:n).join(",")}}function l(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=s,t.getURL=o,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var h=(n(5),n(13)),f=r(h),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return f.default.PNRemoveGroupOperation}function s(e,t){var n=t.channelGroup,r=e.config;return n?r.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channel Group"}function o(e,t){var n=t.channelGroup;return"/v1/channel-registration/sub-key/"+e.config.subscribeKey+"/channel-group/"+p.default.encodeString(n)+"/remove"}function a(){return!0}function u(e){return e.config.getTransactionTimeout()}function c(){return{}}function l(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=s,t.getURL=o,t.isAuthSupported=a,t.getRequestTimeout=u,t.prepareParams=c,t.handleResponse=l;var h=(n(5),n(13)),f=r(h),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(){return h.default.PNChannelGroupsOperation}function i(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function s(e){return"/v1/channel-registration/sub-key/"+e.config.subscribeKey+"/channel-group"}function o(e){return e.config.getTransactionTimeout()}function a(){return!0}function u(){return{}}function c(e,t){return{groups:t.payload.groups}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=s,t.getRequestTimeout=o,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),h=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return f.default.PNChannelsForGroupOperation}function s(e,t){var n=t.channelGroup,r=e.config;return n?r.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channel Group"}function o(e,t){var n=t.channelGroup;return"/v1/channel-registration/sub-key/"+e.config.subscribeKey+"/channel-group/"+p.default.encodeString(n)}function a(e){return e.config.getTransactionTimeout()}function u(){return!0}function c(){return{}}function l(e,t){return{channels:t.payload.channels}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=s,t.getURL=o,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var h=(n(5),n(13)),f=r(h),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(){return h.default.PNPushNotificationEnabledChannelsOperation}function i(e,t){var n=t.device,r=t.pushGateway,i=t.channels,s=e.config;return n?r?i&&0!==i.length?s.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channels":"Missing GW Type (pushGateway: gcm or apns)":"Missing Device ID (device)"}function s(e,t){var n=t.device;return"/v1/push/sub-key/"+e.config.subscribeKey+"/devices/"+n}function o(e){return e.config.getTransactionTimeout()}function a(){return!0}function u(e,t){var n=t.pushGateway,r=t.channels;return{type:n,add:(void 0===r?[]:r).join(",")}}function c(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=s,t.getRequestTimeout=o,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),h=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(){return h.default.PNPushNotificationEnabledChannelsOperation}function i(e,t){var n=t.device,r=t.pushGateway,i=t.channels,s=e.config;return n?r?i&&0!==i.length?s.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channels":"Missing GW Type (pushGateway: gcm or apns)":"Missing Device ID (device)"}function s(e,t){var n=t.device;return"/v1/push/sub-key/"+e.config.subscribeKey+"/devices/"+n}function o(e){return e.config.getTransactionTimeout()}function a(){return!0}function u(e,t){var n=t.pushGateway,r=t.channels;return{type:n,remove:(void 0===r?[]:r).join(",")}}function c(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=s,t.getRequestTimeout=o,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),h=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(){return h.default.PNPushNotificationEnabledChannelsOperation}function i(e,t){var n=t.device,r=t.pushGateway,i=e.config;return n?r?i.subscribeKey?void 0:"Missing Subscribe Key":"Missing GW Type (pushGateway: gcm or apns)":"Missing Device ID (device)"}function s(e,t){var n=t.device;return"/v1/push/sub-key/"+e.config.subscribeKey+"/devices/"+n}function o(e){return e.config.getTransactionTimeout()}function a(){return!0}function u(e,t){return{type:t.pushGateway}}function c(e,t){return{channels:t}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=s,t.getRequestTimeout=o,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),h=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(){return h.default.PNRemoveAllPushNotificationsOperation}function i(e,t){var n=t.device,r=t.pushGateway,i=e.config;return n?r?i.subscribeKey?void 0:"Missing Subscribe Key":"Missing GW Type (pushGateway: gcm or apns)":"Missing Device ID (device)"}function s(e,t){var n=t.device;return"/v1/push/sub-key/"+e.config.subscribeKey+"/devices/"+n+"/remove"}function o(e){return e.config.getTransactionTimeout()}function a(){return!0}function u(e,t){return{type:t.pushGateway}}function c(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=s,t.getRequestTimeout=o,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),h=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return f.default.PNUnsubscribeOperation}function s(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function o(e,t){var n=e.config,r=t.channels,i=void 0===r?[]:r,s=i.length>0?i.join(","):",";return"/v2/presence/sub-key/"+n.subscribeKey+"/channel/"+p.default.encodeString(s)+"/leave"}function a(e){return e.config.getTransactionTimeout()}function u(){return!0}function c(e,t){var n=t.channelGroups,r=void 0===n?[]:n,i={};return r.length>0&&(i["channel-group"]=r.join(",")),i}function l(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=s,t.getURL=o,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var h=(n(5),n(13)),f=r(h),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(){return h.default.PNWhereNowOperation}function i(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function s(e,t){var n=e.config,r=t.uuid,i=void 0===r?n.UUID:r;return"/v2/presence/sub-key/"+n.subscribeKey+"/uuid/"+i}function o(e){return e.config.getTransactionTimeout()}function a(){return!0}function u(){return{}}function c(e,t){return t.payload?{channels:t.payload.channels}:{channels:[]}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=s,t.getRequestTimeout=o,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),h=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return f.default.PNHeartbeatOperation}function s(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function o(e,t){var n=e.config,r=t.channels,i=void 0===r?[]:r,s=i.length>0?i.join(","):",";return"/v2/presence/sub-key/"+n.subscribeKey+"/channel/"+p.default.encodeString(s)+"/heartbeat"}function a(){return!0}function u(e){return e.config.getTransactionTimeout()}function c(e,t){var n=t.channelGroups,r=void 0===n?[]:n,i=t.state,s=void 0===i?{}:i,o=e.config,a={};return r.length>0&&(a["channel-group"]=r.join(",")),a.state=JSON.stringify(s),a.heartbeat=o.getPresenceTimeout(),a}function l(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=s,t.getURL=o,t.isAuthSupported=a,t.getRequestTimeout=u,t.prepareParams=c,t.handleResponse=l;var h=(n(5),n(13)),f=r(h),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return f.default.PNGetStateOperation}function s(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function o(e,t){var n=e.config,r=t.uuid,i=void 0===r?n.UUID:r,s=t.channels,o=void 0===s?[]:s,a=o.length>0?o.join(","):",";return"/v2/presence/sub-key/"+n.subscribeKey+"/channel/"+p.default.encodeString(a)+"/uuid/"+i}function a(e){return e.config.getTransactionTimeout()}function u(){return!0}function c(e,t){var n=t.channelGroups,r=void 0===n?[]:n,i={};return r.length>0&&(i["channel-group"]=r.join(",")),i}function l(e,t,n){var r=n.channels,i=void 0===r?[]:r,s=n.channelGroups,o=void 0===s?[]:s,a={};return 1===i.length&&0===o.length?a[i[0]]=t.payload:a=t.payload,{channels:a}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=s,t.getURL=o,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var h=(n(5),n(13)),f=r(h),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return f.default.PNSetStateOperation}function s(e,t){var n=e.config,r=t.state,i=t.channels,s=void 0===i?[]:i,o=t.channelGroups,a=void 0===o?[]:o;return r?n.subscribeKey?0===s.length&&0===a.length?"Please provide a list of channels and/or channel-groups":void 0:"Missing Subscribe Key":"Missing State"}function o(e,t){var n=e.config,r=t.channels,i=void 0===r?[]:r,s=i.length>0?i.join(","):",";return"/v2/presence/sub-key/"+n.subscribeKey+"/channel/"+p.default.encodeString(s)+"/uuid/"+n.UUID+"/data"}function a(e){return e.config.getTransactionTimeout()}function u(){return!0}function c(e,t){var n=t.state,r=t.channelGroups,i=void 0===r?[]:r,s={};return s.state=JSON.stringify(n),i.length>0&&(s["channel-group"]=i.join(",")),s}function l(e,t){return{state:t.payload}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=s,t.getURL=o,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var h=(n(5),n(13)),f=r(h),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return f.default.PNHereNowOperation}function s(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function o(e,t){var n=e.config,r=t.channels,i=void 0===r?[]:r,s=t.channelGroups,o=void 0===s?[]:s,a="/v2/presence/sub-key/"+n.subscribeKey;if(i.length>0||o.length>0){var u=i.length>0?i.join(","):",";a+="/channel/"+p.default.encodeString(u)}return a}function a(e){return e.config.getTransactionTimeout()}function u(){return!0}function c(e,t){var n=t.channelGroups,r=void 0===n?[]:n,i=t.includeUUIDs,s=void 0===i||i,o=t.includeState,a=void 0!==o&&o,u={};return s||(u.disable_uuids=1),a&&(u.state=1),r.length>0&&(u["channel-group"]=r.join(",")),u}function l(e,t,n){var r=n.channels,i=void 0===r?[]:r,s=n.channelGroups,o=void 0===s?[]:s,a=n.includeUUIDs,u=void 0===a||a,c=n.includeState,l=void 0!==c&&c;return i.length>1||o.length>0||0===o.length&&0===i.length?function(){var e={};return e.totalChannels=t.payload.total_channels,e.totalOccupancy=t.payload.total_occupancy,e.channels={},Object.keys(t.payload.channels).forEach(function(n){var r=t.payload.channels[n],i=[];return e.channels[n]={occupants:i,name:n,occupancy:r.occupancy},u&&r.uuids.forEach(function(e){l?i.push({state:e.state,uuid:e.uuid}):i.push({state:null,uuid:e})}),e}),e}():function(){var e={},n=[];return e.totalChannels=1,e.totalOccupancy=t.occupancy,e.channels={},e.channels[i[0]]={occupants:n,name:i[0],occupancy:t.occupancy},u&&t.uuids&&t.uuids.forEach(function(e){l?n.push({state:e.state,uuid:e.uuid}):n.push({state:null,uuid:e})}),e}()}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=s,t.getURL=o,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var h=(n(5),n(13)),f=r(h),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(){return h.default.PNAccessManagerAudit}function i(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function s(e){return"/v2/auth/audit/sub-key/"+e.config.subscribeKey}function o(e){return e.config.getTransactionTimeout()}function a(){return!1}function u(e,t){var n=t.channel,r=t.channelGroup,i=t.authKeys,s=void 0===i?[]:i,o={};return n&&(o.channel=n),r&&(o["channel-group"]=r),s.length>0&&(o.auth=s.join(",")),o}function c(e,t){return t.payload}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=s,t.getRequestTimeout=o,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),h=function(e){return e&&e.__esModule?e:{default:e}}(l)},function(e,t,n){"use strict";function r(){return h.default.PNAccessManagerGrant}function i(e){var t=e.config;return t.subscribeKey?t.publishKey?t.secretKey?void 0:"Missing Secret Key":"Missing Publish Key":"Missing Subscribe Key"}function s(e){return"/v2/auth/grant/sub-key/"+e.config.subscribeKey}function o(e){return e.config.getTransactionTimeout()}function a(){return!1}function u(e,t){var n=t.channels,r=void 0===n?[]:n,i=t.channelGroups,s=void 0===i?[]:i,o=t.ttl,a=t.read,u=void 0!==a&&a,c=t.write,l=void 0!==c&&c,h=t.manage,f=void 0!==h&&h,d=t.authKeys,p=void 0===d?[]:d,g={};return g.r=u?"1":"0",g.w=l?"1":"0",g.m=f?"1":"0",r.length>0&&(g.channel=r.join(",")),s.length>0&&(g["channel-group"]=s.join(",")),p.length>0&&(g.auth=p.join(",")),(o||0===o)&&(g.ttl=o),g}function c(){return{}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=r,t.validateParams=i,t.getURL=s,t.getRequestTimeout=o,t.isAuthSupported=a,t.prepareParams=u,t.handleResponse=c;var l=(n(5),n(13)),h=function(e){return e&&e.__esModule?e:{ +default:e}}(l)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){var n=e.crypto,r=e.config,i=JSON.stringify(t);return r.cipherKey&&(i=n.encrypt(i),i=JSON.stringify(i)),i}function s(){return b.default.PNPublishOperation}function o(e,t){var n=e.config,r=t.message;return t.channel?r?n.subscribeKey?void 0:"Missing Subscribe Key":"Missing Message":"Missing Channel"}function a(e,t){var n=t.sendByPost;return void 0!==n&&n}function u(e,t){var n=e.config,r=t.channel,s=t.message,o=i(e,s);return"/publish/"+n.publishKey+"/"+n.subscribeKey+"/0/"+_.default.encodeString(r)+"/0/"+_.default.encodeString(o)}function c(e,t){var n=e.config,r=t.channel;return"/publish/"+n.publishKey+"/"+n.subscribeKey+"/0/"+_.default.encodeString(r)+"/0"}function l(e){return e.config.getTransactionTimeout()}function h(){return!0}function f(e,t){return i(e,t.message)}function d(e,t){var n=t.meta,r=t.replicate,i=void 0===r||r,s=t.storeInHistory,o=t.ttl,a={};return null!=s&&(a.store=s?"1":"0"),o&&(a.ttl=o),!1===i&&(a.norep="true"),n&&"object"===(void 0===n?"undefined":g(n))&&(a.meta=JSON.stringify(n)),a}function p(e,t){return{timetoken:t[2]}}Object.defineProperty(t,"__esModule",{value:!0});var g="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};t.getOperation=s,t.validateParams=o,t.usePost=a,t.getURL=u,t.postURL=c,t.getRequestTimeout=l,t.isAuthSupported=h,t.postPayload=f,t.prepareParams=d,t.handleResponse=p;var y=(n(5),n(13)),b=r(y),v=n(15),_=r(v)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){var n=e.config,r=e.crypto;if(!n.cipherKey)return t;try{return r.decrypt(t)}catch(e){return t}}function s(){return d.default.PNHistoryOperation}function o(e,t){var n=t.channel,r=e.config;return n?r.subscribeKey?void 0:"Missing Subscribe Key":"Missing channel"}function a(e,t){var n=t.channel;return"/v2/history/sub-key/"+e.config.subscribeKey+"/channel/"+g.default.encodeString(n)}function u(e){return e.config.getTransactionTimeout()}function c(){return!0}function l(e,t){var n=t.start,r=t.end,i=t.reverse,s=t.count,o=void 0===s?100:s,a=t.stringifiedTimeToken,u=void 0!==a&&a,c={include_token:"true"};return c.count=o,n&&(c.start=n),r&&(c.end=r),u&&(c.string_message_token="true"),null!=i&&(c.reverse=i.toString()),c}function h(e,t){var n={messages:[],startTimeToken:t[1],endTimeToken:t[2]};return t[0].forEach(function(t){var r={timetoken:t.timetoken,entry:i(e,t.message)};n.messages.push(r)}),n}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=s,t.validateParams=o,t.getURL=a,t.getRequestTimeout=u,t.isAuthSupported=c,t.prepareParams=l,t.handleResponse=h;var f=(n(5),n(13)),d=r(f),p=n(15),g=r(p)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return d.default.PNDeleteMessagesOperation}function s(e,t){var n=t.channel,r=e.config;return n?r.subscribeKey?void 0:"Missing Subscribe Key":"Missing channel"}function o(){return!0}function a(e,t){var n=t.channel,r=t.start,i=t.end,s=e.config,o="";return r&&(o="?start="+r),i&&(o+=(""!==o?"&":"?")+"end="+i),"/v3/history/sub-key/"+s.subscribeKey+"/channel/"+g.default.encodeString(n)+o}function u(e){return e.config.getTransactionTimeout()}function c(){return!0}function l(e,t){var n=t.start,r=t.end,i={};return n&&(i.start=n),r&&(i.end=r),{}}function h(e,t){return t.payload}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=s,t.useDelete=o,t.getURL=a,t.getRequestTimeout=u,t.isAuthSupported=c,t.prepareParams=l,t.handleResponse=h;var f=(n(5),n(13)),d=r(f),p=n(15),g=r(p)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){var n=e.config,r=e.crypto;if(!n.cipherKey)return t;try{return r.decrypt(t)}catch(e){return t}}function s(){return d.default.PNFetchMessagesOperation}function o(e,t){var n=t.channels,r=e.config;return n&&0!==n.length?r.subscribeKey?void 0:"Missing Subscribe Key":"Missing channels"}function a(e,t){var n=t.channels,r=void 0===n?[]:n,i=e.config,s=r.length>0?r.join(","):",";return"/v3/history/sub-key/"+i.subscribeKey+"/channel/"+g.default.encodeString(s)}function u(e){return e.config.getTransactionTimeout()}function c(){return!0}function l(e,t){var n=t.start,r=t.end,i=t.count,s={};return i&&(s.max=i),n&&(s.start=n),r&&(s.end=r),s}function h(e,t){var n={channels:{}};return Object.keys(t.channels||{}).forEach(function(r){n.channels[r]=[],(t.channels[r]||[]).forEach(function(t){var s={};s.channel=r,s.subscription=null,s.timetoken=t.timetoken,s.message=i(e,t.message),n.channels[r].push(s)})}),n}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=s,t.validateParams=o,t.getURL=a,t.getRequestTimeout=u,t.isAuthSupported=c,t.prepareParams=l,t.handleResponse=h;var f=(n(5),n(13)),d=r(f),p=n(15),g=r(p)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return f.default.PNSubscribeOperation}function s(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"}function o(e,t){var n=e.config,r=t.channels,i=void 0===r?[]:r,s=i.length>0?i.join(","):",";return"/v2/subscribe/"+n.subscribeKey+"/"+p.default.encodeString(s)+"/0"}function a(e){return e.config.getSubscribeTimeout()}function u(){return!0}function c(e,t){var n=e.config,r=t.channelGroups,i=void 0===r?[]:r,s=t.timetoken,o=t.filterExpression,a=t.region,u={heartbeat:n.getPresenceTimeout()};return i.length>0&&(u["channel-group"]=i.join(",")),o&&o.length>0&&(u["filter-expr"]=o),s&&(u.tt=s),a&&(u.tr=a),u}function l(e,t){var n=[];t.m.forEach(function(e){var t={publishTimetoken:e.p.t,region:e.p.r},r={shard:parseInt(e.a,10),subscriptionMatch:e.b,channel:e.c,payload:e.d,flags:e.f,issuingClientId:e.i,subscribeKey:e.k,originationTimetoken:e.o,userMetadata:e.u,publishMetaData:t};n.push(r)});var r={timetoken:t.t.t,region:t.t.r};return{messages:n,metadata:r}}Object.defineProperty(t,"__esModule",{value:!0}),t.getOperation=i,t.validateParams=s,t.getURL=o,t.getRequestTimeout=a,t.isAuthSupported=u,t.prepareParams=c,t.handleResponse=l;var h=(n(5),n(13)),f=r(h),d=n(15),p=r(d)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var s=function(){function e(e,t){for(var n=0;n=this._maxSubDomain&&(this._currentSubDomain=1),e=this._currentSubDomain.toString(),this._providedFQDN.replace("pubsub","ps"+e)}},{key:"hasModule",value:function(e){return e in this._modules}},{key:"shiftStandardOrigin",value:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return this._standardOrigin=this.nextOrigin(e),this._standardOrigin}},{key:"getStandardOrigin",value:function(){return this._standardOrigin}},{key:"POST",value:function(e,t,n,r){return this._modules.post(e,t,n,r)}},{key:"GET",value:function(e,t,n){return this._modules.get(e,t,n)}},{key:"DELETE",value:function(e,t,n){return this._modules.del(e,t,n)}},{key:"_detectErrorCategory",value:function(e){if("ENOTFOUND"===e.code)return u.default.PNNetworkIssuesCategory;if("ECONNREFUSED"===e.code)return u.default.PNNetworkIssuesCategory;if("ECONNRESET"===e.code)return u.default.PNNetworkIssuesCategory;if("EAI_AGAIN"===e.code)return u.default.PNNetworkIssuesCategory;if(0===e.status||e.hasOwnProperty("status")&&void 0===e.status)return u.default.PNNetworkIssuesCategory;if(e.timeout)return u.default.PNTimeoutCategory;if(e.response){if(e.response.badRequest)return u.default.PNBadRequestCategory;if(e.response.forbidden)return u.default.PNAccessDeniedCategory}return u.default.PNUnknownCategory}}]),e}());t.default=c,e.exports=t.default},function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={get:function(e){try{return localStorage.getItem(e)}catch(e){return null}},set:function(e,t){try{return localStorage.setItem(e,t)}catch(e){return null}}},e.exports=t.default},function(e,t,n){"use strict";function r(e){var t=(new Date).getTime(),n=(new Date).toISOString(),r=function(){return console&&console.log?console:window&&window.console&&window.console.log?window.console:console}();r.log("<<<<<"),r.log("["+n+"]","\n",e.url,"\n",e.qs),r.log("-----"),e.on("response",function(n){var i=(new Date).getTime(),s=i-t,o=(new Date).toISOString();r.log(">>>>>>"),r.log("["+o+" / "+s+"]","\n",e.url,"\n",e.qs,"\n",n.text),r.log("-----")})}function i(e,t,n){var i=this;return this._config.logVerbosity&&(e=e.use(r)),this._config.proxy&&this._modules.proxy&&(e=this._modules.proxy.call(this,e)),this._config.keepAlive&&this._modules.keepAlive&&(e=this._modules.keepAlive(e)),e.timeout(t.timeout).end(function(e,r){var s={};if(s.error=null!==e,s.operation=t.operation,r&&r.status&&(s.statusCode=r.status),e)return s.errorData=e,s.category=i._detectErrorCategory(e),n(s,null);var o=JSON.parse(r.text);return o.error&&1===o.error&&o.status&&o.message&&o.service?(s.errorData=o,s.statusCode=o.status,s.error=!0,s.category=i._detectErrorCategory(s),n(s,null)):n(s,o)})}function s(e,t,n){var r=c.default.get(this.getStandardOrigin()+t.url).query(e);return i.call(this,r,t,n)}function o(e,t,n,r){var s=c.default.post(this.getStandardOrigin()+n.url).query(e).send(t);return i.call(this,s,n,r)}function a(e,t,n){var r=c.default.delete(this.getStandardOrigin()+t.url).query(e);return i.call(this,r,t,n)}Object.defineProperty(t,"__esModule",{value:!0}),t.get=s,t.post=o,t.del=a;var u=n(42),c=function(e){return e&&e.__esModule?e:{default:e}}(u);n(5)},function(e,t,n){function r(){}function i(e){if(!b(e))return e;var t=[];for(var n in e)s(t,n,e[n]);return t.join("&")}function s(e,t,n){if(null!=n)if(Array.isArray(n))n.forEach(function(n){s(e,t,n)});else if(b(n))for(var r in n)s(e,t+"["+r+"]",n[r]);else e.push(encodeURIComponent(t)+"="+encodeURIComponent(n));else null===n&&e.push(encodeURIComponent(t))}function o(e){for(var t,n,r={},i=e.split("&"),s=0,o=i.length;s=300)&&(r=new Error(t.statusText||"Unsuccessful HTTP response"),r.original=e,r.response=t,r.status=t.status)}catch(e){r=e}r?n.callback(r,t):n.callback(null,t)})}function d(e,t){var n=v("DELETE",e);return t&&n.end(t),n}var p;"undefined"!=typeof window?p=window:"undefined"!=typeof self?p=self:(console.warn("Using browser-only version of superagent in non-browser environment"),p=this);var g=n(43),y=n(44),b=n(45),v=e.exports=n(46).bind(null,f);v.getXHR=function(){if(!(!p.XMLHttpRequest||p.location&&"file:"==p.location.protocol&&p.ActiveXObject))return new XMLHttpRequest;try{return new ActiveXObject("Microsoft.XMLHTTP")}catch(e){}try{return new ActiveXObject("Msxml2.XMLHTTP.6.0")}catch(e){}try{return new ActiveXObject("Msxml2.XMLHTTP.3.0")}catch(e){}try{return new ActiveXObject("Msxml2.XMLHTTP")}catch(e){}throw Error("Browser-only verison of superagent could not find XHR")};var _="".trim?function(e){return e.trim()}:function(e){return e.replace(/(^\s*|\s*$)/g,"")};v.serializeObject=i,v.parseString=o,v.types={html:"text/html",json:"application/json",xml:"application/xml",urlencoded:"application/x-www-form-urlencoded",form:"application/x-www-form-urlencoded","form-data":"application/x-www-form-urlencoded"},v.serialize={"application/x-www-form-urlencoded":i,"application/json":JSON.stringify},v.parse={"application/x-www-form-urlencoded":o,"application/json":JSON.parse},h.prototype.get=function(e){return this.header[e.toLowerCase()]},h.prototype._setHeaderProperties=function(e){var t=this.header["content-type"]||"";this.type=c(t);var n=l(t);for(var r in n)this[r]=n[r]},h.prototype._parseBody=function(e){var t=v.parse[this.type];return!t&&u(this.type)&&(t=v.parse["application/json"]),t&&e&&(e.length||e instanceof Object)?t(e):null},h.prototype._setStatusProperties=function(e){1223===e&&(e=204);var t=e/100|0;this.status=this.statusCode=e,this.statusType=t,this.info=1==t,this.ok=2==t,this.clientError=4==t,this.serverError=5==t,this.error=(4==t||5==t)&&this.toError(),this.accepted=202==e,this.noContent=204==e,this.badRequest=400==e,this.unauthorized=401==e,this.notAcceptable=406==e,this.notFound=404==e,this.forbidden=403==e},h.prototype.toError=function(){var e=this.req,t=e.method,n=e.url,r="cannot "+t+" "+n+" ("+this.status+")",i=new Error(r);return i.status=this.status,i.method=t,i.url=n,i},v.Response=h,g(f.prototype);for(var m in y)f.prototype[m]=y[m];f.prototype.type=function(e){return this.set("Content-Type",v.types[e]||e),this},f.prototype.responseType=function(e){return this._responseType=e,this},f.prototype.accept=function(e){return this.set("Accept",v.types[e]||e),this},f.prototype.auth=function(e,t,n){switch(n||(n={type:"basic"}),n.type){case"basic":var r=btoa(e+":"+t);this.set("Authorization","Basic "+r);break;case"auto":this.username=e,this.password=t}return this},f.prototype.query=function(e){return"string"!=typeof e&&(e=i(e)),e&&this._query.push(e),this},f.prototype.attach=function(e,t,n){return this._getFormData().append(e,t,n||t.name),this},f.prototype._getFormData=function(){return this._formData||(this._formData=new p.FormData),this._formData},f.prototype.callback=function(e,t){var n=this._callback;this.clearTimeout(),n(e,t)},f.prototype.crossDomainError=function(){var e=new Error("Request has been terminated\nPossible causes: the network is offline, Origin is not allowed by Access-Control-Allow-Origin, the page is being unloaded, etc.");e.crossDomain=!0,e.status=this.status,e.method=this.method,e.url=this.url,this.callback(e)},f.prototype._timeoutError=function(){var e=this._timeout,t=new Error("timeout of "+e+"ms exceeded");t.timeout=e,this.callback(t)},f.prototype._appendQueryString=function(){var e=this._query.join("&");e&&(this.url+=~this.url.indexOf("?")?"&"+e:"?"+e)},f.prototype.end=function(e){var t=this,n=this.xhr=v.getXHR(),i=this._timeout,s=this._formData||this._data;this._callback=e||r,n.onreadystatechange=function(){if(4==n.readyState){var e;try{e=n.status}catch(t){e=0}if(0==e){if(t.timedout)return t._timeoutError();if(t._aborted)return;return t.crossDomainError()}t.emit("end")}};var o=function(e,n){n.total>0&&(n.percent=n.loaded/n.total*100),n.direction=e,t.emit("progress",n)};if(this.hasListeners("progress"))try{n.onprogress=o.bind(null,"download"),n.upload&&(n.upload.onprogress=o.bind(null,"upload"))}catch(e){}if(i&&!this._timer&&(this._timer=setTimeout(function(){t.timedout=!0,t.abort()},i)),this._appendQueryString(),this.username&&this.password?n.open(this.method,this.url,!0,this.username,this.password):n.open(this.method,this.url,!0),this._withCredentials&&(n.withCredentials=!0),"GET"!=this.method&&"HEAD"!=this.method&&"string"!=typeof s&&!this._isHost(s)){var a=this._header["content-type"],c=this._serializer||v.serialize[a?a.split(";")[0]:""];!c&&u(a)&&(c=v.serialize["application/json"]),c&&(s=c(s))}for(var l in this.header)null!=this.header[l]&&n.setRequestHeader(l,this.header[l]);return this._responseType&&(n.responseType=this._responseType),this.emit("request",this),n.send(void 0!==s?s:null),this},v.Request=f,v.get=function(e,t,n){var r=v("GET",e);return"function"==typeof t&&(n=t,t=null),t&&r.query(t),n&&r.end(n),r},v.head=function(e,t,n){var r=v("HEAD",e);return"function"==typeof t&&(n=t,t=null),t&&r.send(t),n&&r.end(n),r},v.options=function(e,t,n){var r=v("OPTIONS",e);return"function"==typeof t&&(n=t,t=null),t&&r.send(t),n&&r.end(n),r},v.del=d,v.delete=d,v.patch=function(e,t,n){var r=v("PATCH",e);return"function"==typeof t&&(n=t,t=null),t&&r.send(t),n&&r.end(n),r},v.post=function(e,t,n){var r=v("POST",e);return"function"==typeof t&&(n=t,t=null),t&&r.send(t),n&&r.end(n),r},v.put=function(e,t,n){var r=v("PUT",e);return"function"==typeof t&&(n=t,t=null),t&&r.send(t),n&&r.end(n),r}},function(e,t,n){function r(e){if(e)return i(e)}function i(e){for(var t in r.prototype)e[t]=r.prototype[t];return e}e.exports=r,r.prototype.on=r.prototype.addEventListener=function(e,t){return this._callbacks=this._callbacks||{},(this._callbacks["$"+e]=this._callbacks["$"+e]||[]).push(t),this},r.prototype.once=function(e,t){function n(){this.off(e,n),t.apply(this,arguments)}return n.fn=t,this.on(e,n),this},r.prototype.off=r.prototype.removeListener=r.prototype.removeAllListeners=r.prototype.removeEventListener=function(e,t){if(this._callbacks=this._callbacks||{},0==arguments.length)return this._callbacks={},this;var n=this._callbacks["$"+e];if(!n)return this;if(1==arguments.length)return delete this._callbacks["$"+e],this;for(var r,i=0;i,\n channelGroups: Array,\n withPresence: ?boolean,\n timetoken: ?number\n}\n\ntype PresenceArgs = {\n channels: Array,\n channelGroups: Array,\n connected: boolean\n}\n\ntype UnsubscribeArgs = {\n channels: Array,\n channelGroups: Array\n}\n\ntype StateArgs = {\n channels: Array,\n channelGroups: Array,\n state: Object\n}\n\ntype SubscriptionManagerConsturct = {\n leaveEndpoint: Function,\n subscribeEndpoint: Function,\n timeEndpoint: Function,\n heartbeatEndpoint: Function,\n setStateEndpoint: Function,\n config: Config,\n crypto: Crypto,\n listenerManager: ListenerManager\n}\n\nexport default class {\n\n _crypto: Crypto;\n _config: Config;\n _listenerManager: ListenerManager;\n _reconnectionManager: ReconnectionManager;\n\n _leaveEndpoint: Function;\n _heartbeatEndpoint: Function;\n _setStateEndpoint: Function;\n _subscribeEndpoint: Function;\n\n _channels: Object;\n _presenceChannels: Object;\n\n _heartbeatChannels: Object;\n _heartbeatChannelGroups: Object;\n\n _channelGroups: Object;\n _presenceChannelGroups: Object;\n\n _currentTimetoken: number;\n _lastTimetoken: number;\n _storedTimetoken: ?number;\n\n _region: ?number;\n\n _subscribeCall: ?Object;\n _heartbeatTimer: ?number;\n\n _subscriptionStatusAnnounced: boolean;\n\n _autoNetworkDetection: boolean;\n _isOnline: boolean;\n\n // store pending connection elements\n _pendingChannelSubscriptions: Array;\n _pendingChannelGroupSubscriptions: Array;\n\n _pendingHeartbeatChannels: Array;\n _pendingHeartbeatChannelGroups: Array;\n //\n\n _dedupingManager: DedupingManager;\n\n constructor({ subscribeEndpoint, leaveEndpoint, heartbeatEndpoint, setStateEndpoint, timeEndpoint, config, crypto, listenerManager }: SubscriptionManagerConsturct) {\n this._listenerManager = listenerManager;\n this._config = config;\n\n this._leaveEndpoint = leaveEndpoint;\n this._heartbeatEndpoint = heartbeatEndpoint;\n this._setStateEndpoint = setStateEndpoint;\n this._subscribeEndpoint = subscribeEndpoint;\n\n this._crypto = crypto;\n\n this._channels = {};\n this._presenceChannels = {};\n\n this._heartbeatChannels = {};\n this._heartbeatChannelGroups = {};\n\n this._channelGroups = {};\n this._presenceChannelGroups = {};\n\n this._pendingChannelSubscriptions = [];\n this._pendingChannelGroupSubscriptions = [];\n\n this._pendingHeartbeatChannels = [];\n this._pendingHeartbeatChannelGroups = [];\n\n this._currentTimetoken = 0;\n this._lastTimetoken = 0;\n this._storedTimetoken = null;\n\n this._subscriptionStatusAnnounced = false;\n\n this._isOnline = true;\n\n this._reconnectionManager = new ReconnectionManager({ timeEndpoint });\n this._dedupingManager = new DedupingManager({ config });\n }\n\n adaptStateChange(args: StateArgs, callback: Function) {\n const { state, channels = [], channelGroups = [] } = args;\n\n channels.forEach((channel) => {\n if (channel in this._channels) this._channels[channel].state = state;\n });\n\n channelGroups.forEach((channelGroup) => {\n if (channelGroup in this._channelGroups) this._channelGroups[channelGroup].state = state;\n });\n\n return this._setStateEndpoint({ state, channels, channelGroups }, callback);\n }\n\n adaptPresenceChange(args: PresenceArgs) {\n const { connected, channels = [], channelGroups = [] } = args;\n\n if (connected) {\n channels.forEach((channel: string) => {\n this._heartbeatChannels[channel] = { state: {} };\n this._pendingHeartbeatChannels.push(channel);\n });\n\n channelGroups.forEach((channelGroup: string) => {\n this._heartbeatChannelGroups[channelGroup] = { state: {} };\n this._pendingHeartbeatChannelGroups.push(channelGroup);\n });\n } else {\n channels.forEach((channel) => {\n if (channel in this._heartbeatChannels) {\n delete this._heartbeatChannels[channel];\n }\n });\n\n channelGroups.forEach((channelGroup) => {\n if (channelGroup in this._heartbeatChannelGroups) {\n delete this._heartbeatChannelGroups[channelGroup];\n }\n });\n\n if (this._config.suppressLeaveEvents === false) {\n this._leaveEndpoint({ channels, channelGroups }, (status) => {\n this._listenerManager.announceStatus(status);\n });\n }\n }\n\n this.reconnect();\n }\n\n adaptSubscribeChange(args: SubscribeArgs) {\n const { timetoken, channels = [], channelGroups = [], withPresence = false } = args;\n\n if (!this._config.subscribeKey || this._config.subscribeKey === '') {\n if (console && console.log) console.log('subscribe key missing; aborting subscribe') //eslint-disable-line\n return;\n }\n\n if (timetoken) {\n this._lastTimetoken = this._currentTimetoken;\n this._currentTimetoken = timetoken;\n }\n\n // reset the current timetoken to get a connect event.\n if (this._currentTimetoken !== '0') {\n this._storedTimetoken = this._currentTimetoken;\n this._currentTimetoken = 0;\n }\n\n channels.forEach((channel: string) => {\n this._channels[channel] = { state: {} };\n if (withPresence) this._presenceChannels[channel] = {};\n\n this._pendingChannelSubscriptions.push(channel);\n });\n\n channelGroups.forEach((channelGroup: string) => {\n this._channelGroups[channelGroup] = { state: {} };\n if (withPresence) this._presenceChannelGroups[channelGroup] = {};\n\n this._pendingChannelGroupSubscriptions.push(channelGroup);\n });\n\n this._subscriptionStatusAnnounced = false;\n this.reconnect();\n }\n\n adaptUnsubscribeChange(args: UnsubscribeArgs, isOffline: boolean) {\n const { channels = [], channelGroups = [] } = args;\n\n // keep track of which channels and channel groups\n // we are going to unsubscribe from.\n const actualChannels = [];\n const actualChannelGroups = [];\n //\n\n channels.forEach((channel) => {\n if (channel in this._channels) {\n delete this._channels[channel];\n actualChannels.push(channel);\n }\n if (channel in this._presenceChannels) {\n delete this._presenceChannels[channel];\n actualChannels.push(channel);\n }\n });\n\n channelGroups.forEach((channelGroup) => {\n if (channelGroup in this._channelGroups) {\n delete this._channelGroups[channelGroup];\n actualChannelGroups.push(channelGroup);\n }\n if (channelGroup in this._presenceChannelGroups) {\n delete this._channelGroups[channelGroup];\n actualChannelGroups.push(channelGroup);\n }\n });\n\n // no-op if there are no channels and cg's to unsubscribe from.\n if (actualChannels.length === 0 && actualChannelGroups.length === 0) {\n return;\n }\n\n if (this._config.suppressLeaveEvents === false && !isOffline) {\n this._leaveEndpoint({ channels: actualChannels, channelGroups: actualChannelGroups }, (status) => {\n status.affectedChannels = actualChannels;\n status.affectedChannelGroups = actualChannelGroups;\n status.currentTimetoken = this._currentTimetoken;\n status.lastTimetoken = this._lastTimetoken;\n this._listenerManager.announceStatus(status);\n });\n }\n\n // if we have nothing to subscribe to, reset the timetoken.\n if (Object.keys(this._channels).length === 0 &&\n Object.keys(this._presenceChannels).length === 0 &&\n Object.keys(this._channelGroups).length === 0 &&\n Object.keys(this._presenceChannelGroups).length === 0) {\n this._lastTimetoken = 0;\n this._currentTimetoken = 0;\n this._storedTimetoken = null;\n this._region = null;\n this._reconnectionManager.stopPolling();\n }\n\n this.reconnect();\n }\n\n unsubscribeAll(isOffline: boolean) {\n this.adaptUnsubscribeChange({ channels: this.getSubscribedChannels(), channelGroups: this.getSubscribedChannelGroups() }, isOffline);\n }\n\n getHeartbeatChannels(): Array {\n return Object.keys(this._heartbeatChannels);\n }\n\n getHeartbeatChannelGroups(): Array {\n return Object.keys(this._heartbeatChannelGroups);\n }\n\n getSubscribedChannels(): Array {\n return Object.keys(this._channels);\n }\n\n getSubscribedChannelGroups(): Array {\n return Object.keys(this._channelGroups);\n }\n\n reconnect() {\n this._startSubscribeLoop();\n this._registerHeartbeatTimer();\n }\n\n disconnect() {\n this._stopSubscribeLoop();\n this._stopHeartbeatTimer();\n this._reconnectionManager.stopPolling();\n }\n\n _registerHeartbeatTimer() {\n this._stopHeartbeatTimer();\n\n // if the interval is 0, do not queue up heartbeating\n if (this._config.getHeartbeatInterval() === 0) {\n return;\n }\n\n this._performHeartbeatLoop();\n this._heartbeatTimer = setInterval(this._performHeartbeatLoop.bind(this), this._config.getHeartbeatInterval() * 1000);\n }\n\n _stopHeartbeatTimer() {\n if (this._heartbeatTimer) {\n clearInterval(this._heartbeatTimer);\n this._heartbeatTimer = null;\n }\n }\n\n _performHeartbeatLoop() {\n let heartbeatChannels = [];\n heartbeatChannels = heartbeatChannels.concat(this.getHeartbeatChannels());\n heartbeatChannels = heartbeatChannels.concat(this.getSubscribedChannels());\n\n let heartbeatChannelGroups = [];\n heartbeatChannelGroups = heartbeatChannelGroups.concat(this.getHeartbeatChannelGroups());\n heartbeatChannelGroups = heartbeatChannelGroups.concat(this.getSubscribedChannelGroups());\n\n let presenceState = {};\n\n if (heartbeatChannels.length === 0 && heartbeatChannelGroups.length === 0) {\n return;\n }\n\n this.getSubscribedChannels().forEach((channel) => {\n let channelState = this._channels[channel].state;\n if (Object.keys(channelState).length) presenceState[channel] = channelState;\n });\n\n this.getSubscribedChannelGroups().forEach((channelGroup) => {\n let channelGroupState = this._channelGroups[channelGroup].state;\n if (Object.keys(channelGroupState).length) presenceState[channelGroup] = channelGroupState;\n });\n\n let onHeartbeat = (status: StatusAnnouncement) => {\n if (status.error && this._config.announceFailedHeartbeats) {\n this._listenerManager.announceStatus(status);\n }\n\n if (status.error && this._config.autoNetworkDetection && this._isOnline) {\n this._isOnline = false;\n this.disconnect();\n this._listenerManager.announceNetworkDown();\n this.reconnect();\n }\n\n if (!status.error && this._config.announceSuccessfulHeartbeats) {\n this._listenerManager.announceStatus(status);\n }\n };\n\n this._heartbeatEndpoint({\n channels: heartbeatChannels,\n channelGroups: heartbeatChannelGroups,\n state: presenceState }, onHeartbeat.bind(this));\n }\n\n _startSubscribeLoop() {\n this._stopSubscribeLoop();\n let channels = [];\n let channelGroups = [];\n\n Object.keys(this._channels).forEach(channel => channels.push(channel));\n Object.keys(this._presenceChannels).forEach(channel => channels.push(`${channel}-pnpres`));\n\n Object.keys(this._channelGroups).forEach(channelGroup => channelGroups.push(channelGroup));\n Object.keys(this._presenceChannelGroups).forEach(channelGroup => channelGroups.push(`${channelGroup}-pnpres`));\n\n if (channels.length === 0 && channelGroups.length === 0) {\n return;\n }\n\n const subscribeArgs = {\n channels,\n channelGroups,\n timetoken: this._currentTimetoken,\n filterExpression: this._config.filterExpression,\n region: this._region\n };\n\n this._subscribeCall = this._subscribeEndpoint(subscribeArgs, this._processSubscribeResponse.bind(this));\n }\n\n _processSubscribeResponse(status: StatusAnnouncement, payload: SubscribeEnvelope) {\n if (status.error) {\n // if we timeout from server, restart the loop.\n if (status.category === categoryConstants.PNTimeoutCategory) {\n this._startSubscribeLoop();\n } else if (status.category === categoryConstants.PNNetworkIssuesCategory) {\n // we lost internet connection, alert the reconnection manager and terminate all loops\n this.disconnect();\n\n if (status.error && this._config.autoNetworkDetection && this._isOnline) {\n this._isOnline = false;\n this._listenerManager.announceNetworkDown();\n }\n\n this._reconnectionManager.onReconnection(() => {\n if (this._config.autoNetworkDetection && !this._isOnline) {\n this._isOnline = true;\n this._listenerManager.announceNetworkUp();\n }\n this.reconnect();\n this._subscriptionStatusAnnounced = true;\n let reconnectedAnnounce: StatusAnnouncement = {\n category: categoryConstants.PNReconnectedCategory,\n operation: status.operation,\n lastTimetoken: this._lastTimetoken,\n currentTimetoken: this._currentTimetoken\n };\n this._listenerManager.announceStatus(reconnectedAnnounce);\n });\n\n this._reconnectionManager.startPolling();\n this._listenerManager.announceStatus(status);\n } else if (status.category === categoryConstants.PNBadRequestCategory) {\n this._stopHeartbeatTimer();\n this._listenerManager.announceStatus(status);\n } else {\n this._listenerManager.announceStatus(status);\n }\n\n return;\n }\n\n if (this._storedTimetoken) {\n this._currentTimetoken = this._storedTimetoken;\n this._storedTimetoken = null;\n } else {\n this._lastTimetoken = this._currentTimetoken;\n this._currentTimetoken = payload.metadata.timetoken;\n }\n\n if (!this._subscriptionStatusAnnounced) {\n let connectedAnnounce: StatusAnnouncement = {};\n connectedAnnounce.category = categoryConstants.PNConnectedCategory;\n connectedAnnounce.operation = status.operation;\n connectedAnnounce.affectedChannels = this._pendingChannelSubscriptions;\n connectedAnnounce.subscribedChannels = this.getSubscribedChannels();\n connectedAnnounce.affectedChannelGroups = this._pendingChannelGroupSubscriptions;\n connectedAnnounce.lastTimetoken = this._lastTimetoken;\n connectedAnnounce.currentTimetoken = this._currentTimetoken;\n this._subscriptionStatusAnnounced = true;\n this._listenerManager.announceStatus(connectedAnnounce);\n\n // clear the pending connections list\n this._pendingChannelSubscriptions = [];\n this._pendingChannelGroupSubscriptions = [];\n }\n\n let messages = payload.messages || [];\n let { requestMessageCountThreshold, dedupeOnSubscribe } = this._config;\n\n if (requestMessageCountThreshold && messages.length >= requestMessageCountThreshold) {\n let countAnnouncement: StatusAnnouncement = {};\n countAnnouncement.category = categoryConstants.PNRequestMessageCountExceededCategory;\n countAnnouncement.operation = status.operation;\n this._listenerManager.announceStatus(countAnnouncement);\n }\n\n messages.forEach((message) => {\n let channel = message.channel;\n let subscriptionMatch = message.subscriptionMatch;\n let publishMetaData = message.publishMetaData;\n\n if (channel === subscriptionMatch) {\n subscriptionMatch = null;\n }\n\n if (dedupeOnSubscribe) {\n if (this._dedupingManager.isDuplicate(message)) {\n return;\n } else {\n this._dedupingManager.addEntry(message);\n }\n }\n\n if (utils.endsWith(message.channel, '-pnpres')) {\n let announce: PresenceAnnouncement = {};\n announce.channel = null;\n announce.subscription = null;\n\n // deprecated -->\n announce.actualChannel = (subscriptionMatch != null) ? channel : null;\n announce.subscribedChannel = subscriptionMatch != null ? subscriptionMatch : channel;\n // <-- deprecated\n\n if (channel) {\n announce.channel = channel.substring(0, channel.lastIndexOf('-pnpres'));\n }\n\n if (subscriptionMatch) {\n announce.subscription = subscriptionMatch.substring(0, subscriptionMatch.lastIndexOf('-pnpres'));\n }\n\n announce.action = message.payload.action;\n announce.state = message.payload.data;\n announce.timetoken = publishMetaData.publishTimetoken;\n announce.occupancy = message.payload.occupancy;\n announce.uuid = message.payload.uuid;\n announce.timestamp = message.payload.timestamp;\n\n if (message.payload.join) {\n announce.join = message.payload.join;\n }\n\n if (message.payload.leave) {\n announce.leave = message.payload.leave;\n }\n\n if (message.payload.timeout) {\n announce.timeout = message.payload.timeout;\n }\n\n this._listenerManager.announcePresence(announce);\n } else {\n let announce: MessageAnnouncement = {};\n announce.channel = null;\n announce.subscription = null;\n\n // deprecated -->\n announce.actualChannel = (subscriptionMatch != null) ? channel : null;\n announce.subscribedChannel = subscriptionMatch != null ? subscriptionMatch : channel;\n // <-- deprecated\n\n announce.channel = channel;\n announce.subscription = subscriptionMatch;\n announce.timetoken = publishMetaData.publishTimetoken;\n announce.publisher = message.issuingClientId;\n\n if (message.userMetadata) {\n announce.userMetadata = message.userMetadata;\n }\n\n if (this._config.cipherKey) {\n announce.message = this._crypto.decrypt(message.payload);\n } else {\n announce.message = message.payload;\n }\n\n this._listenerManager.announceMessage(announce);\n }\n });\n\n this._region = payload.metadata.region;\n this._startSubscribeLoop();\n }\n\n _stopSubscribeLoop() {\n if (this._subscribeCall) {\n if (typeof this._subscribeCall.abort === 'function') {\n this._subscribeCall.abort();\n }\n this._subscribeCall = null;\n }\n }\n\n}\n"]} \ No newline at end of file +{"version":3,"sources":["core/components/subscription_manager.js"],"names":["subscribeEndpoint","leaveEndpoint","heartbeatEndpoint","setStateEndpoint","timeEndpoint","config","crypto","listenerManager","_listenerManager","_config","_leaveEndpoint","_heartbeatEndpoint","_setStateEndpoint","_subscribeEndpoint","_crypto","_channels","_presenceChannels","_heartbeatChannels","_heartbeatChannelGroups","_channelGroups","_presenceChannelGroups","_pendingChannelSubscriptions","_pendingChannelGroupSubscriptions","_currentTimetoken","_lastTimetoken","_storedTimetoken","_subscriptionStatusAnnounced","_isOnline","_reconnectionManager","_dedupingManager","args","callback","state","channels","channelGroups","forEach","channel","channelGroup","connected","suppressLeaveEvents","status","announceStatus","reconnect","timetoken","withPresence","subscribeKey","console","log","push","isOffline","actualChannels","actualChannelGroups","length","affectedChannels","affectedChannelGroups","currentTimetoken","lastTimetoken","Object","keys","_region","stopPolling","adaptUnsubscribeChange","getSubscribedChannels","getSubscribedChannelGroups","_startSubscribeLoop","_registerHeartbeatTimer","_stopSubscribeLoop","_stopHeartbeatTimer","getHeartbeatInterval","_performHeartbeatLoop","_heartbeatTimer","setInterval","bind","clearInterval","heartbeatChannels","concat","getHeartbeatChannels","heartbeatChannelGroups","getHeartbeatChannelGroups","presenceState","channelState","channelGroupState","onHeartbeat","error","announceFailedHeartbeats","autoNetworkDetection","disconnect","announceNetworkDown","announceSuccessfulHeartbeats","subscribeArgs","filterExpression","region","_subscribeCall","_processSubscribeResponse","payload","category","PNTimeoutCategory","PNNetworkIssuesCategory","onReconnection","announceNetworkUp","reconnectedAnnounce","PNReconnectedCategory","operation","startPolling","PNBadRequestCategory","metadata","connectedAnnounce","PNConnectedCategory","subscribedChannels","messages","requestMessageCountThreshold","dedupeOnSubscribe","countAnnouncement","PNRequestMessageCountExceededCategory","message","subscriptionMatch","publishMetaData","isDuplicate","addEntry","endsWith","announce","subscription","actualChannel","subscribedChannel","substring","lastIndexOf","action","data","publishTimetoken","occupancy","uuid","timestamp","join","leave","timeout","announcePresence","publisher","issuingClientId","userMetadata","cipherKey","decrypt","announceMessage","abort"],"mappings":"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","file":"subscription_manager.js","sourcesContent":["/* @flow */\nimport Crypto from '../components/cryptography';\nimport Config from '../components/config';\nimport ListenerManager from '../components/listener_manager';\nimport ReconnectionManager from '../components/reconnection_manager';\nimport DedupingManager from '../components/deduping_manager';\nimport utils from '../utils';\nimport { MessageAnnouncement, SubscribeEnvelope, StatusAnnouncement, PresenceAnnouncement } from '../flow_interfaces';\nimport categoryConstants from '../constants/categories';\n\ntype SubscribeArgs = {\n channels: Array,\n channelGroups: Array,\n withPresence: ?boolean,\n timetoken: ?number\n}\n\ntype PresenceArgs = {\n channels: Array,\n channelGroups: Array,\n connected: boolean\n}\n\ntype UnsubscribeArgs = {\n channels: Array,\n channelGroups: Array\n}\n\ntype StateArgs = {\n channels: Array,\n channelGroups: Array,\n state: Object\n}\n\ntype SubscriptionManagerConsturct = {\n leaveEndpoint: Function,\n subscribeEndpoint: Function,\n timeEndpoint: Function,\n heartbeatEndpoint: Function,\n setStateEndpoint: Function,\n config: Config,\n crypto: Crypto,\n listenerManager: ListenerManager\n}\n\nexport default class {\n\n _crypto: Crypto;\n _config: Config;\n _listenerManager: ListenerManager;\n _reconnectionManager: ReconnectionManager;\n\n _leaveEndpoint: Function;\n _heartbeatEndpoint: Function;\n _setStateEndpoint: Function;\n _subscribeEndpoint: Function;\n\n _channels: Object;\n _presenceChannels: Object;\n\n _heartbeatChannels: Object;\n _heartbeatChannelGroups: Object;\n\n _channelGroups: Object;\n _presenceChannelGroups: Object;\n\n _currentTimetoken: number;\n _lastTimetoken: number;\n _storedTimetoken: ?number;\n\n _region: ?number;\n\n _subscribeCall: ?Object;\n _heartbeatTimer: ?number;\n\n _subscriptionStatusAnnounced: boolean;\n\n _autoNetworkDetection: boolean;\n _isOnline: boolean;\n\n // store pending connection elements\n _pendingChannelSubscriptions: Array;\n _pendingChannelGroupSubscriptions: Array;\n //\n\n _dedupingManager: DedupingManager;\n\n constructor({ subscribeEndpoint, leaveEndpoint, heartbeatEndpoint, setStateEndpoint, timeEndpoint, config, crypto, listenerManager }: SubscriptionManagerConsturct) {\n this._listenerManager = listenerManager;\n this._config = config;\n\n this._leaveEndpoint = leaveEndpoint;\n this._heartbeatEndpoint = heartbeatEndpoint;\n this._setStateEndpoint = setStateEndpoint;\n this._subscribeEndpoint = subscribeEndpoint;\n\n this._crypto = crypto;\n\n this._channels = {};\n this._presenceChannels = {};\n\n this._heartbeatChannels = {};\n this._heartbeatChannelGroups = {};\n\n this._channelGroups = {};\n this._presenceChannelGroups = {};\n\n this._pendingChannelSubscriptions = [];\n this._pendingChannelGroupSubscriptions = [];\n\n this._currentTimetoken = 0;\n this._lastTimetoken = 0;\n this._storedTimetoken = null;\n\n this._subscriptionStatusAnnounced = false;\n\n this._isOnline = true;\n\n this._reconnectionManager = new ReconnectionManager({ timeEndpoint });\n this._dedupingManager = new DedupingManager({ config });\n }\n\n adaptStateChange(args: StateArgs, callback: Function) {\n const { state, channels = [], channelGroups = [] } = args;\n\n channels.forEach((channel) => {\n if (channel in this._channels) this._channels[channel].state = state;\n });\n\n channelGroups.forEach((channelGroup) => {\n if (channelGroup in this._channelGroups) this._channelGroups[channelGroup].state = state;\n });\n\n return this._setStateEndpoint({ state, channels, channelGroups }, callback);\n }\n\n adaptPresenceChange(args: PresenceArgs) {\n const { connected, channels = [], channelGroups = [] } = args;\n\n if (connected) {\n channels.forEach((channel: string) => {\n this._heartbeatChannels[channel] = { state: {} };\n });\n\n channelGroups.forEach((channelGroup: string) => {\n this._heartbeatChannelGroups[channelGroup] = { state: {} };\n });\n } else {\n channels.forEach((channel) => {\n if (channel in this._heartbeatChannels) {\n delete this._heartbeatChannels[channel];\n }\n });\n\n channelGroups.forEach((channelGroup) => {\n if (channelGroup in this._heartbeatChannelGroups) {\n delete this._heartbeatChannelGroups[channelGroup];\n }\n });\n\n if (this._config.suppressLeaveEvents === false) {\n this._leaveEndpoint({ channels, channelGroups }, (status) => {\n this._listenerManager.announceStatus(status);\n });\n }\n }\n\n this.reconnect();\n }\n\n adaptSubscribeChange(args: SubscribeArgs) {\n const { timetoken, channels = [], channelGroups = [], withPresence = false } = args;\n\n if (!this._config.subscribeKey || this._config.subscribeKey === '') {\n if (console && console.log) console.log('subscribe key missing; aborting subscribe') //eslint-disable-line\n return;\n }\n\n if (timetoken) {\n this._lastTimetoken = this._currentTimetoken;\n this._currentTimetoken = timetoken;\n }\n\n // reset the current timetoken to get a connect event.\n if (this._currentTimetoken !== '0') {\n this._storedTimetoken = this._currentTimetoken;\n this._currentTimetoken = 0;\n }\n\n channels.forEach((channel: string) => {\n this._channels[channel] = { state: {} };\n if (withPresence) this._presenceChannels[channel] = {};\n\n this._pendingChannelSubscriptions.push(channel);\n });\n\n channelGroups.forEach((channelGroup: string) => {\n this._channelGroups[channelGroup] = { state: {} };\n if (withPresence) this._presenceChannelGroups[channelGroup] = {};\n\n this._pendingChannelGroupSubscriptions.push(channelGroup);\n });\n\n this._subscriptionStatusAnnounced = false;\n this.reconnect();\n }\n\n adaptUnsubscribeChange(args: UnsubscribeArgs, isOffline: boolean) {\n const { channels = [], channelGroups = [] } = args;\n\n // keep track of which channels and channel groups\n // we are going to unsubscribe from.\n const actualChannels = [];\n const actualChannelGroups = [];\n //\n\n channels.forEach((channel) => {\n if (channel in this._channels) {\n delete this._channels[channel];\n actualChannels.push(channel);\n }\n if (channel in this._presenceChannels) {\n delete this._presenceChannels[channel];\n actualChannels.push(channel);\n }\n });\n\n channelGroups.forEach((channelGroup) => {\n if (channelGroup in this._channelGroups) {\n delete this._channelGroups[channelGroup];\n actualChannelGroups.push(channelGroup);\n }\n if (channelGroup in this._presenceChannelGroups) {\n delete this._channelGroups[channelGroup];\n actualChannelGroups.push(channelGroup);\n }\n });\n\n // no-op if there are no channels and cg's to unsubscribe from.\n if (actualChannels.length === 0 && actualChannelGroups.length === 0) {\n return;\n }\n\n if (this._config.suppressLeaveEvents === false && !isOffline) {\n this._leaveEndpoint({ channels: actualChannels, channelGroups: actualChannelGroups }, (status) => {\n status.affectedChannels = actualChannels;\n status.affectedChannelGroups = actualChannelGroups;\n status.currentTimetoken = this._currentTimetoken;\n status.lastTimetoken = this._lastTimetoken;\n this._listenerManager.announceStatus(status);\n });\n }\n\n // if we have nothing to subscribe to, reset the timetoken.\n if (Object.keys(this._channels).length === 0 &&\n Object.keys(this._presenceChannels).length === 0 &&\n Object.keys(this._channelGroups).length === 0 &&\n Object.keys(this._presenceChannelGroups).length === 0) {\n this._lastTimetoken = 0;\n this._currentTimetoken = 0;\n this._storedTimetoken = null;\n this._region = null;\n this._reconnectionManager.stopPolling();\n }\n\n this.reconnect();\n }\n\n unsubscribeAll(isOffline: boolean) {\n this.adaptUnsubscribeChange({ channels: this.getSubscribedChannels(), channelGroups: this.getSubscribedChannelGroups() }, isOffline);\n }\n\n getHeartbeatChannels(): Array {\n return Object.keys(this._heartbeatChannels);\n }\n\n getHeartbeatChannelGroups(): Array {\n return Object.keys(this._heartbeatChannelGroups);\n }\n\n getSubscribedChannels(): Array {\n return Object.keys(this._channels);\n }\n\n getSubscribedChannelGroups(): Array {\n return Object.keys(this._channelGroups);\n }\n\n reconnect() {\n this._startSubscribeLoop();\n this._registerHeartbeatTimer();\n }\n\n disconnect() {\n this._stopSubscribeLoop();\n this._stopHeartbeatTimer();\n this._reconnectionManager.stopPolling();\n }\n\n _registerHeartbeatTimer() {\n this._stopHeartbeatTimer();\n\n // if the interval is 0, do not queue up heartbeating\n if (this._config.getHeartbeatInterval() === 0) {\n return;\n }\n\n this._performHeartbeatLoop();\n this._heartbeatTimer = setInterval(this._performHeartbeatLoop.bind(this), this._config.getHeartbeatInterval() * 1000);\n }\n\n _stopHeartbeatTimer() {\n if (this._heartbeatTimer) {\n clearInterval(this._heartbeatTimer);\n this._heartbeatTimer = null;\n }\n }\n\n _performHeartbeatLoop() {\n let heartbeatChannels = [];\n heartbeatChannels = heartbeatChannels.concat(this.getHeartbeatChannels());\n heartbeatChannels = heartbeatChannels.concat(this.getSubscribedChannels());\n\n let heartbeatChannelGroups = [];\n heartbeatChannelGroups = heartbeatChannelGroups.concat(this.getHeartbeatChannelGroups());\n heartbeatChannelGroups = heartbeatChannelGroups.concat(this.getSubscribedChannelGroups());\n\n let presenceState = {};\n\n if (heartbeatChannels.length === 0 && heartbeatChannelGroups.length === 0) {\n return;\n }\n\n this.getSubscribedChannels().forEach((channel) => {\n let channelState = this._channels[channel].state;\n if (Object.keys(channelState).length) presenceState[channel] = channelState;\n });\n\n this.getSubscribedChannelGroups().forEach((channelGroup) => {\n let channelGroupState = this._channelGroups[channelGroup].state;\n if (Object.keys(channelGroupState).length) presenceState[channelGroup] = channelGroupState;\n });\n\n let onHeartbeat = (status: StatusAnnouncement) => {\n if (status.error && this._config.announceFailedHeartbeats) {\n this._listenerManager.announceStatus(status);\n }\n\n if (status.error && this._config.autoNetworkDetection && this._isOnline) {\n this._isOnline = false;\n this.disconnect();\n this._listenerManager.announceNetworkDown();\n this.reconnect();\n }\n\n if (!status.error && this._config.announceSuccessfulHeartbeats) {\n this._listenerManager.announceStatus(status);\n }\n };\n\n this._heartbeatEndpoint({\n channels: heartbeatChannels,\n channelGroups: heartbeatChannelGroups,\n state: presenceState }, onHeartbeat.bind(this));\n }\n\n _startSubscribeLoop() {\n this._stopSubscribeLoop();\n let channels = [];\n let channelGroups = [];\n\n Object.keys(this._channels).forEach(channel => channels.push(channel));\n Object.keys(this._presenceChannels).forEach(channel => channels.push(`${channel}-pnpres`));\n\n Object.keys(this._channelGroups).forEach(channelGroup => channelGroups.push(channelGroup));\n Object.keys(this._presenceChannelGroups).forEach(channelGroup => channelGroups.push(`${channelGroup}-pnpres`));\n\n if (channels.length === 0 && channelGroups.length === 0) {\n return;\n }\n\n const subscribeArgs = {\n channels,\n channelGroups,\n timetoken: this._currentTimetoken,\n filterExpression: this._config.filterExpression,\n region: this._region\n };\n\n this._subscribeCall = this._subscribeEndpoint(subscribeArgs, this._processSubscribeResponse.bind(this));\n }\n\n _processSubscribeResponse(status: StatusAnnouncement, payload: SubscribeEnvelope) {\n if (status.error) {\n // if we timeout from server, restart the loop.\n if (status.category === categoryConstants.PNTimeoutCategory) {\n this._startSubscribeLoop();\n } else if (status.category === categoryConstants.PNNetworkIssuesCategory) {\n // we lost internet connection, alert the reconnection manager and terminate all loops\n this.disconnect();\n\n if (status.error && this._config.autoNetworkDetection && this._isOnline) {\n this._isOnline = false;\n this._listenerManager.announceNetworkDown();\n }\n\n this._reconnectionManager.onReconnection(() => {\n if (this._config.autoNetworkDetection && !this._isOnline) {\n this._isOnline = true;\n this._listenerManager.announceNetworkUp();\n }\n this.reconnect();\n this._subscriptionStatusAnnounced = true;\n let reconnectedAnnounce: StatusAnnouncement = {\n category: categoryConstants.PNReconnectedCategory,\n operation: status.operation,\n lastTimetoken: this._lastTimetoken,\n currentTimetoken: this._currentTimetoken\n };\n this._listenerManager.announceStatus(reconnectedAnnounce);\n });\n\n this._reconnectionManager.startPolling();\n this._listenerManager.announceStatus(status);\n } else if (status.category === categoryConstants.PNBadRequestCategory) {\n this._stopHeartbeatTimer();\n this._listenerManager.announceStatus(status);\n } else {\n this._listenerManager.announceStatus(status);\n }\n\n return;\n }\n\n if (this._storedTimetoken) {\n this._currentTimetoken = this._storedTimetoken;\n this._storedTimetoken = null;\n } else {\n this._lastTimetoken = this._currentTimetoken;\n this._currentTimetoken = payload.metadata.timetoken;\n }\n\n if (!this._subscriptionStatusAnnounced) {\n let connectedAnnounce: StatusAnnouncement = {};\n connectedAnnounce.category = categoryConstants.PNConnectedCategory;\n connectedAnnounce.operation = status.operation;\n connectedAnnounce.affectedChannels = this._pendingChannelSubscriptions;\n connectedAnnounce.subscribedChannels = this.getSubscribedChannels();\n connectedAnnounce.affectedChannelGroups = this._pendingChannelGroupSubscriptions;\n connectedAnnounce.lastTimetoken = this._lastTimetoken;\n connectedAnnounce.currentTimetoken = this._currentTimetoken;\n this._subscriptionStatusAnnounced = true;\n this._listenerManager.announceStatus(connectedAnnounce);\n\n // clear the pending connections list\n this._pendingChannelSubscriptions = [];\n this._pendingChannelGroupSubscriptions = [];\n }\n\n let messages = payload.messages || [];\n let { requestMessageCountThreshold, dedupeOnSubscribe } = this._config;\n\n if (requestMessageCountThreshold && messages.length >= requestMessageCountThreshold) {\n let countAnnouncement: StatusAnnouncement = {};\n countAnnouncement.category = categoryConstants.PNRequestMessageCountExceededCategory;\n countAnnouncement.operation = status.operation;\n this._listenerManager.announceStatus(countAnnouncement);\n }\n\n messages.forEach((message) => {\n let channel = message.channel;\n let subscriptionMatch = message.subscriptionMatch;\n let publishMetaData = message.publishMetaData;\n\n if (channel === subscriptionMatch) {\n subscriptionMatch = null;\n }\n\n if (dedupeOnSubscribe) {\n if (this._dedupingManager.isDuplicate(message)) {\n return;\n } else {\n this._dedupingManager.addEntry(message);\n }\n }\n\n if (utils.endsWith(message.channel, '-pnpres')) {\n let announce: PresenceAnnouncement = {};\n announce.channel = null;\n announce.subscription = null;\n\n // deprecated -->\n announce.actualChannel = (subscriptionMatch != null) ? channel : null;\n announce.subscribedChannel = subscriptionMatch != null ? subscriptionMatch : channel;\n // <-- deprecated\n\n if (channel) {\n announce.channel = channel.substring(0, channel.lastIndexOf('-pnpres'));\n }\n\n if (subscriptionMatch) {\n announce.subscription = subscriptionMatch.substring(0, subscriptionMatch.lastIndexOf('-pnpres'));\n }\n\n announce.action = message.payload.action;\n announce.state = message.payload.data;\n announce.timetoken = publishMetaData.publishTimetoken;\n announce.occupancy = message.payload.occupancy;\n announce.uuid = message.payload.uuid;\n announce.timestamp = message.payload.timestamp;\n\n if (message.payload.join) {\n announce.join = message.payload.join;\n }\n\n if (message.payload.leave) {\n announce.leave = message.payload.leave;\n }\n\n if (message.payload.timeout) {\n announce.timeout = message.payload.timeout;\n }\n\n this._listenerManager.announcePresence(announce);\n } else {\n let announce: MessageAnnouncement = {};\n announce.channel = null;\n announce.subscription = null;\n\n // deprecated -->\n announce.actualChannel = (subscriptionMatch != null) ? channel : null;\n announce.subscribedChannel = subscriptionMatch != null ? subscriptionMatch : channel;\n // <-- deprecated\n\n announce.channel = channel;\n announce.subscription = subscriptionMatch;\n announce.timetoken = publishMetaData.publishTimetoken;\n announce.publisher = message.issuingClientId;\n\n if (message.userMetadata) {\n announce.userMetadata = message.userMetadata;\n }\n\n if (this._config.cipherKey) {\n announce.message = this._crypto.decrypt(message.payload);\n } else {\n announce.message = message.payload;\n }\n\n this._listenerManager.announceMessage(announce);\n }\n });\n\n this._region = payload.metadata.region;\n this._startSubscribeLoop();\n }\n\n _stopSubscribeLoop() {\n if (this._subscribeCall) {\n if (typeof this._subscribeCall.abort === 'function') {\n this._subscribeCall.abort();\n }\n this._subscribeCall = null;\n }\n }\n\n}\n"]} \ No newline at end of file diff --git a/src/core/components/subscription_manager.js b/src/core/components/subscription_manager.js index b0dcd54a3..14a7526e7 100644 --- a/src/core/components/subscription_manager.js +++ b/src/core/components/subscription_manager.js @@ -81,9 +81,6 @@ export default class { // store pending connection elements _pendingChannelSubscriptions: Array; _pendingChannelGroupSubscriptions: Array; - - _pendingHeartbeatChannels: Array; - _pendingHeartbeatChannelGroups: Array; // _dedupingManager: DedupingManager; @@ -111,9 +108,6 @@ export default class { this._pendingChannelSubscriptions = []; this._pendingChannelGroupSubscriptions = []; - this._pendingHeartbeatChannels = []; - this._pendingHeartbeatChannelGroups = []; - this._currentTimetoken = 0; this._lastTimetoken = 0; this._storedTimetoken = null; @@ -146,12 +140,10 @@ export default class { if (connected) { channels.forEach((channel: string) => { this._heartbeatChannels[channel] = { state: {} }; - this._pendingHeartbeatChannels.push(channel); }); channelGroups.forEach((channelGroup: string) => { this._heartbeatChannelGroups[channelGroup] = { state: {} }; - this._pendingHeartbeatChannelGroups.push(channelGroup); }); } else { channels.forEach((channel) => { From 0c7200230b0176b8356f8678386d66fa4ddfd617 Mon Sep 17 00:00:00 2001 From: manuelfernando Date: Wed, 10 Jan 2018 12:27:42 -0500 Subject: [PATCH 12/13] update .pubnub.yml and changelog.md --- .pubnub.yml | 17 ++++++++++++----- CHANGELOG.md | 21 +++++++++++++++++++-- 2 files changed, 31 insertions(+), 7 deletions(-) diff --git a/.pubnub.yml b/.pubnub.yml index 69d6b8f5f..e7befc6e5 100644 --- a/.pubnub.yml +++ b/.pubnub.yml @@ -12,11 +12,18 @@ changelog: - type: feature text: add support for heartbeat sending without subscription via .presence() - type: feature - text: add support for Native Script - - type: improvement - text: add missing flow types - - type: improvement - text: upgrade superagent to ^3.8.1 + text: add method setProxy for Nodejs + - type: feature + text: set ssl to true for nodejs by default + - version: v4.19.0 + date: 2017-12-05 + changes: + - type: feature + text: add support for Native Script + - type: improvement + text: add missing flow types + - type: improvement + text: upgrade superagent to ^3.8.1 - version: v4.18.0 date: 2017-11-20 changes: diff --git a/CHANGELOG.md b/CHANGELOG.md index 8c0620eae..5f93e16a7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,20 @@ +## [v4.20.0](https://github.com/pubnub/javascript/tree/v4.20.0) + January-04-2018 + + + [Full Changelog](https://github.com/pubnub/javascript/compare/v4.19.0...v4.20.0) + + + +- 🌟add support for heartbeat sending without subscription via .presence() + + +- ⭐add method setProxy for Nodejs + + +- ⭐set ssl to true for nodejs by default + + ## [v4.19.0](https://github.com/pubnub/javascript/tree/v4.19.0) December-05-2017 @@ -10,7 +27,6 @@ - 🌟add support for Native Script - - ⭐add missing flow types @@ -28,7 +44,8 @@ - ⭐keepAlive is now initialized globally instead of per-call, allowing better connection reuse -- 🌟added sdkName configuration parameter which allow completely override pnsdk in request query + +- ⭐added sdkName configuration parameter which allow completely override pnsdk in request query From ea507e3312cfb371075a586d4e467c9284a05c56 Mon Sep 17 00:00:00 2001 From: manuelfernando Date: Wed, 10 Jan 2018 19:54:31 -0500 Subject: [PATCH 13/13] fix yaml identity --- .pubnub.yml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/.pubnub.yml b/.pubnub.yml index e7befc6e5..fc29916b3 100644 --- a/.pubnub.yml +++ b/.pubnub.yml @@ -16,14 +16,14 @@ changelog: - type: feature text: set ssl to true for nodejs by default - version: v4.19.0 - date: 2017-12-05 - changes: - - type: feature - text: add support for Native Script - - type: improvement - text: add missing flow types - - type: improvement - text: upgrade superagent to ^3.8.1 + date: 2017-12-05 + changes: + - type: feature + text: add support for Native Script + - type: improvement + text: add missing flow types + - type: improvement + text: upgrade superagent to ^3.8.1 - version: v4.18.0 date: 2017-11-20 changes: