diff --git a/bower.json b/bower.json index 57b22953..c853c945 100644 --- a/bower.json +++ b/bower.json @@ -1,5 +1,5 @@ { - "version": "2.0.0", + "version": "2.0.1", "name": "ringcentral", "main": "./build/ringcentral.min.js", "ignore": [ @@ -38,6 +38,6 @@ ], "repository": { "type": "git", - "url": "git://gitgub.com/ringcentral/ringcentral-js.git" + "url": "git://github.com/ringcentral/ringcentral-js.git" } } \ No newline at end of file diff --git a/build/ringcentral-bundle.js b/build/ringcentral-bundle.js index a33af59e..1c5c976b 100644 --- a/build/ringcentral-bundle.js +++ b/build/ringcentral-bundle.js @@ -142,7 +142,7 @@ __webpack_require__(26); var SDK = (function () { _createClass(SDK, null, [{ key: 'version', - value: '2.0.0', + value: '2.0.1', enumerable: true }, { key: 'server', @@ -1993,7 +1993,7 @@ module.exports = function() { throw new Error("define cannot be used indirect"); /* 10 */ /***/ function(module, exports, __webpack_require__) { -/* WEBPACK VAR INJECTION */(function(module) {// Version: 3.7.14 +/* WEBPACK VAR INJECTION */(function(module) {// Version: 3.7.16 /* =-====================================================================-= */ /* =-====================================================================-= */ /* =-========================= JSON =============================-= */ @@ -2144,6 +2144,13 @@ module.exports = function() { throw new Error("define cannot be used indirect"); JSON['parse'] = function (text) {return eval('('+text+')')}; } }()); +/* =-====================================================================-= */ +/* =-====================================================================-= */ +/* =-========================= UTIL =============================-= */ +/* =-====================================================================-= */ +/* =-====================================================================-= */ + +window['PUBNUB'] || (function() { var NOW = 1 , READY = false , READY_BUFFER = [] @@ -2157,7 +2164,7 @@ var NOW = 1 , PARAMSBIT = '&' , PRESENCE_HB_THRESHOLD = 5 , PRESENCE_HB_DEFAULT = 30 -, SDK_VER = '3.7.14' +, SDK_VER = '3.7.16' , REPL = /{([\w\-]+)}/g; /** @@ -2716,16 +2723,13 @@ function PN_API(setup) { , callback = callback || function(){} , err = error || function(){} , url + , params , jsonp = jsonp_cb(); - - // Prevent Leaving a Presence Channel if (channel.indexOf(PRESENCE_SUFFIX) > 0) return true; - - if (COMPATIBLE_35) { if (!SSL) return false; if (jsonp == '0') return false; @@ -2773,6 +2777,8 @@ function PN_API(setup) { var data = { 'uuid' : UUID, 'auth' : auth_key || AUTH_KEY } , origin = nextorigin(ORIGIN) + , url + , params , callback = callback || function(){} , err = error || function(){} , jsonp = jsonp_cb(); @@ -2793,21 +2799,33 @@ function PN_API(setup) { if (USE_INSTANCEID) data['instanceid'] = INSTANCEID; + url = [ + origin, 'v2', 'presence', 'sub_key', + SUBSCRIBE_KEY, 'channel', encode(','), 'leave' + ]; + + params = _get_url_params(data); + + if (sendBeacon) { + url_string = build_url(url, params); + if (sendBeacon(url_string)) { + callback && callback({"status": 200, "action": "leave", "message": "OK", "service": "Presence"}); + return true; + } + } + xdr({ blocking : blocking || SSL, timeout : 5000, callback : jsonp, - data : _get_url_params(data), + data : params, success : function(response) { _invoke_callback(response, callback, err); }, fail : function(response) { _invoke_error(response, err); }, - url : [ - origin, 'v2', 'presence', 'sub_key', - SUBSCRIBE_KEY, 'channel', encode(','), 'leave' - ] + url : url }); return true; }, @@ -3040,11 +3058,21 @@ function PN_API(setup) { var messages = response[0]; var decrypted_messages = []; for (var a = 0; a < messages.length; a++) { - var new_message = decrypt(messages[a],cipher_key); - try { - decrypted_messages['push'](JSON['parse'](new_message)); - } catch (e) { - decrypted_messages['push']((new_message)); + if (include_token) { + var new_message = decrypt(messages[a]['message'],cipher_key); + var timetoken = messages[a]['timetoken']; + try { + decrypted_messages['push']({"message" : JSON['parse'](new_message), "timetoken" : timetoken}); + } catch (e) { + decrypted_messages['push'](({"message" : new_message, "timetoken" : timetoken})); + } + } else { + var new_message = decrypt(messages[a],cipher_key); + try { + decrypted_messages['push'](JSON['parse'](new_message)); + } catch (e) { + decrypted_messages['push']((new_message)); + } } } callback([decrypted_messages, response[1], response[2]]); @@ -3223,9 +3251,18 @@ function PN_API(setup) { , err = args['error'] || function(){}; TIMETOKEN = 0; - //SUB_RESTORE = 1; REVISIT !!!! + SUB_RESTORE = 1; // REVISIT !!!! if (channel) { + + // Prepare LeaveChannel(s) + var leave_c = map( ( + channel.join ? channel.join(',') : ''+channel + ).split(','), function(channel) { + if (!CHANNELS[channel]) return; + return channel; + } ).join(','); + // Prepare Channel(s) channel = map( ( channel.join ? channel.join(',') : ''+channel @@ -3235,21 +3272,29 @@ function PN_API(setup) { } ).join(','); // Iterate over Channels - each( channel.split(','), function(ch) { - var CB_CALLED = true; + each(channel.split(','), function(ch) { if (!ch) return; CHANNELS[ch] = 0; if (ch in STATE) delete STATE[ch]; - if (READY) { - CB_CALLED = SELF['LEAVE']( ch, 0 , auth_key, callback, err); - } - if (!CB_CALLED) callback({action : "leave"}); - - } ); + + var CB_CALLED = true; + if (READY) { + CB_CALLED = SELF['LEAVE'](leave_c, 0 , auth_key, callback, err); + } + if (!CB_CALLED) callback({action : "leave"}); } if (channel_group) { + + // Prepare channel group(s) + var leave_gc = map( ( + channel_group.join ? channel_group.join(',') : ''+channel_group + ).split(','), function(channel_group) { + if (!CHANNEL_GROUPS[channel_group]) return; + return channel_group; + } ).join(','); + // Prepare channel group(s) channel_group = map( ( channel_group.join ? channel_group.join(',') : ''+channel_group @@ -3260,16 +3305,16 @@ function PN_API(setup) { // Iterate over channel groups each( channel_group.split(','), function(chg) { - var CB_CALLED = true; if (!chg) return; CHANNEL_GROUPS[chg] = 0; if (chg in STATE) delete STATE[chg]; - if (READY) { - CB_CALLED = SELF['LEAVE_GROUP']( chg, 0 , auth_key, callback, err); - } - if (!CB_CALLED) callback({action : "leave"}); - } ); + + var CB_CALLED = true; + if (READY) { + CB_CALLED = SELF['LEAVE_GROUP'](leave_gc, 0 , auth_key, callback, err); + } + if (!CB_CALLED) callback({action : "leave"}); } // Reset Connection if Count Less @@ -3669,6 +3714,7 @@ function PN_API(setup) { */ 'here_now' : function( args, callback ) { var callback = args['callback'] || callback + , debug = args['debug'] , err = args['error'] || function(){} , auth_key = args['auth_key'] || AUTH_KEY , channel = args['channel'] @@ -3710,6 +3756,7 @@ function PN_API(setup) { fail : function(response) { _invoke_error(response, err); }, + debug : debug, url : url }); }, @@ -4285,14 +4332,6 @@ function crypto_obj() { } }; } -/* =-====================================================================-= */ -/* =-====================================================================-= */ -/* =-========================= UTIL =============================-= */ -/* =-====================================================================-= */ -/* =-====================================================================-= */ - -window['PUBNUB'] || (function() { - /** * UTIL LOCALS */ @@ -4300,7 +4339,7 @@ window['PUBNUB'] || (function() { var SWF = 'https://pubnub.a.ssl.fastly.net/pubnub.swf' , ASYNC = 'async' , UA = navigator.userAgent -, PNSDK = 'PubNub-JS-' + 'Web' + '/' + '3.7.14' +, PNSDK = 'PubNub-JS-' + 'Web' + '/' + '3.7.16' , XORIGN = UA.indexOf('MSIE 6') == -1; /** @@ -7762,8 +7801,9 @@ module.exports = exports['default']; var hasOwn = Object.prototype.hasOwnProperty; var undefined; // More compressible than void 0. - var iteratorSymbol = - typeof Symbol === "function" && Symbol.iterator || "@@iterator"; + var $Symbol = typeof Symbol === "function" ? Symbol : {}; + var iteratorSymbol = $Symbol.iterator || "@@iterator"; + var toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag"; var inModule = typeof module === "object"; var runtime = global.regeneratorRuntime; @@ -7833,7 +7873,7 @@ module.exports = exports['default']; var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype; GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype; GeneratorFunctionPrototype.constructor = GeneratorFunction; - GeneratorFunction.displayName = "GeneratorFunction"; + GeneratorFunctionPrototype[toStringTagSymbol] = GeneratorFunction.displayName = "GeneratorFunction"; // Helper for defining the .next, .throw, and .return methods of the // Iterator interface in terms of a single ._invoke method. @@ -7860,6 +7900,9 @@ module.exports = exports['default']; Object.setPrototypeOf(genFun, GeneratorFunctionPrototype); } else { genFun.__proto__ = GeneratorFunctionPrototype; + if (!(toStringTagSymbol in genFun)) { + genFun[toStringTagSymbol] = "GeneratorFunction"; + } } genFun.prototype = Object.create(Gp); return genFun; @@ -7879,46 +7922,54 @@ module.exports = exports['default']; } function AsyncIterator(generator) { - // This invoke function is written in a style that assumes some - // calling function (or Promise) will handle exceptions. - function invoke(method, arg) { - var result = generator[method](arg); - var value = result.value; - return value instanceof AwaitArgument - ? Promise.resolve(value.arg).then(invokeNext, invokeThrow) - : Promise.resolve(value).then(function(unwrapped) { - // When a yielded Promise is resolved, its final value becomes - // the .value of the Promise<{value,done}> result for the - // current iteration. If the Promise is rejected, however, the - // result for this iteration will be rejected with the same - // reason. Note that rejections of yielded Promises are not - // thrown back into the generator function, as is the case - // when an awaited Promise is rejected. This difference in - // behavior between yield and await is important, because it - // allows the consumer to decide what to do with the yielded - // rejection (swallow it and continue, manually .throw it back - // into the generator, abandon iteration, whatever). With - // await, by contrast, there is no opportunity to examine the - // rejection reason outside the generator function, so the - // only option is to throw it from the await expression, and - // let the generator function handle the exception. - result.value = unwrapped; - return result; + function invoke(method, arg, resolve, reject) { + var record = tryCatch(generator[method], generator, arg); + if (record.type === "throw") { + reject(record.arg); + } else { + var result = record.arg; + var value = result.value; + if (value instanceof AwaitArgument) { + return Promise.resolve(value.arg).then(function(value) { + invoke("next", value, resolve, reject); + }, function(err) { + invoke("throw", err, resolve, reject); }); + } + + return Promise.resolve(value).then(function(unwrapped) { + // When a yielded Promise is resolved, its final value becomes + // the .value of the Promise<{value,done}> result for the + // current iteration. If the Promise is rejected, however, the + // result for this iteration will be rejected with the same + // reason. Note that rejections of yielded Promises are not + // thrown back into the generator function, as is the case + // when an awaited Promise is rejected. This difference in + // behavior between yield and await is important, because it + // allows the consumer to decide what to do with the yielded + // rejection (swallow it and continue, manually .throw it back + // into the generator, abandon iteration, whatever). With + // await, by contrast, there is no opportunity to examine the + // rejection reason outside the generator function, so the + // only option is to throw it from the await expression, and + // let the generator function handle the exception. + result.value = unwrapped; + resolve(result); + }, reject); + } } if (typeof process === "object" && process.domain) { invoke = process.domain.bind(invoke); } - var invokeNext = invoke.bind(generator, "next"); - var invokeThrow = invoke.bind(generator, "throw"); - var invokeReturn = invoke.bind(generator, "return"); var previousPromise; function enqueue(method, arg) { function callInvokeWithMethodAndArg() { - return invoke(method, arg); + return new Promise(function(resolve, reject) { + invoke(method, arg, resolve, reject); + }); } return previousPromise = @@ -7939,9 +7990,7 @@ module.exports = exports['default']; // Avoid propagating failures to Promises returned by later // invocations of the iterator. callInvokeWithMethodAndArg - ) : new Promise(function (resolve) { - resolve(callInvokeWithMethodAndArg()); - }); + ) : callInvokeWithMethodAndArg(); } // Define the unified helper method that is used to implement .next, @@ -8116,6 +8165,8 @@ module.exports = exports['default']; return this; }; + Gp[toStringTagSymbol] = "Generator"; + Gp.toString = function() { return "[object Generator]"; }; diff --git a/build/ringcentral-bundle.js.map b/build/ringcentral-bundle.js.map index 4f6e675c..b2eb25c4 100644 --- a/build/ringcentral-bundle.js.map +++ b/build/ringcentral-bundle.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap 376cc765ad2cf3304422","webpack:///./src/SDK.js","webpack:///./src/core/Utils.js","webpack:///./src/core/Externals.js","webpack:///./bower_components/es6-promise/promise.js","webpack:///(webpack)/~/node-libs-browser/~/timers-browserify/main.js","webpack:///(webpack)/~/node-libs-browser/~/process/browser.js","webpack:///(webpack)/buildin/module.js","webpack:///(webpack)/buildin/amd-define.js","webpack:///./bower_components/fetch/fetch.js","webpack:///./bower_components/pubnub/web/pubnub.js","webpack:///./src/core/Cache.js","webpack:///./src/core/Observable.js","webpack:///./src/core/Queue.js","webpack:///./src/http/Client.js","webpack:///./src/http/Utils.js","webpack:///./src/http/ApiResponse.js","webpack:///./src/mocks/ClientMock.js","webpack:///./src/mocks/Registry.js","webpack:///./src/mocks/Mock.js","webpack:///./src/platform/Platform.js","webpack:///./src/platform/Auth.js","webpack:///./src/pubnub/PubnubFactory.js","webpack:///./src/pubnub/PubnubMock.js","webpack:///./src/subscription/Subscription.js","webpack:///./src/subscription/CachedSubscription.js","webpack:///./~/regenerator/runtime.js"],"names":[],"mappings":"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AY,KAAK,WAAW,GAAI,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;;;;;;;8CCf9F;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA,2CAA2C;AAC3C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,2EAA2E;;AAE3E;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,8BAA8B,sBAAsB;;AAEpD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,qBAAqB,+BAA+B;AACpD;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,uBAAuB,QAAQ;AAC/B;AACA;AACA;AACA,WAAW;AACX;AACA;AACA,SAAS;AACT,uBAAuB,QAAQ;AAC/B;;AAEA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,kEAAkE,QAAQ;;AAE1E;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,kEAAkE,QAAQ;AAC1E;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,qCAAqC,QAAQ;;AAE7C;;AAEA,qBAAqB,wBAAwB;AAC7C;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;;AAEA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT,OAAO;AACP;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA,qBAAqB,qEAAqE;AAC1F;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,qBAAqB,qEAAqE;AAC1F;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAO;;AAEP;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,OAAO;AACP;;AAEA;AACA,cAAc,SAAS;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA,OAAO;;AAEP;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;;AAEA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,OAAO;AACP;;AAEA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,aAAa;AACb,WAAW;AACX;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;;AAEA;AACA,cAAc,SAAS;AACvB,cAAc,SAAS;AACvB;AACA,eAAe;AACf;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW;AACX,SAAS;AACT;AACA;;AAEA;AACA,OAAO;;AAEP;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA,cAAc,SAAS;AACvB;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA,WAAW;AACX;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,oDAAyB,wCAAwC,EAAE;AACnE,KAAK;AACL;AACA,KAAK;AACL;AACA;;AAEA;AACA,CAAC;;;;;;;;;ACt8BD;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,iBAAiB;;AAE5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA,E;;;;;;;AC3EA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,uBAAuB,sBAAsB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,2BAA2B;AAC3B;AACA;AACA;AACA,4BAA4B,UAAU;;;;;;;AC1FtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACTA,6BAA6B,mDAAmD;;;;;;;ACAhF;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,OAAO;;AAEP,KAAK;AACL;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,OAAO;;AAEP;AACA,KAAK;AACL;AACA;AACA,CAAC;;;;;;;AC5VD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,0CAA0C;;AAE1C;AACA,kBAAkB;AAClB,kBAAkB;AAClB;;AAEA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA,2BAA2B,YAAY;AACvC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,YAAY;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,0CAA0C;AAC1C,wBAAwB;AACxB,iCAAiC,MAAM,0BAA0B;AACjE;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,2BAA2B,WAAW;AACtC;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,UAAU;AACtC;AACA;;AAEA;AACA;AACA,yCAAyC;AACzC;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,UAAU;;AAElC;AACA;AACA;AACA,mBAAmB;AACnB,mBAAmB;;AAEnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;AAGD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,6CAA6C,kBAAkB;AAC/D;AACA;AACA;AACA,mCAAmC,wBAAwB;AAC3D;AACA;;AAEA;AACA;AACA;AACA,gCAAgC,KAAK,KAAK,gBAAgB;AAC1D;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kCAAkC,EAAE;AACpC;AACA;AACA;;AAEA;AACA,sCAAsC,OAAO;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,4CAA4C,kBAAkB;AAC9D;AACA;AACA;AACA,wCAAwC,wBAAwB;AAChE;AACA;;;AAGA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA,uBAAuB;;AAEvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA,kBAAkB;AAClB;AACA;AACA,2CAA2C,YAAY;AACvD,CAAC,WAAW;;AAEZ;AACA,mBAAmB,YAAY;AAC/B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D;AAC3D,2DAA2D;AAC3D,gDAAgD,mBAAmB;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,wCAAwC,UAAU;AAClD,wCAAwC;AACxC;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,aAAa;AACb;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,8BAA8B,uCAAuC;AACrE;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA,mCAAmC;AACnC,SAAS;;AAET;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA,mCAAmC;AACnC,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA,aAAa;;AAEb;;AAEA;AACA;AACA;;AAEA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;;;;AAIA;AACA;;;;;AAKA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;;AAGA;AACA;AACA;AACA,0CAA0C,yEAAyE;AACnH;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA,aAAa;AACb;AACA,SAAS;AACT;;AAEA,0BAA0B;AAC1B;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA,iBAAiB;AACjB;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;;AAEA;;AAEA;AACA,SAAS;;AAET;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,SAAS;;AAET;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;;AAEA;AACA;AACA,SAAS;;AAET;AACA;AACA;;AAEA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA,8CAA8C;AAC9C,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,iEAAiE;AAC9F;AACA;AACA;AACA;AACA,mCAAmC,qBAAqB;AACxD;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;;AAET;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,uCAAuC,kCAAkC;AACzE;AACA;AACA,aAAa;AACb,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA,uCAAuC,EAAE;AACzC;AACA;AACA;;AAEA,wBAAwB;;AAExB;;AAEA;AACA;AACA;AACA;AACA;AACA,+CAA+C,wBAAwB;AACvE,uCAAuC;AACvC,aAAa;AACb,SAAS;;AAET;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,sBAAsB;;AAEtB;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,iBAAiB;AACjB;AACA,aAAa;;AAEb;AACA;AACA,SAAS;;AAET;AACA,gCAAgC,sBAAsB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,8BAA8B;;AAE9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,iBAAiB;;;AAG/D,iBAAiB;AACjB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,iBAAiB;;AAE/D,iBAAiB;AACjB;;AAEA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA,8CAA8C;AAC9C,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,qBAAqB;;AAErB;AACA;;AAEA;AACA;AACA;AACA;AACA,sDAAsD,mCAAmC;AACzF;AACA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA;AACA,6BAA6B,kBAAkB,EAAE;AACjD;AACA,qBAAqB;AACrB,iBAAiB;AACjB;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;;AAErB;AACA;;AAEA;AACA;AACA;AACA;AACA,4DAA4D,mCAAmC;AAC/F;AACA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA;AACA,6BAA6B,wBAAwB,EAAE;AACvD;AACA,qBAAqB;AACrB,iBAAiB;AACjB;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,qBAAqB;AACrB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA,4CAA4C,mCAAmC;;AAE/E;AACA;AACA;;;AAGA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA,6BAA6B;AAC7B;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;;AAEA;AACA;AACA;AACA;AACA;AACA,yBAAyB;;AAEzB;AACA;AACA;AACA;AACA;AACA,yBAAyB;;AAEzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA,6BAA6B;AAC7B;AACA,qFAAqF;AACrF;AACA;AACA,oDAAoD,aAAa;AACjE,uCAAuC;AACvC;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,+FAA+F;AAC/F,iCAAiC;AACjC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;;AAEzB;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;;AAEzB;AACA;AACA,iBAAiB;AACjB;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,SAAS;;AAET;AACA,6BAA6B,sCAAsC;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;;AAE5B;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA,+BAA+B,0BAA0B;;AAEzD;AACA;AACA,iE;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA,aAAa;AACb,SAAS;;AAET;AACA,6CAA6C,sCAAsC;AACnF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;;AAE5B;AACA;AACA;;AAEA,+BAA+B,0BAA0B;;AAEzD;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,oBAAoB;;AAEhE;AACA;AACA;AACA;;AAEA,+BAA+B,0BAA0B;;AAEzD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;;AAEA,aAAa;;AAEb,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,0BAA0B;AACzD;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,sBAAsB;;AAEtB;AACA;AACA,aAAa;AACb;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA,aAAa;;AAEb,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,wBAAwB;AACxB,+BAA+B,0BAA0B;AACzD;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,4BAA4B;;AAE5B;AACA;;AAEA;;AAEA,+BAA+B,0BAA0B;;AAEzD;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,+CAA+C,8BAA8B;AAC7E,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC,gBAAgB,6DAA6D;AAC7E,SAAS;AACT;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yFAAyF,uBAAuB;AAChH;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6DAA6D,yBAAyB,eAAe,uBAAuB;AAC5H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oDAAoD;AACpD;AACA;AACA;AACA,sBAAsB,yBAAyB;AAC/C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,YAAY;AACjB;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA,cAAc,sCAAsC;AACpD;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,gBAAgB;;AAEhB;AACA;AACA;AACA;AACA;AACA,yBAAyB;;AAEzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,UAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA,0BAA0B;;;AAG1B;AACA;AACA;AACA;AACA;AACA,qBAAqB;;;;AAIrB;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,iDAAiD,eAAe;AAChE;AACA;AACA;AACA;AACA,iBAAiB;AACjB,iCAAiC,yBAAyB;AAC1D;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,wCAAwC,SAAS,sBAAsB,EAAE;AACzE;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;;AAEA;AACA;AACA;;AAEA;;AAEA,iCAAiC;AACjC;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,uBAAuB,4CAA4C;AACnE,uBAAuB,gBAAgB;;AAEvC;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,SAAS,sBAAsB,EAAE;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,kDAAkD;AAClD,kDAAkD;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,iBAAiB,gEAAgE,EAAE;AACtH;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe;AACf,eAAe;AACf;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;;AAE3B;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;;;AAGvC;AACA;AACA,+DAA+D,8BAA8B;AAC7F;AACA,KAAK;;AAEL;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,2CAA2C;;AAE3C;AACA;AACA;AACA;AACA;AACA,qCAAqC,sBAAsB;AAC3D;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA,YAAY,2CAA2C;;AAEvD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,+BAA+B;AAC/B,8BAA8B,0BAA0B,EAAE;AAC1D;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,CAAC;AACD;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,2BAA2B;AAC3B,2BAA2B;AAC3B,2BAA2B;AAC3B,2BAA2B;;AAE3B;AACA,wCAAwC,0BAA0B;AAClE,wCAAwC;AACxC,wCAAwC;AACxC,wCAAwC;AACxC,wCAAwC;AACxC,wCAAwC;AACxC,wCAAwC;;AAExC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;A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BAAC,MAAM,EAAE;;AAEZ,YAAI,sBAAsB,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;;AAEjE,YAAI,sBAAsB,EAAE;AACxB,gBAAI;AACA,oBAAI,CAAC,eAAe,CAAC,sBAAsB,CAAC,CAAC;aAChD,CAAC,OAAO,CAAC,EAAE,EAAE;SACjB,MAAM;AACH,gBAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;SAChC;;AAED,eAAO,IAAI,CAAC;KAEf;;WAjIgB,kBAAkB;;;qBAAlB,kBAAkB;;;;;;;ACHvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd,KAAK;AACL,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,WAAW;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW;AACX;AACA;;AAEA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAAS;AACT;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;;AAEA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,iCAAiC,kBAAkB;AACnD;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,iBAAiB;;AAEjB;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,YAAY;AACZ;AACA;;AAEA;AACA,YAAY;AACZ;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,8CAA8C,QAAQ;AACtD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa;AACb;AACA;;AAEA,WAAW;AACX;AACA;AACA;;AAEA,WAAW;AACX;AACA;AACA;;AAEA,WAAW;AACX;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA,8CAA8C,QAAQ;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;;AAEL;AACA,8CAA8C,QAAQ;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA,8CAA8C,QAAQ;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA","file":"ringcentral-bundle.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"SDK\"] = factory();\n\telse\n\t\troot[\"RingCentral\"] = root[\"RingCentral\"] || {}, root[\"RingCentral\"][\"SDK\"] = factory();\n})(this, function() {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/universalModuleDefinition\n **/"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/build/\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap 376cc765ad2cf3304422\n **/","import * as Utils from './core/Utils';\nimport Cache from './core/Cache';\nimport * as Externals from './core/Externals';\nimport Observable from './core/Observable';\nimport Queue from './core/Queue';\n\nimport Client from './http/Client';\nimport ApiResponse from './http/ApiResponse';\nimport * as HttpUtils from './http/Utils';\n\nimport {default as ClientMock} from './mocks/ClientMock';\nimport Mock from './mocks/Mock';\nimport Registry from './mocks/Registry';\n\nimport Platform from './platform/Platform';\nimport Auth from './platform/Auth';\n\nimport PubnubMockFactory from './pubnub/PubnubFactory';\n\nimport Subscription from './subscription/Subscription';\nimport CachedSubscription from './subscription/CachedSubscription';\n\nrequire(\"regenerator/runtime\");\n\nexport default class SDK {\n\n static version = '2.0.0';\n\n static server = {\n sandbox: 'https://platform.devtest.ringcentral.com',\n production: 'https://platform.ringcentral.com'\n };\n\n /**\n * @constructor\n * @param {object} [options]\n * @param {string} [options.server]\n * @param {string} [options.cachePrefix]\n * @param {string} [options.appSecret]\n * @param {string} [options.appKey]\n * @param {string} [options.appName]\n * @param {string} [options.appVersion]\n * @param {string} [options.pubnubFactory]\n * @param {string} [options.client]\n */\n constructor(options) {\n\n options = options || {};\n\n this._cache = new Cache(Externals.localStorage, options.cachePrefix);\n\n this._client = options.client || new Client();\n\n this._platform = new Platform(this._client, this._cache, options.server, options.appKey, options.appSecret);\n\n this._pubnubFactory = options.pubnubFactory || Externals.PUBNUB;\n\n }\n\n /**\n * @return {Platform}\n */\n platform() {\n return this._platform;\n }\n\n /**\n * @return {Subscription}\n */\n createSubscription() {\n return new Subscription(this._pubnubFactory, this._platform);\n }\n\n /**\n * @return {CachedSubscription}\n */\n createCachedSubscription(cacheKey) {\n return new CachedSubscription(this._pubnubFactory, this._platform, this._cache, cacheKey);\n }\n\n /**\n * @return {Cache}\n */\n cache() {\n return this._cache;\n }\n\n static core = {\n Cache: Cache,\n Observable: Observable,\n Utils: Utils,\n Externals: Externals,\n Queue: Queue\n };\n\n static http = {\n Client: Client,\n ApiResponse: ApiResponse,\n Utils: HttpUtils\n };\n\n static platform = {\n Auth: Auth,\n Platform: Platform\n };\n\n static subscription = {\n Subscription: Subscription\n };\n\n static mocks = {\n Client: ClientMock,\n Registry: Registry,\n Mock: Mock\n };\n\n static pubnub = {\n PubnubMockFactory: PubnubMockFactory\n };\n\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/SDK.js\n **/","import {Promise} from './Externals.js';\n\n/**\n * TODO Replace with something better\n * @see https://github.com/joyent/node/blob/master/lib/querystring.js\n * @param {object} parameters\n * @returns {string}\n */\nexport function queryStringify(parameters) {\n\n var array = [];\n\n parameters = parameters || {};\n\n Object.keys(parameters).forEach((k) => {\n\n var v = parameters[k];\n\n if (isArray(v)) {\n v.forEach((vv) => {\n array.push(encodeURIComponent(k) + '=' + encodeURIComponent(vv));\n });\n } else {\n array.push(encodeURIComponent(k) + '=' + encodeURIComponent(v));\n }\n\n });\n\n return array.join('&');\n\n}\n\n/**\n * TODO Replace with something better\n * @see https://github.com/joyent/node/blob/master/lib/querystring.js\n * @param {string} queryString\n * @returns {object}\n */\nexport function parseQueryString(queryString) {\n\n var argsParsed = {};\n\n queryString.split('&').forEach((arg) => {\n\n arg = decodeURIComponent(arg);\n\n if (arg.indexOf('=') == -1) {\n\n argsParsed[arg.trim()] = true;\n\n } else {\n\n var pair = arg.split('='),\n key = pair[0].trim(),\n value = pair[1].trim();\n\n if (key in argsParsed) {\n if (key in argsParsed && !isArray(argsParsed[key])) argsParsed[key] = [argsParsed[key]];\n argsParsed[key].push(value);\n } else {\n argsParsed[key] = value;\n }\n\n }\n\n });\n\n return argsParsed;\n\n}\n\n/**\n * @param obj\n * @return {boolean}\n */\nexport function isFunction(obj) {\n return typeof obj === \"function\";\n}\n\n/**\n * @param obj\n * @return {boolean}\n */\nexport function isArray(obj) {\n return Array.isArray ? Array.isArray(obj) : typeof obj === \"array\";\n}\n\n/**\n * @param fn\n * @param interval\n * @param timeout\n */\nexport function poll(fn, interval, timeout) { //NodeJS.Timer|number\n\n module.exports.stopPolling(timeout);\n\n interval = interval || 1000;\n\n var next = (delay) => {\n\n delay = delay || interval;\n\n interval = delay;\n\n return setTimeout(() => {\n\n fn(next, delay);\n\n }, delay);\n\n };\n\n return next();\n\n}\n\nexport function stopPolling(timeout) {\n if (timeout) clearTimeout(timeout);\n}\n\nexport function isNodeJS() {\n return (typeof process !== 'undefined');\n}\n\nexport function isBrowser() {\n return (typeof window !== 'undefined');\n}\n\nexport function delay(timeout) {\n return new Promise((resolve, reject) => {\n setTimeout(() => {\n resolve(null);\n }, timeout);\n });\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/core/Utils.js\n **/","import ES6Promise from 'es6-promise';\nimport nodeFetch from 'node-fetch';\nimport pubnub from 'pubnub';\n\nvar root = (new Function('return this'))();\n\nexport var Promise = (ES6Promise && ES6Promise.Promise) || root.Promise;\n\nexport var fetch = root.fetch || nodeFetch;\nexport var Request = root.Request || fetch.Request;\nexport var Response = root.Response || fetch.Response;\nexport var Headers = root.Headers || fetch.Headers;\n\nexport var PUBNUB = root.PUBNUB || pubnub;\n\nexport var localStorage = (typeof root.localStorage !== 'undefined') ? root.localStorage : {};\n\n\n/** WEBPACK FOOTER **\n ** ./src/core/Externals.js\n **/","/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 2.2.0\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$toString = {}.toString;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n function lib$es6$promise$asap$$asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n var lib$es6$promise$asap$$default = lib$es6$promise$asap$$asap;\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n var nextTick = process.nextTick;\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // setImmediate should be used instead instead\n var version = process.versions.node.match(/^(?:(\\d+)\\.)?(?:(\\d+)\\.)?(\\*|\\d+)$/);\n if (Array.isArray(version) && version[1] === '0' && version[2] === '10') {\n nextTick = setImmediate;\n }\n return function() {\n nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertex() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertex();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFullfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$default(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable) {\n if (maybeThenable.constructor === promise.constructor) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n var then = lib$es6$promise$$internal$$getThen(maybeThenable);\n\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFullfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$default(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$default(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$default(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n var enumerator = this;\n\n enumerator._instanceConstructor = Constructor;\n enumerator.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (enumerator._validateInput(input)) {\n enumerator._input = input;\n enumerator.length = input.length;\n enumerator._remaining = input.length;\n\n enumerator._init();\n\n if (enumerator.length === 0) {\n lib$es6$promise$$internal$$fulfill(enumerator.promise, enumerator._result);\n } else {\n enumerator.length = enumerator.length || 0;\n enumerator._enumerate();\n if (enumerator._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(enumerator.promise, enumerator._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(enumerator.promise, enumerator._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validateInput = function(input) {\n return lib$es6$promise$utils$$isArray(input);\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._init = function() {\n this._result = new Array(this.length);\n };\n\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var enumerator = this;\n\n var length = enumerator.length;\n var promise = enumerator.promise;\n var input = enumerator._input;\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n enumerator._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var enumerator = this;\n var c = enumerator._instanceConstructor;\n\n if (lib$es6$promise$utils$$isMaybeThenable(entry)) {\n if (entry.constructor === c && entry._state !== lib$es6$promise$$internal$$PENDING) {\n entry._onerror = null;\n enumerator._settledAt(entry._state, i, entry._result);\n } else {\n enumerator._willSettleAt(c.resolve(entry), i);\n }\n } else {\n enumerator._remaining--;\n enumerator._result[i] = entry;\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var enumerator = this;\n var promise = enumerator.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n enumerator._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n enumerator._result[i] = value;\n }\n }\n\n if (enumerator._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, enumerator._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise’s eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n if (!lib$es6$promise$utils$$isFunction(resolver)) {\n lib$es6$promise$promise$$needsResolver();\n }\n\n if (!(this instanceof lib$es6$promise$promise$$Promise)) {\n lib$es6$promise$promise$$needsNew();\n }\n\n lib$es6$promise$$internal$$initializePromise(this, resolver);\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$default;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: function(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$default(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n },\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./bower_components/es6-promise/promise.js\n ** module id = 4\n ** module chunks = 0\n **/","var nextTick = require('process/browser.js').nextTick;\nvar apply = Function.prototype.apply;\nvar slice = Array.prototype.slice;\nvar immediateIds = {};\nvar nextImmediateId = 0;\n\n// DOM APIs, for completeness\n\nexports.setTimeout = function() {\n return new Timeout(apply.call(setTimeout, window, arguments), clearTimeout);\n};\nexports.setInterval = function() {\n return new Timeout(apply.call(setInterval, window, arguments), clearInterval);\n};\nexports.clearTimeout =\nexports.clearInterval = function(timeout) { timeout.close(); };\n\nfunction Timeout(id, clearFn) {\n this._id = id;\n this._clearFn = clearFn;\n}\nTimeout.prototype.unref = Timeout.prototype.ref = function() {};\nTimeout.prototype.close = function() {\n this._clearFn.call(window, this._id);\n};\n\n// Does not start the time, just sets up the members needed.\nexports.enroll = function(item, msecs) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = msecs;\n};\n\nexports.unenroll = function(item) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = -1;\n};\n\nexports._unrefActive = exports.active = function(item) {\n clearTimeout(item._idleTimeoutId);\n\n var msecs = item._idleTimeout;\n if (msecs >= 0) {\n item._idleTimeoutId = setTimeout(function onTimeout() {\n if (item._onTimeout)\n item._onTimeout();\n }, msecs);\n }\n};\n\n// That's not how node.js implements it but the exposed api is the same.\nexports.setImmediate = typeof setImmediate === \"function\" ? setImmediate : function(fn) {\n var id = nextImmediateId++;\n var args = arguments.length < 2 ? false : slice.call(arguments, 1);\n\n immediateIds[id] = true;\n\n nextTick(function onNextTick() {\n if (immediateIds[id]) {\n // fn.call() is faster so we optimize for the common use-case\n // @see http://jsperf.com/call-apply-segu\n if (args) {\n fn.apply(null, args);\n } else {\n fn.call(null);\n }\n // Prevent ids from leaking\n exports.clearImmediate(id);\n }\n });\n\n return id;\n};\n\nexports.clearImmediate = typeof clearImmediate === \"function\" ? clearImmediate : function(id) {\n delete immediateIds[id];\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** (webpack)/~/node-libs-browser/~/timers-browserify/main.js\n ** module id = 5\n ** module chunks = 0\n **/","// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** (webpack)/~/node-libs-browser/~/process/browser.js\n ** module id = 6\n ** module chunks = 0\n **/","module.exports = function(module) {\r\n\tif(!module.webpackPolyfill) {\r\n\t\tmodule.deprecate = function() {};\r\n\t\tmodule.paths = [];\r\n\t\t// module.parent = undefined by default\r\n\t\tmodule.children = [];\r\n\t\tmodule.webpackPolyfill = 1;\r\n\t}\r\n\treturn module;\r\n}\r\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** (webpack)/buildin/module.js\n ** module id = 7\n ** module chunks = 0\n **/","module.exports = function() { throw new Error(\"define cannot be used indirect\"); };\r\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** (webpack)/buildin/amd-define.js\n ** module id = 8\n ** module chunks = 0\n **/","(function() {\n 'use strict';\n\n if (self.fetch) {\n return\n }\n\n function normalizeName(name) {\n if (typeof name !== 'string') {\n name = String(name)\n }\n if (/[^a-z0-9\\-#$%&'*+.\\^_`|~]/i.test(name)) {\n throw new TypeError('Invalid character in header field name')\n }\n return name.toLowerCase()\n }\n\n function normalizeValue(value) {\n if (typeof value !== 'string') {\n value = String(value)\n }\n return value\n }\n\n function Headers(headers) {\n this.map = {}\n\n if (headers instanceof Headers) {\n headers.forEach(function(value, name) {\n this.append(name, value)\n }, this)\n\n } else if (headers) {\n Object.getOwnPropertyNames(headers).forEach(function(name) {\n this.append(name, headers[name])\n }, this)\n }\n }\n\n Headers.prototype.append = function(name, value) {\n name = normalizeName(name)\n value = normalizeValue(value)\n var list = this.map[name]\n if (!list) {\n list = []\n this.map[name] = list\n }\n list.push(value)\n }\n\n Headers.prototype['delete'] = function(name) {\n delete this.map[normalizeName(name)]\n }\n\n Headers.prototype.get = function(name) {\n var values = this.map[normalizeName(name)]\n return values ? values[0] : null\n }\n\n Headers.prototype.getAll = function(name) {\n return this.map[normalizeName(name)] || []\n }\n\n Headers.prototype.has = function(name) {\n return this.map.hasOwnProperty(normalizeName(name))\n }\n\n Headers.prototype.set = function(name, value) {\n this.map[normalizeName(name)] = [normalizeValue(value)]\n }\n\n Headers.prototype.forEach = function(callback, thisArg) {\n Object.getOwnPropertyNames(this.map).forEach(function(name) {\n this.map[name].forEach(function(value) {\n callback.call(thisArg, value, name, this)\n }, this)\n }, this)\n }\n\n function consumed(body) {\n if (body.bodyUsed) {\n return Promise.reject(new TypeError('Already read'))\n }\n body.bodyUsed = true\n }\n\n function fileReaderReady(reader) {\n return new Promise(function(resolve, reject) {\n reader.onload = function() {\n resolve(reader.result)\n }\n reader.onerror = function() {\n reject(reader.error)\n }\n })\n }\n\n function readBlobAsArrayBuffer(blob) {\n var reader = new FileReader()\n reader.readAsArrayBuffer(blob)\n return fileReaderReady(reader)\n }\n\n function readBlobAsText(blob) {\n var reader = new FileReader()\n reader.readAsText(blob)\n return fileReaderReady(reader)\n }\n\n var support = {\n blob: 'FileReader' in self && 'Blob' in self && (function() {\n try {\n new Blob();\n return true\n } catch(e) {\n return false\n }\n })(),\n formData: 'FormData' in self\n }\n\n function Body() {\n this.bodyUsed = false\n\n\n this._initBody = function(body) {\n this._bodyInit = body\n if (typeof body === 'string') {\n this._bodyText = body\n } else if (support.blob && Blob.prototype.isPrototypeOf(body)) {\n this._bodyBlob = body\n } else if (support.formData && FormData.prototype.isPrototypeOf(body)) {\n this._bodyFormData = body\n } else if (!body) {\n this._bodyText = ''\n } else {\n throw new Error('unsupported BodyInit type')\n }\n }\n\n if (support.blob) {\n this.blob = function() {\n var rejected = consumed(this)\n if (rejected) {\n return rejected\n }\n\n if (this._bodyBlob) {\n return Promise.resolve(this._bodyBlob)\n } else if (this._bodyFormData) {\n throw new Error('could not read FormData body as blob')\n } else {\n return Promise.resolve(new Blob([this._bodyText]))\n }\n }\n\n this.arrayBuffer = function() {\n return this.blob().then(readBlobAsArrayBuffer)\n }\n\n this.text = function() {\n var rejected = consumed(this)\n if (rejected) {\n return rejected\n }\n\n if (this._bodyBlob) {\n return readBlobAsText(this._bodyBlob)\n } else if (this._bodyFormData) {\n throw new Error('could not read FormData body as text')\n } else {\n return Promise.resolve(this._bodyText)\n }\n }\n } else {\n this.text = function() {\n var rejected = consumed(this)\n return rejected ? rejected : Promise.resolve(this._bodyText)\n }\n }\n\n if (support.formData) {\n this.formData = function() {\n return this.text().then(decode)\n }\n }\n\n this.json = function() {\n return this.text().then(JSON.parse)\n }\n\n return this\n }\n\n // HTTP methods whose capitalization should be normalized\n var methods = ['DELETE', 'GET', 'HEAD', 'OPTIONS', 'POST', 'PUT']\n\n function normalizeMethod(method) {\n var upcased = method.toUpperCase()\n return (methods.indexOf(upcased) > -1) ? upcased : method\n }\n\n function Request(input, options) {\n options = options || {}\n var body = options.body\n if (Request.prototype.isPrototypeOf(input)) {\n if (input.bodyUsed) {\n throw new TypeError('Already read')\n }\n this.url = input.url\n this.credentials = input.credentials\n if (!options.headers) {\n this.headers = new Headers(input.headers)\n }\n this.method = input.method\n this.mode = input.mode\n if (!body) {\n body = input._bodyInit\n input.bodyUsed = true\n }\n } else {\n this.url = input\n }\n\n this.credentials = options.credentials || this.credentials || 'omit'\n if (options.headers || !this.headers) {\n this.headers = new Headers(options.headers)\n }\n this.method = normalizeMethod(options.method || this.method || 'GET')\n this.mode = options.mode || this.mode || null\n this.referrer = null\n\n if ((this.method === 'GET' || this.method === 'HEAD') && body) {\n throw new TypeError('Body not allowed for GET or HEAD requests')\n }\n this._initBody(body)\n }\n\n function decode(body) {\n var form = new FormData()\n body.trim().split('&').forEach(function(bytes) {\n if (bytes) {\n var split = bytes.split('=')\n var name = split.shift().replace(/\\+/g, ' ')\n var value = split.join('=').replace(/\\+/g, ' ')\n form.append(decodeURIComponent(name), decodeURIComponent(value))\n }\n })\n return form\n }\n\n function headers(xhr) {\n var head = new Headers()\n var pairs = xhr.getAllResponseHeaders().trim().split('\\n')\n pairs.forEach(function(header) {\n var split = header.trim().split(':')\n var key = split.shift().trim()\n var value = split.join(':').trim()\n head.append(key, value)\n })\n return head\n }\n\n Body.call(Request.prototype)\n\n function Response(bodyInit, options) {\n if (!options) {\n options = {}\n }\n\n this._initBody(bodyInit)\n this.type = 'default'\n this.url = null\n this.status = options.status\n this.ok = this.status >= 200 && this.status < 300\n this.statusText = options.statusText\n this.headers = options.headers instanceof Headers ? options.headers : new Headers(options.headers)\n this.url = options.url || ''\n }\n\n Body.call(Response.prototype)\n\n self.Headers = Headers;\n self.Request = Request;\n self.Response = Response;\n\n self.fetch = function(input, init) {\n var request\n if (Request.prototype.isPrototypeOf(input) && !init) {\n request = input\n } else {\n request = new Request(input, init)\n }\n\n return new Promise(function(resolve, reject) {\n var xhr = new XMLHttpRequest()\n\n function responseURL() {\n if ('responseURL' in xhr) {\n return xhr.responseURL\n }\n\n // Avoid security warnings on getResponseHeader when not allowed by CORS\n if (/^X-Request-URL:/m.test(xhr.getAllResponseHeaders())) {\n return xhr.getResponseHeader('X-Request-URL')\n }\n\n return;\n }\n\n xhr.onload = function() {\n var status = (xhr.status === 1223) ? 204 : xhr.status\n if (status < 100 || status > 599) {\n reject(new TypeError('Network request failed'))\n return\n }\n var options = {\n status: status,\n statusText: xhr.statusText,\n headers: headers(xhr),\n url: responseURL()\n }\n var body = 'response' in xhr ? xhr.response : xhr.responseText;\n resolve(new Response(body, options))\n }\n\n xhr.onerror = function() {\n reject(new TypeError('Network request failed'))\n }\n\n xhr.open(request.method, request.url, true)\n\n if (request.credentials === 'include') {\n xhr.withCredentials = true\n }\n\n if ('responseType' in xhr && support.blob) {\n xhr.responseType = 'blob'\n }\n\n request.headers.forEach(function(value, name) {\n xhr.setRequestHeader(name, value)\n })\n\n xhr.send(typeof request._bodyInit === 'undefined' ? null : request._bodyInit)\n })\n }\n self.fetch.polyfill = true\n})();\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./bower_components/fetch/fetch.js\n ** module id = 9\n ** module chunks = 0\n **/","// Version: 3.7.14\n/* =-====================================================================-= */\n/* =-====================================================================-= */\n/* =-========================= JSON =============================-= */\n/* =-====================================================================-= */\n/* =-====================================================================-= */\n\n(window['JSON'] && window['JSON']['stringify']) || (function () {\n window['JSON'] || (window['JSON'] = {});\n\n function toJSON(key) {\n try { return this.valueOf() }\n catch(e) { return null }\n }\n\n var cx = /[\\u0000\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g,\n escapable = /[\\\\\\\"\\x00-\\x1f\\x7f-\\x9f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g,\n gap,\n indent,\n meta = { // table of character substitutions\n '\\b': '\\\\b',\n '\\t': '\\\\t',\n '\\n': '\\\\n',\n '\\f': '\\\\f',\n '\\r': '\\\\r',\n '\"' : '\\\\\"',\n '\\\\': '\\\\\\\\'\n },\n rep;\n\n function quote(string) {\n escapable.lastIndex = 0;\n return escapable.test(string) ?\n '\"' + string.replace(escapable, function (a) {\n var c = meta[a];\n return typeof c === 'string' ? c :\n '\\\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);\n }) + '\"' :\n '\"' + string + '\"';\n }\n\n function str(key, holder) {\n var i, // The loop counter.\n k, // The member key.\n v, // The member value.\n length,\n partial,\n mind = gap,\n value = holder[key];\n\n if (value && typeof value === 'object') {\n value = toJSON.call( value, key );\n }\n\n if (typeof rep === 'function') {\n value = rep.call(holder, key, value);\n }\n\n switch (typeof value) {\n case 'string':\n return quote(value);\n\n case 'number':\n return isFinite(value) ? String(value) : 'null';\n\n case 'boolean':\n case 'null':\n return String(value);\n\n case 'object':\n\n if (!value) {\n return 'null';\n }\n\n gap += indent;\n partial = [];\n\n if (Object.prototype.toString.apply(value) === '[object Array]') {\n\n length = value.length;\n for (i = 0; i < length; i += 1) {\n partial[i] = str(i, value) || 'null';\n }\n\n v = partial.length === 0 ? '[]' :\n gap ? '[\\n' + gap +\n partial.join(',\\n' + gap) + '\\n' +\n mind + ']' :\n '[' + partial.join(',') + ']';\n gap = mind;\n return v;\n }\n if (rep && typeof rep === 'object') {\n length = rep.length;\n for (i = 0; i < length; i += 1) {\n k = rep[i];\n if (typeof k === 'string') {\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (gap ? ': ' : ':') + v);\n }\n }\n }\n } else {\n for (k in value) {\n if (Object.hasOwnProperty.call(value, k)) {\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (gap ? ': ' : ':') + v);\n }\n }\n }\n }\n\n v = partial.length === 0 ? '{}' :\n gap ? '{\\n' + gap + partial.join(',\\n' + gap) + '\\n' +\n mind + '}' : '{' + partial.join(',') + '}';\n gap = mind;\n return v;\n }\n }\n\n if (typeof JSON['stringify'] !== 'function') {\n JSON['stringify'] = function (value, replacer, space) {\n var i;\n gap = '';\n indent = '';\n\n if (typeof space === 'number') {\n for (i = 0; i < space; i += 1) {\n indent += ' ';\n }\n } else if (typeof space === 'string') {\n indent = space;\n }\n rep = replacer;\n if (replacer && typeof replacer !== 'function' &&\n (typeof replacer !== 'object' ||\n typeof replacer.length !== 'number')) {\n throw new Error('JSON.stringify');\n }\n return str('', {'': value});\n };\n }\n\n if (typeof JSON['parse'] !== 'function') {\n // JSON is parsed on the server for security.\n JSON['parse'] = function (text) {return eval('('+text+')')};\n }\n}());\nvar NOW = 1\n, READY = false\n, READY_BUFFER = []\n, PRESENCE_SUFFIX = '-pnpres'\n, DEF_WINDOWING = 10 // MILLISECONDS.\n, DEF_TIMEOUT = 10000 // MILLISECONDS.\n, DEF_SUB_TIMEOUT = 310 // SECONDS.\n, DEF_KEEPALIVE = 60 // SECONDS (FOR TIMESYNC).\n, SECOND = 1000 // A THOUSAND MILLISECONDS.\n, URLBIT = '/'\n, PARAMSBIT = '&'\n, PRESENCE_HB_THRESHOLD = 5\n, PRESENCE_HB_DEFAULT = 30\n, SDK_VER = '3.7.14'\n, REPL = /{([\\w\\-]+)}/g;\n\n/**\n * UTILITIES\n */\nfunction unique() { return'x'+ ++NOW+''+(+new Date) }\nfunction rnow() { return+new Date }\n\n/**\n * NEXTORIGIN\n * ==========\n * var next_origin = nextorigin();\n */\nvar nextorigin = (function() {\n var max = 20\n , ori = Math.floor(Math.random() * max);\n return function( origin, failover ) {\n return origin.indexOf('pubsub.') > 0\n && origin.replace(\n 'pubsub', 'ps' + (\n failover ? generate_uuid().split('-')[0] :\n (++ori < max? ori : ori=1)\n ) ) || origin;\n }\n})();\n\n\n/**\n * Build Url\n * =======\n *\n */\nfunction build_url( url_components, url_params ) {\n var url = url_components.join(URLBIT)\n , params = [];\n\n if (!url_params) return url;\n\n each( url_params, function( key, value ) {\n var value_str = (typeof value == 'object')?JSON['stringify'](value):value;\n (typeof value != 'undefined' &&\n value != null && encode(value_str).length > 0\n ) && params.push(key + \"=\" + encode(value_str));\n } );\n\n url += \"?\" + params.join(PARAMSBIT);\n return url;\n}\n\n/**\n * UPDATER\n * =======\n * var timestamp = unique();\n */\nfunction updater( fun, rate ) {\n var timeout\n , last = 0\n , runnit = function() {\n if (last + rate > rnow()) {\n clearTimeout(timeout);\n timeout = setTimeout( runnit, rate );\n }\n else {\n last = rnow();\n fun();\n }\n };\n\n return runnit;\n}\n\n/**\n * GREP\n * ====\n * var list = grep( [1,2,3], function(item) { return item % 2 } )\n */\nfunction grep( list, fun ) {\n var fin = [];\n each( list || [], function(l) { fun(l) && fin.push(l) } );\n return fin\n}\n\n/**\n * SUPPLANT\n * ========\n * var text = supplant( 'Hello {name}!', { name : 'John' } )\n */\nfunction supplant( str, values ) {\n return str.replace( REPL, function( _, match ) {\n return values[match] || _\n } );\n}\n\n/**\n * timeout\n * =======\n * timeout( function(){}, 100 );\n */\nfunction timeout( fun, wait ) {\n return setTimeout( fun, wait );\n}\n\n/**\n * uuid\n * ====\n * var my_uuid = generate_uuid();\n */\nfunction generate_uuid(callback) {\n var u = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g,\n function(c) {\n var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8);\n return v.toString(16);\n });\n if (callback) callback(u);\n return u;\n}\n\nfunction isArray(arg) {\n return !!arg && typeof arg !== 'string' && (Array.isArray && Array.isArray(arg) || typeof(arg.length) === \"number\")\n //return !!arg && (Array.isArray && Array.isArray(arg) || typeof(arg.length) === \"number\")\n}\n\n/**\n * EACH\n * ====\n * each( [1,2,3], function(item) { } )\n */\nfunction each( o, f) {\n if ( !o || !f ) return;\n\n if ( isArray(o) )\n for ( var i = 0, l = o.length; i < l; )\n f.call( o[i], o[i], i++ );\n else\n for ( var i in o )\n o.hasOwnProperty &&\n o.hasOwnProperty(i) &&\n f.call( o[i], i, o[i] );\n}\n\n/**\n * MAP\n * ===\n * var list = map( [1,2,3], function(item) { return item + 1 } )\n */\nfunction map( list, fun ) {\n var fin = [];\n each( list || [], function( k, v ) { fin.push(fun( k, v )) } );\n return fin;\n}\n\n\nfunction pam_encode(str) {\n return encodeURIComponent(str).replace(/[!'()*~]/g, function(c) {\n return '%' + c.charCodeAt(0).toString(16).toUpperCase();\n });\n}\n\n/**\n * ENCODE\n * ======\n * var encoded_data = encode('path');\n */\nfunction encode(path) { return encodeURIComponent(path) }\n\n/**\n * Generate Subscription Channel List\n * ==================================\n * generate_channel_list(channels_object);\n */\nfunction generate_channel_list(channels, nopresence) {\n var list = [];\n each( channels, function( channel, status ) {\n if (nopresence) {\n if(channel.search('-pnpres') < 0) {\n if (status.subscribed) list.push(channel);\n }\n } else {\n if (status.subscribed) list.push(channel);\n }\n });\n return list.sort();\n}\n\n/**\n * Generate Subscription Channel Groups List\n * ==================================\n * generate_channel_group_list(channels_groups object);\n */\nfunction generate_channel_group_list(channel_groups, nopresence) {\n var list = [];\n each(channel_groups, function( channel_group, status ) {\n if (nopresence) {\n if(channel_group.search('-pnpres') < 0) {\n if (status.subscribed) list.push(channel_group);\n }\n } else {\n if (status.subscribed) list.push(channel_group);\n }\n });\n return list.sort();\n}\n\n// PUBNUB READY TO CONNECT\nfunction ready() { timeout( function() {\n if (READY) return;\n READY = 1;\n each( READY_BUFFER, function(connect) { connect() } );\n}, SECOND ); }\n\nfunction PNmessage(args) {\n msg = args || {'apns' : {}},\n msg['getPubnubMessage'] = function() {\n var m = {};\n\n if (Object.keys(msg['apns']).length) {\n m['pn_apns'] = {\n 'aps' : {\n 'alert' : msg['apns']['alert'] ,\n 'badge' : msg['apns']['badge']\n }\n }\n for (var k in msg['apns']) {\n m['pn_apns'][k] = msg['apns'][k];\n }\n var exclude1 = ['badge','alert'];\n for (var k in exclude1) {\n delete m['pn_apns'][exclude1[k]];\n }\n }\n\n\n\n if (msg['gcm']) {\n m['pn_gcm'] = {\n 'data' : msg['gcm']\n }\n }\n\n for (var k in msg) {\n m[k] = msg[k];\n }\n var exclude = ['apns','gcm','publish', 'channel','callback','error'];\n for (var k in exclude) {\n delete m[exclude[k]];\n }\n\n return m;\n };\n msg['publish'] = function() {\n\n var m = msg.getPubnubMessage();\n\n if (msg['pubnub'] && msg['channel']) {\n msg['pubnub'].publish({\n 'message' : m,\n 'channel' : msg['channel'],\n 'callback' : msg['callback'],\n 'error' : msg['error']\n })\n }\n };\n return msg;\n}\n\nfunction PN_API(setup) {\n var SUB_WINDOWING = +setup['windowing'] || DEF_WINDOWING\n , SUB_TIMEOUT = (+setup['timeout'] || DEF_SUB_TIMEOUT) * SECOND\n , KEEPALIVE = (+setup['keepalive'] || DEF_KEEPALIVE) * SECOND\n , TIME_CHECK = setup['timecheck'] || 0\n , NOLEAVE = setup['noleave'] || 0\n , PUBLISH_KEY = setup['publish_key']\n , SUBSCRIBE_KEY = setup['subscribe_key']\n , AUTH_KEY = setup['auth_key'] || ''\n , SECRET_KEY = setup['secret_key'] || ''\n , hmac_SHA256 = setup['hmac_SHA256']\n , SSL = setup['ssl'] ? 's' : ''\n , ORIGIN = 'http'+SSL+'://'+(setup['origin']||'pubsub.pubnub.com')\n , STD_ORIGIN = nextorigin(ORIGIN)\n , SUB_ORIGIN = nextorigin(ORIGIN)\n , CONNECT = function(){}\n , PUB_QUEUE = []\n , CLOAK = true\n , TIME_DRIFT = 0\n , SUB_CALLBACK = 0\n , SUB_CHANNEL = 0\n , SUB_RECEIVER = 0\n , SUB_RESTORE = setup['restore'] || 0\n , SUB_BUFF_WAIT = 0\n , TIMETOKEN = 0\n , RESUMED = false\n , CHANNELS = {}\n , CHANNEL_GROUPS = {}\n , SUB_ERROR = function(){}\n , STATE = {}\n , PRESENCE_HB_TIMEOUT = null\n , PRESENCE_HB = validate_presence_heartbeat(\n setup['heartbeat'] || setup['pnexpires'] || 0, setup['error']\n )\n , PRESENCE_HB_INTERVAL = setup['heartbeat_interval'] || (PRESENCE_HB / 2) -1\n , PRESENCE_HB_RUNNING = false\n , NO_WAIT_FOR_PENDING = setup['no_wait_for_pending']\n , COMPATIBLE_35 = setup['compatible_3.5'] || false\n , xdr = setup['xdr']\n , params = setup['params'] || {}\n , error = setup['error'] || function() {}\n , _is_online = setup['_is_online'] || function() { return 1 }\n , jsonp_cb = setup['jsonp_cb'] || function() { return 0 }\n , db = setup['db'] || {'get': function(){}, 'set': function(){}}\n , CIPHER_KEY = setup['cipher_key']\n , UUID = setup['uuid'] || ( !setup['unique_uuid'] && db && db['get'](SUBSCRIBE_KEY+'uuid') || '')\n , USE_INSTANCEID = setup['instance_id'] || false\n , INSTANCEID = ''\n , shutdown = setup['shutdown']\n , use_send_beacon = (typeof setup['use_send_beacon'] != 'undefined')?setup['use_send_beacon']:true\n , sendBeacon = (use_send_beacon)?setup['sendBeacon']:null\n , _poll_timer\n , _poll_timer2;\n\n if (PRESENCE_HB === 2) PRESENCE_HB_INTERVAL = 1;\n\n var crypto_obj = setup['crypto_obj'] ||\n {\n 'encrypt' : function(a,key){ return a},\n 'decrypt' : function(b,key){return b}\n };\n\n function _get_url_params(data) {\n if (!data) data = {};\n each( params , function( key, value ) {\n if (!(key in data)) data[key] = value;\n });\n return data;\n }\n\n function _object_to_key_list(o) {\n var l = []\n each( o , function( key, value ) {\n l.push(key);\n });\n return l;\n }\n function _object_to_key_list_sorted(o) {\n return _object_to_key_list(o).sort();\n }\n\n function _get_pam_sign_input_from_params(params) {\n var si = \"\";\n var l = _object_to_key_list_sorted(params);\n\n for (var i in l) {\n var k = l[i]\n si += k + \"=\" + pam_encode(params[k]) ;\n if (i != l.length - 1) si += \"&\"\n }\n return si;\n }\n\n function validate_presence_heartbeat(heartbeat, cur_heartbeat, error) {\n var err = false;\n\n if (typeof heartbeat === 'undefined') {\n return cur_heartbeat;\n }\n\n if (typeof heartbeat === 'number') {\n if (heartbeat > PRESENCE_HB_THRESHOLD || heartbeat == 0)\n err = false;\n else\n err = true;\n } else if(typeof heartbeat === 'boolean'){\n if (!heartbeat) {\n return 0;\n } else {\n return PRESENCE_HB_DEFAULT;\n }\n } else {\n err = true;\n }\n\n if (err) {\n error && error(\"Presence Heartbeat value invalid. Valid range ( x > \" + PRESENCE_HB_THRESHOLD + \" or x = 0). Current Value : \" + (cur_heartbeat || PRESENCE_HB_THRESHOLD));\n return cur_heartbeat || PRESENCE_HB_THRESHOLD;\n } else return heartbeat;\n }\n\n function encrypt(input, key) {\n return crypto_obj['encrypt'](input, key || CIPHER_KEY) || input;\n }\n function decrypt(input, key) {\n return crypto_obj['decrypt'](input, key || CIPHER_KEY) ||\n crypto_obj['decrypt'](input, CIPHER_KEY) ||\n input;\n }\n\n function error_common(message, callback) {\n callback && callback({ 'error' : message || \"error occurred\"});\n error && error(message);\n }\n function _presence_heartbeat() {\n\n clearTimeout(PRESENCE_HB_TIMEOUT);\n\n if (!PRESENCE_HB_INTERVAL || PRESENCE_HB_INTERVAL >= 500 ||\n PRESENCE_HB_INTERVAL < 1 ||\n (!generate_channel_list(CHANNELS,true).length && !generate_channel_group_list(CHANNEL_GROUPS, true).length ) )\n {\n PRESENCE_HB_RUNNING = false;\n return;\n }\n\n PRESENCE_HB_RUNNING = true;\n SELF['presence_heartbeat']({\n 'callback' : function(r) {\n PRESENCE_HB_TIMEOUT = timeout( _presence_heartbeat, (PRESENCE_HB_INTERVAL) * SECOND );\n },\n 'error' : function(e) {\n error && error(\"Presence Heartbeat unable to reach Pubnub servers.\" + JSON.stringify(e));\n PRESENCE_HB_TIMEOUT = timeout( _presence_heartbeat, (PRESENCE_HB_INTERVAL) * SECOND );\n }\n });\n }\n\n function start_presence_heartbeat() {\n !PRESENCE_HB_RUNNING && _presence_heartbeat();\n }\n\n function publish(next) {\n\n if (NO_WAIT_FOR_PENDING) {\n if (!PUB_QUEUE.length) return;\n } else {\n if (next) PUB_QUEUE.sending = 0;\n if ( PUB_QUEUE.sending || !PUB_QUEUE.length ) return;\n PUB_QUEUE.sending = 1;\n }\n\n xdr(PUB_QUEUE.shift());\n }\n function each_channel_group(callback) {\n var count = 0;\n\n each( generate_channel_group_list(CHANNEL_GROUPS), function(channel_group) {\n var chang = CHANNEL_GROUPS[channel_group];\n\n if (!chang) return;\n\n count++;\n (callback||function(){})(chang);\n } );\n\n return count;\n }\n\n function each_channel(callback) {\n var count = 0;\n\n each( generate_channel_list(CHANNELS), function(channel) {\n var chan = CHANNELS[channel];\n\n if (!chan) return;\n\n count++;\n (callback||function(){})(chan);\n } );\n\n return count;\n }\n function _invoke_callback(response, callback, err) {\n if (typeof response == 'object') {\n if (response['error']) {\n var callback_data = {};\n\n if (response['message']) {\n callback_data['message'] = response['message'];\n }\n\n if (response['payload']) {\n callback_data['payload'] = response['payload'];\n }\n\n err && err(callback_data);\n return;\n\n }\n if (response['payload']) {\n if (response['next_page'])\n callback && callback(response['payload'], response['next_page']);\n else\n callback && callback(response['payload']);\n return;\n }\n }\n callback && callback(response);\n }\n\n function _invoke_error(response,err) {\n\n if (typeof response == 'object' && response['error']) {\n var callback_data = {};\n\n if (response['message']) {\n callback_data['message'] = response['message'];\n }\n\n if (response['payload']) {\n callback_data['payload'] = response['payload'];\n }\n \n err && err(callback_data);\n return;\n } else {\n err && err(response);\n }\n }\n function CR(args, callback, url1, data) {\n var callback = args['callback'] || callback\n , err = args['error'] || error\n , jsonp = jsonp_cb();\n\n data = data || {};\n \n if (!data['auth']) {\n data['auth'] = args['auth_key'] || AUTH_KEY;\n }\n \n var url = [\n STD_ORIGIN, 'v1', 'channel-registration',\n 'sub-key', SUBSCRIBE_KEY\n ];\n\n url.push.apply(url,url1);\n \n if (jsonp) data['callback'] = jsonp;\n \n xdr({\n callback : jsonp,\n data : _get_url_params(data),\n success : function(response) {\n _invoke_callback(response, callback, err);\n },\n fail : function(response) {\n _invoke_error(response, err);\n },\n url : url\n });\n\n }\n\n // Announce Leave Event\n var SELF = {\n 'LEAVE' : function( channel, blocking, auth_key, callback, error ) {\n\n var data = { 'uuid' : UUID, 'auth' : auth_key || AUTH_KEY }\n , origin = nextorigin(ORIGIN)\n , callback = callback || function(){}\n , err = error || function(){}\n , url\n , jsonp = jsonp_cb();\n\n\n\n // Prevent Leaving a Presence Channel\n if (channel.indexOf(PRESENCE_SUFFIX) > 0) return true;\n\n\n\n\n if (COMPATIBLE_35) {\n if (!SSL) return false;\n if (jsonp == '0') return false;\n }\n\n if (NOLEAVE) return false;\n\n if (jsonp != '0') data['callback'] = jsonp;\n\n if (USE_INSTANCEID) data['instanceid'] = INSTANCEID;\n\n url = [\n origin, 'v2', 'presence', 'sub_key',\n SUBSCRIBE_KEY, 'channel', encode(channel), 'leave'\n ];\n\n params = _get_url_params(data);\n\n\n if (sendBeacon) {\n url_string = build_url(url, params);\n if (sendBeacon(url_string)) {\n callback && callback({\"status\": 200, \"action\": \"leave\", \"message\": \"OK\", \"service\": \"Presence\"});\n return true;\n }\n }\n\n\n xdr({\n blocking : blocking || SSL,\n timeout : 2000,\n callback : jsonp,\n data : params,\n success : function(response) {\n _invoke_callback(response, callback, err);\n },\n fail : function(response) {\n _invoke_error(response, err);\n },\n url : url\n });\n return true;\n },\n 'LEAVE_GROUP' : function( channel_group, blocking, auth_key, callback, error ) {\n\n var data = { 'uuid' : UUID, 'auth' : auth_key || AUTH_KEY }\n , origin = nextorigin(ORIGIN)\n , callback = callback || function(){}\n , err = error || function(){}\n , jsonp = jsonp_cb();\n\n // Prevent Leaving a Presence Channel Group\n if (channel_group.indexOf(PRESENCE_SUFFIX) > 0) return true;\n\n if (COMPATIBLE_35) {\n if (!SSL) return false;\n if (jsonp == '0') return false;\n }\n\n if (NOLEAVE) return false;\n\n if (jsonp != '0') data['callback'] = jsonp;\n\n if (channel_group && channel_group.length > 0) data['channel-group'] = channel_group;\n\n if (USE_INSTANCEID) data['instanceid'] = INSTANCEID;\n\n xdr({\n blocking : blocking || SSL,\n timeout : 5000,\n callback : jsonp,\n data : _get_url_params(data),\n success : function(response) {\n _invoke_callback(response, callback, err);\n },\n fail : function(response) {\n _invoke_error(response, err);\n },\n url : [\n origin, 'v2', 'presence', 'sub_key',\n SUBSCRIBE_KEY, 'channel', encode(','), 'leave'\n ]\n });\n return true;\n },\n 'set_resumed' : function(resumed) {\n RESUMED = resumed;\n },\n 'get_cipher_key' : function() {\n return CIPHER_KEY;\n },\n 'set_cipher_key' : function(key) {\n CIPHER_KEY = key;\n },\n 'raw_encrypt' : function(input, key) {\n return encrypt(input, key);\n },\n 'raw_decrypt' : function(input, key) {\n return decrypt(input, key);\n },\n 'get_heartbeat' : function() {\n return PRESENCE_HB;\n },\n \n 'set_heartbeat' : function(heartbeat, heartbeat_interval) {\n PRESENCE_HB = validate_presence_heartbeat(heartbeat, PRESENCE_HB, error);\n PRESENCE_HB_INTERVAL = heartbeat_interval || (PRESENCE_HB / 2) - 1;\n if (PRESENCE_HB == 2) {\n PRESENCE_HB_INTERVAL = 1;\n }\n CONNECT();\n _presence_heartbeat();\n },\n \n 'get_heartbeat_interval' : function() {\n return PRESENCE_HB_INTERVAL;\n },\n \n 'set_heartbeat_interval' : function(heartbeat_interval) {\n PRESENCE_HB_INTERVAL = heartbeat_interval;\n _presence_heartbeat();\n },\n \n 'get_version' : function() {\n return SDK_VER;\n },\n 'getGcmMessageObject' : function(obj) {\n return {\n 'data' : obj\n }\n },\n 'getApnsMessageObject' : function(obj) {\n var x = {\n 'aps' : { 'badge' : 1, 'alert' : ''}\n }\n for (k in obj) {\n k[x] = obj[k];\n }\n return x;\n },\n 'newPnMessage' : function() {\n var x = {};\n if (gcm) x['pn_gcm'] = gcm;\n if (apns) x['pn_apns'] = apns;\n for ( k in n ) {\n x[k] = n[k];\n }\n return x;\n },\n\n '_add_param' : function(key,val) {\n params[key] = val;\n },\n\n 'channel_group' : function(args, callback) {\n var ns_ch = args['channel_group']\n , callback = callback || args['callback']\n , channels = args['channels'] || args['channel']\n , cloak = args['cloak']\n , namespace\n , channel_group\n , url = []\n , data = {}\n , mode = args['mode'] || 'add';\n\n\n if (ns_ch) {\n var ns_ch_a = ns_ch.split(':');\n\n if (ns_ch_a.length > 1) {\n namespace = (ns_ch_a[0] === '*')?null:ns_ch_a[0];\n\n channel_group = ns_ch_a[1];\n } else {\n channel_group = ns_ch_a[0];\n }\n }\n\n namespace && url.push('namespace') && url.push(encode(namespace));\n\n url.push('channel-group');\n\n if (channel_group && channel_group !== '*') {\n url.push(channel_group);\n }\n\n if (channels ) {\n if (isArray(channels)) {\n channels = channels.join(',');\n }\n data[mode] = channels;\n data['cloak'] = (CLOAK)?'true':'false';\n } else {\n if (mode === 'remove') url.push('remove');\n }\n\n if (typeof cloak != 'undefined') data['cloak'] = (cloak)?'true':'false';\n\n CR(args, callback, url, data);\n },\n\n 'channel_group_list_groups' : function(args, callback) {\n var namespace;\n\n namespace = args['namespace'] || args['ns'] || args['channel_group'] || null;\n if (namespace) {\n args[\"channel_group\"] = namespace + \":*\";\n }\n\n SELF['channel_group'](args, callback);\n },\n\n 'channel_group_list_channels' : function(args, callback) {\n if (!args['channel_group']) return error('Missing Channel Group');\n SELF['channel_group'](args, callback);\n },\n\n 'channel_group_remove_channel' : function(args, callback) {\n if (!args['channel_group']) return error('Missing Channel Group');\n if (!args['channel'] && !args['channels'] ) return error('Missing Channel');\n\n args['mode'] = 'remove';\n SELF['channel_group'](args,callback);\n },\n\n 'channel_group_remove_group' : function(args, callback) {\n if (!args['channel_group']) return error('Missing Channel Group');\n if (args['channel']) return error('Use channel_group_remove_channel if you want to remove a channel from a group.');\n\n args['mode'] = 'remove';\n SELF['channel_group'](args,callback);\n },\n\n 'channel_group_add_channel' : function(args, callback) {\n if (!args['channel_group']) return error('Missing Channel Group');\n if (!args['channel'] && !args['channels'] ) return error('Missing Channel');\n SELF['channel_group'](args,callback);\n },\n\n 'channel_group_cloak' : function(args, callback) {\n if (typeof args['cloak'] == 'undefined') {\n callback(CLOAK);\n return;\n }\n CLOAK = args['cloak'];\n SELF['channel_group'](args,callback);\n },\n\n 'channel_group_list_namespaces' : function(args, callback) {\n var url = ['namespace'];\n CR(args, callback, url);\n },\n 'channel_group_remove_namespace' : function(args, callback) {\n var url = ['namespace',args['namespace'],'remove'];\n CR(args, callback, url);\n },\n\n /*\n PUBNUB.history({\n channel : 'my_chat_channel',\n limit : 100,\n callback : function(history) { }\n });\n */\n 'history' : function( args, callback ) {\n var callback = args['callback'] || callback\n , count = args['count'] || args['limit'] || 100\n , reverse = args['reverse'] || \"false\"\n , err = args['error'] || function(){}\n , auth_key = args['auth_key'] || AUTH_KEY\n , cipher_key = args['cipher_key']\n , channel = args['channel']\n , channel_group = args['channel_group']\n , start = args['start']\n , end = args['end']\n , include_token = args['include_token']\n , string_msg_token = args['string_message_token'] || false\n , params = {}\n , jsonp = jsonp_cb();\n\n // Make sure we have a Channel\n if (!channel && !channel_group) return error('Missing Channel');\n if (!callback) return error('Missing Callback');\n if (!SUBSCRIBE_KEY) return error('Missing Subscribe Key');\n\n params['stringtoken'] = 'true';\n params['count'] = count;\n params['reverse'] = reverse;\n params['auth'] = auth_key;\n\n if (channel_group) {\n params['channel-group'] = channel_group;\n if (!channel) {\n channel = ','; \n }\n }\n if (jsonp) params['callback'] = jsonp;\n if (start) params['start'] = start;\n if (end) params['end'] = end;\n if (include_token) params['include_token'] = 'true';\n if (string_msg_token) params['string_message_token'] = 'true';\n\n // Send Message\n xdr({\n callback : jsonp,\n data : _get_url_params(params),\n success : function(response) {\n if (typeof response == 'object' && response['error']) {\n err({'message' : response['message'], 'payload' : response['payload']});\n return;\n }\n var messages = response[0];\n var decrypted_messages = [];\n for (var a = 0; a < messages.length; a++) {\n var new_message = decrypt(messages[a],cipher_key);\n try {\n decrypted_messages['push'](JSON['parse'](new_message));\n } catch (e) {\n decrypted_messages['push']((new_message));\n }\n }\n callback([decrypted_messages, response[1], response[2]]);\n },\n fail : function(response) {\n _invoke_error(response, err);\n },\n url : [\n STD_ORIGIN, 'v2', 'history', 'sub-key',\n SUBSCRIBE_KEY, 'channel', encode(channel)\n ]\n });\n },\n\n /*\n PUBNUB.replay({\n source : 'my_channel',\n destination : 'new_channel'\n });\n */\n 'replay' : function(args, callback) {\n var callback = callback || args['callback'] || function(){}\n , auth_key = args['auth_key'] || AUTH_KEY\n , source = args['source']\n , destination = args['destination']\n , stop = args['stop']\n , start = args['start']\n , end = args['end']\n , reverse = args['reverse']\n , limit = args['limit']\n , jsonp = jsonp_cb()\n , data = {}\n , url;\n\n // Check User Input\n if (!source) return error('Missing Source Channel');\n if (!destination) return error('Missing Destination Channel');\n if (!PUBLISH_KEY) return error('Missing Publish Key');\n if (!SUBSCRIBE_KEY) return error('Missing Subscribe Key');\n\n // Setup URL Params\n if (jsonp != '0') data['callback'] = jsonp;\n if (stop) data['stop'] = 'all';\n if (reverse) data['reverse'] = 'true';\n if (start) data['start'] = start;\n if (end) data['end'] = end;\n if (limit) data['count'] = limit;\n\n data['auth'] = auth_key;\n\n // Compose URL Parts\n url = [\n STD_ORIGIN, 'v1', 'replay',\n PUBLISH_KEY, SUBSCRIBE_KEY,\n source, destination\n ];\n\n // Start (or Stop) Replay!\n xdr({\n callback : jsonp,\n success : function(response) {\n _invoke_callback(response, callback, err);\n },\n fail : function() { callback([ 0, 'Disconnected' ]) },\n url : url,\n data : _get_url_params(data)\n });\n },\n\n /*\n PUBNUB.auth('AJFLKAJSDKLA');\n */\n 'auth' : function(auth) {\n AUTH_KEY = auth;\n CONNECT();\n },\n\n /*\n PUBNUB.time(function(time){ });\n */\n 'time' : function(callback) {\n var jsonp = jsonp_cb();\n\n var data = { 'uuid' : UUID, 'auth' : AUTH_KEY }\n\n if (USE_INSTANCEID) data['instanceid'] = INSTANCEID;\n\n xdr({\n callback : jsonp,\n data : _get_url_params(data),\n timeout : SECOND * 5,\n url : [STD_ORIGIN, 'time', jsonp],\n success : function(response) { callback(response[0]) },\n fail : function() { callback(0) }\n });\n },\n\n /*\n PUBNUB.publish({\n channel : 'my_chat_channel',\n message : 'hello!'\n });\n */\n 'publish' : function( args, callback ) {\n var msg = args['message'];\n if (!msg) return error('Missing Message');\n\n var callback = callback || args['callback'] || msg['callback'] || function(){}\n , channel = args['channel'] || msg['channel']\n , auth_key = args['auth_key'] || AUTH_KEY\n , cipher_key = args['cipher_key']\n , err = args['error'] || msg['error'] || function() {}\n , post = args['post'] || false\n , store = ('store_in_history' in args) ? args['store_in_history']: true\n , jsonp = jsonp_cb()\n , add_msg = 'push'\n , params\n , url;\n\n if (args['prepend']) add_msg = 'unshift'\n\n if (!channel) return error('Missing Channel');\n if (!PUBLISH_KEY) return error('Missing Publish Key');\n if (!SUBSCRIBE_KEY) return error('Missing Subscribe Key');\n\n if (msg['getPubnubMessage']) {\n msg = msg['getPubnubMessage']();\n }\n\n // If trying to send Object\n msg = JSON['stringify'](encrypt(msg, cipher_key));\n\n // Create URL\n url = [\n STD_ORIGIN, 'publish',\n PUBLISH_KEY, SUBSCRIBE_KEY,\n 0, encode(channel),\n jsonp, encode(msg)\n ];\n\n params = { 'uuid' : UUID, 'auth' : auth_key }\n\n if (!store) params['store'] =\"0\"\n\n if (USE_INSTANCEID) params['instanceid'] = INSTANCEID;\n\n // Queue Message Send\n PUB_QUEUE[add_msg]({\n callback : jsonp,\n timeout : SECOND * 5,\n url : url,\n data : _get_url_params(params),\n fail : function(response){\n _invoke_error(response, err);\n publish(1);\n },\n success : function(response) {\n _invoke_callback(response, callback, err);\n publish(1);\n },\n mode : (post)?'POST':'GET'\n });\n\n // Send Message\n publish();\n },\n\n /*\n PUBNUB.unsubscribe({ channel : 'my_chat' });\n */\n 'unsubscribe' : function(args, callback) {\n var channel = args['channel']\n , channel_group = args['channel_group']\n , auth_key = args['auth_key'] || AUTH_KEY\n , callback = callback || args['callback'] || function(){}\n , err = args['error'] || function(){};\n\n TIMETOKEN = 0;\n //SUB_RESTORE = 1; REVISIT !!!!\n\n if (channel) {\n // Prepare Channel(s)\n channel = map( (\n channel.join ? channel.join(',') : ''+channel\n ).split(','), function(channel) {\n if (!CHANNELS[channel]) return;\n return channel + ',' + channel + PRESENCE_SUFFIX;\n } ).join(',');\n\n // Iterate over Channels\n each( channel.split(','), function(ch) {\n var CB_CALLED = true;\n if (!ch) return;\n CHANNELS[ch] = 0;\n if (ch in STATE) delete STATE[ch];\n if (READY) {\n CB_CALLED = SELF['LEAVE']( ch, 0 , auth_key, callback, err);\n }\n if (!CB_CALLED) callback({action : \"leave\"});\n\n \n } );\n }\n\n if (channel_group) {\n // Prepare channel group(s)\n channel_group = map( (\n channel_group.join ? channel_group.join(',') : ''+channel_group\n ).split(','), function(channel_group) {\n if (!CHANNEL_GROUPS[channel_group]) return;\n return channel_group + ',' + channel_group + PRESENCE_SUFFIX;\n } ).join(',');\n\n // Iterate over channel groups\n each( channel_group.split(','), function(chg) {\n var CB_CALLED = true;\n if (!chg) return;\n CHANNEL_GROUPS[chg] = 0;\n if (chg in STATE) delete STATE[chg];\n if (READY) {\n CB_CALLED = SELF['LEAVE_GROUP']( chg, 0 , auth_key, callback, err);\n }\n if (!CB_CALLED) callback({action : \"leave\"});\n\n } );\n }\n\n // Reset Connection if Count Less\n CONNECT();\n },\n\n /*\n PUBNUB.subscribe({\n channel : 'my_chat'\n callback : function(message) { }\n });\n */\n 'subscribe' : function( args, callback ) {\n var channel = args['channel']\n , channel_group = args['channel_group']\n , callback = callback || args['callback']\n , callback = callback || args['message']\n , connect = args['connect'] || function(){}\n , reconnect = args['reconnect'] || function(){}\n , disconnect = args['disconnect'] || function(){}\n , SUB_ERROR = args['error'] || SUB_ERROR || function(){}\n , idlecb = args['idle'] || function(){}\n , presence = args['presence'] || 0\n , noheresync = args['noheresync'] || 0\n , backfill = args['backfill'] || 0\n , timetoken = args['timetoken'] || 0\n , sub_timeout = args['timeout'] || SUB_TIMEOUT\n , windowing = args['windowing'] || SUB_WINDOWING\n , state = args['state']\n , heartbeat = args['heartbeat'] || args['pnexpires']\n , heartbeat_interval = args['heartbeat_interval']\n , restore = args['restore'] || SUB_RESTORE;\n\n AUTH_KEY = args['auth_key'] || AUTH_KEY;\n\n // Restore Enabled?\n SUB_RESTORE = restore;\n\n // Always Reset the TT\n TIMETOKEN = timetoken;\n\n // Make sure we have a Channel\n if (!channel && !channel_group) {\n return error('Missing Channel');\n }\n\n if (!callback) return error('Missing Callback');\n if (!SUBSCRIBE_KEY) return error('Missing Subscribe Key');\n\n if (heartbeat || heartbeat === 0 || heartbeat_interval || heartbeat_interval === 0) {\n SELF['set_heartbeat'](heartbeat, heartbeat_interval);\n }\n\n // Setup Channel(s)\n if (channel) {\n each( (channel.join ? channel.join(',') : ''+channel).split(','),\n function(channel) {\n var settings = CHANNELS[channel] || {};\n\n // Store Channel State\n CHANNELS[SUB_CHANNEL = channel] = {\n name : channel,\n connected : settings.connected,\n disconnected : settings.disconnected,\n subscribed : 1,\n callback : SUB_CALLBACK = callback,\n 'cipher_key' : args['cipher_key'],\n connect : connect,\n disconnect : disconnect,\n reconnect : reconnect\n };\n\n if (state) {\n if (channel in state) {\n STATE[channel] = state[channel];\n } else {\n STATE[channel] = state;\n }\n }\n\n // Presence Enabled?\n if (!presence) return;\n\n // Subscribe Presence Channel\n SELF['subscribe']({\n 'channel' : channel + PRESENCE_SUFFIX,\n 'callback' : presence,\n 'restore' : restore\n });\n\n // Presence Subscribed?\n if (settings.subscribed) return;\n\n // See Who's Here Now?\n if (noheresync) return;\n SELF['here_now']({\n 'channel' : channel,\n 'data' : _get_url_params({ 'uuid' : UUID, 'auth' : AUTH_KEY }),\n 'callback' : function(here) {\n each( 'uuids' in here ? here['uuids'] : [],\n function(uid) { presence( {\n 'action' : 'join',\n 'uuid' : uid,\n 'timestamp' : Math.floor(rnow() / 1000),\n 'occupancy' : here['occupancy'] || 1\n }, here, channel ); } );\n }\n });\n } );\n }\n\n // Setup Channel Groups\n if (channel_group) {\n each( (channel_group.join ? channel_group.join(',') : ''+channel_group).split(','),\n function(channel_group) {\n var settings = CHANNEL_GROUPS[channel_group] || {};\n\n CHANNEL_GROUPS[channel_group] = {\n name : channel_group,\n connected : settings.connected,\n disconnected : settings.disconnected,\n subscribed : 1,\n callback : SUB_CALLBACK = callback,\n 'cipher_key' : args['cipher_key'],\n connect : connect,\n disconnect : disconnect,\n reconnect : reconnect\n };\n\n // Presence Enabled?\n if (!presence) return;\n\n // Subscribe Presence Channel\n SELF['subscribe']({\n 'channel_group' : channel_group + PRESENCE_SUFFIX,\n 'callback' : presence,\n 'restore' : restore,\n 'auth_key' : AUTH_KEY\n });\n\n // Presence Subscribed?\n if (settings.subscribed) return;\n\n // See Who's Here Now?\n if (noheresync) return;\n SELF['here_now']({\n 'channel_group' : channel_group,\n 'data' : _get_url_params({ 'uuid' : UUID, 'auth' : AUTH_KEY }),\n 'callback' : function(here) {\n each( 'uuids' in here ? here['uuids'] : [],\n function(uid) { presence( {\n 'action' : 'join',\n 'uuid' : uid,\n 'timestamp' : Math.floor(rnow() / 1000),\n 'occupancy' : here['occupancy'] || 1\n }, here, channel_group ); } );\n }\n });\n } );\n }\n\n\n // Test Network Connection\n function _test_connection(success) {\n if (success) {\n // Begin Next Socket Connection\n timeout( CONNECT, windowing);\n }\n else {\n // New Origin on Failed Connection\n STD_ORIGIN = nextorigin( ORIGIN, 1 );\n SUB_ORIGIN = nextorigin( ORIGIN, 1 );\n\n // Re-test Connection\n timeout( function() {\n SELF['time'](_test_connection);\n }, SECOND );\n }\n\n // Disconnect & Reconnect\n each_channel(function(channel){\n // Reconnect\n if (success && channel.disconnected) {\n channel.disconnected = 0;\n return channel.reconnect(channel.name);\n }\n\n // Disconnect\n if (!success && !channel.disconnected) {\n channel.disconnected = 1;\n channel.disconnect(channel.name);\n }\n });\n \n // Disconnect & Reconnect for channel groups\n each_channel_group(function(channel_group){\n // Reconnect\n if (success && channel_group.disconnected) {\n channel_group.disconnected = 0;\n return channel_group.reconnect(channel_group.name);\n }\n\n // Disconnect\n if (!success && !channel_group.disconnected) {\n channel_group.disconnected = 1;\n channel_group.disconnect(channel_group.name);\n }\n });\n }\n\n // Evented Subscribe\n function _connect() {\n var jsonp = jsonp_cb()\n , channels = generate_channel_list(CHANNELS).join(',')\n , channel_groups = generate_channel_group_list(CHANNEL_GROUPS).join(',');\n\n // Stop Connection\n if (!channels && !channel_groups) return;\n\n if (!channels) channels = ',';\n\n // Connect to PubNub Subscribe Servers\n _reset_offline();\n\n var data = _get_url_params({ 'uuid' : UUID, 'auth' : AUTH_KEY });\n\n if (channel_groups) {\n data['channel-group'] = channel_groups;\n }\n\n\n var st = JSON.stringify(STATE);\n if (st.length > 2) data['state'] = JSON.stringify(STATE);\n\n if (PRESENCE_HB) data['heartbeat'] = PRESENCE_HB;\n\n if (USE_INSTANCEID) data['instanceid'] = INSTANCEID;\n\n start_presence_heartbeat();\n SUB_RECEIVER = xdr({\n timeout : sub_timeout,\n callback : jsonp,\n fail : function(response) {\n if (response && response['error'] && response['service']) {\n _invoke_error(response, SUB_ERROR);\n _test_connection(1);\n } else {\n SELF['time'](function(success){\n !success && ( _invoke_error(response, SUB_ERROR));\n _test_connection(success);\n });\n }\n },\n data : _get_url_params(data),\n url : [\n SUB_ORIGIN, 'subscribe',\n SUBSCRIBE_KEY, encode(channels),\n jsonp, TIMETOKEN\n ],\n success : function(messages) {\n\n // Check for Errors\n if (!messages || (\n typeof messages == 'object' &&\n 'error' in messages &&\n messages['error']\n )) {\n SUB_ERROR(messages['error']);\n return timeout( CONNECT, SECOND );\n }\n\n // User Idle Callback\n idlecb(messages[1]);\n\n // Restore Previous Connection Point if Needed\n TIMETOKEN = !TIMETOKEN &&\n SUB_RESTORE &&\n db['get'](SUBSCRIBE_KEY) || messages[1];\n\n /*\n // Connect\n each_channel_registry(function(registry){\n if (registry.connected) return;\n registry.connected = 1;\n registry.connect(channel.name);\n });\n */\n\n // Connect\n each_channel(function(channel){\n if (channel.connected) return;\n channel.connected = 1;\n channel.connect(channel.name);\n });\n\n // Connect for channel groups\n each_channel_group(function(channel_group){\n if (channel_group.connected) return;\n channel_group.connected = 1;\n channel_group.connect(channel_group.name);\n });\n\n if (RESUMED && !SUB_RESTORE) {\n TIMETOKEN = 0;\n RESUMED = false;\n // Update Saved Timetoken\n db['set']( SUBSCRIBE_KEY, 0 );\n timeout( _connect, windowing );\n return;\n }\n\n // Invoke Memory Catchup and Receive Up to 100\n // Previous Messages from the Queue.\n if (backfill) {\n TIMETOKEN = 10000;\n backfill = 0;\n }\n\n // Update Saved Timetoken\n db['set']( SUBSCRIBE_KEY, messages[1] );\n\n // Route Channel <---> Callback for Message\n var next_callback = (function() {\n var channels = '';\n var channels2 = '';\n\n if (messages.length > 3) {\n channels = messages[3];\n channels2 = messages[2];\n } else if (messages.length > 2) {\n channels = messages[2];\n } else {\n channels = map(\n generate_channel_list(CHANNELS), function(chan) { return map(\n Array(messages[0].length)\n .join(',').split(','),\n function() { return chan; }\n ) }).join(',')\n }\n\n var list = channels.split(',');\n var list2 = (channels2)?channels2.split(','):[];\n\n return function() {\n var channel = list.shift()||SUB_CHANNEL;\n var channel2 = list2.shift();\n\n var chobj = {};\n\n if (channel2) {\n if (channel && channel.indexOf('-pnpres') >= 0 \n && channel2.indexOf('-pnpres') < 0) {\n channel2 += '-pnpres';\n }\n chobj = CHANNEL_GROUPS[channel2] || CHANNELS[channel2] || {'callback' : function(){}};\n } else {\n chobj = CHANNELS[channel];\n }\n\n var r = [\n chobj\n .callback||SUB_CALLBACK,\n channel.split(PRESENCE_SUFFIX)[0]\n ];\n channel2 && r.push(channel2.split(PRESENCE_SUFFIX)[0]);\n return r;\n };\n })();\n\n var latency = detect_latency(+messages[1]);\n each( messages[0], function(msg) {\n var next = next_callback();\n var decrypted_msg = decrypt(msg,\n (CHANNELS[next[1]])?CHANNELS[next[1]]['cipher_key']:null);\n next[0] && next[0]( decrypted_msg, messages, next[2] || next[1], latency, next[1]);\n });\n\n timeout( _connect, windowing );\n }\n });\n }\n\n CONNECT = function() {\n _reset_offline();\n timeout( _connect, windowing );\n };\n\n // Reduce Status Flicker\n if (!READY) return READY_BUFFER.push(CONNECT);\n\n // Connect Now\n CONNECT();\n },\n\n /*\n PUBNUB.here_now({ channel : 'my_chat', callback : fun });\n */\n 'here_now' : function( args, callback ) {\n var callback = args['callback'] || callback\n , err = args['error'] || function(){}\n , auth_key = args['auth_key'] || AUTH_KEY\n , channel = args['channel']\n , channel_group = args['channel_group']\n , jsonp = jsonp_cb()\n , uuids = ('uuids' in args) ? args['uuids'] : true\n , state = args['state']\n , data = { 'uuid' : UUID, 'auth' : auth_key };\n\n if (!uuids) data['disable_uuids'] = 1;\n if (state) data['state'] = 1;\n\n // Make sure we have a Channel\n if (!callback) return error('Missing Callback');\n if (!SUBSCRIBE_KEY) return error('Missing Subscribe Key');\n\n var url = [\n STD_ORIGIN, 'v2', 'presence',\n 'sub_key', SUBSCRIBE_KEY\n ];\n\n channel && url.push('channel') && url.push(encode(channel));\n\n if (jsonp != '0') { data['callback'] = jsonp; }\n\n if (channel_group) {\n data['channel-group'] = channel_group;\n !channel && url.push('channel') && url.push(','); \n }\n\n if (USE_INSTANCEID) data['instanceid'] = INSTANCEID;\n\n xdr({\n callback : jsonp,\n data : _get_url_params(data),\n success : function(response) {\n _invoke_callback(response, callback, err);\n },\n fail : function(response) {\n _invoke_error(response, err);\n },\n url : url\n });\n },\n\n /*\n PUBNUB.current_channels_by_uuid({ channel : 'my_chat', callback : fun });\n */\n 'where_now' : function( args, callback ) {\n var callback = args['callback'] || callback\n , err = args['error'] || function(){}\n , auth_key = args['auth_key'] || AUTH_KEY\n , jsonp = jsonp_cb()\n , uuid = args['uuid'] || UUID\n , data = { 'auth' : auth_key };\n\n // Make sure we have a Channel\n if (!callback) return error('Missing Callback');\n if (!SUBSCRIBE_KEY) return error('Missing Subscribe Key');\n\n if (jsonp != '0') { data['callback'] = jsonp; }\n\n if (USE_INSTANCEID) data['instanceid'] = INSTANCEID;\n\n xdr({\n callback : jsonp,\n data : _get_url_params(data),\n success : function(response) {\n _invoke_callback(response, callback, err);\n },\n fail : function(response) {\n _invoke_error(response, err);\n },\n url : [\n STD_ORIGIN, 'v2', 'presence',\n 'sub_key', SUBSCRIBE_KEY,\n 'uuid', encode(uuid)\n ]\n });\n },\n\n 'state' : function(args, callback) {\n var callback = args['callback'] || callback || function(r) {}\n , err = args['error'] || function(){}\n , auth_key = args['auth_key'] || AUTH_KEY\n , jsonp = jsonp_cb()\n , state = args['state']\n , uuid = args['uuid'] || UUID\n , channel = args['channel']\n , channel_group = args['channel_group']\n , url\n , data = _get_url_params({ 'auth' : auth_key });\n\n // Make sure we have a Channel\n if (!SUBSCRIBE_KEY) return error('Missing Subscribe Key');\n if (!uuid) return error('Missing UUID');\n if (!channel && !channel_group) return error('Missing Channel');\n\n if (jsonp != '0') { data['callback'] = jsonp; }\n\n if (typeof channel != 'undefined'\n && CHANNELS[channel] && CHANNELS[channel].subscribed ) {\n if (state) STATE[channel] = state;\n }\n\n if (typeof channel_group != 'undefined'\n && CHANNEL_GROUPS[channel_group]\n && CHANNEL_GROUPS[channel_group].subscribed\n ) {\n if (state) STATE[channel_group] = state;\n data['channel-group'] = channel_group;\n\n if (!channel) {\n channel = ',';\n }\n }\n\n data['state'] = JSON.stringify(state);\n\n if (USE_INSTANCEID) data['instanceid'] = INSTANCEID;\n\n if (state) {\n url = [\n STD_ORIGIN, 'v2', 'presence',\n 'sub-key', SUBSCRIBE_KEY,\n 'channel', channel,\n 'uuid', uuid, 'data'\n ]\n } else {\n url = [\n STD_ORIGIN, 'v2', 'presence',\n 'sub-key', SUBSCRIBE_KEY,\n 'channel', channel,\n 'uuid', encode(uuid)\n ]\n }\n\n xdr({\n callback : jsonp,\n data : _get_url_params(data),\n success : function(response) {\n _invoke_callback(response, callback, err);\n },\n fail : function(response) {\n _invoke_error(response, err);\n },\n url : url\n\n });\n\n },\n\n /*\n PUBNUB.grant({\n channel : 'my_chat',\n callback : fun,\n error : fun,\n ttl : 24 * 60, // Minutes\n read : true,\n write : true,\n auth_key : '3y8uiajdklytowsj'\n });\n */\n 'grant' : function( args, callback ) {\n var callback = args['callback'] || callback\n , err = args['error'] || function(){}\n , channel = args['channel'] || args['channels']\n , channel_group = args['channel_group']\n , jsonp = jsonp_cb()\n , ttl = args['ttl']\n , r = (args['read'] )?\"1\":\"0\"\n , w = (args['write'])?\"1\":\"0\"\n , m = (args['manage'])?\"1\":\"0\"\n , auth_key = args['auth_key'] || args['auth_keys'];\n\n if (!callback) return error('Missing Callback');\n if (!SUBSCRIBE_KEY) return error('Missing Subscribe Key');\n if (!PUBLISH_KEY) return error('Missing Publish Key');\n if (!SECRET_KEY) return error('Missing Secret Key');\n\n var timestamp = Math.floor(new Date().getTime() / 1000)\n , sign_input = SUBSCRIBE_KEY + \"\\n\" + PUBLISH_KEY + \"\\n\"\n + \"grant\" + \"\\n\";\n\n var data = {\n 'w' : w,\n 'r' : r,\n 'timestamp' : timestamp\n };\n if (args['manage']) {\n data['m'] = m;\n }\n if (isArray(channel)) {\n channel = channel['join'](',');\n }\n if (isArray(auth_key)) {\n auth_key = auth_key['join'](',');\n }\n if (typeof channel != 'undefined' && channel != null && channel.length > 0) data['channel'] = channel;\n if (typeof channel_group != 'undefined' && channel_group != null && channel_group.length > 0) {\n data['channel-group'] = channel_group;\n }\n if (jsonp != '0') { data['callback'] = jsonp; }\n if (ttl || ttl === 0) data['ttl'] = ttl;\n\n if (auth_key) data['auth'] = auth_key;\n\n data = _get_url_params(data)\n\n if (!auth_key) delete data['auth'];\n\n sign_input += _get_pam_sign_input_from_params(data);\n\n var signature = hmac_SHA256( sign_input, SECRET_KEY );\n\n signature = signature.replace( /\\+/g, \"-\" );\n signature = signature.replace( /\\//g, \"_\" );\n\n data['signature'] = signature;\n\n xdr({\n callback : jsonp,\n data : data,\n success : function(response) {\n _invoke_callback(response, callback, err);\n },\n fail : function(response) {\n _invoke_error(response, err);\n },\n url : [\n STD_ORIGIN, 'v1', 'auth', 'grant' ,\n 'sub-key', SUBSCRIBE_KEY\n ]\n });\n },\n\n /*\n PUBNUB.mobile_gw_provision ({\n device_id: 'A655FBA9931AB',\n op : 'add' | 'remove',\n gw_type : 'apns' | 'gcm',\n channel : 'my_chat',\n callback : fun,\n error : fun,\n });\n */\n\n 'mobile_gw_provision' : function( args ) {\n\n var callback = args['callback'] || function(){}\n , auth_key = args['auth_key'] || AUTH_KEY\n , err = args['error'] || function() {}\n , jsonp = jsonp_cb()\n , channel = args['channel']\n , op = args['op']\n , gw_type = args['gw_type']\n , device_id = args['device_id']\n , params\n , url;\n\n if (!device_id) return error('Missing Device ID (device_id)');\n if (!gw_type) return error('Missing GW Type (gw_type: gcm or apns)');\n if (!op) return error('Missing GW Operation (op: add or remove)');\n if (!channel) return error('Missing gw destination Channel (channel)');\n if (!PUBLISH_KEY) return error('Missing Publish Key');\n if (!SUBSCRIBE_KEY) return error('Missing Subscribe Key');\n\n // Create URL\n url = [\n STD_ORIGIN, 'v1/push/sub-key',\n SUBSCRIBE_KEY, 'devices', device_id\n ];\n\n params = { 'uuid' : UUID, 'auth' : auth_key, 'type': gw_type};\n\n if (op == \"add\") {\n params['add'] = channel;\n } else if (op == \"remove\") {\n params['remove'] = channel;\n }\n\n if (USE_INSTANCEID) data['instanceid'] = INSTANCEID;\n\n xdr({\n callback : jsonp,\n data : params,\n success : function(response) {\n _invoke_callback(response, callback, err);\n },\n fail : function(response) {\n _invoke_error(response, err);\n },\n url : url\n });\n\n },\n\n /*\n PUBNUB.audit({\n channel : 'my_chat',\n callback : fun,\n error : fun,\n read : true,\n write : true,\n auth_key : '3y8uiajdklytowsj'\n });\n */\n 'audit' : function( args, callback ) {\n var callback = args['callback'] || callback\n , err = args['error'] || function(){}\n , channel = args['channel']\n , channel_group = args['channel_group']\n , auth_key = args['auth_key']\n , jsonp = jsonp_cb();\n\n // Make sure we have a Channel\n if (!callback) return error('Missing Callback');\n if (!SUBSCRIBE_KEY) return error('Missing Subscribe Key');\n if (!PUBLISH_KEY) return error('Missing Publish Key');\n if (!SECRET_KEY) return error('Missing Secret Key');\n\n var timestamp = Math.floor(new Date().getTime() / 1000)\n , sign_input = SUBSCRIBE_KEY + \"\\n\"\n + PUBLISH_KEY + \"\\n\"\n + \"audit\" + \"\\n\";\n\n var data = {'timestamp' : timestamp };\n if (jsonp != '0') { data['callback'] = jsonp; }\n if (typeof channel != 'undefined' && channel != null && channel.length > 0) data['channel'] = channel;\n if (typeof channel_group != 'undefined' && channel_group != null && channel_group.length > 0) {\n data['channel-group'] = channel_group;\n }\n if (auth_key) data['auth'] = auth_key;\n\n data = _get_url_params(data);\n\n if (!auth_key) delete data['auth'];\n\n sign_input += _get_pam_sign_input_from_params(data);\n\n var signature = hmac_SHA256( sign_input, SECRET_KEY );\n\n signature = signature.replace( /\\+/g, \"-\" );\n signature = signature.replace( /\\//g, \"_\" );\n\n data['signature'] = signature;\n xdr({\n callback : jsonp,\n data : data,\n success : function(response) {\n _invoke_callback(response, callback, err);\n },\n fail : function(response) {\n _invoke_error(response, err);\n },\n url : [\n STD_ORIGIN, 'v1', 'auth', 'audit' ,\n 'sub-key', SUBSCRIBE_KEY\n ]\n });\n },\n\n /*\n PUBNUB.revoke({\n channel : 'my_chat',\n callback : fun,\n error : fun,\n auth_key : '3y8uiajdklytowsj'\n });\n */\n 'revoke' : function( args, callback ) {\n args['read'] = false;\n args['write'] = false;\n SELF['grant']( args, callback );\n },\n 'set_uuid' : function(uuid) {\n UUID = uuid;\n CONNECT();\n },\n 'get_uuid' : function() {\n return UUID;\n },\n 'isArray' : function(arg) {\n return isArray(arg);\n },\n 'get_subscibed_channels' : function() {\n return generate_channel_list(CHANNELS, true);\n },\n 'presence_heartbeat' : function(args) {\n var callback = args['callback'] || function() {}\n var err = args['error'] || function() {}\n var jsonp = jsonp_cb();\n var data = { 'uuid' : UUID, 'auth' : AUTH_KEY };\n\n var st = JSON['stringify'](STATE);\n if (st.length > 2) data['state'] = JSON['stringify'](STATE);\n\n if (PRESENCE_HB > 0 && PRESENCE_HB < 320) data['heartbeat'] = PRESENCE_HB;\n\n if (jsonp != '0') { data['callback'] = jsonp; }\n\n var channels = encode(generate_channel_list(CHANNELS, true)['join'](','));\n var channel_groups = generate_channel_group_list(CHANNEL_GROUPS, true)['join'](',');\n\n if (!channels) channels = ',';\n if (channel_groups) data['channel-group'] = channel_groups;\n\n if (USE_INSTANCEID) data['instanceid'] = INSTANCEID;\n\n xdr({\n callback : jsonp,\n data : _get_url_params(data),\n timeout : SECOND * 5,\n url : [\n STD_ORIGIN, 'v2', 'presence',\n 'sub-key', SUBSCRIBE_KEY,\n 'channel' , channels,\n 'heartbeat'\n ],\n success : function(response) {\n _invoke_callback(response, callback, err);\n },\n fail : function(response) { _invoke_error(response, err); }\n });\n },\n 'stop_timers': function () {\n clearTimeout(_poll_timer);\n clearTimeout(_poll_timer2);\n clearTimeout(PRESENCE_HB_TIMEOUT);\n },\n 'shutdown': function () {\n SELF['stop_timers']();\n shutdown && shutdown();\n },\n\n // Expose PUBNUB Functions\n 'xdr' : xdr,\n 'ready' : ready,\n 'db' : db,\n 'uuid' : generate_uuid,\n 'map' : map,\n 'each' : each,\n 'each-channel' : each_channel,\n 'grep' : grep,\n 'offline' : function(){ _reset_offline(\n 1, { \"message\" : \"Offline. Please check your network settings.\" })\n },\n 'supplant' : supplant,\n 'now' : rnow,\n 'unique' : unique,\n 'updater' : updater\n };\n\n function _poll_online() {\n _is_online() || _reset_offline( 1, {\n \"error\" : \"Offline. Please check your network settings. \"\n });\n _poll_timer && clearTimeout(_poll_timer);\n _poll_timer = timeout( _poll_online, SECOND );\n }\n\n function _poll_online2() {\n if (!TIME_CHECK) return;\n SELF['time'](function(success){\n detect_time_detla( function(){}, success );\n success || _reset_offline( 1, {\n \"error\" : \"Heartbeat failed to connect to Pubnub Servers.\" +\n \"Please check your network settings.\"\n });\n _poll_timer2 && clearTimeout(_poll_timer2);\n _poll_timer2 = timeout( _poll_online2, KEEPALIVE );\n });\n }\n\n function _reset_offline(err, msg) {\n SUB_RECEIVER && SUB_RECEIVER(err, msg);\n SUB_RECEIVER = null;\n\n clearTimeout(_poll_timer);\n clearTimeout(_poll_timer2);\n }\n \n if (!UUID) UUID = SELF['uuid']();\n if (!INSTANCEID) INSTANCEID = SELF['uuid']();\n db['set']( SUBSCRIBE_KEY + 'uuid', UUID );\n\n _poll_timer = timeout( _poll_online, SECOND );\n _poll_timer2 = timeout( _poll_online2, KEEPALIVE );\n PRESENCE_HB_TIMEOUT = timeout(\n start_presence_heartbeat,\n ( PRESENCE_HB_INTERVAL - 3 ) * SECOND\n );\n\n // Detect Age of Message\n function detect_latency(tt) {\n var adjusted_time = rnow() - TIME_DRIFT;\n return adjusted_time - tt / 10000;\n }\n\n detect_time_detla();\n function detect_time_detla( cb, time ) {\n var stime = rnow();\n\n time && calculate(time) || SELF['time'](calculate);\n\n function calculate(time) {\n if (!time) return;\n var ptime = time / 10000\n , latency = (rnow() - stime) / 2;\n TIME_DRIFT = rnow() - (ptime + latency);\n cb && cb(TIME_DRIFT);\n }\n }\n\n return SELF;\n}\nfunction crypto_obj() {\n\n function SHA256(s) {\n return CryptoJS['SHA256'](s)['toString'](CryptoJS['enc']['Hex']);\n }\n\n var iv = \"0123456789012345\";\n\n var allowedKeyEncodings = ['hex', 'utf8', 'base64', 'binary'];\n var allowedKeyLengths = [128, 256];\n var allowedModes = ['ecb', 'cbc'];\n\n var defaultOptions = {\n 'encryptKey': true,\n 'keyEncoding': 'utf8',\n 'keyLength': 256,\n 'mode': 'cbc'\n };\n\n function parse_options(options) {\n\n // Defaults\n options = options || {};\n if (!options['hasOwnProperty']('encryptKey')) options['encryptKey'] = defaultOptions['encryptKey'];\n if (!options['hasOwnProperty']('keyEncoding')) options['keyEncoding'] = defaultOptions['keyEncoding'];\n if (!options['hasOwnProperty']('keyLength')) options['keyLength'] = defaultOptions['keyLength'];\n if (!options['hasOwnProperty']('mode')) options['mode'] = defaultOptions['mode'];\n\n // Validation\n if (allowedKeyEncodings['indexOf'](options['keyEncoding']['toLowerCase']()) == -1) options['keyEncoding'] = defaultOptions['keyEncoding'];\n if (allowedKeyLengths['indexOf'](parseInt(options['keyLength'], 10)) == -1) options['keyLength'] = defaultOptions['keyLength'];\n if (allowedModes['indexOf'](options['mode']['toLowerCase']()) == -1) options['mode'] = defaultOptions['mode'];\n\n return options;\n\n }\n\n function decode_key(key, options) {\n if (options['keyEncoding'] == 'base64') {\n return CryptoJS['enc']['Base64']['parse'](key);\n } else if (options['keyEncoding'] == 'hex') {\n return CryptoJS['enc']['Hex']['parse'](key);\n } else {\n return key;\n }\n }\n\n function get_padded_key(key, options) {\n key = decode_key(key, options);\n if (options['encryptKey']) {\n return CryptoJS['enc']['Utf8']['parse'](SHA256(key)['slice'](0, 32));\n } else {\n return key;\n }\n }\n\n function get_mode(options) {\n if (options['mode'] == 'ecb') {\n return CryptoJS['mode']['ECB'];\n } else {\n return CryptoJS['mode']['CBC'];\n }\n }\n\n function get_iv(options) {\n return (options['mode'] == 'cbc') ? CryptoJS['enc']['Utf8']['parse'](iv) : null;\n }\n\n return {\n\n 'encrypt': function(data, key, options) {\n if (!key) return data;\n options = parse_options(options);\n var iv = get_iv(options);\n var mode = get_mode(options);\n var cipher_key = get_padded_key(key, options);\n var hex_message = JSON['stringify'](data);\n var encryptedHexArray = CryptoJS['AES']['encrypt'](hex_message, cipher_key, {'iv': iv, 'mode': mode})['ciphertext'];\n var base_64_encrypted = encryptedHexArray['toString'](CryptoJS['enc']['Base64']);\n return base_64_encrypted || data;\n },\n\n 'decrypt': function(data, key, options) {\n if (!key) return data;\n options = parse_options(options);\n var iv = get_iv(options);\n var mode = get_mode(options);\n var cipher_key = get_padded_key(key, options);\n try {\n var binary_enc = CryptoJS['enc']['Base64']['parse'](data);\n var json_plain = CryptoJS['AES']['decrypt']({'ciphertext': binary_enc}, cipher_key, {'iv': iv, 'mode': mode})['toString'](CryptoJS['enc']['Utf8']);\n var plaintext = JSON['parse'](json_plain);\n return plaintext;\n }\n catch (e) {\n return undefined;\n }\n }\n };\n}\n/* =-====================================================================-= */\n/* =-====================================================================-= */\n/* =-========================= UTIL =============================-= */\n/* =-====================================================================-= */\n/* =-====================================================================-= */\n\nwindow['PUBNUB'] || (function() {\n\n/**\n * UTIL LOCALS\n */\n\nvar SWF = 'https://pubnub.a.ssl.fastly.net/pubnub.swf'\n, ASYNC = 'async'\n, UA = navigator.userAgent\n, PNSDK = 'PubNub-JS-' + 'Web' + '/' + '3.7.14'\n, XORIGN = UA.indexOf('MSIE 6') == -1;\n\n/**\n * CONSOLE COMPATIBILITY\n */\nwindow.console || (window.console=window.console||{});\nconsole.log || (\n console.log =\n console.error =\n ((window.opera||{}).postError||function(){})\n);\n\n/**\n * LOCAL STORAGE OR COOKIE\n */\nvar db = (function(){\n var store = {};\n var ls = false;\n try {\n ls = window['localStorage'];\n } catch (e) { }\n var cookieGet = function(key) {\n if (document.cookie.indexOf(key) == -1) return null;\n return ((document.cookie||'').match(\n RegExp(key+'=([^;]+)')\n )||[])[1] || null;\n };\n var cookieSet = function( key, value ) {\n document.cookie = key + '=' + value +\n '; expires=Thu, 1 Aug 2030 20:00:00 UTC; path=/';\n };\n var cookieTest = (function() {\n try {\n cookieSet('pnctest', '1');\n return cookieGet('pnctest') === '1';\n } catch (e) {\n return false;\n }\n }());\n return {\n 'get' : function(key) {\n try {\n if (ls) return ls.getItem(key);\n if (cookieTest) return cookieGet(key);\n return store[key];\n } catch(e) {\n return store[key];\n }\n },\n 'set' : function( key, value ) {\n try {\n if (ls) return ls.setItem( key, value ) && 0;\n if (cookieTest) cookieSet( key, value );\n store[key] = value;\n } catch(e) {\n store[key] = value;\n }\n }\n };\n})();\n\nfunction get_hmac_SHA256(data,key) {\n var hash = CryptoJS['HmacSHA256'](data, key);\n return hash.toString(CryptoJS['enc']['Base64']);\n}\n\n/**\n * $\n * =\n * var div = $('divid');\n */\nfunction $(id) { return document.getElementById(id) }\n\n/**\n * ERROR\n * =====\n * error('message');\n */\nfunction error(message) { console['error'](message) }\n\n/**\n * SEARCH\n * ======\n * var elements = search('a div span');\n */\nfunction search( elements, start) {\n var list = [];\n each( elements.split(/\\s+/), function(el) {\n each( (start || document).getElementsByTagName(el), function(node) {\n list.push(node);\n } );\n });\n return list;\n}\n\n/**\n * BIND\n * ====\n * bind( 'keydown', search('a')[0], function(element) {\n * ...\n * } );\n */\nfunction bind( type, el, fun ) {\n each( type.split(','), function(etype) {\n var rapfun = function(e) {\n if (!e) e = window.event;\n if (!fun(e)) {\n e.cancelBubble = true;\n e.preventDefault && e.preventDefault();\n e.stopPropagation && e.stopPropagation();\n }\n };\n\n if ( el.addEventListener ) el.addEventListener( etype, rapfun, false );\n else if ( el.attachEvent ) el.attachEvent( 'on' + etype, rapfun );\n else el[ 'on' + etype ] = rapfun;\n } );\n}\n\n/**\n * UNBIND\n * ======\n * unbind( 'keydown', search('a')[0] );\n */\nfunction unbind( type, el, fun ) {\n if ( el.removeEventListener ) el.removeEventListener( type, false );\n else if ( el.detachEvent ) el.detachEvent( 'on' + type, false );\n else el[ 'on' + type ] = null;\n}\n\n/**\n * HEAD\n * ====\n * head().appendChild(elm);\n */\nfunction head() { return search('head')[0] }\n\n/**\n * ATTR\n * ====\n * var attribute = attr( node, 'attribute' );\n */\nfunction attr( node, attribute, value ) {\n if (value) node.setAttribute( attribute, value );\n else return node && node.getAttribute && node.getAttribute(attribute);\n}\n\n/**\n * CSS\n * ===\n * var obj = create('div');\n */\nfunction css( element, styles ) {\n for (var style in styles) if (styles.hasOwnProperty(style))\n try {element.style[style] = styles[style] + (\n '|width|height|top|left|'.indexOf(style) > 0 &&\n typeof styles[style] == 'number'\n ? 'px' : ''\n )}catch(e){}\n}\n\n/**\n * CREATE\n * ======\n * var obj = create('div');\n */\nfunction create(element) { return document.createElement(element) }\n\n\n/**\n * jsonp_cb\n * ========\n * var callback = jsonp_cb();\n */\nfunction jsonp_cb() { return XORIGN || FDomainRequest() ? 0 : unique() }\n\n\n\n/**\n * EVENTS\n * ======\n * PUBNUB.events.bind( 'you-stepped-on-flower', function(message) {\n * // Do Stuff with message\n * } );\n *\n * PUBNUB.events.fire( 'you-stepped-on-flower', \"message-data\" );\n * PUBNUB.events.fire( 'you-stepped-on-flower', {message:\"data\"} );\n * PUBNUB.events.fire( 'you-stepped-on-flower', [1,2,3] );\n *\n */\nvar events = {\n 'list' : {},\n 'unbind' : function( name ) { events.list[name] = [] },\n 'bind' : function( name, fun ) {\n (events.list[name] = events.list[name] || []).push(fun);\n },\n 'fire' : function( name, data ) {\n each(\n events.list[name] || [],\n function(fun) { fun(data) }\n );\n }\n};\n\n/**\n * XDR Cross Domain Request\n * ========================\n * xdr({\n * url : ['http://www.blah.com/url'],\n * success : function(response) {},\n * fail : function() {}\n * });\n */\nfunction xdr( setup ) {\n if (XORIGN || FDomainRequest()) return ajax(setup);\n\n var script = create('script')\n , callback = setup.callback\n , id = unique()\n , finished = 0\n , xhrtme = setup.timeout || DEF_TIMEOUT\n , timer = timeout( function(){done(1, {\"message\" : \"timeout\"})}, xhrtme )\n , fail = setup.fail || function(){}\n , data = setup.data || {}\n , success = setup.success || function(){}\n , append = function() { head().appendChild(script) }\n , done = function( failed, response ) {\n if (finished) return;\n finished = 1;\n\n script.onerror = null;\n clearTimeout(timer);\n\n (failed || !response) || success(response);\n\n timeout( function() {\n failed && fail();\n var s = $(id)\n , p = s && s.parentNode;\n p && p.removeChild(s);\n }, SECOND );\n };\n\n window[callback] = function(response) {\n done( 0, response );\n };\n\n if (!setup.blocking) script[ASYNC] = ASYNC;\n\n script.onerror = function() { done(1) };\n script.src = build_url( setup.url, data );\n\n attr( script, 'id', id );\n\n append();\n return done;\n}\n\n/**\n * CORS XHR Request\n * ================\n * xdr({\n * url : ['http://www.blah.com/url'],\n * success : function(response) {},\n * fail : function() {}\n * });\n */\nfunction ajax( setup ) {\n var xhr, response\n , finished = function() {\n if (loaded) return;\n loaded = 1;\n\n clearTimeout(timer);\n\n try { response = JSON['parse'](xhr.responseText); }\n catch (r) { return done(1); }\n\n complete = 1;\n success(response);\n }\n , complete = 0\n , loaded = 0\n , xhrtme = setup.timeout || DEF_TIMEOUT\n , timer = timeout( function(){done(1, {\"message\" : \"timeout\"})}, xhrtme )\n , fail = setup.fail || function(){}\n , data = setup.data || {}\n , success = setup.success || function(){}\n , async = !(setup.blocking)\n , done = function(failed,response) {\n if (complete) return;\n complete = 1;\n\n clearTimeout(timer);\n\n if (xhr) {\n xhr.onerror = xhr.onload = null;\n xhr.abort && xhr.abort();\n xhr = null;\n }\n\n failed && fail(response);\n };\n\n // Send\n try {\n xhr = FDomainRequest() ||\n window.XDomainRequest &&\n new XDomainRequest() ||\n new XMLHttpRequest();\n\n xhr.onerror = xhr.onabort = function(e){ done(\n 1, e || (xhr && xhr.responseText) || { \"error\" : \"Network Connection Error\"}\n ) };\n xhr.onload = xhr.onloadend = finished;\n xhr.onreadystatechange = function() {\n if (xhr && xhr.readyState == 4) {\n switch(xhr.status) {\n case 200:\n break;\n default:\n try {\n response = JSON['parse'](xhr.responseText);\n done(1,response);\n }\n catch (r) { return done(1, {status : xhr.status, payload : null, message : xhr.responseText}); }\n return;\n }\n }\n }\n\n var url = build_url(setup.url,data);\n\n xhr.open( 'GET', url, async );\n if (async) xhr.timeout = xhrtme;\n xhr.send();\n }\n catch(eee) {\n done(0);\n XORIGN = 0;\n return xdr(setup);\n }\n\n // Return 'done'\n return done;\n}\n\n// Test Connection State\nfunction _is_online() {\n if (!('onLine' in navigator)) return 1;\n try { return navigator['onLine'] }\n catch (e) { return true }\n}\n\n\nfunction sendBeacon(url) {\n if (!('sendBeacon' in navigator)) return false;\n\n return navigator['sendBeacon'](url);\n}\n\n/* =-====================================================================-= */\n/* =-====================================================================-= */\n/* =-========================= PUBNUB ===========================-= */\n/* =-====================================================================-= */\n/* =-====================================================================-= */\n\nvar PDIV = $('pubnub') || 0\n, CREATE_PUBNUB = function(setup) {\n\n // Force JSONP if requested from user.\n if (setup['jsonp']) XORIGN = 0;\n else XORIGN = UA.indexOf('MSIE 6') == -1;\n\n var SUBSCRIBE_KEY = setup['subscribe_key'] || ''\n , KEEPALIVE = (+setup['keepalive'] || DEF_KEEPALIVE) * SECOND\n , UUID = setup['uuid'] || db['get'](SUBSCRIBE_KEY+'uuid')||'';\n\n var leave_on_unload = setup['leave_on_unload'] || 0;\n\n setup['xdr'] = xdr;\n setup['db'] = db;\n setup['error'] = setup['error'] || error;\n setup['_is_online'] = _is_online;\n setup['jsonp_cb'] = jsonp_cb;\n setup['hmac_SHA256']= get_hmac_SHA256;\n setup['crypto_obj'] = crypto_obj();\n setup['sendBeacon'] = sendBeacon;\n setup['params'] = { 'pnsdk' : PNSDK }\n\n var SELF = function(setup) {\n return CREATE_PUBNUB(setup);\n };\n\n var PN = PN_API(setup);\n\n for (var prop in PN) {\n if (PN.hasOwnProperty(prop)) {\n SELF[prop] = PN[prop];\n }\n }\n SELF['css'] = css;\n SELF['$'] = $;\n SELF['create'] = create;\n SELF['bind'] = bind;\n SELF['head'] = head;\n SELF['search'] = search;\n SELF['attr'] = attr;\n SELF['events'] = events;\n SELF['init'] = SELF;\n SELF['secure'] = SELF;\n SELF['crypto_obj'] = crypto_obj(); // export to instance\n\n\n // Add Leave Functions\n bind( 'beforeunload', window, function() {\n if (leave_on_unload) SELF['each-channel'](function(ch){ SELF['LEAVE']( ch.name, 0 ) });\n return true;\n } );\n\n // Return without Testing\n if (setup['notest']) return SELF;\n\n bind( 'offline', window, SELF['offline'] );\n bind( 'offline', document, SELF['offline'] );\n\n // Return PUBNUB Socket Object\n return SELF;\n};\nCREATE_PUBNUB['init'] = CREATE_PUBNUB;\nCREATE_PUBNUB['secure'] = CREATE_PUBNUB;\nCREATE_PUBNUB['crypto_obj'] = crypto_obj(); // export to constructor\n\n// Bind for PUBNUB Readiness to Subscribe\nif (document.readyState === 'complete') {\n timeout( ready, 0 );\n}\nelse {\n bind( 'load', window, function(){ timeout( ready, 0 ) } );\n}\n\nvar pdiv = PDIV || {};\n\n// CREATE A PUBNUB GLOBAL OBJECT\nPUBNUB = CREATE_PUBNUB({\n 'notest' : 1,\n 'publish_key' : attr( pdiv, 'pub-key' ),\n 'subscribe_key' : attr( pdiv, 'sub-key' ),\n 'ssl' : !document.location.href.indexOf('https') ||\n attr( pdiv, 'ssl' ) == 'on',\n 'origin' : attr( pdiv, 'origin' ),\n 'uuid' : attr( pdiv, 'uuid' )\n});\n\n// jQuery Interface\nwindow['jQuery'] && (window['jQuery']['PUBNUB'] = CREATE_PUBNUB);\n\n// For Modern JS + Testling.js - http://testling.com/\ntypeof(module) !== 'undefined' && (module['exports'] = PUBNUB) && ready();\n\nvar pubnubs = $('pubnubs') || 0;\n\n// LEAVE NOW IF NO PDIV.\nif (!PDIV) return;\n\n// PUBNUB Flash Socket\ncss( PDIV, { 'position' : 'absolute', 'top' : -SECOND } );\n\nif ('opera' in window || attr( PDIV, 'flash' )) PDIV['innerHTML'] =\n '';\n\n// Create Interface for Opera Flash\nPUBNUB['rdx'] = function( id, data ) {\n if (!data) return FDomainRequest[id]['onerror']();\n FDomainRequest[id]['responseText'] = unescape(data);\n FDomainRequest[id]['onload']();\n};\n\nfunction FDomainRequest() {\n if (!pubnubs || !pubnubs['get']) return 0;\n\n var fdomainrequest = {\n 'id' : FDomainRequest['id']++,\n 'send' : function() {},\n 'abort' : function() { fdomainrequest['id'] = {} },\n 'open' : function( method, url ) {\n FDomainRequest[fdomainrequest['id']] = fdomainrequest;\n pubnubs['get']( fdomainrequest['id'], url );\n }\n };\n\n return fdomainrequest;\n}\nFDomainRequest['id'] = SECOND;\n\n})();\n(function(){\n\n// ---------------------------------------------------------------------------\n// WEBSOCKET INTERFACE\n// ---------------------------------------------------------------------------\nvar WS = PUBNUB['ws'] = function( url, protocols ) {\n if (!(this instanceof WS)) return new WS( url, protocols );\n\n var self = this\n , url = self.url = url || ''\n , protocol = self.protocol = protocols || 'Sec-WebSocket-Protocol'\n , bits = url.split('/')\n , setup = {\n 'ssl' : bits[0] === 'wss:'\n ,'origin' : bits[2]\n ,'publish_key' : bits[3]\n ,'subscribe_key' : bits[4]\n ,'channel' : bits[5]\n };\n\n // READY STATES\n self['CONNECTING'] = 0; // The connection is not yet open.\n self['OPEN'] = 1; // The connection is open and ready to communicate.\n self['CLOSING'] = 2; // The connection is in the process of closing.\n self['CLOSED'] = 3; // The connection is closed or couldn't be opened.\n\n // CLOSE STATES\n self['CLOSE_NORMAL'] = 1000; // Normal Intended Close; completed.\n self['CLOSE_GOING_AWAY'] = 1001; // Closed Unexpecttedly.\n self['CLOSE_PROTOCOL_ERROR'] = 1002; // Server: Not Supported.\n self['CLOSE_UNSUPPORTED'] = 1003; // Server: Unsupported Protocol.\n self['CLOSE_TOO_LARGE'] = 1004; // Server: Too Much Data.\n self['CLOSE_NO_STATUS'] = 1005; // Server: No reason.\n self['CLOSE_ABNORMAL'] = 1006; // Abnormal Disconnect.\n\n // Events Default\n self['onclose'] = self['onerror'] =\n self['onmessage'] = self['onopen'] =\n self['onsend'] = function(){};\n\n // Attributes\n self['binaryType'] = '';\n self['extensions'] = '';\n self['bufferedAmount'] = 0;\n self['trasnmitting'] = false;\n self['buffer'] = [];\n self['readyState'] = self['CONNECTING'];\n\n // Close if no setup.\n if (!url) {\n self['readyState'] = self['CLOSED'];\n self['onclose']({\n 'code' : self['CLOSE_ABNORMAL'],\n 'reason' : 'Missing URL',\n 'wasClean' : true\n });\n return self;\n }\n\n // PubNub WebSocket Emulation\n self.pubnub = PUBNUB['init'](setup);\n self.pubnub.setup = setup;\n self.setup = setup;\n\n self.pubnub['subscribe']({\n 'restore' : false,\n 'channel' : setup['channel'],\n 'disconnect' : self['onerror'],\n 'reconnect' : self['onopen'],\n 'error' : function() {\n self['onclose']({\n 'code' : self['CLOSE_ABNORMAL'],\n 'reason' : 'Missing URL',\n 'wasClean' : false\n });\n },\n 'callback' : function(message) {\n self['onmessage']({ 'data' : message });\n },\n 'connect' : function() {\n self['readyState'] = self['OPEN'];\n self['onopen']();\n }\n });\n};\n\n// ---------------------------------------------------------------------------\n// WEBSOCKET SEND\n// ---------------------------------------------------------------------------\nWS.prototype.send = function(data) {\n var self = this;\n self.pubnub['publish']({\n 'channel' : self.pubnub.setup['channel'],\n 'message' : data,\n 'callback' : function(response) {\n self['onsend']({ 'data' : response });\n }\n });\n};\n\n// ---------------------------------------------------------------------------\n// WEBSOCKET CLOSE\n// ---------------------------------------------------------------------------\nWS.prototype.close = function() {\n var self = this;\n self.pubnub['unsubscribe']({ 'channel' : self.pubnub.setup['channel'] });\n self['readyState'] = self['CLOSED'];\n self['onclose']({});\n};\n\n})();\n/*\nCryptoJS v3.1.2\ncode.google.com/p/crypto-js\n(c) 2009-2013 by Jeff Mott. All rights reserved.\ncode.google.com/p/crypto-js/wiki/License\n*/\nvar CryptoJS=CryptoJS||function(h,s){var f={},g=f.lib={},q=function(){},m=g.Base={extend:function(a){q.prototype=this;var c=new q;a&&c.mixIn(a);c.hasOwnProperty(\"init\")||(c.init=function(){c.$super.init.apply(this,arguments)});c.init.prototype=c;c.$super=this;return c},create:function(){var a=this.extend();a.init.apply(a,arguments);return a},init:function(){},mixIn:function(a){for(var c in a)a.hasOwnProperty(c)&&(this[c]=a[c]);a.hasOwnProperty(\"toString\")&&(this.toString=a.toString)},clone:function(){return this.init.prototype.extend(this)}},\nr=g.WordArray=m.extend({init:function(a,c){a=this.words=a||[];this.sigBytes=c!=s?c:4*a.length},toString:function(a){return(a||k).stringify(this)},concat:function(a){var c=this.words,d=a.words,b=this.sigBytes;a=a.sigBytes;this.clamp();if(b%4)for(var e=0;e>>2]|=(d[e>>>2]>>>24-8*(e%4)&255)<<24-8*((b+e)%4);else if(65535>>2]=d[e>>>2];else c.push.apply(c,d);this.sigBytes+=a;return this},clamp:function(){var a=this.words,c=this.sigBytes;a[c>>>2]&=4294967295<<\n32-8*(c%4);a.length=h.ceil(c/4)},clone:function(){var a=m.clone.call(this);a.words=this.words.slice(0);return a},random:function(a){for(var c=[],d=0;d>>2]>>>24-8*(b%4)&255;d.push((e>>>4).toString(16));d.push((e&15).toString(16))}return d.join(\"\")},parse:function(a){for(var c=a.length,d=[],b=0;b>>3]|=parseInt(a.substr(b,\n2),16)<<24-4*(b%8);return new r.init(d,c/2)}},n=l.Latin1={stringify:function(a){var c=a.words;a=a.sigBytes;for(var d=[],b=0;b>>2]>>>24-8*(b%4)&255));return d.join(\"\")},parse:function(a){for(var c=a.length,d=[],b=0;b>>2]|=(a.charCodeAt(b)&255)<<24-8*(b%4);return new r.init(d,c)}},j=l.Utf8={stringify:function(a){try{return decodeURIComponent(escape(n.stringify(a)))}catch(c){throw Error(\"Malformed UTF-8 data\");}},parse:function(a){return n.parse(unescape(encodeURIComponent(a)))}},\nu=g.BufferedBlockAlgorithm=m.extend({reset:function(){this._data=new r.init;this._nDataBytes=0},_append:function(a){\"string\"==typeof a&&(a=j.parse(a));this._data.concat(a);this._nDataBytes+=a.sigBytes},_process:function(a){var c=this._data,d=c.words,b=c.sigBytes,e=this.blockSize,f=b/(4*e),f=a?h.ceil(f):h.max((f|0)-this._minBufferSize,0);a=f*e;b=h.min(4*a,b);if(a){for(var g=0;gn;){var j;a:{j=k;for(var u=h.sqrt(j),t=2;t<=u;t++)if(!(j%t)){j=!1;break a}j=!0}j&&(8>n&&(m[n]=l(h.pow(k,0.5))),r[n]=l(h.pow(k,1/3)),n++);k++}var a=[],f=f.SHA256=q.extend({_doReset:function(){this._hash=new g.init(m.slice(0))},_doProcessBlock:function(c,d){for(var b=this._hash.words,e=b[0],f=b[1],g=b[2],j=b[3],h=b[4],m=b[5],n=b[6],q=b[7],p=0;64>p;p++){if(16>p)a[p]=\nc[d+p]|0;else{var k=a[p-15],l=a[p-2];a[p]=((k<<25|k>>>7)^(k<<14|k>>>18)^k>>>3)+a[p-7]+((l<<15|l>>>17)^(l<<13|l>>>19)^l>>>10)+a[p-16]}k=q+((h<<26|h>>>6)^(h<<21|h>>>11)^(h<<7|h>>>25))+(h&m^~h&n)+r[p]+a[p];l=((e<<30|e>>>2)^(e<<19|e>>>13)^(e<<10|e>>>22))+(e&f^e&g^f&g);q=n;n=m;m=h;h=j+k|0;j=g;g=f;f=e;e=k+l|0}b[0]=b[0]+e|0;b[1]=b[1]+f|0;b[2]=b[2]+g|0;b[3]=b[3]+j|0;b[4]=b[4]+h|0;b[5]=b[5]+m|0;b[6]=b[6]+n|0;b[7]=b[7]+q|0},_doFinalize:function(){var a=this._data,d=a.words,b=8*this._nDataBytes,e=8*a.sigBytes;\nd[e>>>5]|=128<<24-e%32;d[(e+64>>>9<<4)+14]=h.floor(b/4294967296);d[(e+64>>>9<<4)+15]=b;a.sigBytes=4*d.length;this._process();return this._hash},clone:function(){var a=q.clone.call(this);a._hash=this._hash.clone();return a}});s.SHA256=q._createHelper(f);s.HmacSHA256=q._createHmacHelper(f)})(Math);\n\n// HMAC SHA256\n(function(){var h=CryptoJS,s=h.enc.Utf8;h.algo.HMAC=h.lib.Base.extend({init:function(f,g){f=this._hasher=new f.init;\"string\"==typeof g&&(g=s.parse(g));var h=f.blockSize,m=4*h;g.sigBytes>m&&(g=f.finalize(g));g.clamp();for(var r=this._oKey=g.clone(),l=this._iKey=g.clone(),k=r.words,n=l.words,j=0;j>>2]>>>24-8*(r%4)&255)<<16|(l[r+1>>>2]>>>24-8*((r+1)%4)&255)<<8|l[r+2>>>2]>>>24-8*((r+2)%4)&255,v=0;4>v&&r+0.75*v>>6*(3-v)&63));if(l=t.charAt(64))for(;d.length%4;)d.push(l);return d.join(\"\")},parse:function(d){var l=d.length,s=this._map,t=s.charAt(64);t&&(t=d.indexOf(t),-1!=t&&(l=t));for(var t=[],r=0,w=0;w<\nl;w++)if(w%4){var v=s.indexOf(d.charAt(w-1))<<2*(w%4),b=s.indexOf(d.charAt(w))>>>6-2*(w%4);t[r>>>2]|=(v|b)<<24-8*(r%4);r++}return p.create(t,r)},_map:\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\"}})();\n\n// BlockCipher\n(function(u){function p(b,n,a,c,e,j,k){b=b+(n&a|~n&c)+e+k;return(b<>>32-j)+n}function d(b,n,a,c,e,j,k){b=b+(n&c|a&~c)+e+k;return(b<>>32-j)+n}function l(b,n,a,c,e,j,k){b=b+(n^a^c)+e+k;return(b<>>32-j)+n}function s(b,n,a,c,e,j,k){b=b+(a^(n|~c))+e+k;return(b<>>32-j)+n}for(var t=CryptoJS,r=t.lib,w=r.WordArray,v=r.Hasher,r=t.algo,b=[],x=0;64>x;x++)b[x]=4294967296*u.abs(u.sin(x+1))|0;r=r.MD5=v.extend({_doReset:function(){this._hash=new w.init([1732584193,4023233417,2562383102,271733878])},\n_doProcessBlock:function(q,n){for(var a=0;16>a;a++){var c=n+a,e=q[c];q[c]=(e<<8|e>>>24)&16711935|(e<<24|e>>>8)&4278255360}var a=this._hash.words,c=q[n+0],e=q[n+1],j=q[n+2],k=q[n+3],z=q[n+4],r=q[n+5],t=q[n+6],w=q[n+7],v=q[n+8],A=q[n+9],B=q[n+10],C=q[n+11],u=q[n+12],D=q[n+13],E=q[n+14],x=q[n+15],f=a[0],m=a[1],g=a[2],h=a[3],f=p(f,m,g,h,c,7,b[0]),h=p(h,f,m,g,e,12,b[1]),g=p(g,h,f,m,j,17,b[2]),m=p(m,g,h,f,k,22,b[3]),f=p(f,m,g,h,z,7,b[4]),h=p(h,f,m,g,r,12,b[5]),g=p(g,h,f,m,t,17,b[6]),m=p(m,g,h,f,w,22,b[7]),\nf=p(f,m,g,h,v,7,b[8]),h=p(h,f,m,g,A,12,b[9]),g=p(g,h,f,m,B,17,b[10]),m=p(m,g,h,f,C,22,b[11]),f=p(f,m,g,h,u,7,b[12]),h=p(h,f,m,g,D,12,b[13]),g=p(g,h,f,m,E,17,b[14]),m=p(m,g,h,f,x,22,b[15]),f=d(f,m,g,h,e,5,b[16]),h=d(h,f,m,g,t,9,b[17]),g=d(g,h,f,m,C,14,b[18]),m=d(m,g,h,f,c,20,b[19]),f=d(f,m,g,h,r,5,b[20]),h=d(h,f,m,g,B,9,b[21]),g=d(g,h,f,m,x,14,b[22]),m=d(m,g,h,f,z,20,b[23]),f=d(f,m,g,h,A,5,b[24]),h=d(h,f,m,g,E,9,b[25]),g=d(g,h,f,m,k,14,b[26]),m=d(m,g,h,f,v,20,b[27]),f=d(f,m,g,h,D,5,b[28]),h=d(h,f,\nm,g,j,9,b[29]),g=d(g,h,f,m,w,14,b[30]),m=d(m,g,h,f,u,20,b[31]),f=l(f,m,g,h,r,4,b[32]),h=l(h,f,m,g,v,11,b[33]),g=l(g,h,f,m,C,16,b[34]),m=l(m,g,h,f,E,23,b[35]),f=l(f,m,g,h,e,4,b[36]),h=l(h,f,m,g,z,11,b[37]),g=l(g,h,f,m,w,16,b[38]),m=l(m,g,h,f,B,23,b[39]),f=l(f,m,g,h,D,4,b[40]),h=l(h,f,m,g,c,11,b[41]),g=l(g,h,f,m,k,16,b[42]),m=l(m,g,h,f,t,23,b[43]),f=l(f,m,g,h,A,4,b[44]),h=l(h,f,m,g,u,11,b[45]),g=l(g,h,f,m,x,16,b[46]),m=l(m,g,h,f,j,23,b[47]),f=s(f,m,g,h,c,6,b[48]),h=s(h,f,m,g,w,10,b[49]),g=s(g,h,f,m,\nE,15,b[50]),m=s(m,g,h,f,r,21,b[51]),f=s(f,m,g,h,u,6,b[52]),h=s(h,f,m,g,k,10,b[53]),g=s(g,h,f,m,B,15,b[54]),m=s(m,g,h,f,e,21,b[55]),f=s(f,m,g,h,v,6,b[56]),h=s(h,f,m,g,x,10,b[57]),g=s(g,h,f,m,t,15,b[58]),m=s(m,g,h,f,D,21,b[59]),f=s(f,m,g,h,z,6,b[60]),h=s(h,f,m,g,C,10,b[61]),g=s(g,h,f,m,j,15,b[62]),m=s(m,g,h,f,A,21,b[63]);a[0]=a[0]+f|0;a[1]=a[1]+m|0;a[2]=a[2]+g|0;a[3]=a[3]+h|0},_doFinalize:function(){var b=this._data,n=b.words,a=8*this._nDataBytes,c=8*b.sigBytes;n[c>>>5]|=128<<24-c%32;var e=u.floor(a/\n4294967296);n[(c+64>>>9<<4)+15]=(e<<8|e>>>24)&16711935|(e<<24|e>>>8)&4278255360;n[(c+64>>>9<<4)+14]=(a<<8|a>>>24)&16711935|(a<<24|a>>>8)&4278255360;b.sigBytes=4*(n.length+1);this._process();b=this._hash;n=b.words;for(a=0;4>a;a++)c=n[a],n[a]=(c<<8|c>>>24)&16711935|(c<<24|c>>>8)&4278255360;return b},clone:function(){var b=v.clone.call(this);b._hash=this._hash.clone();return b}});t.MD5=v._createHelper(r);t.HmacMD5=v._createHmacHelper(r)})(Math);\n(function(){var u=CryptoJS,p=u.lib,d=p.Base,l=p.WordArray,p=u.algo,s=p.EvpKDF=d.extend({cfg:d.extend({keySize:4,hasher:p.MD5,iterations:1}),init:function(d){this.cfg=this.cfg.extend(d)},compute:function(d,r){for(var p=this.cfg,s=p.hasher.create(),b=l.create(),u=b.words,q=p.keySize,p=p.iterations;u.length>>2]&255}};d.BlockCipher=v.extend({cfg:v.cfg.extend({mode:b,padding:q}),reset:function(){v.reset.call(this);var a=this.cfg,b=a.iv,a=a.mode;if(this._xformMode==this._ENC_XFORM_MODE)var c=a.createEncryptor;else c=a.createDecryptor,this._minBufferSize=1;this._mode=c.call(a,\nthis,b&&b.words)},_doProcessBlock:function(a,b){this._mode.processBlock(a,b)},_doFinalize:function(){var a=this.cfg.padding;if(this._xformMode==this._ENC_XFORM_MODE){a.pad(this._data,this.blockSize);var b=this._process(!0)}else b=this._process(!0),a.unpad(b);return b},blockSize:4});var n=d.CipherParams=l.extend({init:function(a){this.mixIn(a)},toString:function(a){return(a||this.formatter).stringify(this)}}),b=(p.format={}).OpenSSL={stringify:function(a){var b=a.ciphertext;a=a.salt;return(a?s.create([1398893684,\n1701076831]).concat(a).concat(b):b).toString(r)},parse:function(a){a=r.parse(a);var b=a.words;if(1398893684==b[0]&&1701076831==b[1]){var c=s.create(b.slice(2,4));b.splice(0,4);a.sigBytes-=16}return n.create({ciphertext:a,salt:c})}},a=d.SerializableCipher=l.extend({cfg:l.extend({format:b}),encrypt:function(a,b,c,d){d=this.cfg.extend(d);var l=a.createEncryptor(c,d);b=l.finalize(b);l=l.cfg;return n.create({ciphertext:b,key:c,iv:l.iv,algorithm:a,mode:l.mode,padding:l.padding,blockSize:a.blockSize,formatter:d.format})},\ndecrypt:function(a,b,c,d){d=this.cfg.extend(d);b=this._parse(b,d.format);return a.createDecryptor(c,d).finalize(b.ciphertext)},_parse:function(a,b){return\"string\"==typeof a?b.parse(a,this):a}}),p=(p.kdf={}).OpenSSL={execute:function(a,b,c,d){d||(d=s.random(8));a=w.create({keySize:b+c}).compute(a,d);c=s.create(a.words.slice(b),4*c);a.sigBytes=4*b;return n.create({key:a,iv:c,salt:d})}},c=d.PasswordBasedCipher=a.extend({cfg:a.cfg.extend({kdf:p}),encrypt:function(b,c,d,l){l=this.cfg.extend(l);d=l.kdf.execute(d,\nb.keySize,b.ivSize);l.iv=d.iv;b=a.encrypt.call(this,b,c,d.key,l);b.mixIn(d);return b},decrypt:function(b,c,d,l){l=this.cfg.extend(l);c=this._parse(c,l.format);d=l.kdf.execute(d,b.keySize,b.ivSize,c.salt);l.iv=d.iv;return a.decrypt.call(this,b,c,d.key,l)}})}();\n\n// AES\n(function(){for(var u=CryptoJS,p=u.lib.BlockCipher,d=u.algo,l=[],s=[],t=[],r=[],w=[],v=[],b=[],x=[],q=[],n=[],a=[],c=0;256>c;c++)a[c]=128>c?c<<1:c<<1^283;for(var e=0,j=0,c=0;256>c;c++){var k=j^j<<1^j<<2^j<<3^j<<4,k=k>>>8^k&255^99;l[e]=k;s[k]=e;var z=a[e],F=a[z],G=a[F],y=257*a[k]^16843008*k;t[e]=y<<24|y>>>8;r[e]=y<<16|y>>>16;w[e]=y<<8|y>>>24;v[e]=y;y=16843009*G^65537*F^257*z^16843008*e;b[k]=y<<24|y>>>8;x[k]=y<<16|y>>>16;q[k]=y<<8|y>>>24;n[k]=y;e?(e=z^a[a[a[G^z]]],j^=a[a[j]]):e=j=1}var H=[0,1,2,4,8,\n16,32,64,128,27,54],d=d.AES=p.extend({_doReset:function(){for(var a=this._key,c=a.words,d=a.sigBytes/4,a=4*((this._nRounds=d+6)+1),e=this._keySchedule=[],j=0;j>>24]<<24|l[k>>>16&255]<<16|l[k>>>8&255]<<8|l[k&255]):(k=k<<8|k>>>24,k=l[k>>>24]<<24|l[k>>>16&255]<<16|l[k>>>8&255]<<8|l[k&255],k^=H[j/d|0]<<24);e[j]=e[j-d]^k}c=this._invKeySchedule=[];for(d=0;dd||4>=j?k:b[l[k>>>24]]^x[l[k>>>16&255]]^q[l[k>>>\n8&255]]^n[l[k&255]]},encryptBlock:function(a,b){this._doCryptBlock(a,b,this._keySchedule,t,r,w,v,l)},decryptBlock:function(a,c){var d=a[c+1];a[c+1]=a[c+3];a[c+3]=d;this._doCryptBlock(a,c,this._invKeySchedule,b,x,q,n,s);d=a[c+1];a[c+1]=a[c+3];a[c+3]=d},_doCryptBlock:function(a,b,c,d,e,j,l,f){for(var m=this._nRounds,g=a[b]^c[0],h=a[b+1]^c[1],k=a[b+2]^c[2],n=a[b+3]^c[3],p=4,r=1;r>>24]^e[h>>>16&255]^j[k>>>8&255]^l[n&255]^c[p++],s=d[h>>>24]^e[k>>>16&255]^j[n>>>8&255]^l[g&255]^c[p++],t=\nd[k>>>24]^e[n>>>16&255]^j[g>>>8&255]^l[h&255]^c[p++],n=d[n>>>24]^e[g>>>16&255]^j[h>>>8&255]^l[k&255]^c[p++],g=q,h=s,k=t;q=(f[g>>>24]<<24|f[h>>>16&255]<<16|f[k>>>8&255]<<8|f[n&255])^c[p++];s=(f[h>>>24]<<24|f[k>>>16&255]<<16|f[n>>>8&255]<<8|f[g&255])^c[p++];t=(f[k>>>24]<<24|f[n>>>16&255]<<16|f[g>>>8&255]<<8|f[h&255])^c[p++];n=(f[n>>>24]<<24|f[g>>>16&255]<<16|f[h>>>8&255]<<8|f[k&255])^c[p++];a[b]=q;a[b+1]=s;a[b+2]=t;a[b+3]=n},keySize:8});u.AES=p._createHelper(d)})();\n\n// Mode ECB\nCryptoJS.mode.ECB = (function () {\n var ECB = CryptoJS.lib.BlockCipherMode.extend();\n\n ECB.Encryptor = ECB.extend({\n processBlock: function (words, offset) {\n this._cipher.encryptBlock(words, offset);\n }\n });\n\n ECB.Decryptor = ECB.extend({\n processBlock: function (words, offset) {\n this._cipher.decryptBlock(words, offset);\n }\n });\n\n return ECB;\n}());// Moved to hmac-sha-256.js\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./bower_components/pubnub/web/pubnub.js\n ** module id = 10\n ** module chunks = 0\n **/","export default class Cache {\n\n static defaultPrefix = 'rc-';\n\n constructor(storage, prefix) {\n this.setPrefix(prefix);\n this._storage = storage;\n }\n\n setPrefix(prefix) {\n this._prefix = prefix || Cache.defaultPrefix;\n return this;\n }\n\n setItem(key, data) {\n this._storage[this._prefixKey(key)] = JSON.stringify(data);\n return this;\n }\n\n removeItem(key) {\n delete this._storage[this._prefixKey(key)];\n return this;\n }\n\n getItem(key) {\n var item = this._storage[this._prefixKey(key)];\n if (!item) return null;\n return JSON.parse(item);\n }\n\n clean() {\n\n for (var key in this._storage) {\n\n if (!this._storage.hasOwnProperty(key)) continue;\n\n if (key.indexOf(this._prefix) === 0) {\n delete this._storage[key];\n }\n\n }\n\n return this;\n\n }\n\n _prefixKey(key) {\n return this._prefix + key;\n }\n\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/core/Cache.js\n **/","export default class Observable {\n\n constructor() {\n this.off();\n }\n\n hasListeners(event) {\n return (event in this._listeners);\n }\n\n on(events, callback) {\n\n if (typeof events == 'string') events = [events];\n if (!events) throw new Error('No events to subscribe to');\n if (typeof callback !== 'function') throw new Error('Callback must be a function');\n\n events.forEach((event) => {\n\n if (!this.hasListeners(event)) this._listeners[event] = [];\n\n this._listeners[event].push(callback);\n\n });\n\n return this;\n\n }\n\n emit(event, ...args) {\n\n var result = null;\n\n if (!this.hasListeners(event)) return null;\n\n this._listeners[event].some((callback) => {\n\n result = callback.apply(this, args);\n return (result === false);\n\n });\n\n return result;\n\n }\n\n off(event, callback) {\n\n if (!event) {\n\n this._listeners = {};\n\n } else {\n\n if (!callback) {\n\n delete this._listeners[event];\n\n } else {\n\n if (!this.hasListeners(event)) return this;\n\n this._listeners[event].forEach((cb, i) => {\n\n if (cb === callback) delete this._listeners[event][i];\n\n });\n\n }\n\n }\n\n return this;\n\n }\n\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/core/Observable.js\n **/","import {Promise} from '../core/Externals';\nimport {poll, stopPolling} from './Utils';\n\nexport default class Queue {\n\n static _pollInterval = 250;\n static _releaseTimeout = 5000;\n\n constructor(cache, cacheId) {\n\n this._cache = cache;\n this._cacheId = cacheId;\n this._promise = null;\n\n }\n\n isPaused() {\n\n var time = this._cache.getItem(this._cacheId);\n\n return !!time && Date.now() - parseInt(time) < Queue._releaseTimeout;\n }\n\n pause() {\n this._cache.setItem(this._cacheId, Date.now());\n return this;\n }\n\n resume() {\n this._cache.removeItem(this._cacheId);\n return this;\n }\n\n poll() {\n\n if (this._promise) return this._promise;\n\n this._promise = new Promise((resolve, reject) => {\n\n poll((next) => {\n\n if (this.isPaused()) return next();\n\n this._promise = null;\n\n this.resume(); // this is actually not needed but why not\n\n resolve(null);\n\n }, Queue._pollInterval);\n\n });\n\n return this._promise;\n\n }\n\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/core/Queue.js\n **/","import {fetch, Request, Response, Headers, Promise} from '../core/Externals';\nimport {queryStringify} from '../core/Utils';\nimport {findHeaderName} from './Utils';\nimport Observable from '../core/Observable';\nimport ApiResponse from './ApiResponse';\n\nexport default class Client extends Observable {\n\n static _allowedMethods = ['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'OPTIONS', 'HEAD'];\n\n events = {\n beforeRequest: 'beforeRequest',\n requestSuccess: 'requestSuccess',\n requestError: 'requestError'\n };\n\n /**\n * @param {Request} request\n * @return {Promise}\n */\n async sendRequest(request) {\n\n var apiResponse = new ApiResponse(request);\n\n try {\n\n //TODO Stop request if listeners return false\n this.emit(this.events.beforeRequest, apiResponse);\n\n apiResponse._response = await this._loadResponse(request);\n\n if (apiResponse._isMultipart() || apiResponse._isJson()) {\n apiResponse._text = await apiResponse.response().text();\n }\n\n if (!apiResponse.ok()) throw new Error('Response has unsuccessful status');\n\n this.emit(this.events.requestSuccess, apiResponse);\n\n return apiResponse;\n\n } catch (e) {\n\n if (!e.apiResponse) e = this.makeError(e, apiResponse);\n\n this.emit(this.events.requestError, e);\n\n throw e;\n\n }\n\n }\n\n /**\n * @param {Request} request\n * @return {Promise}\n * @private\n */\n async _loadResponse(request) {\n return await fetch.call(null, request);\n }\n\n /**\n * Wraps the JS Error object with transaction information\n * @param {Error|IApiError} e\n * @param {ApiResponse} apiResponse\n * @return {IApiError}\n */\n makeError(e, apiResponse) {\n\n // Wrap only if regular error\n if (!e.hasOwnProperty('apiResponse') && !e.hasOwnProperty('originalMessage')) {\n\n e.apiResponse = apiResponse;\n e.originalMessage = e.message;\n e.message = (apiResponse && apiResponse.error(true)) || e.originalMessage;\n\n }\n\n return e;\n\n }\n\n /**\n *\n * @param {object} init\n * @param {object} [init.url]\n * @param {object} [init.body]\n * @param {string} [init.method]\n * @param {object} [init.query]\n * @param {object} [init.headers]\n * @return {Request}\n */\n createRequest(init) {\n\n init = init || {};\n init.headers = init.headers || {};\n\n // Sanity checks\n if (!init.url) throw new Error('Url is not defined');\n if (!init.method) init.method = 'GET';\n if (init.method && Client._allowedMethods.indexOf(init.method) < 0) throw new Error('Method has wrong value: ' + init.method);\n\n // Defaults\n init.credentials = init.credentials || 'include';\n init.mode = init.mode || 'cors';\n\n // Append Query String\n if (init.query) {\n init.url = init.url + (init.url.indexOf('?') > -1 ? '&' : '?') + queryStringify(init.query);\n }\n\n if (!(findHeaderName('Accept', init.headers))) {\n init.headers['Accept'] = ApiResponse._jsonContentType;\n }\n\n // Serialize body\n //TODO Check that body is a plain object\n if (typeof init.body !== 'string' || !init.body) {\n\n var contentTypeHeaderName = findHeaderName(ApiResponse._contentType, init.headers);\n\n if (!contentTypeHeaderName) {\n contentTypeHeaderName = ApiResponse._contentType;\n init.headers[contentTypeHeaderName] = ApiResponse._jsonContentType;\n }\n\n var contentType = init.headers[contentTypeHeaderName];\n\n // Assign a new encoded body\n if (contentType.indexOf(ApiResponse._jsonContentType) > -1) {\n init.body = JSON.stringify(init.body);\n } else if (contentType.indexOf(ApiResponse._urlencodedContentType) > -1) {\n init.body = queryStringify(init.body);\n }\n\n }\n\n // Create a request with encoded body\n var req = new Request(init.url, init);\n\n // Keep the original body accessible directly (for mocks)\n req.originalBody = init.body;\n\n return req;\n\n }\n\n}\n\n/**\n * @name IApiError\n * @property {string} stack\n * @property {string} originalMessage\n * @property {ApiResponse} apiResponse\n */\n\n\n/** WEBPACK FOOTER **\n ** ./src/http/Client.js\n **/","import {fetch, Request, Response, Headers, Promise} from '../core/Externals';\nimport * as utils from '../core/Utils';\n\n/**\n * Creates a response\n * @param stringBody\n * @param init\n * @return {Response}\n */\nexport function createResponse(stringBody, init) {\n\n init = init || {};\n\n var response = new Response(stringBody, init);\n\n //TODO Wait for https://github.com/bitinn/node-fetch/issues/38\n if (utils.isNodeJS()) {\n\n response._text = stringBody;\n response._decode = function() {\n return this._text;\n };\n\n }\n\n return response;\n\n}\n\nexport function findHeaderName(name, headers) {\n name = name.toLowerCase();\n return Object.keys(headers).reduce(function(res, key) {\n if (res) return res;\n if (name == key.toLowerCase()) return key;\n return res;\n }, null);\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/http/Utils.js\n **/","import {fetch, Request, Response, Headers, Promise} from '../core/Externals';\nimport * as utils from './Utils';\n\nexport default class ApiResponse {\n\n static _contentType = 'Content-Type';\n static _jsonContentType = 'application/json';\n static _multipartContentType = 'multipart/mixed';\n static _urlencodedContentType = 'application/x-www-form-urlencoded';\n static _headerSeparator = ':';\n static _bodySeparator = '\\n\\n';\n static _boundarySeparator = '--';\n\n /**\n * @param {Request} request\n * @param {Response} response\n * @param {string} responseText\n */\n constructor(request, response, responseText) {\n\n /** @type {Request} */\n this._request = request;\n\n /** @type {Response} */\n this._response = response;\n\n this._text = responseText;\n this._json = null;\n this._multipart = [];\n\n }\n\n /**\n * @return {Response}\n */\n response() {\n return this._response;\n }\n\n /**\n * @return {Request}\n */\n request() {\n return this._request;\n }\n\n /**\n * @return {boolean}\n */\n ok() {\n return this._response && this._response.ok;\n }\n\n /**\n * @return {string}\n */\n text() {\n if (!this._isJson() && !this._isMultipart()) throw new Error('Response is not text');\n return this._text;\n }\n\n /**\n * @return {object}\n */\n json() {\n if (!this._isJson()) throw new Error('Response is not JSON');\n if (!this._json) {\n this._json = this._text ? JSON.parse(this._text) : null;\n }\n return this._json;\n }\n\n /**\n * @param [skipOKCheck]\n * @return {string}\n */\n error(skipOKCheck) {\n\n if (this.ok() && !skipOKCheck) return null;\n\n var message = (this._response && this._response.status ? this._response.status + ' ' : '') +\n (this._response && this._response.statusText ? this._response.statusText : '');\n\n try {\n\n if (this.json().message) message = this.json().message;\n if (this.json().error_description) message = this.json().error_description;\n if (this.json().description) message = this.json().description;\n\n } catch (e) {}\n\n return message;\n\n }\n\n /**\n * @return {ApiResponse[]}\n */\n multipart() {\n\n if (!this._isMultipart()) throw new Error('Response is not multipart');\n\n if (!this._multipart.length) {\n\n // Step 1. Split multipart response\n\n var text = this.text();\n\n if (!text) throw new Error('No response body');\n\n var boundary = this._getContentType().match(/boundary=([^;]+)/i)[1];\n\n if (!boundary) throw new Error('Cannot find boundary');\n\n var parts = text.toString().split(ApiResponse._boundarySeparator + boundary);\n\n if (parts[0].trim() === '') parts.shift();\n if (parts[parts.length - 1].trim() == ApiResponse._boundarySeparator) parts.pop();\n\n if (parts.length < 1) throw new Error('No parts in body');\n\n // Step 2. Parse status info\n\n var statusInfo = ApiResponse.create(parts.shift(), this._response.status, this._response.statusText).json();\n\n // Step 3. Parse all other parts\n\n this._multipart = parts.map((part:string, i) => {\n\n var status = statusInfo.response[i].status;\n\n return ApiResponse.create(part, status);\n\n });\n\n }\n\n return this._multipart;\n\n }\n\n _isContentType(contentType) {\n return this._getContentType().indexOf(contentType) > -1;\n }\n\n _getContentType() {\n return this._response.headers.get(ApiResponse._contentType) || '';\n }\n\n _isMultipart() {\n return this._isContentType(ApiResponse._multipartContentType);\n }\n\n _isUrlEncoded() {\n return this._isContentType(ApiResponse._urlencodedContentType);\n }\n\n _isJson() {\n return this._isContentType(ApiResponse._jsonContentType);\n }\n\n /**\n * Method is used to create ApiResponse object from string parts of multipart/mixed response\n * @param {string} [text]\n * @param {number} [status]\n * @param {string} [statusText]\n * @return {ApiResponse}\n */\n static create(text, status, statusText) {\n\n text = text || '';\n status = status || 200;\n statusText = statusText || 'OK';\n\n text = text.replace(/\\r/g, '');\n\n var headers = new Headers(),\n headersAndBody = text.split(ApiResponse._bodySeparator),\n headersText = (headersAndBody.length > 1) ? headersAndBody.shift() : '';\n\n text = headersAndBody.join(ApiResponse._bodySeparator);\n\n (headersText || '')\n .split('\\n')\n .forEach((header:string) => {\n\n var split = header.trim().split(ApiResponse._headerSeparator),\n key = split.shift().trim(),\n value = split.join(ApiResponse._headerSeparator).trim();\n\n if (key) headers.append(key, value);\n\n });\n\n return new ApiResponse(null, utils.createResponse(text, {\n headers: headers,\n status: status,\n statusText: statusText\n }), text);\n\n }\n\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/http/ApiResponse.js\n **/","import Registry from './Registry';\nimport {default as HttpClient} from '../http/Client';\n\nexport default class Client extends HttpClient {\n\n constructor() {\n super();\n this._registry = new Registry();\n }\n\n registry() {\n return this._registry;\n }\n\n async _loadResponse(request) {\n\n var mock = this._registry.find(request);\n\n return await mock.getResponse(request);\n\n }\n\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/mocks/ClientMock.js\n **/","import Mock from './Mock';\n\nexport default class Registry {\n\n constructor() {\n this._mocks = [];\n }\n\n add(mock) {\n this._mocks.push(mock);\n return this;\n }\n\n clear() {\n this._mocks = [];\n return this;\n }\n\n find(request) {\n\n //console.log('Registry is looking for', request);\n\n var mock = this._mocks.shift();\n\n if (!mock) throw new Error('No mock in registry for request ' + request.method + ' ' + request.url);\n\n if (!mock.test(request)) throw new Error('Wrong request ' + request.method + ' ' + request.url +\n ' for expected mock ' + mock.method() + ' ' + mock.path());\n\n return mock;\n\n }\n\n apiCall(method:string, path:string, response:any, status, statusText) {\n\n this.add(new Mock(method, path, response, status, statusText));\n\n return this;\n\n }\n\n authentication() {\n\n this.apiCall('POST', '/restapi/oauth/token', {\n 'access_token': 'ACCESS_TOKEN',\n 'token_type': 'bearer',\n 'expires_in': 3600,\n 'refresh_token': 'REFRESH_TOKEN',\n 'refresh_token_expires_in': 60480,\n 'scope': 'SMS RCM Foo Boo',\n 'expireTime': new Date().getTime() + 3600000\n });\n\n return this;\n\n }\n\n logout() {\n\n this.apiCall('POST', '/restapi/oauth/revoke', {});\n\n return this;\n\n }\n\n presenceLoad(id) {\n\n this.apiCall('GET', '/restapi/v1.0/account/~/extension/' + id + '/presence', {\n \"uri\": \"https://platform.ringcentral.com/restapi/v1.0/account/123/extension/\" + id + \"/presence\",\n \"extension\": {\n \"uri\": \"https://platform.ringcentral.com/restapi/v1.0/account/123/extension/\" + id,\n \"id\": id,\n \"extensionNumber\": \"101\"\n },\n \"activeCalls\": [],\n \"presenceStatus\": \"Available\",\n \"telephonyStatus\": \"Ringing\",\n \"userStatus\": \"Available\",\n \"dndStatus\": \"TakeAllCalls\",\n \"extensionId\": id\n });\n\n return this;\n\n }\n\n subscribeGeneric(expiresIn) {\n\n expiresIn = expiresIn || 15 * 60 * 60;\n\n var date = new Date();\n\n this.apiCall('POST', '/restapi/v1.0/subscription', {\n 'eventFilters': [\n '/restapi/v1.0/account/~/extension/~/presence'\n ],\n 'expirationTime': new Date(date.getTime() + (expiresIn * 1000)).toISOString(),\n 'expiresIn': expiresIn,\n 'deliveryMode': {\n 'transportType': 'PubNub',\n 'encryption': false,\n 'address': '123_foo',\n 'subscriberKey': 'sub-c-foo',\n 'secretKey': 'sec-c-bar'\n },\n 'id': 'foo-bar-baz',\n 'creationTime': date.toISOString(),\n 'status': 'Active',\n 'uri': 'https://platform.ringcentral.com/restapi/v1.0/subscription/foo-bar-baz'\n });\n\n return this;\n\n }\n\n subscribeOnPresence(id, detailed) {\n\n id = id || '1';\n\n var date = new Date();\n\n this.apiCall('POST', '/restapi/v1.0/subscription', {\n 'eventFilters': ['/restapi/v1.0/account/~/extension/' + id + '/presence' + (detailed ? '?detailedTelephonyState=true' : '')],\n 'expirationTime': new Date(date.getTime() + (15 * 60 * 60 * 1000)).toISOString(),\n 'deliveryMode': {\n 'transportType': 'PubNub',\n 'encryption': true,\n 'address': '123_foo',\n 'subscriberKey': 'sub-c-foo',\n 'secretKey': 'sec-c-bar',\n 'encryptionAlgorithm': 'AES',\n 'encryptionKey': 'VQwb6EVNcQPBhE/JgFZ2zw=='\n },\n 'creationTime': date.toISOString(),\n 'id': 'foo-bar-baz',\n 'status': 'Active',\n 'uri': 'https://platform.ringcentral.com/restapi/v1.0/subscription/foo-bar-baz'\n });\n\n return this;\n\n }\n\n tokenRefresh(failure) {\n\n if (!failure) {\n\n this.apiCall('POST', '/restapi/oauth/token', {\n 'access_token': 'ACCESS_TOKEN_FROM_REFRESH',\n 'token_type': 'bearer',\n 'expires_in': 3600,\n 'refresh_token': 'REFRESH_TOKEN_FROM_REFRESH',\n 'refresh_token_expires_in': 60480,\n 'scope': 'SMS RCM Foo Boo'\n });\n\n } else {\n\n this.apiCall('POST', '/restapi/oauth/token', {\n 'message': 'Wrong token',\n 'error_description': 'Wrong token',\n 'description': 'Wrong token'\n }, 400);\n\n }\n\n return this;\n\n }\n\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/mocks/Registry.js\n **/","import ApiResponse from '../http/ApiResponse';\nimport {delay} from '../core/Utils';\nimport {createResponse} from '../http/Utils';\n\nexport default class Mock {\n\n constructor(method, path, json, status, statusText, delay) {\n this._method = method.toUpperCase();\n this._path = path;\n this._json = json || {};\n this._delay = delay || 10;\n this._status = status || 200;\n this._statusText = statusText || 'OK';\n }\n\n path() {\n return this._path;\n }\n\n method() {\n return this._method;\n }\n\n test(request:Request) {\n\n return request.url.indexOf(this._path) > -1 &&\n request.method.toUpperCase() == this._method;\n\n }\n\n async getResponse(request) {\n\n await delay(this._delay);\n\n return this.createResponse(this._json);\n\n }\n\n createResponse(json, init) {\n\n init = init || {};\n\n init.status = init.status || this._status;\n init.statusText = init.statusText || this._statusText;\n\n var str = JSON.stringify(json),\n res = createResponse(str, init);\n\n res.headers.set(ApiResponse._contentType, ApiResponse._jsonContentType);\n\n return res;\n\n }\n\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/mocks/Mock.js\n **/","import Observable from '../core/Observable';\nimport Queue from '../core/Queue';\nimport Auth from './Auth';\nimport {Promise} from '../core/Externals';\nimport {queryStringify, parseQueryString, delay} from '../core/Utils';\n\nexport default class Platform extends Observable {\n\n static _urlPrefix = '/restapi';\n static _apiVersion = 'v1.0';\n static _accessTokenTtl = null; // Platform server by default sets it to 60 * 60 = 1 hour\n static _refreshTokenTtl = 10 * 60 * 60; // 10 hours\n static _refreshTokenTtlRemember = 7 * 24 * 60 * 60; // 1 week\n static _tokenEndpoint = '/restapi/oauth/token';\n static _revokeEndpoint = '/restapi/oauth/revoke';\n static _authorizeEndpoint = '/restapi/oauth/authorize';\n static _refreshDelayMs = 100;\n static _cacheId = 'platform';\n static _clearCacheOnRefreshError = true;\n\n events = {\n beforeLogin: 'beforeLogin',\n loginSuccess: 'loginSuccess',\n loginError: 'loginError',\n beforeRefresh: 'beforeRefresh',\n refreshSuccess: 'refreshSuccess',\n refreshError: 'refreshError',\n beforeLogout: 'beforeLogout',\n logoutSuccess: 'logoutSuccess',\n logoutError: 'logoutError'\n };\n\n constructor(client, cache, server, appKey, appSecret) {\n\n super();\n\n this._server = server;\n this._appKey = appKey;\n this._appSecret = appSecret;\n\n /** @type {Cache} */\n this._cache = cache;\n\n /** @type {Client} */\n this._client = client;\n\n this._queue = new Queue(this._cache, Platform._cacheId + '-refresh');\n\n this._auth = new Auth(this._cache, Platform._cacheId);\n\n }\n\n /**\n * @return {Auth}\n */\n auth() {\n return this._auth;\n }\n\n /**\n * @return {Client}\n */\n client() {\n return this._client;\n }\n\n /**\n * @param {string} path\n * @param {object} [options]\n * @param {boolean} [options.addServer]\n * @param {string} [options.addMethod]\n * @param {boolean} [options.addToken]\n * @return {string}\n */\n createUrl(path, options) {\n\n path = path || '';\n options = options || {};\n\n var builtUrl = '',\n hasHttp = path.indexOf('http://') != -1 || path.indexOf('https://') != -1;\n\n if (options.addServer && !hasHttp) builtUrl += this._server;\n\n if (path.indexOf(Platform._urlPrefix) == -1 && !hasHttp) builtUrl += Platform._urlPrefix + '/' + Platform._apiVersion;\n\n builtUrl += path;\n\n if (options.addMethod || options.addToken) builtUrl += (path.indexOf('?') > -1 ? '&' : '?');\n\n if (options.addMethod) builtUrl += '_method=' + options.addMethod;\n if (options.addToken) builtUrl += (options.addMethod ? '&' : '') + 'access_token=' + this._auth.accessToken();\n\n return builtUrl;\n\n }\n\n /**\n * @param {string} options.redirectUri\n * @param {string} options.state\n * @param {string} options.brandId\n * @param {string} options.display\n * @param {string} options.prompt\n * @return {string}\n */\n authUrl(options) {\n\n options = options || {};\n\n return this.createUrl(Platform._authorizeEndpoint + '?' + queryStringify({\n 'response_type': 'code',\n 'redirect_uri': options.redirectUri || '',\n 'client_id': this._appKey,\n 'state': options.state || '',\n 'brand_id': options.brandId || '',\n 'display': options.display || '',\n 'prompt': options.prompt || ''\n }), {addServer: true})\n\n }\n\n /**\n * @param {string} url\n * @return {Object}\n */\n parseAuthRedirectUrl(url:string) {\n\n var qs = parseQueryString(url.split('?').reverse()[0]),\n error = qs.error_description || qs.error;\n\n if (error) {\n var e = new Error(error);\n e.error = qs.error;\n throw e;\n }\n\n return qs;\n\n }\n\n /**\n * @return {Promise}\n */\n async loggedIn() {\n\n try {\n await this._ensureAuthentication();\n return true;\n } catch (e) {\n return false;\n }\n\n }\n\n /**\n * @param {string} options.username\n * @param {string} options.password\n * @param {string} options.extension\n * @param {string} options.code\n * @param {string} options.redirectUri\n * @param {string} options.endpointId\n * @returns {Promise}\n */\n async login(options) {\n\n try {\n\n options = options || {};\n\n options.remember = options.remember || false;\n\n this.emit(this.events.beforeLogin);\n\n var body = {\n \"access_token_ttl\": Platform._accessTokenTtl,\n \"refresh_token_ttl\": options.remember ? Platform._refreshTokenTtlRemember : Platform._refreshTokenTtl\n };\n\n if (!options.code) {\n\n body.grant_type = 'password';\n body.username = options.username;\n body.password = options.password;\n body.extension = options.extension || '';\n\n } else if (options.code) {\n\n body.grant_type = 'authorization_code';\n body.code = options.code;\n body.redirect_uri = options.redirectUri;\n //body.client_id = this.getCredentials().key; // not needed\n\n }\n\n if (options.endpointId) body.endpoint_id = options.endpointId;\n\n var apiResponse = await this._tokenRequest(Platform._tokenEndpoint, body),\n json = apiResponse.json();\n\n this._auth\n .setData(json)\n .setRemember(options.remember);\n\n this.emit(this.events.loginSuccess, apiResponse);\n\n return apiResponse;\n\n } catch (e) {\n\n this._cache.clean();\n\n this.emit(this.events.loginError, e);\n\n throw e;\n\n }\n\n }\n\n /**\n * @returns {Promise}\n */\n async refresh() {\n\n try {\n\n this.emit(this.events.beforeRefresh);\n\n if (this._queue.isPaused()) {\n\n await this._queue.poll();\n\n if (!this._isAccessTokenValid()) {\n throw new Error('Automatic authentification timeout');\n }\n\n this.emit(this.events.refreshSuccess, null);\n\n return null;\n\n }\n\n this._queue.pause();\n\n // Make sure all existing AJAX calls had a chance to reach the server\n await delay(Platform._refreshDelayMs);\n\n // Perform sanity checks\n if (!this._auth.refreshToken()) throw new Error('Refresh token is missing');\n if (!this._auth.refreshTokenValid()) throw new Error('Refresh token has expired');\n if (!this._queue.isPaused()) throw new Error('Queue was resumed before refresh call');\n\n /** @type {ApiResponse} */\n var res = await this._tokenRequest(Platform._tokenEndpoint, {\n \"grant_type\": \"refresh_token\",\n \"refresh_token\": this._auth.refreshToken(),\n \"access_token_ttl\": Platform._accessTokenTtl,\n \"refresh_token_ttl\": this._auth.remember() ? Platform._refreshTokenTtlRemember : Platform._refreshTokenTtl\n }),\n json = res.json();\n\n if (!json.access_token) {\n throw this._client.makeError(new Error('Malformed OAuth response'), res);\n }\n\n this._auth.setData(json);\n this._queue.resume();\n\n this.emit(this.events.refreshSuccess, res);\n\n return res;\n\n } catch (e) {\n\n e = this._client.makeError(e);\n\n if (Platform._clearCacheOnRefreshError) {\n this._cache.clean();\n }\n\n this.emit(this.events.refreshError, e);\n\n throw e;\n\n }\n\n }\n\n /**\n * @returns {Promise}\n */\n async logout() {\n\n try {\n\n this.emit(this.events.beforeLogout);\n\n this._queue.pause();\n\n var res = await this._tokenRequest(Platform._revokeEndpoint, {\n token: this._auth.accessToken()\n });\n\n this._queue.resume();\n this._cache.clean();\n\n this.emit(this.events.logoutSuccess, res);\n\n return res;\n\n } catch (e) {\n\n this._queue.resume();\n\n this.emit(this.events.logoutError, e);\n\n throw e;\n\n }\n\n }\n\n /**\n * @param {Request} request\n * @param {object} [options]\n * @param {boolean} [options.skipAuthCheck]\n * @return {Promise}\n */\n async inflateRequest(request, options) {\n\n options = options || {};\n\n if (options.skipAuthCheck) return request;\n\n await this._ensureAuthentication();\n\n request.headers.set('Authorization', this._authHeader());\n //request.url = this.createUrl(request.url, {addServer: true}); //FIXME Spec prevents this...\n\n //TODO Add User-Agent here\n\n return request;\n\n }\n\n /**\n * @param {Request} request\n * @param {object} [options]\n * @param {boolean} [options.skipAuthCheck]\n * @return {Promise}\n */\n async sendRequest(request, options) {\n\n try {\n\n request = await this.inflateRequest(request, options);\n\n return (await this._client.sendRequest(request));\n\n } catch (e) {\n\n // Guard is for errors that come from polling\n if (!e.apiResponse || !e.apiResponse.response() || (e.apiResponse.response().status != 401)) throw e;\n\n this._auth.cancelAccessToken();\n\n return (await this.sendRequest(request, options));\n\n }\n\n }\n\n /**\n * General purpose function to send anything to server\n * @param {string} options.url\n * @param {object} [options.body]\n * @param {string} [options.method]\n * @param {object} [options.query]\n * @param {object} [options.headers]\n * @param {boolean} [options.skipAuthCheck]\n * @return {Promise}\n */\n async send(options = {}) {\n\n //FIXME https://github.com/bitinn/node-fetch/issues/43\n options.url = this.createUrl(options.url, {addServer: true});\n\n return await this.sendRequest(this._client.createRequest(options), options);\n\n }\n\n /**\n * @param {string} url\n * @param {object} [query]\n * @param {object} [options]\n * @param {object} [options.headers]\n * @param {boolean} [options.skipAuthCheck]\n * @return {Promise}\n */\n async get(url, query, options) {\n options = options || {};\n options.method = 'GET';\n options.url = url;\n options.query = query;\n return await this.send(options);\n }\n\n /**\n * @param {string} url\n * @param {object} body\n * @param {object} [query]\n * @param {object} [options]\n * @param {object} [options.headers]\n * @param {boolean} [options.skipAuthCheck]\n * @return {Promise}\n */\n async post(url, body, query, options) {\n options = options || {};\n options.method = 'POST';\n options.url = url;\n options.query = query;\n options.body = body;\n return await this.send(options);\n }\n\n /**\n * @param {string} url\n * @param {object} [body]\n * @param {object} [query]\n * @param {object} [options]\n * @param {object} [options.headers]\n * @param {boolean} [options.skipAuthCheck]\n * @return {Promise}\n */\n async put(url, body, query, options) {\n options = options || {};\n options.method = 'PUT';\n options.url = url;\n options.query = query;\n options.body = body;\n return await this.send(options);\n }\n\n /**\n * @param {string} url\n * @param {string} [query]\n * @param {object} [options]\n * @param {object} [options.headers]\n * @param {boolean} [options.skipAuthCheck]\n * @return {Promise}\n */\n async 'delete'(url, query, options) {\n options = options || {};\n options.method = 'DELETE';\n options.url = url;\n options.query = query;\n return await this.send(options);\n }\n\n async _tokenRequest(path, body) {\n\n return await this.send({\n url: path,\n skipAuthCheck: true,\n body: body,\n method: 'POST',\n headers: {\n 'Authorization': 'Basic ' + this._apiKey(),\n 'Content-Type': 'application/x-www-form-urlencoded'\n }\n });\n\n }\n\n async _ensureAuthentication() {\n\n if (this._isAccessTokenValid()) return null;\n return await this.refresh();\n\n }\n\n _isAccessTokenValid() {\n\n return (this._auth.accessTokenValid() && !this._queue.isPaused());\n\n }\n\n _apiKey() {\n var apiKey = this._appKey + ':' + this._appSecret;\n return (typeof btoa == 'function') ? btoa(apiKey) : new Buffer(apiKey).toString('base64');\n }\n\n _authHeader() {\n var token = this._auth.accessToken();\n return this._auth.tokenType() + (token ? ' ' + token : '');\n }\n\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/platform/Platform.js\n **/","export default class Auth {\n\n static refreshHandicapMs:number = 60 * 1000; // 1 minute\n static forcedTokenType = 'forced';\n\n constructor(cache, cacheId:string) {\n\n /** @type {Cache} */\n this._cache = cache;\n this._cacheId = cacheId;\n\n }\n\n accessToken() {\n return this.data().access_token;\n }\n\n refreshToken() {\n return this.data().refresh_token;\n }\n\n tokenType() {\n return this.data().token_type;\n }\n\n /**\n * @return {{token_type: string, access_token: string, expires_in: number, refresh_token: string, refresh_token_expires_in: number}}\n */\n data() {\n\n return this._cache.getItem(this._cacheId) || {\n token_type: '',\n access_token: '',\n expires_in: 0,\n refresh_token: '',\n refresh_token_expires_in: 0\n };\n\n }\n\n /**\n * @param {object} newData\n * @return {Auth}\n */\n setData(newData) {\n\n newData = newData || {};\n\n var data = this.data();\n\n Object.keys(newData).forEach((key) => {\n data[key] = newData[key];\n });\n\n data.expire_time = Date.now() + (data.expires_in * 1000);\n data.refresh_token_expire_time = Date.now() + (data.refresh_token_expires_in * 1000);\n\n this._cache.setItem(this._cacheId, data);\n\n return this;\n\n }\n\n /**\n * Check if there is a valid (not expired) access token\n * @return {boolean}\n */\n accessTokenValid() {\n\n var authData = this.data();\n return (authData.token_type === Auth.forcedTokenType || (authData.expire_time - Auth.refreshHandicapMs > Date.now()));\n\n }\n\n /**\n * Check if there is a valid (not expired) access token\n * @return {boolean}\n */\n refreshTokenValid() {\n\n return (this.data().refresh_token_expire_time > Date.now());\n\n }\n\n /**\n * @return {Auth}\n */\n cancelAccessToken() {\n\n return this.setData({\n access_token: '',\n expires_in: 0\n });\n\n }\n\n /**\n * This method sets a special authentication mode used in Service Web\n * @return {Auth}\n */\n forceAuthentication() {\n\n this.setData({\n token_type: Auth.forcedTokenType,\n access_token: '',\n expires_in: 0,\n refresh_token: '',\n refresh_token_expires_in: 0\n });\n\n return this;\n\n }\n\n /**\n * @param remember\n * @return {Auth}\n */\n setRemember(remember) {\n\n return this.setData({remember: remember});\n\n }\n\n /**\n * @return {boolean}\n */\n remember() {\n\n return !!this.data().remember;\n\n }\n\n}\n\n//export interface IAuthData {\n// remember?:boolean;\n// token_type?:string;\n// access_token?:string;\n// expires_in?:number; // actually it's string\n// expire_time?:number;\n// refresh_token?:string;\n// refresh_token_expires_in?:number; // actually it's string\n// refresh_token_expire_time?:number;\n// scope?:string;\n//}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/platform/Auth.js\n **/","import PubnubMock from './PubnubMock.js';\nimport {PUBNUB} from '../core/Externals';\n\nexport default class PubnubMockFactory {\n\n constructor() {\n this.crypto_obj = PUBNUB.crypto_obj;\n }\n\n init(options:PUBNUBInitOptions) {\n return new PubnubMock(options);\n }\n\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/pubnub/PubnubFactory.js\n **/","import Observable from '../core/Observable';\nimport {PUBNUB} from '../core/Externals';\n\nexport default class PubnubMock extends Observable {\n\n constructor(options) {\n super();\n this.options = options;\n this.crypto_obj = PUBNUB.crypto_obj;\n }\n\n ready() {}\n\n subscribe(options:PUBNUBSubscribeOptions) {\n this.on('message-' + options.channel, options.message);\n }\n\n unsubscribe(options:PUBNUBUnsubscribeOptions) {\n this.off('message-' + options.channel);\n }\n\n receiveMessage(msg, channel) {\n this.emit('message-' + channel, msg, 'env', channel);\n }\n\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/pubnub/PubnubMock.js\n **/","import Observable from '../core/Observable';\nimport Client from '../http/Client';\nimport {poll, stopPolling, delay} from '../core/Utils';\n\nexport default class Subscription extends Observable {\n\n static _renewHandicapMs = 2 * 60 * 1000;\n static _pollInterval = 10 * 1000;\n\n events = {\n notification: 'notification',\n removeSuccess: 'removeSuccess',\n removeError: 'removeError',\n renewSuccess: 'renewSuccess',\n renewError: 'renewError',\n subscribeSuccess: 'subscribeSuccess',\n subscribeError: 'subscribeError'\n };\n\n constructor(pubnubFactory, platform) {\n\n super();\n\n this._pubnubFactory = pubnubFactory;\n this._platform = platform;\n this._pubnub = null;\n this._timeout = null;\n this._subscription = {};\n\n }\n\n subscribed(){\n\n return !!(this._subscription.id &&\n this._subscription.deliveryMode &&\n this._subscription.deliveryMode.subscriberKey &&\n this._subscription.deliveryMode.address);\n\n }\n\n /**\n * @return {boolean}\n */\n alive() {\n\n return this.subscribed() && Date.now() < this.expirationTime();\n\n }\n\n expirationTime() {\n return new Date(this._subscription.expirationTime || 0).getTime() - Subscription._renewHandicapMs;\n }\n\n setSubscription(subscription) {\n\n subscription = subscription || {};\n\n this._clearTimeout();\n\n this._subscription = subscription;\n\n if (!this._pubnub) this._subscribeAtPubnub();\n\n this._setTimeout();\n\n return this;\n\n }\n\n subscription() {\n return this._subscription;\n }\n\n /**\n * Creates or updates subscription if there is an active one\n * @returns {Promise}\n */\n async register() {\n\n if (this.alive()) {\n return await this.renew();\n } else {\n return await this.subscribe();\n }\n\n }\n\n eventFilters() {\n return this._subscription.eventFilters || [];\n }\n\n /**\n * @param {string[]} events\n * @return {Subscription}\n */\n addEventFilters(events) {\n this.setEventFilters(this.eventFilters().concat(events));\n return this;\n }\n\n /**\n * @param {string[]} events\n * @return {Subscription}\n */\n setEventFilters(events) {\n this._subscription.eventFilters = events;\n return this;\n }\n\n /**\n * @returns {Promise}\n */\n async subscribe() {\n\n try {\n\n this._clearTimeout();\n\n if (!this.eventFilters().length) throw new Error('Events are undefined');\n\n var response = await this._platform.post('/restapi/v1.0/subscription', {\n eventFilters: this._getFullEventFilters(),\n deliveryMode: {\n transportType: 'PubNub'\n }\n }),\n json = response.json();\n\n this.setSubscription(json)\n .emit(this.events.subscribeSuccess, response);\n\n return response;\n\n\n } catch (e) {\n\n e = this._platform.client().makeError(e);\n\n this.reset()\n .emit(this.events.subscribeError, e);\n\n throw e;\n\n }\n\n }\n\n /**\n * @returns {Promise}\n */\n async renew() {\n\n try {\n\n this._clearTimeout();\n\n if (!this.alive()) throw new Error('Subscription is not alive');\n\n if (!this.eventFilters().length) throw new Error('Events are undefined');\n\n var response = await this._platform.put('/restapi/v1.0/subscription/' + this._subscription.id, {\n eventFilters: this._getFullEventFilters()\n });\n\n var json = response.json();\n\n this.setSubscription(json)\n .emit(this.events.renewSuccess, response);\n\n return response;\n\n } catch (e) {\n\n e = this._platform.client().makeError(e);\n\n this.reset()\n .emit(this.events.renewError, e);\n\n throw e;\n\n }\n\n }\n\n /**\n * @returns {Promise}\n */\n async remove() {\n\n try {\n\n if (!this.subscribed()) throw new Error('No subscription');\n\n var response = await this._platform.delete('/restapi/v1.0/subscription/' + this._subscription.id);\n\n this.reset()\n .emit(this.events.removeSuccess, response);\n\n return response;\n\n } catch (e) {\n\n e = this._platform.client().makeError(e);\n\n this.emit(this.events.removeError, e);\n\n throw e;\n\n }\n\n }\n\n /**\n * @returns {Promise}\n */\n resubscribe() {\n\n return this.reset().setEventFilters(this.eventFilters()).subscribe();\n\n }\n\n /**\n * Remove subscription and disconnect from PUBNUB\n * This method resets subscription at client side but backend is not notified\n */\n reset() {\n this._clearTimeout();\n if (this.subscribed() && this._pubnub) this._pubnub.unsubscribe({channel: this._subscription.deliveryMode.address});\n this._subscription = {};\n return this;\n }\n\n _getFullEventFilters() {\n\n return this.eventFilters().map((event) => {\n return this._platform.createUrl(event);\n });\n\n }\n\n _setTimeout() {\n\n this._clearTimeout();\n\n if (!this.alive()) throw new Error('Subscription is not alive');\n\n poll((next)=> {\n\n if (this.alive()) return next();\n\n this.renew();\n\n }, Subscription._pollInterval, this._timeout);\n\n return this;\n\n }\n\n _clearTimeout() {\n\n stopPolling(this._timeout);\n\n return this;\n\n }\n\n _decrypt(message:any) {\n\n if (!this.subscribed()) throw new Error('No subscription');\n\n if (this._subscription.deliveryMode.encryptionKey) {\n\n var PUBNUB = this._pubnubFactory;\n\n message = PUBNUB.crypto_obj.decrypt(message, this._subscription.deliveryMode.encryptionKey, {\n encryptKey: false,\n keyEncoding: 'base64',\n keyLength: 128,\n mode: 'ecb'\n });\n\n }\n\n return message;\n\n }\n\n _notify(message:any) {\n\n this.emit(this.events.notification, this._decrypt(message));\n\n return this;\n\n }\n\n _subscribeAtPubnub():Subscription {\n\n if (!this.alive()) throw new Error('Subscription is not alive');\n\n var PUBNUB = this._pubnubFactory;\n\n this._pubnub = PUBNUB.init({\n ssl: true,\n subscribe_key: this._subscription.deliveryMode.subscriberKey\n });\n\n this._pubnub.ready();\n\n this._pubnub.subscribe({\n channel: this._subscription.deliveryMode.address,\n message: this._notify.bind(this),\n connect: () => {}\n });\n\n return this;\n\n }\n\n}\n\n//export interface ISubscription {\n// id?:string;\n// uri?: string;\n// eventFilters?:string[];\n// expirationTime?:string; // 2014-03-12T19:54:35.613Z\n// expiresIn?:number;\n// deliveryMode?: {\n// transportType?:string;\n// encryption?:boolean;\n// address?:string;\n// subscriberKey?:string;\n// encryptionKey?:string;\n// secretKey?:string;\n// };\n// creationTime?:string; // 2014-03-12T19:54:35.613Z\n// status?:string; // Active\n//}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/subscription/Subscription.js\n **/","import Subscription from './Subscription';\nimport Queue from '../core/Queue';\n\nexport default class CachedSubscription extends Subscription {\n\n constructor(pubnubFactory, platform, cache, cacheKey) {\n\n super(pubnubFactory, platform);\n\n this._cache = cache;\n this._cacheKey = cacheKey;\n this._renewQueue = new Queue(this._cache, cacheKey + '-renew');\n this._resubscribeQueue = new Queue(this._cache, cacheKey + '-resubscribe');\n\n this.events = {\n ...this.events,\n queuedRenewSuccess: 'queuedRenewSuccess',\n queuedRenewError: 'queuedRenewError',\n queuedResubscribeSuccess: 'queuedResubscribeSuccess',\n queuedResubscribeError: 'queuedResubscribeError'\n };\n\n this.on(this.events.renewError, () => {\n this.resubscribe();\n });\n\n this.on([this.events.subscribeSuccess, this.events.renewSuccess], () => {\n this._cache.setItem(this._cacheKey, this.subscription());\n });\n\n this.on(this.events.removeSuccess, () => {\n this._cache.removeItem(this._cacheKey);\n });\n\n }\n\n /**\n * TODO Combine with Platform.refresh and move elsewhere\n * @param actionCb\n * @param queue\n * @param successEvent\n * @param errorEvent\n * @param errorMessage\n * @return {*}\n * @private\n */\n async _queue(actionCb, queue, successEvent, errorEvent, errorMessage) {\n\n try {\n\n if (queue.isPaused()) {\n\n await queue.poll();\n\n if (!this.alive()) {\n throw new Error(errorMessage);\n }\n\n this.emit(successEvent, null);\n\n return null;\n\n }\n\n queue.pause();\n\n var res = await actionCb.call(this);\n\n queue.resume();\n\n this.emit(successEvent, res);\n\n return res;\n\n } catch (e) {\n\n this.emit(errorEvent, e);\n\n throw e;\n\n }\n\n }\n\n /**\n * @returns {Promise}\n */\n renew() {\n\n return this._queue(\n super.renew,\n this._renewQueue,\n this.events.queuedRenewSuccess,\n this.events.queuedRenewError,\n 'Subscription is not alive after renew timeout'\n );\n\n }\n\n /**\n * @returns {Promise}\n */\n resubscribe() {\n\n return this._queue(\n super.resubscribe,\n this._resubscribeQueue,\n this.events.queuedResubscribeSuccess,\n this.events.queuedResubscribeError,\n 'Subscription is not alive after resubscribe timeout'\n );\n\n }\n\n /**\n * @param {string[]} events\n * @return {CachedSubscription}\n */\n restore(events) {\n\n var cachedSubscriptionData = this._cache.getItem(this._cacheKey);\n\n if (cachedSubscriptionData) {\n try {\n this.setSubscription(cachedSubscriptionData);\n } catch (e) {}\n } else {\n this.setEventFilters(events);\n }\n\n return this;\n\n }\n\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/subscription/CachedSubscription.js\n **/","/**\n * Copyright (c) 2014, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * https://raw.github.com/facebook/regenerator/master/LICENSE file. An\n * additional grant of patent rights can be found in the PATENTS file in\n * the same directory.\n */\n\n!(function(global) {\n \"use strict\";\n\n var hasOwn = Object.prototype.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var iteratorSymbol =\n typeof Symbol === \"function\" && Symbol.iterator || \"@@iterator\";\n\n var inModule = typeof module === \"object\";\n var runtime = global.regeneratorRuntime;\n if (runtime) {\n if (inModule) {\n // If regeneratorRuntime is defined globally and we're in a module,\n // make the exports object identical to regeneratorRuntime.\n module.exports = runtime;\n }\n // Don't bother evaluating the rest of this file if the runtime was\n // already defined globally.\n return;\n }\n\n // Define the runtime globally (as expected by generated code) as either\n // module.exports (if we're in a module) or a new, empty object.\n runtime = global.regeneratorRuntime = inModule ? module.exports : {};\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided, then outerFn.prototype instanceof Generator.\n var generator = Object.create((outerFn || Generator).prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n runtime.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype;\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunction.displayName = \"GeneratorFunction\";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n runtime.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n runtime.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `value instanceof AwaitArgument` to determine if the yielded value is\n // meant to be awaited. Some may consider the name of this method too\n // cutesy, but they are curmudgeons.\n runtime.awrap = function(arg) {\n return new AwaitArgument(arg);\n };\n\n function AwaitArgument(arg) {\n this.arg = arg;\n }\n\n function AsyncIterator(generator) {\n // This invoke function is written in a style that assumes some\n // calling function (or Promise) will handle exceptions.\n function invoke(method, arg) {\n var result = generator[method](arg);\n var value = result.value;\n return value instanceof AwaitArgument\n ? Promise.resolve(value.arg).then(invokeNext, invokeThrow)\n : Promise.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration. If the Promise is rejected, however, the\n // result for this iteration will be rejected with the same\n // reason. Note that rejections of yielded Promises are not\n // thrown back into the generator function, as is the case\n // when an awaited Promise is rejected. This difference in\n // behavior between yield and await is important, because it\n // allows the consumer to decide what to do with the yielded\n // rejection (swallow it and continue, manually .throw it back\n // into the generator, abandon iteration, whatever). With\n // await, by contrast, there is no opportunity to examine the\n // rejection reason outside the generator function, so the\n // only option is to throw it from the await expression, and\n // let the generator function handle the exception.\n result.value = unwrapped;\n return result;\n });\n }\n\n if (typeof process === \"object\" && process.domain) {\n invoke = process.domain.bind(invoke);\n }\n\n var invokeNext = invoke.bind(generator, \"next\");\n var invokeThrow = invoke.bind(generator, \"throw\");\n var invokeReturn = invoke.bind(generator, \"return\");\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return invoke(method, arg);\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : new Promise(function (resolve) {\n resolve(callInvokeWithMethodAndArg());\n });\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n runtime.async = function(innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList)\n );\n\n return runtime.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n if (method === \"return\" ||\n (method === \"throw\" && delegate.iterator[method] === undefined)) {\n // A return or throw (when the delegate iterator has no throw\n // method) always terminates the yield* loop.\n context.delegate = null;\n\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n var returnMethod = delegate.iterator[\"return\"];\n if (returnMethod) {\n var record = tryCatch(returnMethod, delegate.iterator, arg);\n if (record.type === \"throw\") {\n // If the return method threw an exception, let that\n // exception prevail over the original return or throw.\n method = \"throw\";\n arg = record.arg;\n continue;\n }\n }\n\n if (method === \"return\") {\n // Continue with the outer return, now that the delegate\n // iterator has been terminated.\n continue;\n }\n }\n\n var record = tryCatch(\n delegate.iterator[method],\n delegate.iterator,\n arg\n );\n\n if (record.type === \"throw\") {\n context.delegate = null;\n\n // Like returning generator.throw(uncaught), but without the\n // overhead of an extra function call.\n method = \"throw\";\n arg = record.arg;\n continue;\n }\n\n // Delegate generator ran and handled its own exceptions so\n // regardless of what the method was, we continue as if it is\n // \"next\" with an undefined arg.\n method = \"next\";\n arg = undefined;\n\n var info = record.arg;\n if (info.done) {\n context[delegate.resultName] = info.value;\n context.next = delegate.nextLoc;\n } else {\n state = GenStateSuspendedYield;\n return info;\n }\n\n context.delegate = null;\n }\n\n if (method === \"next\") {\n if (state === GenStateSuspendedYield) {\n context.sent = arg;\n } else {\n context.sent = undefined;\n }\n\n } else if (method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw arg;\n }\n\n if (context.dispatchException(arg)) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n method = \"next\";\n arg = undefined;\n }\n\n } else if (method === \"return\") {\n context.abrupt(\"return\", arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n var info = {\n value: record.arg,\n done: context.done\n };\n\n if (record.arg === ContinueSentinel) {\n if (context.delegate && method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n arg = undefined;\n }\n } else {\n return info;\n }\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(arg) call above.\n method = \"throw\";\n arg = record.arg;\n }\n }\n };\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n runtime.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n runtime.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n this.sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n return !!caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.next = finallyEntry.finallyLoc;\n } else {\n this.complete(record);\n }\n\n return ContinueSentinel;\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = record.arg;\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n return ContinueSentinel;\n }\n };\n})(\n // Among the various tricks for obtaining a reference to the global\n // object, this seems to be the most reliable technique that does not\n // use indirect eval (which violates Content Security Policy).\n typeof global === \"object\" ? global :\n typeof window === \"object\" ? window :\n typeof self === \"object\" ? self : this\n);\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/regenerator/runtime.js\n ** module id = 26\n ** module chunks = 0\n **/"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap 9c749e57da12c0713880","webpack:///./src/SDK.js","webpack:///./src/core/Utils.js","webpack:///./src/core/Externals.js","webpack:///./bower_components/es6-promise/promise.js","webpack:///./~/timers-browserify/main.js","webpack:///./~/process/browser.js","webpack:///(webpack)/buildin/module.js","webpack:///(webpack)/buildin/amd-define.js","webpack:///./bower_components/fetch/fetch.js","webpack:///./bower_components/pubnub/web/pubnub.js","webpack:///./src/core/Cache.js","webpack:///./src/core/Observable.js","webpack:///./src/core/Queue.js","webpack:///./src/http/Client.js","webpack:///./src/http/Utils.js","webpack:///./src/http/ApiResponse.js","webpack:///./src/mocks/ClientMock.js","webpack:///./src/mocks/Registry.js","webpack:///./src/mocks/Mock.js","webpack:///./src/platform/Platform.js","webpack:///./src/platform/Auth.js","webpack:///./src/pubnub/PubnubFactory.js","webpack:///./src/pubnub/PubnubMock.js","webpack:///./src/subscription/Subscription.js","webpack:///./src/subscription/CachedSubscription.js","webpack:///./~/regenerator/runtime.js"],"names":[],"mappings":"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AY,KAAK,WAAW,GAAI,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;;;;;;;8CCf9F;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA,2CAA2C;AAC3C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,2EAA2E;;AAE3E;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,8BAA8B,sBAAsB;;AAEpD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,qBAAqB,+BAA+B;AACpD;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,uBAAuB,QAAQ;AAC/B;AACA;AACA;AACA,WAAW;AACX;AACA;AACA,SAAS;AACT,uBAAuB,QAAQ;AAC/B;;AAEA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,kEAAkE,QAAQ;;AAE1E;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,kEAAkE,QAAQ;AAC1E;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,qCAAqC,QAAQ;;AAE7C;;AAEA,qBAAqB,wBAAwB;AAC7C;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;;AAEA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT,OAAO;AACP;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA,qBAAqB,qEAAqE;AAC1F;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,qBAAqB,qEAAqE;AAC1F;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAO;;AAEP;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,OAAO;AACP;;AAEA;AACA,cAAc,SAAS;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA,OAAO;;AAEP;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;;AAEA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,OAAO;AACP;;AAEA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,aAAa;AACb,WAAW;AACX;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;;AAEA;AACA,cAAc,SAAS;AACvB,cAAc,SAAS;AACvB;AACA,eAAe;AACf;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW;AACX,SAAS;AACT;AACA;;AAEA;AACA,OAAO;;AAEP;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA,cAAc,SAAS;AACvB;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA,WAAW;AACX;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,oDAAyB,wCAAwC,EAAE;AACnE,KAAK;AACL;AACA,KAAK;AACL;AACA;;AAEA;AACA,CAAC;;;;;;;;;ACt8BD;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,iBAAiB;;AAE5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA,E;;;;;;;AC3EA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,uBAAuB,sBAAsB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,2BAA2B;AAC3B;AACA;AACA;AACA,4BAA4B,UAAU;;;;;;;AC1FtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACTA,6BAA6B,mDAAmD;;;;;;;ACAhF;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,OAAO;;AAEP,KAAK;AACL;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,OAAO;;AAEP;AACA,KAAK;AACL;AACA;AACA,CAAC;;;;;;;AC5VD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,0CAA0C;;AAE1C;AACA,kBAAkB;AAClB,kBAAkB;AAClB;;AAEA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA,2BAA2B,YAAY;AACvC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,YAAY;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,0CAA0C;AAC1C,wBAAwB;AACxB,iCAAiC,MAAM,0BAA0B;AACjE;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,2BAA2B,WAAW;AACtC;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,UAAU;AACtC;AACA;;AAEA;AACA;AACA,yCAAyC;AACzC;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,UAAU;;AAElC;AACA;AACA;AACA,mBAAmB;AACnB,mBAAmB;;AAEnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;;AAGD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,6CAA6C,kBAAkB;AAC/D;AACA;AACA;AACA,mCAAmC,wBAAwB;AAC3D;AACA;;AAEA;AACA;AACA;AACA,gCAAgC,KAAK,KAAK,gBAAgB;AAC1D;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kCAAkC,EAAE;AACpC;AACA;AACA;;AAEA;AACA,sCAAsC,OAAO;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,4CAA4C,kBAAkB;AAC9D;AACA;AACA;AACA,wCAAwC,wBAAwB;AAChE;AACA;;;AAGA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA,uBAAuB;;AAEvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA,kBAAkB;AAClB;AACA;AACA,2CAA2C,YAAY;AACvD,CAAC,WAAW;;AAEZ;AACA,mBAAmB,YAAY;AAC/B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D;AAC3D,2DAA2D;AAC3D,gDAAgD,mBAAmB;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,wCAAwC,UAAU;AAClD,wCAAwC;AACxC;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,aAAa;AACb;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,8BAA8B,uCAAuC;AACrE;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA,mCAAmC;AACnC,SAAS;;AAET;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA,mCAAmC;AACnC,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA,aAAa;;AAEb;;AAEA;AACA;AACA;;AAEA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;;AAGA;AACA;AACA;AACA,0CAA0C,yEAAyE;AACnH;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA,aAAa;AACb;AACA,SAAS;AACT;;AAEA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,0CAA0C,yEAAyE;AACnH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA,aAAa;AACb;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA,iBAAiB;AACjB;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;;AAEA;;AAEA;AACA,SAAS;;AAET;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,SAAS;;AAET;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;;AAEA;AACA;AACA,SAAS;;AAET;AACA;AACA;;AAEA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA,8CAA8C;AAC9C,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,iEAAiE;AAC9F;AACA;AACA;AACA;AACA,mCAAmC,qBAAqB;AACxD;AACA;AACA;AACA;AACA,4DAA4D,gEAAgE;AAC5H,6BAA6B;AAC7B,6DAA6D,iDAAiD;AAC9G;AACA,yBAAyB;AACzB;AACA;AACA;AACA,6BAA6B;AAC7B;AACA,6B;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;;AAET;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,uCAAuC,kCAAkC;AACzE;AACA;AACA,aAAa;AACb,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;;AAET;AACA,uCAAuC,EAAE;AACzC;AACA;AACA;;AAEA,wBAAwB;;AAExB;;AAEA;AACA;AACA;AACA;AACA;AACA,+CAA+C,wBAAwB;AACvE,uCAAuC;AACvC,aAAa;AACb,SAAS;;AAET;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,sBAAsB;;AAEtB;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA,iBAAiB;AACjB;AACA,aAAa;;AAEb;AACA;AACA,SAAS;;AAET;AACA,gCAAgC,sBAAsB;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,4BAA4B;;AAE5B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA;AACA;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA;AACA,0CAA0C,iBAAiB;AAC3D;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA;AACA;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA;AACA,0CAA0C,iBAAiB;AAC3D;;AAEA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA,8CAA8C;AAC9C,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,qBAAqB;;AAErB;AACA;;AAEA;AACA;AACA;AACA;AACA,sDAAsD,mCAAmC;AACzF;AACA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA;AACA,6BAA6B,kBAAkB,EAAE;AACjD;AACA,qBAAqB;AACrB,iBAAiB;AACjB;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;;AAErB;AACA;;AAEA;AACA;AACA;AACA;AACA,4DAA4D,mCAAmC;AAC/F;AACA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA;AACA,6BAA6B,wBAAwB,EAAE;AACvD;AACA,qBAAqB;AACrB,iBAAiB;AACjB;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,qBAAqB;AACrB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA,4CAA4C,mCAAmC;;AAE/E;AACA;AACA;;;AAGA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA,6BAA6B;AAC7B;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;;AAEA;AACA;AACA;AACA;AACA;AACA,yBAAyB;;AAEzB;AACA;AACA;AACA;AACA;AACA,yBAAyB;;AAEzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA,6BAA6B;AAC7B;AACA,qFAAqF;AACrF;AACA;AACA,oDAAoD,aAAa;AACjE,uCAAuC;AACvC;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,+FAA+F;AAC/F,iCAAiC;AACjC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;;AAEzB;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;;AAEzB;AACA;AACA,iBAAiB;AACjB;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,SAAS;;AAET;AACA,6BAA6B,sCAAsC;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;;AAE5B;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA,+BAA+B,0BAA0B;;AAEzD;AACA;AACA,iE;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,aAAa;AACb,SAAS;;AAET;AACA,6CAA6C,sCAAsC;AACnF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B;;AAE5B;AACA;AACA;;AAEA,+BAA+B,0BAA0B;;AAEzD;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C,oBAAoB;;AAEhE;AACA;AACA;AACA;;AAEA,+BAA+B,0BAA0B;;AAEzD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;;AAEA,aAAa;;AAEb,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,0BAA0B;AACzD;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,sBAAsB;;AAEtB;AACA;AACA,aAAa;AACb;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA,aAAa;;AAEb,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,wBAAwB;AACxB,+BAA+B,0BAA0B;AACzD;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,4BAA4B;;AAE5B;AACA;;AAEA;;AAEA,+BAA+B,0BAA0B;;AAEzD;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,+CAA+C,8BAA8B;AAC7E,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC,gBAAgB,6DAA6D;AAC7E,SAAS;AACT;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA,2CAA2C;AAC3C;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yFAAyF,uBAAuB;AAChH;AACA;AACA,SAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6DAA6D,yBAAyB,eAAe,uBAAuB;AAC5H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oDAAoD;AACpD;AACA;AACA;AACA,sBAAsB,yBAAyB;AAC/C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,YAAY;AACjB;AACA;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA,cAAc,sCAAsC;AACpD;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,gBAAgB;;AAEhB;AACA;AACA;AACA;AACA;AACA,yBAAyB;;AAEzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB;;AAEjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,UAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA,0BAA0B;;;AAG1B;AACA;AACA;AACA;AACA;AACA,qBAAqB;;;;AAIrB;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;AACA,iDAAiD,eAAe;AAChE;AACA;AACA;AACA;AACA,iBAAiB;AACjB,iCAAiC,yBAAyB;AAC1D;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,wCAAwC,SAAS,sBAAsB,EAAE;AACzE;AACA;AACA;AACA,gCAAgC;AAChC;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;;AAEA;AACA;AACA;;AAEA;;AAEA,iCAAiC;AACjC;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,uBAAuB,4CAA4C;AACnE,uBAAuB,gBAAgB;;AAEvC;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,SAAS,sBAAsB,EAAE;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,kDAAkD;AAClD,kDAAkD;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAmC,iBAAiB,gEAAgE,EAAE;AACtH;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAe;AACf,eAAe;AACf;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;;AAE3B;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;;;AAGvC;AACA;AACA,+DAA+D,8BAA8B;AAC7F;AACA,KAAK;;AAEL;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,2CAA2C;;AAE3C;AACA;AACA;AACA;AACA;AACA,qCAAqC,sBAAsB;AAC3D;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA,YAAY,2CAA2C;;AAEvD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,+BAA+B;AAC/B,8BAA8B,0BAA0B,EAAE;AAC1D;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,CAAC;AACD;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,2BAA2B;AAC3B,2BAA2B;AAC3B,2BAA2B;AAC3B,2BAA2B;;AAE3B;AACA,wCAAwC,0BAA0B;AAClE,wCAAwC;AACxC,wCAAwC;AACxC,wCAAwC;AACxC,wCAAwC;AACxC,wCAAwC;AACxC,wCAAwC;;AAExC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA,+BAA+B,mBAAmB;AAClD,SAAS;AACT;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,oBAAoB;AAChD;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA,gCAAgC,2CAA2C;AAC3E;AACA,sBAAsB;AACtB;;AAEA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,QAAQ,WAAW,eAAe,WAAW,mBAAmB,iBAAiB,YAAY,cAAc,6CAA6C,oCAAoC,EAAE,mBAAmB,cAAc,SAAS,mBAAmB,oBAAoB,0BAA0B,SAAS,kBAAkB,mBAAmB,mDAAmD,yDAAyD,kBAAkB,yCAAyC;AACniB,wBAAwB,mBAAmB,mBAAmB,gCAAgC,sBAAsB,6BAA6B,oBAAoB,2CAA2C,aAAa,aAAa,mBAAmB,IAAI,4DAA4D,+BAA+B,IAAI,yBAAyB,uBAAuB,iBAAiB,YAAY,kBAAkB,iCAAiC;AAChe,WAAW,qBAAqB,kBAAkB,yBAAyB,4BAA4B,SAAS,oBAAoB,iBAAiB,IAAI,qCAAqC,wBAAwB,YAAY,UAAU,sBAAsB,cAAc,aAAa,iBAAiB,IAAI,KAAK,gCAAgC,6BAA6B,4BAA4B,kBAAkB,mBAAmB,4BAA4B,IAAI;AACrd,mBAAmB,0BAA0B,aAAa,sBAAsB,cAAc,aAAa,iBAAiB,IAAI,2DAA2D,kBAAkB,mBAAmB,4BAA4B,IAAI,gDAAgD,wBAAwB,WAAW,sBAAsB,IAAI,kDAAkD,SAAS,sCAAsC,mBAAmB,iDAAiD;AAClhB,qCAAqC,iBAAiB,sBAAsB,mBAAmB,qBAAqB,mCAAmC,qBAAqB,6BAA6B,sBAAsB,oHAAoH,MAAM,eAAe,MAAM,YAAY,IAAI,+BAA+B,gBAAgB,cAAc,uBAAuB,kBAAkB;AACpe,2BAA2B,SAAS,kBAAkB,EAAE,mBAAmB,gCAAgC,4BAA4B,aAAa,kBAAkB,mBAAmB,gBAAgB,oBAAoB,gBAAgB,gBAAgB,YAAY,sBAAsB,mBAAmB,0BAA0B,wCAAwC,qBAAqB,mCAAmC,+BAA+B,qBAAqB;AAChe,kBAAkB,EAAE,gBAAgB,SAAS;;AAE7C;AACA,aAAa,qFAAqF,8BAA8B,SAAS,KAAK,EAAE,MAAM,GAAG,IAAI,wBAAwB,KAAK,eAAe,KAAK,QAAQ,KAAK,0DAA0D,IAAI,8BAA8B,oBAAoB,kCAAkC,+BAA+B,uFAAuF,KAAK,KAAK;AAC7e,SAAS,KAAK,uBAAuB,gGAAgG,sEAAsE,8DAA8D,IAAI,IAAI,IAAI,QAAQ,IAAI,IAAI,IAAI,QAAQ,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,cAAc,wBAAwB;AACzb,uBAAuB,0CAA0C,sBAAsB,sBAAsB,gBAAgB,kBAAkB,kBAAkB,yBAAyB,2BAA2B,UAAU,EAAE,4BAA4B,oCAAoC;;AAEjS;AACA,YAAY,4BAA4B,+BAA+B,mBAAmB,0BAA0B,mCAAmC,wBAAwB,gCAAgC,UAAU,8EAA8E,IAAI,qCAAqC,wBAAwB,aAAa,kBAAkB,mBAAmB,UAAU,qBAAqB,oBAAoB,uBAAuB,YAAY,sBAAsB;AACtgB,aAAa,gBAAgB,UAAU,iDAAiD,EAAE;;AAE1F;AACA,YAAY,iCAAiC,cAAc,sBAAsB,uCAAuC,UAAU,KAAK,YAAY,IAAI,wHAAwH,gBAAgB,qCAAqC,uBAAuB,WAAW,WAAW,kBAAkB,mBAAmB,0CAA0C,iCAAiC,qBAAqB;AACtf,EAAE,YAAY,6EAA6E,4BAA4B,IAAI,qBAAqB,2EAA2E;;AAE3N;AACA,aAAa,0BAA0B,mBAAmB,wBAAwB,0BAA0B,mBAAmB,wBAAwB,0BAA0B,gBAAgB,wBAAwB,0BAA0B,mBAAmB,wBAAwB,sEAAsE,KAAK,wCAAwC,kBAAkB,oBAAoB,oEAAoE;AAC3f,8BAA8B,YAAY,KAAK,KAAK,iBAAiB,qDAAqD;AAC1H;AACA;AACA,iUAAiU,cAAc,cAAc,cAAc,cAAc,wBAAwB,+DAA+D,uBAAuB;AACve,YAAY,oEAAoE,oEAAoE,0BAA0B,gBAAgB,aAAa,UAAU,QAAQ,IAAI,gEAAgE,SAAS,kBAAkB,yBAAyB,2BAA2B,UAAU,EAAE,yBAAyB,iCAAiC;AACtb,YAAY,4EAA4E,cAAc,oCAAoC,mBAAmB,4BAA4B,uBAAuB,yFAAyF,WAAW,EAAE,eAAe,8BAA8B,UAAU,YAAY,IAAI,8BAA8B,YAAY,eAAe,UAAU,EAAE,yBAAyB;AAC3d,IAAI;;AAEJ;AACA,iCAAiC,6HAA6H,6CAA6C,6CAA6C,+BAA+B,6CAA6C,sBAAsB,4BAA4B,kBAAkB,YAAY,aAAa,kBAAkB,mBAAmB,gBAAgB,qBAAqB,gBAAgB,uBAAuB;AAClhB,qBAAqB,mBAAmB,0BAA0B,kFAAkF,OAAO,wBAAwB,gDAAgD,yBAAyB,mDAAmD,EAAE,yBAAyB,uBAAuB,yBAAyB,aAAa,EAAE,eAAe,mBAAmB,eAAe,+BAA+B,YAAY,IAAI;AACze,KAAK,gCAAgC,8BAA8B,kCAAkC,+BAA+B,kCAAkC,oBAAoB,eAAe,YAAY,YAAY,sBAAsB,2BAA2B,iCAAiC,mBAAmB,oBAAoB,gCAAgC,EAAE,sBAAsB,2BAA2B,kDAAkD,oBAAoB;AACnf,OAAO,mBAAmB,EAAE,UAAU,WAAW,SAAS,kBAAkB,6DAA6D,IAAI,eAAe,gBAAgB,YAAY,mBAAmB,4CAA4C,wBAAwB,kBAAkB,iBAAiB,mBAAmB,mBAAmB,+BAA+B,iEAAiE,+CAA+C;AACve,iBAAiB,+BAA+B,6BAA6B,wBAAwB,uBAAuB,0CAA0C,iCAAiC,wBAAwB,oCAAoC,SAAS,aAAa,EAAE,+BAA+B,iBAAiB,cAAc,sBAAsB,2CAA2C,gBAAgB,WAAW,sBAAsB,mBAAmB,SAAS;AACve,gDAAgD,mBAAmB,aAAa,cAAc,uCAAuC,6BAA6B,cAAc,eAAe,iBAAiB,oBAAoB,GAAG,kCAAkC,cAAc,SAAS,4BAA4B,qBAAqB,6BAA6B,gBAAgB,QAAQ,iBAAiB,8GAA8G,EAAE;AACvgB,0BAA0B,qBAAqB,0BAA0B,qDAAqD,sBAAsB,4CAA4C,aAAa,WAAW,0BAA0B,mBAAmB,YAAY,YAAY,eAAe,iCAAiC,eAAe,iBAAiB,kBAAkB,GAAG,mCAAmC,kBAAkB,MAAM,4BAA4B,qBAAqB;AAC9e,oBAAoB,UAAU,mCAAmC,WAAW,SAAS,2BAA2B,qBAAqB,0BAA0B,6CAA6C,UAAU,yCAAyC,EAAE;;AAEjQ;AACA,YAAY,2GAA2G,MAAM,6BAA6B,oBAAoB,MAAM,KAAK,6CAA6C,OAAO,OAAO,+CAA+C,iBAAiB,kBAAkB,iBAAiB,OAAO,sCAAsC,iBAAiB,kBAAkB,iBAAiB,OAAO,sCAAsC;AACre,sCAAsC,oBAAoB,oGAAoG,IAAI,qBAAqB,KAAK,aAAa,yKAAyK,cAAc,0BAA0B,QAAQ,IAAI;AACta,oBAAoB,4BAA4B,oDAAoD,4BAA4B,aAAa,cAAc,SAAS,uDAAuD,SAAS,cAAc,SAAS,yCAAyC,sFAAsF,IAAI;AAC9X,wHAAwH,oEAAoE,oEAAoE,oEAAoE,oEAAoE,OAAO,SAAS,SAAS,SAAS,WAAW,EAAE,yBAAyB;;AAEhd;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA,CAAC,IAAI,2B;;;;;;;;;;;;;;;ICl9FgB,KAAK;iBAAL,KAAK;;eAEC,KAAK;;;;AAEjB,aAJM,KAAK,CAIV,OAAO,EAAE,MAAM,EAAE;8BAJZ,KAAK;;AAKlB,YAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;AACvB,YAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;KAC3B;;AAPgB,SAAK,WAStB,SAAS,sBAAC,MAAM,EAAE;AACd,YAAI,CAAC,OAAO,GAAG,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC;AAC7C,eAAO,IAAI,CAAC;KACf;;AAZgB,SAAK,WActB,OAAO,oBAAC,GAAG,EAAE,IAAI,EAAE;AACf,YAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AAC3D,eAAO,IAAI,CAAC;KACf;;AAjBgB,SAAK,WAmBtB,UAAU,uBAAC,GAAG,EAAE;AACZ,eAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;AAC3C,eAAO,IAAI,CAAC;KACf;;AAtBgB,SAAK,WAwBtB,OAAO,oBAAC,GAAG,EAAE;AACT,YAAI,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/C,YAAI,CAAC,IAAI,EAAE,OAAO,IAAI,CAAC;AACvB,eAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;KAC3B;;AA5BgB,SAAK,WA8BtB,KAAK,oBAAG;;AAEJ,aAAK,IAAI,GAAG,IAAI,IAAI,CAAC,QAAQ,EAAE;;AAE3B,gBAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,SAAS;;AAEjD,gBAAI,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACjC,uBAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;aAC7B;SAEJ;;AAED,eAAO,IAAI,CAAC;KAEf;;AA5CgB,SAAK,WA8CtB,UAAU,uBAAC,GAAG,EAAE;AACZ,eAAO,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC;KAC7B;;WAhDgB,KAAK;;;qBAAL,KAAK;;;;;;;;;;;;;ICAL,UAAU;AAEhB,aAFM,UAAU,GAEb;8BAFG,UAAU;;AAGvB,YAAI,CAAC,GAAG,EAAE,CAAC;KACd;;AAJgB,cAAU,WAM3B,YAAY,yBAAC,KAAK,EAAE;AAChB,eAAQ,KAAK,IAAI,IAAI,CAAC,UAAU,CAAE;KACrC;;AARgB,cAAU,WAU3B,EAAE,eAAC,MAAM,EAAE,QAAQ,EAAE;;;AAEjB,YAAI,OAAO,MAAM,IAAI,QAAQ,EAAE,MAAM,GAAG,CAAC,MAAM,CAAC,CAAC;AACjD,YAAI,CAAC,MAAM,EAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;AAC1D,YAAI,OAAO,QAAQ,KAAK,UAAU,EAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;;AAEnF,cAAM,CAAC,OAAO,CAAC,UAAC,KAAK,EAAK;;AAEtB,gBAAI,CAAC,MAAK,YAAY,CAAC,KAAK,CAAC,EAAE,MAAK,UAAU,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;;AAE3D,kBAAK,UAAU,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;SAEzC,CAAC,CAAC;;AAEH,eAAO,IAAI,CAAC;KAEf;;AA1BgB,cAAU,WA4B3B,IAAI,iBAAC,KAAK,EAAW;;;0CAAN,IAAI;AAAJ,gBAAI;;;AAEf,YAAI,MAAM,GAAG,IAAI,CAAC;;AAElB,YAAI,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,OAAO,IAAI,CAAC;;AAE3C,YAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,UAAC,QAAQ,EAAK;;AAEtC,kBAAM,GAAG,QAAQ,CAAC,KAAK,SAAO,IAAI,CAAC,CAAC;AACpC,mBAAQ,MAAM,KAAK,KAAK,CAAE;SAE7B,CAAC,CAAC;;AAEH,eAAO,MAAM,CAAC;KAEjB;;AA3CgB,cAAU,WA6C3B,GAAG,gBAAC,KAAK,EAAE,QAAQ,EAAE;;;AAEjB,YAAI,CAAC,KAAK,EAAE;;AAER,gBAAI,CAAC,UAAU,GAAG,EAAE,CAAC;SAExB,MAAM;;AAEH,gBAAI,CAAC,QAAQ,EAAE;;AAEX,uBAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;aAEjC,MAAM;;AAEH,oBAAI,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,OAAO,IAAI,CAAC;;AAE3C,oBAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,UAAC,EAAE,EAAE,CAAC,EAAK;;AAEtC,wBAAI,EAAE,KAAK,QAAQ,EAAE,OAAO,OAAK,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;iBAEzD,CAAC,CAAC;aAEN;SAEJ;;AAED,eAAO,IAAI,CAAC;KAEf;;WAzEgB,UAAU;;;qBAAV,UAAU;;;;;;;;;;;;;;;yCCAT,CAAmB;;iCACT,CAAS;;IAEpB,KAAK;iBAAL,KAAK;;eAEC,GAAG;;;;eACD,IAAI;;;;AAElB,aALM,KAAK,CAKV,KAAK,EAAE,OAAO,EAAE;8BALX,KAAK;;AAOlB,YAAI,CAAC,MAAM,GAAG,KAAK,CAAC;AACpB,YAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;AACxB,YAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;KAExB;;AAXgB,SAAK,WAatB,QAAQ,uBAAG;;AAEP,YAAI,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;;AAE9C,eAAO,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,eAAe,CAAC;KACxE;;AAlBgB,SAAK,WAoBtB,KAAK,oBAAG;AACJ,YAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;AAC/C,eAAO,IAAI,CAAC;KACf;;AAvBgB,SAAK,WAyBtB,MAAM,qBAAG;AACL,YAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACtC,eAAO,IAAI,CAAC;KACf;;AA5BgB,SAAK,WA8BtB,IAAI,mBAAG;;;AAEH,YAAI,IAAI,CAAC,QAAQ,EAAE,OAAO,IAAI,CAAC,QAAQ,CAAC;;AAExC,YAAI,CAAC,QAAQ,GAAG,2BAAY,UAAC,OAAO,EAAE,MAAM,EAAK;;AAE7C,wBAAK,UAAC,IAAI,EAAK;;AAEX,oBAAI,MAAK,QAAQ,EAAE,EAAE,OAAO,IAAI,EAAE,CAAC;;AAEnC,sBAAK,QAAQ,GAAG,IAAI,CAAC;;AAErB,sBAAK,MAAM,EAAE,CAAC;;AAEd,uBAAO,CAAC,IAAI,CAAC,CAAC;aAEjB,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;SAE3B,CAAC,CAAC;;AAEH,eAAO,IAAI,CAAC,QAAQ,CAAC;KAExB;;WApDgB,KAAK;;;qBAAL,KAAK;;;;;;;;;;;;;;;;;;;yCCH+B,CAAmB;;qCAC/C,CAAe;;iCACf,EAAS;;0CACf,EAAoB;;;;uCACnB,EAAe;;;;IAElB,MAAM;cAAN,MAAM;;aAAN,MAAM;8BAAN,MAAM;;;;aAIvB,MAAM,GAAG;AACL,yBAAa,EAAE,eAAe;AAC9B,0BAAc,EAAE,gBAAgB;AAChC,wBAAY,EAAE,cAAc;SAC/B;;;;;;;;;;;;;;;AARgB,UAAM,WAcjB,WAAW,wBAAC,OAAO;YAEjB,WAAW;;;;AAAX,+BAAW,GAAG,6BAAgB,OAAO,CAAC;;;;AAKtC,wBAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;;;oDAEpB,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC;;;AAAzD,+BAAW,CAAC,SAAS;;0BAEjB,WAAW,CAAC,YAAY,EAAE,IAAI,WAAW,CAAC,OAAO,EAAE;;;;;;oDACzB,WAAW,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE;;;AAAvD,+BAAW,CAAC,KAAK;;;wBAGhB,WAAW,CAAC,EAAE,EAAE;;;;;0BAAQ,IAAI,KAAK,CAAC,kCAAkC,CAAC;;;;AAE1E,wBAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;;wDAE5C,WAAW;;;;;;AAIlB,wBAAI,CAAC,eAAE,WAAW,EAAE,iBAAI,IAAI,CAAC,SAAS,iBAAI,WAAW,CAAC,CAAC;;AAEvD,wBAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,iBAAI,CAAC;;;;;;;;;KAM9C;;;;;;;;AA7CgB,UAAM,WAoDjB,aAAa,0BAAC,OAAO;;;;;oDACV,qBAAM,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC;;;;;;;;;;KACzC;;;;;;;;;AAtDgB,UAAM,WA8DvB,SAAS,sBAAC,CAAC,EAAE,WAAW,EAAE;;;AAGtB,YAAI,CAAC,CAAC,CAAC,cAAc,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,iBAAiB,CAAC,EAAE;;AAE1E,aAAC,CAAC,WAAW,GAAG,WAAW,CAAC;AAC5B,aAAC,CAAC,eAAe,GAAG,CAAC,CAAC,OAAO,CAAC;AAC9B,aAAC,CAAC,OAAO,GAAI,WAAW,IAAI,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,IAAK,CAAC,CAAC,eAAe,CAAC;SAE7E;;AAED,eAAO,CAAC,CAAC;KAEZ;;;;;;;;;;;;;AA3EgB,UAAM,WAuFvB,aAAa,0BAAC,IAAI,EAAE;;AAEhB,YAAI,GAAG,IAAI,IAAI,EAAE,CAAC;AAClB,YAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;;;AAGlC,YAAI,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;AACrD,YAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;AACtC,YAAI,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;;;AAG9H,YAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,SAAS,CAAC;AACjD,YAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,MAAM,CAAC;;;AAGhC,YAAI,IAAI,CAAC,KAAK,EAAE;AACZ,gBAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,0BAAe,IAAI,CAAC,KAAK,CAAC,CAAC;SAC/F;;AAED,YAAI,CAAE,sBAAe,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAE,EAAE;AAC3C,gBAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,yBAAY,gBAAgB,CAAC;SACzD;;;;AAID,YAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;;AAE7C,gBAAI,qBAAqB,GAAG,sBAAe,yBAAY,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;;AAEnF,gBAAI,CAAC,qBAAqB,EAAE;AACxB,qCAAqB,GAAG,yBAAY,YAAY,CAAC;AACjD,oBAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,GAAG,yBAAY,gBAAgB,CAAC;aACtE;;AAED,gBAAI,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;;;AAGtD,gBAAI,WAAW,CAAC,OAAO,CAAC,yBAAY,gBAAgB,CAAC,GAAG,CAAC,CAAC,EAAE;AACxD,oBAAI,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aACzC,MAAM,IAAI,WAAW,CAAC,OAAO,CAAC,yBAAY,sBAAsB,CAAC,GAAG,CAAC,CAAC,EAAE;AACrE,oBAAI,CAAC,IAAI,GAAG,0BAAe,IAAI,CAAC,IAAI,CAAC,CAAC;aACzC;SAEJ;;;AAGD,YAAI,GAAG,GAAG,2BAAY,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;;;AAGtC,WAAG,CAAC,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC;;AAE7B,eAAO,GAAG,CAAC;KAEd;;iBA5IgB,MAAM;;eAEE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC;;;;WAFpE,MAAM;;;qBAAN,MAAM;;;;;;;;;;;;;;;yCCN8B,CAAmB;;qCACrD,CAAe;;IAA1B,KAAK;;;;;;;;;AAQV,SAAS,cAAc,CAAC,UAAU,EAAE,IAAI,EAAE;;AAE7C,QAAI,GAAG,IAAI,IAAI,EAAE,CAAC;;AAElB,QAAI,QAAQ,GAAG,4BAAa,UAAU,EAAE,IAAI,CAAC,CAAC;;;AAG9C,QAAI,KAAK,CAAC,QAAQ,EAAE,EAAE;;AAElB,gBAAQ,CAAC,KAAK,GAAG,UAAU,CAAC;AAC5B,gBAAQ,CAAC,OAAO,GAAG,YAAW;AAC1B,mBAAO,IAAI,CAAC,KAAK,CAAC;SACrB,CAAC;KAEL;;AAED,WAAO,QAAQ,CAAC;CAEnB;;AAEM,SAAS,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE;AAC1C,QAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;AAC1B,WAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,UAAS,GAAG,EAAE,GAAG,EAAE;AAClD,YAAI,GAAG,EAAE,OAAO,GAAG,CAAC;AACpB,YAAI,IAAI,IAAI,GAAG,CAAC,WAAW,EAAE,EAAE,OAAO,GAAG,CAAC;AAC1C,eAAO,GAAG,CAAC;KACd,EAAE,IAAI,CAAC,CAAC;;;;;;;;;;;;;;;;;yCCnC4C,CAAmB;;iCACrD,EAAS;;IAApB,KAAK;;IAEI,WAAW;iBAAX,WAAW;;eAEN,cAAc;;;;eACV,kBAAkB;;;;eACb,iBAAiB;;;;eAChB,mCAAmC;;;;eACzC,GAAG;;;;eACL,MAAM;;;;eACF,IAAI;;;;;;;;;;AAOrB,aAfM,WAAW,CAehB,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE;8BAf5B,WAAW;;;AAkBxB,YAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;;;AAGxB,YAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;;AAE1B,YAAI,CAAC,KAAK,GAAG,YAAY,CAAC;AAC1B,YAAI,CAAC,KAAK,GAAG,IAAI,CAAC;AAClB,YAAI,CAAC,UAAU,GAAG,EAAE,CAAC;KAExB;;;;;;AA3BgB,eAAW,WAgC5B,QAAQ,uBAAG;AACP,eAAO,IAAI,CAAC,SAAS,CAAC;KACzB;;;;;;AAlCgB,eAAW,WAuC5B,OAAO,sBAAG;AACN,eAAO,IAAI,CAAC,QAAQ,CAAC;KACxB;;;;;;AAzCgB,eAAW,WA8C5B,EAAE,iBAAG;AACD,eAAO,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;KAC9C;;;;;;AAhDgB,eAAW,WAqD5B,IAAI,mBAAG;AACH,YAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;AACrF,eAAO,IAAI,CAAC,KAAK,CAAC;KACrB;;;;;;AAxDgB,eAAW,WA6D5B,IAAI,mBAAG;AACH,YAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;AAC7D,YAAI,CAAC,IAAI,CAAC,KAAK,EAAE;AACb,gBAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;SAC3D;AACD,eAAO,IAAI,CAAC,KAAK,CAAC;KACrB;;;;;;;AAnEgB,eAAW,WAyE5B,KAAK,kBAAC,WAAW,EAAE;;AAEf,YAAI,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,WAAW,EAAE,OAAO,IAAI,CAAC;;AAE3C,YAAI,OAAO,GAAG,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,GAAG,GAAG,EAAE,KAC1E,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,GAAG,EAAE,CAAC,CAAC;;AAE7F,YAAI;;AAEA,gBAAI,IAAI,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC;AACvD,gBAAI,IAAI,CAAC,IAAI,EAAE,CAAC,iBAAiB,EAAE,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,iBAAiB,CAAC;AAC3E,gBAAI,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,CAAC;SAElE,CAAC,OAAO,CAAC,EAAE,EAAE;;AAEd,eAAO,OAAO,CAAC;KAElB;;;;;;AA1FgB,eAAW,WA+F5B,SAAS,wBAAG;;AAER,YAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;;AAEvE,YAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;;;;AAIzB,gBAAI,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;;AAEvB,gBAAI,CAAC,IAAI,EAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;;AAE/C,gBAAI,QAAQ,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC;;AAEpE,gBAAI,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;;AAEvD,gBAAI,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,kBAAkB,GAAG,QAAQ,CAAC,CAAC;;AAE7E,gBAAI,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC;AAC1C,gBAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,WAAW,CAAC,kBAAkB,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC;;AAElF,gBAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;;;;AAI1D,gBAAI,UAAU,GAAG,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE,CAAC;;;;AAI5G,gBAAI,CAAC,UAAU,GAAG,KAAK,CAAC,GAAG,CAAC,UAAC,IAAI,EAAS,CAAC,EAAK;;AAE5C,oBAAI,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;;AAE3C,uBAAO,WAAW,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;aAE3C,CAAC,CAAC;SAEN;;AAED,eAAO,IAAI,CAAC,UAAU,CAAC;KAE1B;;AAxIgB,eAAW,WA0I5B,cAAc,2BAAC,WAAW,EAAE;AACxB,eAAO,IAAI,CAAC,eAAe,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;KAC3D;;AA5IgB,eAAW,WA8I5B,eAAe,8BAAG;AACd,eAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;KACrE;;AAhJgB,eAAW,WAkJ5B,YAAY,2BAAG;AACX,eAAO,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,qBAAqB,CAAC,CAAC;KACjE;;AApJgB,eAAW,WAsJ5B,aAAa,4BAAG;AACZ,eAAO,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC;KAClE;;AAxJgB,eAAW,WA0J5B,OAAO,sBAAG;AACN,eAAO,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC;KAC5D;;;;;;;;;;AA5JgB,eAAW,CAqKrB,MAAM,mBAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE;;AAEpC,YAAI,GAAG,IAAI,IAAI,EAAE,CAAC;AAClB,cAAM,GAAG,MAAM,IAAI,GAAG,CAAC;AACvB,kBAAU,GAAG,UAAU,IAAI,IAAI,CAAC;;AAEhC,YAAI,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;;AAE/B,YAAI,OAAO,GAAG,4BAAa;YACvB,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,cAAc,CAAC;YACvD,WAAW,GAAI,cAAc,CAAC,MAAM,GAAG,CAAC,GAAI,cAAc,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC;;AAE5E,YAAI,GAAG,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;;AAEvD,SAAC,WAAW,IAAI,EAAE,EACb,KAAK,CAAC,IAAI,CAAC,CACX,OAAO,CAAC,UAAC,MAAM,EAAY;;AAExB,gBAAI,KAAK,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,gBAAgB,CAAC;gBACzD,GAAG,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE;gBAC1B,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC,IAAI,EAAE,CAAC;;AAE5D,gBAAI,GAAG,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;SAEvC,CAAC,CAAC;;AAEP,eAAO,IAAI,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,cAAc,CAAC,IAAI,EAAE;AACpD,mBAAO,EAAE,OAAO;AAChB,kBAAM,EAAE,MAAM;AACd,sBAAU,EAAE,UAAU;SACzB,CAAC,EAAE,IAAI,CAAC,CAAC;KAEb;;WArMgB,WAAW;;;qBAAX,WAAW;;;;;;;;;;;;;;;;;oCCHX,EAAY;;;;sCACG,EAAgB;;;;IAE/B,MAAM;cAAN,MAAM;;AAEZ,aAFM,MAAM,GAET;8BAFG,MAAM;;AAGnB,8BAAO,CAAC;AACR,YAAI,CAAC,SAAS,GAAG,2BAAc,CAAC;KACnC;;AALgB,UAAM,WAOvB,QAAQ,uBAAG;AACP,eAAO,IAAI,CAAC,SAAS,CAAC;KACzB;;AATgB,UAAM,WAWjB,aAAa,0BAAC,OAAO;YAEnB,IAAI;;;;AAAJ,wBAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC;;oDAE1B,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;;;;;;;;;;KAEzC;;WAjBgB,MAAM;;;qBAAN,MAAM;;;;;;;;;;;;;;;gCCHV,EAAQ;;;;IAEJ,QAAQ;AAEd,aAFM,QAAQ,GAEX;8BAFG,QAAQ;;AAGrB,YAAI,CAAC,MAAM,GAAG,EAAE,CAAC;KACpB;;AAJgB,YAAQ,WAMzB,GAAG,gBAAC,IAAI,EAAE;AACN,YAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACvB,eAAO,IAAI,CAAC;KACf;;AATgB,YAAQ,WAWzB,KAAK,oBAAG;AACJ,YAAI,CAAC,MAAM,GAAG,EAAE,CAAC;AACjB,eAAO,IAAI,CAAC;KACf;;AAdgB,YAAQ,WAgBzB,IAAI,iBAAC,OAAO,EAAE;;;;AAIV,YAAI,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;;AAE/B,YAAI,CAAC,IAAI,EAAE,MAAM,IAAI,KAAK,CAAC,kCAAkC,GAAG,OAAO,CAAC,MAAM,GAAG,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;;AAEpG,YAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,IAAI,KAAK,CAAC,gBAAgB,GAAG,OAAO,CAAC,MAAM,GAAG,GAAG,GAAG,OAAO,CAAC,GAAG,GACrD,qBAAqB,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;;AAEpG,eAAO,IAAI,CAAC;KAEf;;AA7BgB,YAAQ,WA+BzB,OAAO,oBAAC,MAAa,EAAE,IAAW,EAAE,QAAY,EAAE,MAAM,EAAE,UAAU,EAAE;;AAElE,YAAI,CAAC,GAAG,CAAC,sBAAS,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC;;AAE/D,eAAO,IAAI,CAAC;KAEf;;AArCgB,YAAQ,WAuCzB,cAAc,6BAAG;;AAEb,YAAI,CAAC,OAAO,CAAC,MAAM,EAAE,sBAAsB,EAAE;AACzC,0BAAc,EAAE,cAAc;AAC9B,wBAAY,EAAE,QAAQ;AACtB,wBAAY,EAAE,IAAI;AAClB,2BAAe,EAAE,eAAe;AAChC,sCAA0B,EAAE,KAAK;AACjC,mBAAO,EAAE,iBAAiB;AAC1B,wBAAY,EAAE,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,OAAO;SAC/C,CAAC,CAAC;;AAEH,eAAO,IAAI,CAAC;KAEf;;AArDgB,YAAQ,WAuDzB,MAAM,qBAAG;;AAEL,YAAI,CAAC,OAAO,CAAC,MAAM,EAAE,uBAAuB,EAAE,EAAE,CAAC,CAAC;;AAElD,eAAO,IAAI,CAAC;KAEf;;AA7DgB,YAAQ,WA+DzB,YAAY,yBAAC,EAAE,EAAE;;AAEb,YAAI,CAAC,OAAO,CAAC,KAAK,EAAE,oCAAoC,GAAG,EAAE,GAAG,WAAW,EAAE;AACzE,iBAAK,EAAE,sEAAsE,GAAG,EAAE,GAAG,WAAW;AAChG,uBAAW,EAAE;AACT,qBAAK,EAAE,sEAAsE,GAAG,EAAE;AAClF,oBAAI,EAAE,EAAE;AACR,iCAAiB,EAAE,KAAK;aAC3B;AACD,yBAAa,EAAE,EAAE;AACjB,4BAAgB,EAAE,WAAW;AAC7B,6BAAiB,EAAE,SAAS;AAC5B,wBAAY,EAAE,WAAW;AACzB,uBAAW,EAAE,cAAc;AAC3B,yBAAa,EAAE,EAAE;SACpB,CAAC,CAAC;;AAEH,eAAO,IAAI,CAAC;KAEf;;AAlFgB,YAAQ,WAoFzB,gBAAgB,6BAAC,SAAS,EAAE;;AAExB,iBAAS,GAAG,SAAS,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;;AAEtC,YAAI,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;;AAEtB,YAAI,CAAC,OAAO,CAAC,MAAM,EAAE,4BAA4B,EAAE;AAC/C,0BAAc,EAAE,CACZ,8CAA8C,CACjD;AACD,4BAAgB,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAI,SAAS,GAAG,IAAK,CAAC,CAAC,WAAW,EAAE;AAC7E,uBAAW,EAAE,SAAS;AACtB,0BAAc,EAAE;AACZ,+BAAe,EAAE,QAAQ;AACzB,4BAAY,EAAE,KAAK;AACnB,yBAAS,EAAE,SAAS;AACpB,+BAAe,EAAE,WAAW;AAC5B,2BAAW,EAAE,WAAW;aAC3B;AACD,gBAAI,EAAE,aAAa;AACnB,0BAAc,EAAE,IAAI,CAAC,WAAW,EAAE;AAClC,oBAAQ,EAAE,QAAQ;AAClB,iBAAK,EAAE,wEAAwE;SAClF,CAAC,CAAC;;AAEH,eAAO,IAAI,CAAC;KAEf;;AA/GgB,YAAQ,WAiHzB,mBAAmB,gCAAC,EAAE,EAAE,QAAQ,EAAE;;AAE9B,UAAE,GAAG,EAAE,IAAI,GAAG,CAAC;;AAEf,YAAI,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;;AAEtB,YAAI,CAAC,OAAO,CAAC,MAAM,EAAE,4BAA4B,EAAE;AAC/C,0BAAc,EAAE,CAAC,oCAAoC,GAAG,EAAE,GAAG,WAAW,IAAI,QAAQ,GAAG,8BAA8B,GAAG,EAAE,CAAC,CAAC;AAC5H,4BAAgB,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAK,CAAC,CAAC,WAAW,EAAE;AAChF,0BAAc,EAAE;AACZ,+BAAe,EAAE,QAAQ;AACzB,4BAAY,EAAE,IAAI;AAClB,yBAAS,EAAE,SAAS;AACpB,+BAAe,EAAE,WAAW;AAC5B,2BAAW,EAAE,WAAW;AACxB,qCAAqB,EAAE,KAAK;AAC5B,+BAAe,EAAE,0BAA0B;aAC9C;AACD,0BAAc,EAAE,IAAI,CAAC,WAAW,EAAE;AAClC,gBAAI,EAAE,aAAa;AACnB,oBAAQ,EAAE,QAAQ;AAClB,iBAAK,EAAE,wEAAwE;SAClF,CAAC,CAAC;;AAEH,eAAO,IAAI,CAAC;KAEf;;AA3IgB,YAAQ,WA6IzB,YAAY,yBAAC,OAAO,EAAE;;AAElB,YAAI,CAAC,OAAO,EAAE;;AAEV,gBAAI,CAAC,OAAO,CAAC,MAAM,EAAE,sBAAsB,EAAE;AACzC,8BAAc,EAAE,2BAA2B;AAC3C,4BAAY,EAAE,QAAQ;AACtB,4BAAY,EAAE,IAAI;AAClB,+BAAe,EAAE,4BAA4B;AAC7C,0CAA0B,EAAE,KAAK;AACjC,uBAAO,EAAE,iBAAiB;aAC7B,CAAC,CAAC;SAEN,MAAM;;AAEH,gBAAI,CAAC,OAAO,CAAC,MAAM,EAAE,sBAAsB,EAAE;AACzC,yBAAS,EAAE,aAAa;AACxB,mCAAmB,EAAE,aAAa;AAClC,6BAAa,EAAE,aAAa;aAC/B,EAAE,GAAG,CAAC,CAAC;SAEX;;AAED,eAAO,IAAI,CAAC;KAEf;;WAtKgB,QAAQ;;;qBAAR,QAAQ;;;;;;;;;;;;;;;2CCFL,EAAqB;;;;qCACzB,CAAe;;qCACN,EAAe;;IAEvB,IAAI;AAEV,aAFM,IAAI,CAET,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE;8BAF1C,IAAI;;AAGjB,YAAI,CAAC,OAAO,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;AACpC,YAAI,CAAC,KAAK,GAAG,IAAI,CAAC;AAClB,YAAI,CAAC,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC;AACxB,YAAI,CAAC,MAAM,GAAG,KAAK,IAAI,EAAE,CAAC;AAC1B,YAAI,CAAC,OAAO,GAAG,MAAM,IAAI,GAAG,CAAC;AAC7B,YAAI,CAAC,WAAW,GAAG,UAAU,IAAI,IAAI,CAAC;KACzC;;AATgB,QAAI,WAWrB,IAAI,mBAAG;AACH,eAAO,IAAI,CAAC,KAAK,CAAC;KACrB;;AAbgB,QAAI,WAerB,MAAM,qBAAG;AACL,eAAO,IAAI,CAAC,OAAO,CAAC;KACvB;;AAjBgB,QAAI,WAmBrB,IAAI,iBAAC,OAAe,EAAE;;AAElB,eAAO,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IACpC,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC;KAEvD;;AAxBgB,QAAI,WA0Bf,WAAW,wBAAC,OAAO;;;;;oDAEf,iBAAM,IAAI,CAAC,MAAM,CAAC;;;wDAEjB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC;;;;;;;KAEzC;;AAhCgB,QAAI,WAkCrB,cAAc,2BAAC,IAAI,EAAE,IAAI,EAAE;;AAEvB,YAAI,GAAG,IAAI,IAAI,EAAE,CAAC;;AAElB,YAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC;AAC1C,YAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,WAAW,CAAC;;AAEtD,YAAI,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;YAC1B,GAAG,GAAG,0BAAe,GAAG,EAAE,IAAI,CAAC,CAAC;;AAEpC,WAAG,CAAC,OAAO,CAAC,GAAG,CAAC,6BAAY,YAAY,EAAE,6BAAY,gBAAgB,CAAC,CAAC;;AAExE,eAAO,GAAG,CAAC;KAEd;;WAhDgB,IAAI;;;qBAAJ,IAAI;;;;;;;;;;;;;;;;;;;0CCJF,EAAoB;;;;qCACzB,EAAe;;;;gCAChB,EAAQ;;;;yCACH,CAAmB;;qCACa,CAAe;;IAEhD,QAAQ;cAAR,QAAQ;;iBAAR,QAAQ;;eAEL,UAAU;;;;eACT,MAAM;;;;eACF,IAAI;;;;;eACH,EAAE,GAAG,EAAE,GAAG,EAAE;;;;;eACJ,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;;;;;eAC1B,sBAAsB;;;;eACrB,uBAAuB;;;;eACpB,0BAA0B;;;;eAC7B,GAAG;;;;eACV,UAAU;;;;eACO,IAAI;;;;AAc5B,aA1BM,QAAQ,CA0Bb,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE;8BA1BrC,QAAQ;;AA4BrB,8BAAO,CAAC;;aAdZ,MAAM,GAAG;AACL,uBAAW,EAAE,aAAa;AAC1B,wBAAY,EAAE,cAAc;AAC5B,sBAAU,EAAE,YAAY;AACxB,yBAAa,EAAE,eAAe;AAC9B,0BAAc,EAAE,gBAAgB;AAChC,wBAAY,EAAE,cAAc;AAC5B,wBAAY,EAAE,cAAc;AAC5B,yBAAa,EAAE,eAAe;AAC9B,uBAAW,EAAE,aAAa;SAC7B;AAMG,YAAI,CAAC,OAAO,GAAG,MAAM,CAAC;AACtB,YAAI,CAAC,OAAO,GAAG,MAAM,CAAC;AACtB,YAAI,CAAC,UAAU,GAAG,SAAS,CAAC;;;AAG5B,YAAI,CAAC,MAAM,GAAG,KAAK,CAAC;;;AAGpB,YAAI,CAAC,OAAO,GAAG,MAAM,CAAC;;AAEtB,YAAI,CAAC,MAAM,GAAG,2BAAU,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,QAAQ,GAAG,UAAU,CAAC,CAAC;;AAErE,YAAI,CAAC,KAAK,GAAG,sBAAS,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;KAEzD;;;;;;AA5CgB,YAAQ,WAiDzB,IAAI,mBAAG;AACH,eAAO,IAAI,CAAC,KAAK,CAAC;KACrB;;;;;;AAnDgB,YAAQ,WAwDzB,MAAM,qBAAG;AACL,eAAO,IAAI,CAAC,OAAO,CAAC;KACvB;;;;;;;;;;;AA1DgB,YAAQ,WAoEzB,SAAS,sBAAC,IAAI,EAAE,OAAO,EAAE;;AAErB,YAAI,GAAG,IAAI,IAAI,EAAE,CAAC;AAClB,eAAO,GAAG,OAAO,IAAI,EAAE,CAAC;;AAExB,YAAI,QAAQ,GAAG,EAAE;YACb,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;;AAE9E,YAAI,OAAO,CAAC,SAAS,IAAI,CAAC,OAAO,EAAE,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC;;AAE5D,YAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,IAAI,QAAQ,CAAC,UAAU,GAAG,GAAG,GAAG,QAAQ,CAAC,WAAW,CAAC;;AAEtH,gBAAQ,IAAI,IAAI,CAAC;;AAEjB,YAAI,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,QAAQ,EAAE,QAAQ,IAAK,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,GAAI,CAAC;;AAE5F,YAAI,OAAO,CAAC,SAAS,EAAE,QAAQ,IAAI,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC;AAClE,YAAI,OAAO,CAAC,QAAQ,EAAE,QAAQ,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,GAAG,GAAG,EAAE,IAAI,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;;AAE9G,eAAO,QAAQ,CAAC;KAEnB;;;;;;;;;;;AAzFgB,YAAQ,WAmGzB,OAAO,oBAAC,OAAO,EAAE;;AAEb,eAAO,GAAG,OAAO,IAAI,EAAE,CAAC;;AAExB,eAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,kBAAkB,GAAG,GAAG,GAAG,0BAAe;AACjE,2BAAe,EAAE,MAAM;AACvB,0BAAc,EAAE,OAAO,CAAC,WAAW,IAAI,EAAE;AACzC,uBAAW,EAAE,IAAI,CAAC,OAAO;AACzB,mBAAO,EAAE,OAAO,CAAC,KAAK,IAAI,EAAE;AAC5B,sBAAU,EAAE,OAAO,CAAC,OAAO,IAAI,EAAE;AACjC,qBAAS,EAAE,OAAO,CAAC,OAAO,IAAI,EAAE;AAChC,oBAAQ,EAAE,OAAO,CAAC,MAAM,IAAI,EAAE;SACjC,CAAC,EAAE,EAAC,SAAS,EAAE,IAAI,EAAC,CAAC;KAE7B;;;;;;;AAjHgB,YAAQ,WAuHzB,oBAAoB,iCAAC,GAAU,EAAE;;AAE7B,YAAI,EAAE,GAAG,4BAAiB,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;YAClD,KAAK,GAAG,EAAE,CAAC,iBAAiB,IAAI,EAAE,CAAC,KAAK,CAAC;;AAE7C,YAAI,KAAK,EAAE;AACP,gBAAI,CAAC,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;AACzB,aAAC,CAAC,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC;AACnB,kBAAM,CAAC,CAAC;SACX;;AAED,eAAO,EAAE,CAAC;KAEb;;;;;;AApIgB,YAAQ,WAyInB,QAAQ;;;;;;oDAGA,IAAI,CAAC,qBAAqB,EAAE;;;wDAC3B,IAAI;;;;;wDAEJ,KAAK;;;;;;;KAGnB;;;;;;;;;;;;AAlJgB,YAAQ,WA6JnB,KAAK,kBAAC,OAAO;YAUP,IAAI,EAuBJ,WAAW,EACX,IAAI;;;;;;AA9BR,2BAAO,GAAG,OAAO,IAAI,EAAE,CAAC;;AAExB,2BAAO,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,KAAK,CAAC;;AAE7C,wBAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;;AAE/B,wBAAI,GAAG;AACP,0CAAkB,EAAE,QAAQ,CAAC,eAAe;AAC5C,2CAAmB,EAAE,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAC,wBAAwB,GAAG,QAAQ,CAAC,gBAAgB;qBACxG;;AAED,wBAAI,CAAC,OAAO,CAAC,IAAI,EAAE;;AAEf,4BAAI,CAAC,UAAU,GAAG,UAAU,CAAC;AAC7B,4BAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;AACjC,4BAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;AACjC,4BAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC;qBAE5C,MAAM,IAAI,OAAO,CAAC,IAAI,EAAE;;AAErB,4BAAI,CAAC,UAAU,GAAG,oBAAoB,CAAC;AACvC,4BAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;AACzB,4BAAI,CAAC,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC;;qBAG3C;;AAED,wBAAI,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;;;oDAEtC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,cAAc,EAAE,IAAI,CAAC;;;AAArE,+BAAW;AACX,wBAAI,GAAG,WAAW,CAAC,IAAI,EAAE;;AAE7B,wBAAI,CAAC,KAAK,CACL,OAAO,CAAC,IAAI,CAAC,CACb,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;;AAEnC,wBAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;;wDAE1C,WAAW;;;;;;AAIlB,wBAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;;AAEpB,wBAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,iBAAI,CAAC;;;;;;;;;KAM5C;;;;;;AAnNgB,YAAQ,WAwNnB,OAAO;YA+BD,GAAG,EAMH,IAAI;;;;;;AAjCR,wBAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;;yBAEjC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;;;;;;oDAEhB,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;;;wBAEnB,IAAI,CAAC,mBAAmB,EAAE;;;;;0BACrB,IAAI,KAAK,CAAC,oCAAoC,CAAC;;;;AAGzD,wBAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;;wDAErC,IAAI;;;;AAIf,wBAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;;;;oDAGd,iBAAM,QAAQ,CAAC,eAAe,CAAC;;;wBAGhC,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE;;;;;0BAAQ,IAAI,KAAK,CAAC,0BAA0B,CAAC;;;wBACtE,IAAI,CAAC,KAAK,CAAC,iBAAiB,EAAE;;;;;0BAAQ,IAAI,KAAK,CAAC,2BAA2B,CAAC;;;wBAC5E,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;;;;;0BAAQ,IAAI,KAAK,CAAC,uCAAuC,CAAC;;;;oDAGrE,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,cAAc,EAAE;AACpD,oCAAY,EAAE,eAAe;AAC7B,uCAAe,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE;AAC1C,0CAAkB,EAAE,QAAQ,CAAC,eAAe;AAC5C,2CAAmB,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,QAAQ,CAAC,wBAAwB,GAAG,QAAQ,CAAC,gBAAgB;qBAC7G,CAAC;;;AALF,uBAAG;AAMH,wBAAI,GAAG,GAAG,CAAC,IAAI,EAAE;;wBAEhB,IAAI,CAAC,YAAY;;;;;0BACZ,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,0BAA0B,CAAC,EAAE,GAAG,CAAC;;;;AAG5E,wBAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACzB,wBAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;;AAErB,wBAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;;wDAEpC,GAAG;;;;;;AAIV,qCAAI,IAAI,CAAC,OAAO,CAAC,SAAS,gBAAG,CAAC;;AAE9B,wBAAI,QAAQ,CAAC,yBAAyB,EAAE;AACpC,4BAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;qBACvB;;AAED,wBAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,iBAAI,CAAC;;;;;;;;;KAM9C;;;;;;AAxRgB,YAAQ,WA6RnB,MAAM;YAQA,GAAG;;;;;;AAJP,wBAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;;AAEpC,wBAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;;;oDAEJ,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,eAAe,EAAE;AACzD,6BAAK,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;qBAClC,CAAC;;;AAFE,uBAAG;;AAIP,wBAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;AACrB,wBAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;;AAEpB,wBAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;;wDAEnC,GAAG;;;;;;AAIV,wBAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;;AAErB,wBAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,iBAAI,CAAC;;;;;;;;;KAM7C;;;;;;;;;AA1TgB,YAAQ,WAkUnB,cAAc,2BAAC,OAAO,EAAE,OAAO;;;;;AAEjC,2BAAO,GAAG,OAAO,IAAI,EAAE,CAAC;;yBAEpB,OAAO,CAAC,aAAa;;;;;wDAAS,OAAO;;;;oDAEnC,IAAI,CAAC,qBAAqB,EAAE;;;;AAElC,2BAAO,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;;;;;wDAKlD,OAAO;;;;;;;KAEjB;;;;;;;;;AAjVgB,YAAQ,WAyVnB,WAAW,wBAAC,OAAO,EAAE,OAAO;;;;;;oDAIV,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC;;;AAArD,2BAAO;;oDAEO,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC;;;;;;;;;0BAK3C,CAAC,eAAE,WAAW,IAAI,CAAC,eAAE,WAAW,CAAC,QAAQ,EAAE,IAAK,eAAE,WAAW,CAAC,QAAQ,EAAE,CAAC,MAAM,IAAI,GAAG,CAAC;;;;;;;;;AAE3F,wBAAI,CAAC,KAAK,CAAC,iBAAiB,EAAE,CAAC;;;oDAEjB,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC;;;;;;;;;;KAIvD;;;;;;;;;;;;;AA5WgB,YAAQ,WAwXnB,IAAI;YAAC,OAAO,yDAAG,EAAE;;;;;;AAGnB,2BAAO,CAAC,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE,EAAC,SAAS,EAAE,IAAI,EAAC,CAAC,CAAC;;;oDAEhD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;;;;;;;;;;KAE9E;;;;;;;;;;;AA/XgB,YAAQ,WAyYnB,GAAG,gBAAC,GAAG,EAAE,KAAK,EAAE,OAAO;;;;AACzB,2BAAO,GAAG,OAAO,IAAI,EAAE,CAAC;AACxB,2BAAO,CAAC,MAAM,GAAG,KAAK,CAAC;AACvB,2BAAO,CAAC,GAAG,GAAG,GAAG,CAAC;AAClB,2BAAO,CAAC,KAAK,GAAG,KAAK,CAAC;;oDACT,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;;;;;;;;;;KAClC;;;;;;;;;;;;AA/YgB,YAAQ,WA0ZnB,IAAI,iBAAC,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO;;;;AAChC,2BAAO,GAAG,OAAO,IAAI,EAAE,CAAC;AACxB,2BAAO,CAAC,MAAM,GAAG,MAAM,CAAC;AACxB,2BAAO,CAAC,GAAG,GAAG,GAAG,CAAC;AAClB,2BAAO,CAAC,KAAK,GAAG,KAAK,CAAC;AACtB,2BAAO,CAAC,IAAI,GAAG,IAAI,CAAC;;oDACP,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;;;;;;;;;;KAClC;;;;;;;;;;;;AAjagB,YAAQ,WA4anB,GAAG,gBAAC,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO;;;;AAC/B,2BAAO,GAAG,OAAO,IAAI,EAAE,CAAC;AACxB,2BAAO,CAAC,MAAM,GAAG,KAAK,CAAC;AACvB,2BAAO,CAAC,GAAG,GAAG,GAAG,CAAC;AAClB,2BAAO,CAAC,KAAK,GAAG,KAAK,CAAC;AACtB,2BAAO,CAAC,IAAI,GAAG,IAAI,CAAC;;oDACP,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;;;;;;;;;;KAClC;;;;;;;;;;;AAnbgB,YAAQ,WA6bnB,QAAQ,qBAAC,GAAG,EAAE,KAAK,EAAE,OAAO;;;;AAC9B,2BAAO,GAAG,OAAO,IAAI,EAAE,CAAC;AACxB,2BAAO,CAAC,MAAM,GAAG,QAAQ,CAAC;AAC1B,2BAAO,CAAC,GAAG,GAAG,GAAG,CAAC;AAClB,2BAAO,CAAC,KAAK,GAAG,KAAK,CAAC;;oDACT,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;;;;;;;;;;KAClC;;AAncgB,YAAQ,WAqcnB,aAAa,0BAAC,IAAI,EAAE,IAAI;;;;;oDAEb,IAAI,CAAC,IAAI,CAAC;AACnB,2BAAG,EAAE,IAAI;AACT,qCAAa,EAAE,IAAI;AACnB,4BAAI,EAAE,IAAI;AACV,8BAAM,EAAE,MAAM;AACd,+BAAO,EAAE;AACL,2CAAe,EAAE,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE;AAC1C,0CAAc,EAAE,mCAAmC;yBACtD;qBACJ,CAAC;;;;;;;;;;KAEL;;AAldgB,YAAQ,WAodnB,qBAAqB;;;;yBAEnB,IAAI,CAAC,mBAAmB,EAAE;;;;;wDAAS,IAAI;;;;oDAC9B,IAAI,CAAC,OAAO,EAAE;;;;;;;;;;KAE9B;;AAzdgB,YAAQ,WA2dzB,mBAAmB,kCAAG;;AAElB,eAAQ,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAE;KAErE;;AA/dgB,YAAQ,WAiezB,OAAO,sBAAG;AACN,YAAI,MAAM,GAAG,IAAI,CAAC,OAAO,GAAG,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC;AAClD,eAAQ,OAAO,IAAI,IAAI,UAAU,GAAI,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;KAC7F;;AApegB,YAAQ,WAsezB,WAAW,0BAAG;AACV,YAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;AACrC,eAAO,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,KAAK,GAAG,GAAG,GAAG,KAAK,GAAG,EAAE,CAAC,CAAC;KAC9D;;WAzegB,QAAQ;;;qBAAR,QAAQ;;;;;;;;;;;;;;;;;;;;;ICNR,IAAI;iBAAJ,IAAI;;eAEa,EAAE,GAAG,IAAI;;;;;eAClB,QAAQ;;;;AAEtB,aALM,IAAI,CAKT,KAAK,EAAE,OAAc,EAAE;8BALlB,IAAI;;;AAQjB,YAAI,CAAC,MAAM,GAAG,KAAK,CAAC;AACpB,YAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;KAE3B;;;;;;;;;;;;;;AAXgB,QAAI,WAarB,WAAW,0BAAG;AACV,eAAO,IAAI,CAAC,IAAI,EAAE,CAAC,YAAY,CAAC;KACnC;;AAfgB,QAAI,WAiBrB,YAAY,2BAAG;AACX,eAAO,IAAI,CAAC,IAAI,EAAE,CAAC,aAAa,CAAC;KACpC;;AAnBgB,QAAI,WAqBrB,SAAS,wBAAG;AACR,eAAO,IAAI,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC;KACjC;;;;;;AAvBgB,QAAI,WA4BrB,IAAI,mBAAG;;AAEH,eAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI;AACrC,sBAAU,EAAE,EAAE;AACd,wBAAY,EAAE,EAAE;AAChB,sBAAU,EAAE,CAAC;AACb,yBAAa,EAAE,EAAE;AACjB,oCAAwB,EAAE,CAAC;SAC9B,CAAC;KAET;;;;;;;AAtCgB,QAAI,WA4CrB,OAAO,oBAAC,OAAO,EAAE;;AAEb,eAAO,GAAG,OAAO,IAAI,EAAE,CAAC;;AAExB,YAAI,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;;AAEvB,cAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,UAAC,GAAG,EAAK;AAClC,gBAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;SAC5B,CAAC,CAAC;;AAEH,YAAI,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,GAAI,IAAI,CAAC,UAAU,GAAG,IAAK,CAAC;AACzD,YAAI,CAAC,yBAAyB,GAAG,IAAI,CAAC,GAAG,EAAE,GAAI,IAAI,CAAC,wBAAwB,GAAG,IAAK,CAAC;;AAErF,YAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;;AAEzC,eAAO,IAAI,CAAC;KAEf;;;;;;;AA7DgB,QAAI,WAmErB,gBAAgB,+BAAG;;AAEf,YAAI,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AAC3B,eAAQ,QAAQ,CAAC,UAAU,KAAK,IAAI,CAAC,eAAe,IAAK,QAAQ,CAAC,WAAW,GAAG,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,GAAG,EAAG,CAAE;KAEzH;;;;;;;AAxEgB,QAAI,WA8ErB,iBAAiB,gCAAG;;AAEhB,eAAQ,IAAI,CAAC,IAAI,EAAE,CAAC,yBAAyB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAE;KAE/D;;;;;;AAlFgB,QAAI,WAuFrB,iBAAiB,gCAAG;;AAEhB,eAAO,IAAI,CAAC,OAAO,CAAC;AAChB,wBAAY,EAAE,EAAE;AAChB,sBAAU,EAAE,CAAC;SAChB,CAAC,CAAC;KAEN;;;;;;;AA9FgB,QAAI,WAoGrB,mBAAmB,kCAAG;;AAElB,YAAI,CAAC,OAAO,CAAC;AACT,sBAAU,EAAE,IAAI,CAAC,eAAe;AAChC,wBAAY,EAAE,EAAE;AAChB,sBAAU,EAAE,CAAC;AACb,yBAAa,EAAE,EAAE;AACjB,oCAAwB,EAAE,CAAC;SAC9B,CAAC,CAAC;;AAEH,eAAO,IAAI,CAAC;KAEf;;;;;;;AAhHgB,QAAI,WAsHrB,WAAW,wBAAC,QAAQ,EAAE;;AAElB,eAAO,IAAI,CAAC,OAAO,CAAC,EAAC,QAAQ,EAAE,QAAQ,EAAC,CAAC,CAAC;KAE7C;;;;;;AA1HgB,QAAI,WA+HrB,QAAQ,uBAAG;;AAEP,eAAO,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC;KAEjC;;WAnIgB,IAAI;;;qBAAJ,IAAI;;;;;;;;;;;;;;;wCCAF,EAAiB;;;;yCACnB,CAAmB;;IAEnB,iBAAiB;AAEvB,aAFM,iBAAiB,GAEpB;8BAFG,iBAAiB;;AAG9B,YAAI,CAAC,UAAU,GAAG,sBAAO,UAAU,CAAC;KACvC;;AAJgB,qBAAiB,WAMlC,IAAI,iBAAC,OAAyB,EAAE;AAC5B,eAAO,8BAAe,OAAO,CAAC,CAAC;KAClC;;WARgB,iBAAiB;;;qBAAjB,iBAAiB;;;;;;;;;;;;;;;;;0CCHf,EAAoB;;;;yCACtB,CAAmB;;IAEnB,UAAU;cAAV,UAAU;;AAEhB,aAFM,UAAU,CAEf,OAAO,EAAE;8BAFJ,UAAU;;AAGvB,8BAAO,CAAC;AACR,YAAI,CAAC,OAAO,GAAG,OAAO,CAAC;AACvB,YAAI,CAAC,UAAU,GAAG,sBAAO,UAAU,CAAC;KACvC;;AANgB,cAAU,WAQ3B,KAAK,oBAAG,EAAE;;AARO,cAAU,WAU3B,SAAS,sBAAC,OAA8B,EAAE;AACtC,YAAI,CAAC,EAAE,CAAC,UAAU,GAAG,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;KAC1D;;AAZgB,cAAU,WAc3B,WAAW,wBAAC,OAAgC,EAAE;AAC1C,YAAI,CAAC,GAAG,CAAC,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;KAC1C;;AAhBgB,cAAU,WAkB3B,cAAc,2BAAC,GAAG,EAAE,OAAO,EAAE;AACzB,YAAI,CAAC,IAAI,CAAC,UAAU,GAAG,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;KACxD;;WApBgB,UAAU;;;qBAAV,UAAU;;;;;;;;;;;;;;;;;;;0CCHR,EAAoB;;;;sCACxB,EAAgB;;;;qCACI,CAAe;;IAEjC,YAAY;cAAZ,YAAY;;iBAAZ,YAAY;;eAEH,CAAC,GAAG,EAAE,GAAG,IAAI;;;;eAChB,EAAE,GAAG,IAAI;;;;AAYrB,aAfM,YAAY,CAejB,aAAa,EAAE,QAAQ,EAAE;8BAfpB,YAAY;;AAiBzB,8BAAO,CAAC;;aAZZ,MAAM,GAAG;AACL,wBAAY,EAAE,cAAc;AAC5B,yBAAa,EAAE,eAAe;AAC9B,uBAAW,EAAE,aAAa;AAC1B,wBAAY,EAAE,cAAc;AAC5B,sBAAU,EAAE,YAAY;AACxB,4BAAgB,EAAE,kBAAkB;AACpC,0BAAc,EAAE,gBAAgB;SACnC;AAMG,YAAI,CAAC,cAAc,GAAG,aAAa,CAAC;AACpC,YAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;AAC1B,YAAI,CAAC,OAAO,GAAG,IAAI,CAAC;AACpB,YAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AACrB,YAAI,CAAC,aAAa,GAAG,EAAE,CAAC;KAE3B;;;;;;;;;;;;;;;;;;;;AAzBgB,gBAAY,WA2B7B,UAAU,yBAAE;;AAER,eAAO,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,EAAE,IACrB,IAAI,CAAC,aAAa,CAAC,YAAY,IAC/B,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,aAAa,IAC7C,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;KAEtD;;;;;;AAlCgB,gBAAY,WAuC7B,KAAK,oBAAG;;AAEJ,eAAO,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;KAElE;;AA3CgB,gBAAY,WA6C7B,cAAc,6BAAG;AACb,eAAO,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,cAAc,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,YAAY,CAAC,gBAAgB,CAAC;KACrG;;AA/CgB,gBAAY,WAiD7B,eAAe,4BAAC,YAAY,EAAE;;AAE1B,oBAAY,GAAG,YAAY,IAAI,EAAE,CAAC;;AAElC,YAAI,CAAC,aAAa,EAAE,CAAC;;AAErB,YAAI,CAAC,aAAa,GAAG,YAAY,CAAC;;AAElC,YAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,kBAAkB,EAAE,CAAC;;AAE7C,YAAI,CAAC,WAAW,EAAE,CAAC;;AAEnB,eAAO,IAAI,CAAC;KAEf;;AA/DgB,gBAAY,WAiE7B,YAAY,2BAAG;AACX,eAAO,IAAI,CAAC,aAAa,CAAC;KAC7B;;;;;;;AAnEgB,gBAAY,WAyEvB,QAAQ;;;;yBAEN,IAAI,CAAC,KAAK,EAAE;;;;;;oDACC,IAAI,CAAC,KAAK,EAAE;;;;;;;oDAEZ,IAAI,CAAC,SAAS,EAAE;;;;;;;;;;KAGpC;;AAjFgB,gBAAY,WAmF7B,YAAY,2BAAG;AACX,eAAO,IAAI,CAAC,aAAa,CAAC,YAAY,IAAI,EAAE,CAAC;KAChD;;;;;;;AArFgB,gBAAY,WA2F7B,eAAe,4BAAC,MAAM,EAAE;AACpB,YAAI,CAAC,eAAe,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;AACzD,eAAO,IAAI,CAAC;KACf;;;;;;;AA9FgB,gBAAY,WAoG7B,eAAe,4BAAC,MAAM,EAAE;AACpB,YAAI,CAAC,aAAa,CAAC,YAAY,GAAG,MAAM,CAAC;AACzC,eAAO,IAAI,CAAC;KACf;;;;;;AAvGgB,gBAAY,WA4GvB,SAAS;YAQH,QAAQ,EAMR,IAAI;;;;;;AAVR,wBAAI,CAAC,aAAa,EAAE,CAAC;;wBAEhB,IAAI,CAAC,YAAY,EAAE,CAAC,MAAM;;;;;0BAAQ,IAAI,KAAK,CAAC,sBAAsB,CAAC;;;;oDAEnD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,4BAA4B,EAAE;AAC/D,oCAAY,EAAE,IAAI,CAAC,oBAAoB,EAAE;AACzC,oCAAY,EAAE;AACV,yCAAa,EAAE,QAAQ;yBAC1B;qBACJ,CAAC;;;AALF,4BAAQ;AAMR,wBAAI,GAAG,QAAQ,CAAC,IAAI,EAAE;;AAE1B,wBAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CACrB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;;wDAE3C,QAAQ;;;;;;AAKf,qCAAI,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,SAAS,gBAAG,CAAC;;AAEzC,wBAAI,CAAC,KAAK,EAAE,CACP,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,iBAAI,CAAC;;;;;;;;;KAMhD;;;;;;AA7IgB,gBAAY,WAkJvB,KAAK;YAUC,QAAQ,EAIR,IAAI;;;;;;AAVR,wBAAI,CAAC,aAAa,EAAE,CAAC;;wBAEhB,IAAI,CAAC,KAAK,EAAE;;;;;0BAAQ,IAAI,KAAK,CAAC,2BAA2B,CAAC;;;wBAE1D,IAAI,CAAC,YAAY,EAAE,CAAC,MAAM;;;;;0BAAQ,IAAI,KAAK,CAAC,sBAAsB,CAAC;;;;oDAEnD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,6BAA6B,GAAG,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE;AAC3F,oCAAY,EAAE,IAAI,CAAC,oBAAoB,EAAE;qBAC5C,CAAC;;;AAFE,4BAAQ;AAIR,wBAAI,GAAG,QAAQ,CAAC,IAAI,EAAE;;AAE1B,wBAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CACrB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;;wDAEvC,QAAQ;;;;;;AAIf,qCAAI,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,SAAS,gBAAG,CAAC;;AAEzC,wBAAI,CAAC,KAAK,EAAE,CACP,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,iBAAI,CAAC;;;;;;;;;KAM5C;;;;;;AAlLgB,gBAAY,WAuLvB,MAAM;YAMA,QAAQ;;;;;;wBAFP,IAAI,CAAC,UAAU,EAAE;;;;;0BAAQ,IAAI,KAAK,CAAC,iBAAiB,CAAC;;;;oDAErC,IAAI,CAAC,SAAS,UAAO,CAAC,6BAA6B,GAAG,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;;;AAA7F,4BAAQ;;AAEZ,wBAAI,CAAC,KAAK,EAAE,CACP,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;;wDAExC,QAAQ;;;;;;AAIf,qCAAI,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,SAAS,gBAAG,CAAC;;AAEzC,wBAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,iBAAI,CAAC;;;;;;;;;KAM7C;;;;;;AA9MgB,gBAAY,WAmN7B,WAAW,0BAAG;;AAEV,eAAO,IAAI,CAAC,KAAK,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC;KAExE;;;;;;;AAvNgB,gBAAY,WA6N7B,KAAK,oBAAG;AACJ,YAAI,CAAC,aAAa,EAAE,CAAC;AACrB,YAAI,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAC,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,OAAO,EAAC,CAAC,CAAC;AACpH,YAAI,CAAC,aAAa,GAAG,EAAE,CAAC;AACxB,eAAO,IAAI,CAAC;KACf;;AAlOgB,gBAAY,WAoO7B,oBAAoB,mCAAG;;;AAEnB,eAAO,IAAI,CAAC,YAAY,EAAE,CAAC,GAAG,CAAC,UAAC,KAAK,EAAK;AACtC,mBAAO,MAAK,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;SAC1C,CAAC,CAAC;KAEN;;AA1OgB,gBAAY,WA4O7B,WAAW,0BAAG;;;AAEV,YAAI,CAAC,aAAa,EAAE,CAAC;;AAErB,YAAI,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;;AAEhE,wBAAK,UAAC,IAAI,EAAI;;AAEV,gBAAI,OAAK,KAAK,EAAE,EAAE,OAAO,IAAI,EAAE,CAAC;;AAEhC,mBAAK,KAAK,EAAE,CAAC;SAEhB,EAAE,YAAY,CAAC,aAAa,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;;AAE9C,eAAO,IAAI,CAAC;KAEf;;AA5PgB,gBAAY,WA8P7B,aAAa,4BAAG;;AAEZ,+BAAY,IAAI,CAAC,QAAQ,CAAC,CAAC;;AAE3B,eAAO,IAAI,CAAC;KAEf;;AApQgB,gBAAY,WAsQ7B,QAAQ,qBAAC,OAAW,EAAE;;AAElB,YAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;;AAE3D,YAAI,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,aAAa,EAAE;;AAE/C,gBAAI,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC;;AAEjC,mBAAO,GAAG,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,aAAa,EAAE;AACxF,0BAAU,EAAE,KAAK;AACjB,2BAAW,EAAE,QAAQ;AACrB,yBAAS,EAAE,GAAG;AACd,oBAAI,EAAE,KAAK;aACd,CAAC,CAAC;SAEN;;AAED,eAAO,OAAO,CAAC;KAElB;;AAzRgB,gBAAY,WA2R7B,OAAO,oBAAC,OAAW,EAAE;;AAEjB,YAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;;AAE5D,eAAO,IAAI,CAAC;KAEf;;AAjSgB,gBAAY,WAmS7B,kBAAkB,iCAAgB;;AAE9B,YAAI,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;;AAEhE,YAAI,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC;;AAEjC,YAAI,CAAC,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC;AACvB,eAAG,EAAE,IAAI;AACT,yBAAa,EAAE,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,aAAa;SAC/D,CAAC,CAAC;;AAEH,YAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;;AAErB,YAAI,CAAC,OAAO,CAAC,SAAS,CAAC;AACnB,mBAAO,EAAE,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,OAAO;AAChD,mBAAO,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;AAChC,mBAAO,EAAE,mBAAM,EAAE;SACpB,CAAC,CAAC;;AAEH,eAAO,IAAI,CAAC;KAEf;;WAxTgB,YAAY;;;qBAAZ,YAAY;;;;;;;;;;;;;;;;;;;yCCJR,EAAgB;;;;qCACvB,EAAe;;;;IAEZ,kBAAkB;cAAlB,kBAAkB;;AAExB,aAFM,kBAAkB,CAEvB,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;;;8BAFrC,kBAAkB;;AAI/B,iCAAM,aAAa,EAAE,QAAQ,CAAC,CAAC;;AAE/B,YAAI,CAAC,MAAM,GAAG,KAAK,CAAC;AACpB,YAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;AAC1B,YAAI,CAAC,WAAW,GAAG,2BAAU,IAAI,CAAC,MAAM,EAAE,QAAQ,GAAG,QAAQ,CAAC,CAAC;AAC/D,YAAI,CAAC,iBAAiB,GAAG,2BAAU,IAAI,CAAC,MAAM,EAAE,QAAQ,GAAG,cAAc,CAAC,CAAC;;AAE3E,YAAI,CAAC,MAAM,gBACJ,IAAI,CAAC,MAAM;AACd,8BAAkB,EAAE,oBAAoB;AACxC,4BAAgB,EAAE,kBAAkB;AACpC,oCAAwB,EAAE,0BAA0B;AACpD,kCAAsB,EAAE,wBAAwB;UACnD,CAAC;;AAEF,YAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,YAAM;AAClC,kBAAK,WAAW,EAAE,CAAC;SACtB,CAAC,CAAC;;AAEH,YAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,YAAM;AACpE,kBAAK,MAAM,CAAC,OAAO,CAAC,MAAK,SAAS,EAAE,MAAK,YAAY,EAAE,CAAC,CAAC;SAC5D,CAAC,CAAC;;AAEH,YAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,YAAM;AACrC,kBAAK,MAAM,CAAC,UAAU,CAAC,MAAK,SAAS,CAAC,CAAC;SAC1C,CAAC,CAAC;KAEN;;;;;;;;;;;;;AA/BgB,sBAAkB,WA2C7B,MAAM,mBAAC,QAAQ,EAAE,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY;YAoBxD,GAAG;;;;;;yBAhBH,KAAK,CAAC,QAAQ,EAAE;;;;;;oDAEV,KAAK,CAAC,IAAI,EAAE;;;wBAEb,IAAI,CAAC,KAAK,EAAE;;;;;0BACP,IAAI,KAAK,CAAC,YAAY,CAAC;;;;AAGjC,wBAAI,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;;wDAEvB,IAAI;;;;AAIf,yBAAK,CAAC,KAAK,EAAE,CAAC;;;oDAEE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;;;AAA/B,uBAAG;;AAEP,yBAAK,CAAC,MAAM,EAAE,CAAC;;AAEf,wBAAI,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;;wDAEtB,GAAG;;;;;;AAIV,wBAAI,CAAC,IAAI,CAAC,UAAU,iBAAI,CAAC;;;;;;;;;KAMhC;;;;;;AA/EgB,sBAAkB,WAoFnC,KAAK,oBAAG;;AAEJ,eAAO,IAAI,CAAC,MAAM,CACd,wBAAM,KAAK,EACX,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAC9B,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAC5B,+CAA+C,CAClD,CAAC;KAEL;;;;;;AA9FgB,sBAAkB,WAmGnC,WAAW,0BAAG;;AAEV,eAAO,IAAI,CAAC,MAAM,CACd,wBAAM,WAAW,EACjB,IAAI,CAAC,iBAAiB,EACtB,IAAI,CAAC,MAAM,CAAC,wBAAwB,EACpC,IAAI,CAAC,MAAM,CAAC,sBAAsB,EAClC,qDAAqD,CACxD,CAAC;KAEL;;;;;;;AA7GgB,sBAAkB,WAmHnC,OAAO,oBAAC,MAAM,EAAE;;AAEZ,YAAI,sBAAsB,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;;AAEjE,YAAI,sBAAsB,EAAE;AACxB,gBAAI;AACA,oBAAI,CAAC,eAAe,CAAC,sBAAsB,CAAC,CAAC;aAChD,CAAC,OAAO,CAAC,EAAE,EAAE;SACjB,MAAM;AACH,gBAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;SAChC;;AAED,eAAO,IAAI,CAAC;KAEf;;WAjIgB,kBAAkB;;;qBAAlB,kBAAkB;;;;;;;ACHvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,gBAAgB;AAChB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd,KAAK;AACL,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA,WAAW;AACX;;AAEA;AACA;AACA,wCAAwC,WAAW;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW;AACX;AACA;;AAEA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAAS;AACT;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;;AAEA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,iCAAiC,kBAAkB;AACnD;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA,iBAAiB;;AAEjB;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,YAAY;AACZ;AACA;;AAEA;AACA,YAAY;AACZ;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,8CAA8C,QAAQ;AACtD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa;AACb;AACA;;AAEA,WAAW;AACX;AACA;AACA;;AAEA,WAAW;AACX;AACA;AACA;;AAEA,WAAW;AACX;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA,8CAA8C,QAAQ;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;;AAEL;AACA,8CAA8C,QAAQ;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA,8CAA8C,QAAQ;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA","file":"ringcentral-bundle.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"SDK\"] = factory();\n\telse\n\t\troot[\"RingCentral\"] = root[\"RingCentral\"] || {}, root[\"RingCentral\"][\"SDK\"] = factory();\n})(this, function() {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/universalModuleDefinition\n **/"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/build/\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap 9c749e57da12c0713880\n **/","import * as Utils from './core/Utils';\nimport Cache from './core/Cache';\nimport * as Externals from './core/Externals';\nimport Observable from './core/Observable';\nimport Queue from './core/Queue';\n\nimport Client from './http/Client';\nimport ApiResponse from './http/ApiResponse';\nimport * as HttpUtils from './http/Utils';\n\nimport {default as ClientMock} from './mocks/ClientMock';\nimport Mock from './mocks/Mock';\nimport Registry from './mocks/Registry';\n\nimport Platform from './platform/Platform';\nimport Auth from './platform/Auth';\n\nimport PubnubMockFactory from './pubnub/PubnubFactory';\n\nimport Subscription from './subscription/Subscription';\nimport CachedSubscription from './subscription/CachedSubscription';\n\nrequire(\"regenerator/runtime\");\n\nexport default class SDK {\n\n static version = '2.0.1';\n\n static server = {\n sandbox: 'https://platform.devtest.ringcentral.com',\n production: 'https://platform.ringcentral.com'\n };\n\n /**\n * @constructor\n * @param {object} [options]\n * @param {string} [options.server]\n * @param {string} [options.cachePrefix]\n * @param {string} [options.appSecret]\n * @param {string} [options.appKey]\n * @param {string} [options.appName]\n * @param {string} [options.appVersion]\n * @param {string} [options.pubnubFactory]\n * @param {string} [options.client]\n */\n constructor(options) {\n\n options = options || {};\n\n this._cache = new Cache(Externals.localStorage, options.cachePrefix);\n\n this._client = options.client || new Client();\n\n this._platform = new Platform(this._client, this._cache, options.server, options.appKey, options.appSecret);\n\n this._pubnubFactory = options.pubnubFactory || Externals.PUBNUB;\n\n }\n\n /**\n * @return {Platform}\n */\n platform() {\n return this._platform;\n }\n\n /**\n * @return {Subscription}\n */\n createSubscription() {\n return new Subscription(this._pubnubFactory, this._platform);\n }\n\n /**\n * @return {CachedSubscription}\n */\n createCachedSubscription(cacheKey) {\n return new CachedSubscription(this._pubnubFactory, this._platform, this._cache, cacheKey);\n }\n\n /**\n * @return {Cache}\n */\n cache() {\n return this._cache;\n }\n\n static core = {\n Cache: Cache,\n Observable: Observable,\n Utils: Utils,\n Externals: Externals,\n Queue: Queue\n };\n\n static http = {\n Client: Client,\n ApiResponse: ApiResponse,\n Utils: HttpUtils\n };\n\n static platform = {\n Auth: Auth,\n Platform: Platform\n };\n\n static subscription = {\n Subscription: Subscription\n };\n\n static mocks = {\n Client: ClientMock,\n Registry: Registry,\n Mock: Mock\n };\n\n static pubnub = {\n PubnubMockFactory: PubnubMockFactory\n };\n\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/SDK.js\n **/","import {Promise} from './Externals.js';\n\n/**\n * TODO Replace with something better\n * @see https://github.com/joyent/node/blob/master/lib/querystring.js\n * @param {object} parameters\n * @returns {string}\n */\nexport function queryStringify(parameters) {\n\n var array = [];\n\n parameters = parameters || {};\n\n Object.keys(parameters).forEach((k) => {\n\n var v = parameters[k];\n\n if (isArray(v)) {\n v.forEach((vv) => {\n array.push(encodeURIComponent(k) + '=' + encodeURIComponent(vv));\n });\n } else {\n array.push(encodeURIComponent(k) + '=' + encodeURIComponent(v));\n }\n\n });\n\n return array.join('&');\n\n}\n\n/**\n * TODO Replace with something better\n * @see https://github.com/joyent/node/blob/master/lib/querystring.js\n * @param {string} queryString\n * @returns {object}\n */\nexport function parseQueryString(queryString) {\n\n var argsParsed = {};\n\n queryString.split('&').forEach((arg) => {\n\n arg = decodeURIComponent(arg);\n\n if (arg.indexOf('=') == -1) {\n\n argsParsed[arg.trim()] = true;\n\n } else {\n\n var pair = arg.split('='),\n key = pair[0].trim(),\n value = pair[1].trim();\n\n if (key in argsParsed) {\n if (key in argsParsed && !isArray(argsParsed[key])) argsParsed[key] = [argsParsed[key]];\n argsParsed[key].push(value);\n } else {\n argsParsed[key] = value;\n }\n\n }\n\n });\n\n return argsParsed;\n\n}\n\n/**\n * @param obj\n * @return {boolean}\n */\nexport function isFunction(obj) {\n return typeof obj === \"function\";\n}\n\n/**\n * @param obj\n * @return {boolean}\n */\nexport function isArray(obj) {\n return Array.isArray ? Array.isArray(obj) : typeof obj === \"array\";\n}\n\n/**\n * @param fn\n * @param interval\n * @param timeout\n */\nexport function poll(fn, interval, timeout) { //NodeJS.Timer|number\n\n module.exports.stopPolling(timeout);\n\n interval = interval || 1000;\n\n var next = (delay) => {\n\n delay = delay || interval;\n\n interval = delay;\n\n return setTimeout(() => {\n\n fn(next, delay);\n\n }, delay);\n\n };\n\n return next();\n\n}\n\nexport function stopPolling(timeout) {\n if (timeout) clearTimeout(timeout);\n}\n\nexport function isNodeJS() {\n return (typeof process !== 'undefined');\n}\n\nexport function isBrowser() {\n return (typeof window !== 'undefined');\n}\n\nexport function delay(timeout) {\n return new Promise((resolve, reject) => {\n setTimeout(() => {\n resolve(null);\n }, timeout);\n });\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/core/Utils.js\n **/","import ES6Promise from 'es6-promise';\nimport nodeFetch from 'node-fetch';\nimport pubnub from 'pubnub';\n\nvar root = (new Function('return this'))();\n\nexport var Promise = (ES6Promise && ES6Promise.Promise) || root.Promise;\n\nexport var fetch = root.fetch || nodeFetch;\nexport var Request = root.Request || fetch.Request;\nexport var Response = root.Response || fetch.Response;\nexport var Headers = root.Headers || fetch.Headers;\n\nexport var PUBNUB = root.PUBNUB || pubnub;\n\nexport var localStorage = (typeof root.localStorage !== 'undefined') ? root.localStorage : {};\n\n\n/** WEBPACK FOOTER **\n ** ./src/core/Externals.js\n **/","/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 2.2.0\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$toString = {}.toString;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n function lib$es6$promise$asap$$asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n var lib$es6$promise$asap$$default = lib$es6$promise$asap$$asap;\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n var nextTick = process.nextTick;\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // setImmediate should be used instead instead\n var version = process.versions.node.match(/^(?:(\\d+)\\.)?(?:(\\d+)\\.)?(\\*|\\d+)$/);\n if (Array.isArray(version) && version[1] === '0' && version[2] === '10') {\n nextTick = setImmediate;\n }\n return function() {\n nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertex() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertex();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFullfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$default(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable) {\n if (maybeThenable.constructor === promise.constructor) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n var then = lib$es6$promise$$internal$$getThen(maybeThenable);\n\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFullfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$default(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$default(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$default(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n var enumerator = this;\n\n enumerator._instanceConstructor = Constructor;\n enumerator.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (enumerator._validateInput(input)) {\n enumerator._input = input;\n enumerator.length = input.length;\n enumerator._remaining = input.length;\n\n enumerator._init();\n\n if (enumerator.length === 0) {\n lib$es6$promise$$internal$$fulfill(enumerator.promise, enumerator._result);\n } else {\n enumerator.length = enumerator.length || 0;\n enumerator._enumerate();\n if (enumerator._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(enumerator.promise, enumerator._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(enumerator.promise, enumerator._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validateInput = function(input) {\n return lib$es6$promise$utils$$isArray(input);\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._init = function() {\n this._result = new Array(this.length);\n };\n\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var enumerator = this;\n\n var length = enumerator.length;\n var promise = enumerator.promise;\n var input = enumerator._input;\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n enumerator._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var enumerator = this;\n var c = enumerator._instanceConstructor;\n\n if (lib$es6$promise$utils$$isMaybeThenable(entry)) {\n if (entry.constructor === c && entry._state !== lib$es6$promise$$internal$$PENDING) {\n entry._onerror = null;\n enumerator._settledAt(entry._state, i, entry._result);\n } else {\n enumerator._willSettleAt(c.resolve(entry), i);\n }\n } else {\n enumerator._remaining--;\n enumerator._result[i] = entry;\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var enumerator = this;\n var promise = enumerator.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n enumerator._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n enumerator._result[i] = value;\n }\n }\n\n if (enumerator._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, enumerator._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise’s eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n if (!lib$es6$promise$utils$$isFunction(resolver)) {\n lib$es6$promise$promise$$needsResolver();\n }\n\n if (!(this instanceof lib$es6$promise$promise$$Promise)) {\n lib$es6$promise$promise$$needsNew();\n }\n\n lib$es6$promise$$internal$$initializePromise(this, resolver);\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$default;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: function(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$default(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n },\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./bower_components/es6-promise/promise.js\n ** module id = 4\n ** module chunks = 0\n **/","var nextTick = require('process/browser.js').nextTick;\nvar apply = Function.prototype.apply;\nvar slice = Array.prototype.slice;\nvar immediateIds = {};\nvar nextImmediateId = 0;\n\n// DOM APIs, for completeness\n\nexports.setTimeout = function() {\n return new Timeout(apply.call(setTimeout, window, arguments), clearTimeout);\n};\nexports.setInterval = function() {\n return new Timeout(apply.call(setInterval, window, arguments), clearInterval);\n};\nexports.clearTimeout =\nexports.clearInterval = function(timeout) { timeout.close(); };\n\nfunction Timeout(id, clearFn) {\n this._id = id;\n this._clearFn = clearFn;\n}\nTimeout.prototype.unref = Timeout.prototype.ref = function() {};\nTimeout.prototype.close = function() {\n this._clearFn.call(window, this._id);\n};\n\n// Does not start the time, just sets up the members needed.\nexports.enroll = function(item, msecs) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = msecs;\n};\n\nexports.unenroll = function(item) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = -1;\n};\n\nexports._unrefActive = exports.active = function(item) {\n clearTimeout(item._idleTimeoutId);\n\n var msecs = item._idleTimeout;\n if (msecs >= 0) {\n item._idleTimeoutId = setTimeout(function onTimeout() {\n if (item._onTimeout)\n item._onTimeout();\n }, msecs);\n }\n};\n\n// That's not how node.js implements it but the exposed api is the same.\nexports.setImmediate = typeof setImmediate === \"function\" ? setImmediate : function(fn) {\n var id = nextImmediateId++;\n var args = arguments.length < 2 ? false : slice.call(arguments, 1);\n\n immediateIds[id] = true;\n\n nextTick(function onNextTick() {\n if (immediateIds[id]) {\n // fn.call() is faster so we optimize for the common use-case\n // @see http://jsperf.com/call-apply-segu\n if (args) {\n fn.apply(null, args);\n } else {\n fn.call(null);\n }\n // Prevent ids from leaking\n exports.clearImmediate(id);\n }\n });\n\n return id;\n};\n\nexports.clearImmediate = typeof clearImmediate === \"function\" ? clearImmediate : function(id) {\n delete immediateIds[id];\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/timers-browserify/main.js\n ** module id = 5\n ** module chunks = 0\n **/","// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/process/browser.js\n ** module id = 6\n ** module chunks = 0\n **/","module.exports = function(module) {\r\n\tif(!module.webpackPolyfill) {\r\n\t\tmodule.deprecate = function() {};\r\n\t\tmodule.paths = [];\r\n\t\t// module.parent = undefined by default\r\n\t\tmodule.children = [];\r\n\t\tmodule.webpackPolyfill = 1;\r\n\t}\r\n\treturn module;\r\n}\r\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** (webpack)/buildin/module.js\n ** module id = 7\n ** module chunks = 0\n **/","module.exports = function() { throw new Error(\"define cannot be used indirect\"); };\r\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** (webpack)/buildin/amd-define.js\n ** module id = 8\n ** module chunks = 0\n **/","(function() {\n 'use strict';\n\n if (self.fetch) {\n return\n }\n\n function normalizeName(name) {\n if (typeof name !== 'string') {\n name = String(name)\n }\n if (/[^a-z0-9\\-#$%&'*+.\\^_`|~]/i.test(name)) {\n throw new TypeError('Invalid character in header field name')\n }\n return name.toLowerCase()\n }\n\n function normalizeValue(value) {\n if (typeof value !== 'string') {\n value = String(value)\n }\n return value\n }\n\n function Headers(headers) {\n this.map = {}\n\n if (headers instanceof Headers) {\n headers.forEach(function(value, name) {\n this.append(name, value)\n }, this)\n\n } else if (headers) {\n Object.getOwnPropertyNames(headers).forEach(function(name) {\n this.append(name, headers[name])\n }, this)\n }\n }\n\n Headers.prototype.append = function(name, value) {\n name = normalizeName(name)\n value = normalizeValue(value)\n var list = this.map[name]\n if (!list) {\n list = []\n this.map[name] = list\n }\n list.push(value)\n }\n\n Headers.prototype['delete'] = function(name) {\n delete this.map[normalizeName(name)]\n }\n\n Headers.prototype.get = function(name) {\n var values = this.map[normalizeName(name)]\n return values ? values[0] : null\n }\n\n Headers.prototype.getAll = function(name) {\n return this.map[normalizeName(name)] || []\n }\n\n Headers.prototype.has = function(name) {\n return this.map.hasOwnProperty(normalizeName(name))\n }\n\n Headers.prototype.set = function(name, value) {\n this.map[normalizeName(name)] = [normalizeValue(value)]\n }\n\n Headers.prototype.forEach = function(callback, thisArg) {\n Object.getOwnPropertyNames(this.map).forEach(function(name) {\n this.map[name].forEach(function(value) {\n callback.call(thisArg, value, name, this)\n }, this)\n }, this)\n }\n\n function consumed(body) {\n if (body.bodyUsed) {\n return Promise.reject(new TypeError('Already read'))\n }\n body.bodyUsed = true\n }\n\n function fileReaderReady(reader) {\n return new Promise(function(resolve, reject) {\n reader.onload = function() {\n resolve(reader.result)\n }\n reader.onerror = function() {\n reject(reader.error)\n }\n })\n }\n\n function readBlobAsArrayBuffer(blob) {\n var reader = new FileReader()\n reader.readAsArrayBuffer(blob)\n return fileReaderReady(reader)\n }\n\n function readBlobAsText(blob) {\n var reader = new FileReader()\n reader.readAsText(blob)\n return fileReaderReady(reader)\n }\n\n var support = {\n blob: 'FileReader' in self && 'Blob' in self && (function() {\n try {\n new Blob();\n return true\n } catch(e) {\n return false\n }\n })(),\n formData: 'FormData' in self\n }\n\n function Body() {\n this.bodyUsed = false\n\n\n this._initBody = function(body) {\n this._bodyInit = body\n if (typeof body === 'string') {\n this._bodyText = body\n } else if (support.blob && Blob.prototype.isPrototypeOf(body)) {\n this._bodyBlob = body\n } else if (support.formData && FormData.prototype.isPrototypeOf(body)) {\n this._bodyFormData = body\n } else if (!body) {\n this._bodyText = ''\n } else {\n throw new Error('unsupported BodyInit type')\n }\n }\n\n if (support.blob) {\n this.blob = function() {\n var rejected = consumed(this)\n if (rejected) {\n return rejected\n }\n\n if (this._bodyBlob) {\n return Promise.resolve(this._bodyBlob)\n } else if (this._bodyFormData) {\n throw new Error('could not read FormData body as blob')\n } else {\n return Promise.resolve(new Blob([this._bodyText]))\n }\n }\n\n this.arrayBuffer = function() {\n return this.blob().then(readBlobAsArrayBuffer)\n }\n\n this.text = function() {\n var rejected = consumed(this)\n if (rejected) {\n return rejected\n }\n\n if (this._bodyBlob) {\n return readBlobAsText(this._bodyBlob)\n } else if (this._bodyFormData) {\n throw new Error('could not read FormData body as text')\n } else {\n return Promise.resolve(this._bodyText)\n }\n }\n } else {\n this.text = function() {\n var rejected = consumed(this)\n return rejected ? rejected : Promise.resolve(this._bodyText)\n }\n }\n\n if (support.formData) {\n this.formData = function() {\n return this.text().then(decode)\n }\n }\n\n this.json = function() {\n return this.text().then(JSON.parse)\n }\n\n return this\n }\n\n // HTTP methods whose capitalization should be normalized\n var methods = ['DELETE', 'GET', 'HEAD', 'OPTIONS', 'POST', 'PUT']\n\n function normalizeMethod(method) {\n var upcased = method.toUpperCase()\n return (methods.indexOf(upcased) > -1) ? upcased : method\n }\n\n function Request(input, options) {\n options = options || {}\n var body = options.body\n if (Request.prototype.isPrototypeOf(input)) {\n if (input.bodyUsed) {\n throw new TypeError('Already read')\n }\n this.url = input.url\n this.credentials = input.credentials\n if (!options.headers) {\n this.headers = new Headers(input.headers)\n }\n this.method = input.method\n this.mode = input.mode\n if (!body) {\n body = input._bodyInit\n input.bodyUsed = true\n }\n } else {\n this.url = input\n }\n\n this.credentials = options.credentials || this.credentials || 'omit'\n if (options.headers || !this.headers) {\n this.headers = new Headers(options.headers)\n }\n this.method = normalizeMethod(options.method || this.method || 'GET')\n this.mode = options.mode || this.mode || null\n this.referrer = null\n\n if ((this.method === 'GET' || this.method === 'HEAD') && body) {\n throw new TypeError('Body not allowed for GET or HEAD requests')\n }\n this._initBody(body)\n }\n\n function decode(body) {\n var form = new FormData()\n body.trim().split('&').forEach(function(bytes) {\n if (bytes) {\n var split = bytes.split('=')\n var name = split.shift().replace(/\\+/g, ' ')\n var value = split.join('=').replace(/\\+/g, ' ')\n form.append(decodeURIComponent(name), decodeURIComponent(value))\n }\n })\n return form\n }\n\n function headers(xhr) {\n var head = new Headers()\n var pairs = xhr.getAllResponseHeaders().trim().split('\\n')\n pairs.forEach(function(header) {\n var split = header.trim().split(':')\n var key = split.shift().trim()\n var value = split.join(':').trim()\n head.append(key, value)\n })\n return head\n }\n\n Body.call(Request.prototype)\n\n function Response(bodyInit, options) {\n if (!options) {\n options = {}\n }\n\n this._initBody(bodyInit)\n this.type = 'default'\n this.url = null\n this.status = options.status\n this.ok = this.status >= 200 && this.status < 300\n this.statusText = options.statusText\n this.headers = options.headers instanceof Headers ? options.headers : new Headers(options.headers)\n this.url = options.url || ''\n }\n\n Body.call(Response.prototype)\n\n self.Headers = Headers;\n self.Request = Request;\n self.Response = Response;\n\n self.fetch = function(input, init) {\n var request\n if (Request.prototype.isPrototypeOf(input) && !init) {\n request = input\n } else {\n request = new Request(input, init)\n }\n\n return new Promise(function(resolve, reject) {\n var xhr = new XMLHttpRequest()\n\n function responseURL() {\n if ('responseURL' in xhr) {\n return xhr.responseURL\n }\n\n // Avoid security warnings on getResponseHeader when not allowed by CORS\n if (/^X-Request-URL:/m.test(xhr.getAllResponseHeaders())) {\n return xhr.getResponseHeader('X-Request-URL')\n }\n\n return;\n }\n\n xhr.onload = function() {\n var status = (xhr.status === 1223) ? 204 : xhr.status\n if (status < 100 || status > 599) {\n reject(new TypeError('Network request failed'))\n return\n }\n var options = {\n status: status,\n statusText: xhr.statusText,\n headers: headers(xhr),\n url: responseURL()\n }\n var body = 'response' in xhr ? xhr.response : xhr.responseText;\n resolve(new Response(body, options))\n }\n\n xhr.onerror = function() {\n reject(new TypeError('Network request failed'))\n }\n\n xhr.open(request.method, request.url, true)\n\n if (request.credentials === 'include') {\n xhr.withCredentials = true\n }\n\n if ('responseType' in xhr && support.blob) {\n xhr.responseType = 'blob'\n }\n\n request.headers.forEach(function(value, name) {\n xhr.setRequestHeader(name, value)\n })\n\n xhr.send(typeof request._bodyInit === 'undefined' ? null : request._bodyInit)\n })\n }\n self.fetch.polyfill = true\n})();\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./bower_components/fetch/fetch.js\n ** module id = 9\n ** module chunks = 0\n **/","// Version: 3.7.16\n/* =-====================================================================-= */\n/* =-====================================================================-= */\n/* =-========================= JSON =============================-= */\n/* =-====================================================================-= */\n/* =-====================================================================-= */\n\n(window['JSON'] && window['JSON']['stringify']) || (function () {\n window['JSON'] || (window['JSON'] = {});\n\n function toJSON(key) {\n try { return this.valueOf() }\n catch(e) { return null }\n }\n\n var cx = /[\\u0000\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g,\n escapable = /[\\\\\\\"\\x00-\\x1f\\x7f-\\x9f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g,\n gap,\n indent,\n meta = { // table of character substitutions\n '\\b': '\\\\b',\n '\\t': '\\\\t',\n '\\n': '\\\\n',\n '\\f': '\\\\f',\n '\\r': '\\\\r',\n '\"' : '\\\\\"',\n '\\\\': '\\\\\\\\'\n },\n rep;\n\n function quote(string) {\n escapable.lastIndex = 0;\n return escapable.test(string) ?\n '\"' + string.replace(escapable, function (a) {\n var c = meta[a];\n return typeof c === 'string' ? c :\n '\\\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);\n }) + '\"' :\n '\"' + string + '\"';\n }\n\n function str(key, holder) {\n var i, // The loop counter.\n k, // The member key.\n v, // The member value.\n length,\n partial,\n mind = gap,\n value = holder[key];\n\n if (value && typeof value === 'object') {\n value = toJSON.call( value, key );\n }\n\n if (typeof rep === 'function') {\n value = rep.call(holder, key, value);\n }\n\n switch (typeof value) {\n case 'string':\n return quote(value);\n\n case 'number':\n return isFinite(value) ? String(value) : 'null';\n\n case 'boolean':\n case 'null':\n return String(value);\n\n case 'object':\n\n if (!value) {\n return 'null';\n }\n\n gap += indent;\n partial = [];\n\n if (Object.prototype.toString.apply(value) === '[object Array]') {\n\n length = value.length;\n for (i = 0; i < length; i += 1) {\n partial[i] = str(i, value) || 'null';\n }\n\n v = partial.length === 0 ? '[]' :\n gap ? '[\\n' + gap +\n partial.join(',\\n' + gap) + '\\n' +\n mind + ']' :\n '[' + partial.join(',') + ']';\n gap = mind;\n return v;\n }\n if (rep && typeof rep === 'object') {\n length = rep.length;\n for (i = 0; i < length; i += 1) {\n k = rep[i];\n if (typeof k === 'string') {\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (gap ? ': ' : ':') + v);\n }\n }\n }\n } else {\n for (k in value) {\n if (Object.hasOwnProperty.call(value, k)) {\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (gap ? ': ' : ':') + v);\n }\n }\n }\n }\n\n v = partial.length === 0 ? '{}' :\n gap ? '{\\n' + gap + partial.join(',\\n' + gap) + '\\n' +\n mind + '}' : '{' + partial.join(',') + '}';\n gap = mind;\n return v;\n }\n }\n\n if (typeof JSON['stringify'] !== 'function') {\n JSON['stringify'] = function (value, replacer, space) {\n var i;\n gap = '';\n indent = '';\n\n if (typeof space === 'number') {\n for (i = 0; i < space; i += 1) {\n indent += ' ';\n }\n } else if (typeof space === 'string') {\n indent = space;\n }\n rep = replacer;\n if (replacer && typeof replacer !== 'function' &&\n (typeof replacer !== 'object' ||\n typeof replacer.length !== 'number')) {\n throw new Error('JSON.stringify');\n }\n return str('', {'': value});\n };\n }\n\n if (typeof JSON['parse'] !== 'function') {\n // JSON is parsed on the server for security.\n JSON['parse'] = function (text) {return eval('('+text+')')};\n }\n}());\n/* =-====================================================================-= */\n/* =-====================================================================-= */\n/* =-========================= UTIL =============================-= */\n/* =-====================================================================-= */\n/* =-====================================================================-= */\n\nwindow['PUBNUB'] || (function() {\nvar NOW = 1\n, READY = false\n, READY_BUFFER = []\n, PRESENCE_SUFFIX = '-pnpres'\n, DEF_WINDOWING = 10 // MILLISECONDS.\n, DEF_TIMEOUT = 10000 // MILLISECONDS.\n, DEF_SUB_TIMEOUT = 310 // SECONDS.\n, DEF_KEEPALIVE = 60 // SECONDS (FOR TIMESYNC).\n, SECOND = 1000 // A THOUSAND MILLISECONDS.\n, URLBIT = '/'\n, PARAMSBIT = '&'\n, PRESENCE_HB_THRESHOLD = 5\n, PRESENCE_HB_DEFAULT = 30\n, SDK_VER = '3.7.16'\n, REPL = /{([\\w\\-]+)}/g;\n\n/**\n * UTILITIES\n */\nfunction unique() { return'x'+ ++NOW+''+(+new Date) }\nfunction rnow() { return+new Date }\n\n/**\n * NEXTORIGIN\n * ==========\n * var next_origin = nextorigin();\n */\nvar nextorigin = (function() {\n var max = 20\n , ori = Math.floor(Math.random() * max);\n return function( origin, failover ) {\n return origin.indexOf('pubsub.') > 0\n && origin.replace(\n 'pubsub', 'ps' + (\n failover ? generate_uuid().split('-')[0] :\n (++ori < max? ori : ori=1)\n ) ) || origin;\n }\n})();\n\n\n/**\n * Build Url\n * =======\n *\n */\nfunction build_url( url_components, url_params ) {\n var url = url_components.join(URLBIT)\n , params = [];\n\n if (!url_params) return url;\n\n each( url_params, function( key, value ) {\n var value_str = (typeof value == 'object')?JSON['stringify'](value):value;\n (typeof value != 'undefined' &&\n value != null && encode(value_str).length > 0\n ) && params.push(key + \"=\" + encode(value_str));\n } );\n\n url += \"?\" + params.join(PARAMSBIT);\n return url;\n}\n\n/**\n * UPDATER\n * =======\n * var timestamp = unique();\n */\nfunction updater( fun, rate ) {\n var timeout\n , last = 0\n , runnit = function() {\n if (last + rate > rnow()) {\n clearTimeout(timeout);\n timeout = setTimeout( runnit, rate );\n }\n else {\n last = rnow();\n fun();\n }\n };\n\n return runnit;\n}\n\n/**\n * GREP\n * ====\n * var list = grep( [1,2,3], function(item) { return item % 2 } )\n */\nfunction grep( list, fun ) {\n var fin = [];\n each( list || [], function(l) { fun(l) && fin.push(l) } );\n return fin\n}\n\n/**\n * SUPPLANT\n * ========\n * var text = supplant( 'Hello {name}!', { name : 'John' } )\n */\nfunction supplant( str, values ) {\n return str.replace( REPL, function( _, match ) {\n return values[match] || _\n } );\n}\n\n/**\n * timeout\n * =======\n * timeout( function(){}, 100 );\n */\nfunction timeout( fun, wait ) {\n return setTimeout( fun, wait );\n}\n\n/**\n * uuid\n * ====\n * var my_uuid = generate_uuid();\n */\nfunction generate_uuid(callback) {\n var u = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g,\n function(c) {\n var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8);\n return v.toString(16);\n });\n if (callback) callback(u);\n return u;\n}\n\nfunction isArray(arg) {\n return !!arg && typeof arg !== 'string' && (Array.isArray && Array.isArray(arg) || typeof(arg.length) === \"number\")\n //return !!arg && (Array.isArray && Array.isArray(arg) || typeof(arg.length) === \"number\")\n}\n\n/**\n * EACH\n * ====\n * each( [1,2,3], function(item) { } )\n */\nfunction each( o, f) {\n if ( !o || !f ) return;\n\n if ( isArray(o) )\n for ( var i = 0, l = o.length; i < l; )\n f.call( o[i], o[i], i++ );\n else\n for ( var i in o )\n o.hasOwnProperty &&\n o.hasOwnProperty(i) &&\n f.call( o[i], i, o[i] );\n}\n\n/**\n * MAP\n * ===\n * var list = map( [1,2,3], function(item) { return item + 1 } )\n */\nfunction map( list, fun ) {\n var fin = [];\n each( list || [], function( k, v ) { fin.push(fun( k, v )) } );\n return fin;\n}\n\n\nfunction pam_encode(str) {\n return encodeURIComponent(str).replace(/[!'()*~]/g, function(c) {\n return '%' + c.charCodeAt(0).toString(16).toUpperCase();\n });\n}\n\n/**\n * ENCODE\n * ======\n * var encoded_data = encode('path');\n */\nfunction encode(path) { return encodeURIComponent(path) }\n\n/**\n * Generate Subscription Channel List\n * ==================================\n * generate_channel_list(channels_object);\n */\nfunction generate_channel_list(channels, nopresence) {\n var list = [];\n each( channels, function( channel, status ) {\n if (nopresence) {\n if(channel.search('-pnpres') < 0) {\n if (status.subscribed) list.push(channel);\n }\n } else {\n if (status.subscribed) list.push(channel);\n }\n });\n return list.sort();\n}\n\n/**\n * Generate Subscription Channel Groups List\n * ==================================\n * generate_channel_group_list(channels_groups object);\n */\nfunction generate_channel_group_list(channel_groups, nopresence) {\n var list = [];\n each(channel_groups, function( channel_group, status ) {\n if (nopresence) {\n if(channel_group.search('-pnpres') < 0) {\n if (status.subscribed) list.push(channel_group);\n }\n } else {\n if (status.subscribed) list.push(channel_group);\n }\n });\n return list.sort();\n}\n\n// PUBNUB READY TO CONNECT\nfunction ready() { timeout( function() {\n if (READY) return;\n READY = 1;\n each( READY_BUFFER, function(connect) { connect() } );\n}, SECOND ); }\n\nfunction PNmessage(args) {\n msg = args || {'apns' : {}},\n msg['getPubnubMessage'] = function() {\n var m = {};\n\n if (Object.keys(msg['apns']).length) {\n m['pn_apns'] = {\n 'aps' : {\n 'alert' : msg['apns']['alert'] ,\n 'badge' : msg['apns']['badge']\n }\n }\n for (var k in msg['apns']) {\n m['pn_apns'][k] = msg['apns'][k];\n }\n var exclude1 = ['badge','alert'];\n for (var k in exclude1) {\n delete m['pn_apns'][exclude1[k]];\n }\n }\n\n\n\n if (msg['gcm']) {\n m['pn_gcm'] = {\n 'data' : msg['gcm']\n }\n }\n\n for (var k in msg) {\n m[k] = msg[k];\n }\n var exclude = ['apns','gcm','publish', 'channel','callback','error'];\n for (var k in exclude) {\n delete m[exclude[k]];\n }\n\n return m;\n };\n msg['publish'] = function() {\n\n var m = msg.getPubnubMessage();\n\n if (msg['pubnub'] && msg['channel']) {\n msg['pubnub'].publish({\n 'message' : m,\n 'channel' : msg['channel'],\n 'callback' : msg['callback'],\n 'error' : msg['error']\n })\n }\n };\n return msg;\n}\n\nfunction PN_API(setup) {\n var SUB_WINDOWING = +setup['windowing'] || DEF_WINDOWING\n , SUB_TIMEOUT = (+setup['timeout'] || DEF_SUB_TIMEOUT) * SECOND\n , KEEPALIVE = (+setup['keepalive'] || DEF_KEEPALIVE) * SECOND\n , TIME_CHECK = setup['timecheck'] || 0\n , NOLEAVE = setup['noleave'] || 0\n , PUBLISH_KEY = setup['publish_key']\n , SUBSCRIBE_KEY = setup['subscribe_key']\n , AUTH_KEY = setup['auth_key'] || ''\n , SECRET_KEY = setup['secret_key'] || ''\n , hmac_SHA256 = setup['hmac_SHA256']\n , SSL = setup['ssl'] ? 's' : ''\n , ORIGIN = 'http'+SSL+'://'+(setup['origin']||'pubsub.pubnub.com')\n , STD_ORIGIN = nextorigin(ORIGIN)\n , SUB_ORIGIN = nextorigin(ORIGIN)\n , CONNECT = function(){}\n , PUB_QUEUE = []\n , CLOAK = true\n , TIME_DRIFT = 0\n , SUB_CALLBACK = 0\n , SUB_CHANNEL = 0\n , SUB_RECEIVER = 0\n , SUB_RESTORE = setup['restore'] || 0\n , SUB_BUFF_WAIT = 0\n , TIMETOKEN = 0\n , RESUMED = false\n , CHANNELS = {}\n , CHANNEL_GROUPS = {}\n , SUB_ERROR = function(){}\n , STATE = {}\n , PRESENCE_HB_TIMEOUT = null\n , PRESENCE_HB = validate_presence_heartbeat(\n setup['heartbeat'] || setup['pnexpires'] || 0, setup['error']\n )\n , PRESENCE_HB_INTERVAL = setup['heartbeat_interval'] || (PRESENCE_HB / 2) -1\n , PRESENCE_HB_RUNNING = false\n , NO_WAIT_FOR_PENDING = setup['no_wait_for_pending']\n , COMPATIBLE_35 = setup['compatible_3.5'] || false\n , xdr = setup['xdr']\n , params = setup['params'] || {}\n , error = setup['error'] || function() {}\n , _is_online = setup['_is_online'] || function() { return 1 }\n , jsonp_cb = setup['jsonp_cb'] || function() { return 0 }\n , db = setup['db'] || {'get': function(){}, 'set': function(){}}\n , CIPHER_KEY = setup['cipher_key']\n , UUID = setup['uuid'] || ( !setup['unique_uuid'] && db && db['get'](SUBSCRIBE_KEY+'uuid') || '')\n , USE_INSTANCEID = setup['instance_id'] || false\n , INSTANCEID = ''\n , shutdown = setup['shutdown']\n , use_send_beacon = (typeof setup['use_send_beacon'] != 'undefined')?setup['use_send_beacon']:true\n , sendBeacon = (use_send_beacon)?setup['sendBeacon']:null\n , _poll_timer\n , _poll_timer2;\n\n if (PRESENCE_HB === 2) PRESENCE_HB_INTERVAL = 1;\n\n var crypto_obj = setup['crypto_obj'] ||\n {\n 'encrypt' : function(a,key){ return a},\n 'decrypt' : function(b,key){return b}\n };\n\n function _get_url_params(data) {\n if (!data) data = {};\n each( params , function( key, value ) {\n if (!(key in data)) data[key] = value;\n });\n return data;\n }\n\n function _object_to_key_list(o) {\n var l = []\n each( o , function( key, value ) {\n l.push(key);\n });\n return l;\n }\n function _object_to_key_list_sorted(o) {\n return _object_to_key_list(o).sort();\n }\n\n function _get_pam_sign_input_from_params(params) {\n var si = \"\";\n var l = _object_to_key_list_sorted(params);\n\n for (var i in l) {\n var k = l[i]\n si += k + \"=\" + pam_encode(params[k]) ;\n if (i != l.length - 1) si += \"&\"\n }\n return si;\n }\n\n function validate_presence_heartbeat(heartbeat, cur_heartbeat, error) {\n var err = false;\n\n if (typeof heartbeat === 'undefined') {\n return cur_heartbeat;\n }\n\n if (typeof heartbeat === 'number') {\n if (heartbeat > PRESENCE_HB_THRESHOLD || heartbeat == 0)\n err = false;\n else\n err = true;\n } else if(typeof heartbeat === 'boolean'){\n if (!heartbeat) {\n return 0;\n } else {\n return PRESENCE_HB_DEFAULT;\n }\n } else {\n err = true;\n }\n\n if (err) {\n error && error(\"Presence Heartbeat value invalid. Valid range ( x > \" + PRESENCE_HB_THRESHOLD + \" or x = 0). Current Value : \" + (cur_heartbeat || PRESENCE_HB_THRESHOLD));\n return cur_heartbeat || PRESENCE_HB_THRESHOLD;\n } else return heartbeat;\n }\n\n function encrypt(input, key) {\n return crypto_obj['encrypt'](input, key || CIPHER_KEY) || input;\n }\n function decrypt(input, key) {\n return crypto_obj['decrypt'](input, key || CIPHER_KEY) ||\n crypto_obj['decrypt'](input, CIPHER_KEY) ||\n input;\n }\n\n function error_common(message, callback) {\n callback && callback({ 'error' : message || \"error occurred\"});\n error && error(message);\n }\n function _presence_heartbeat() {\n\n clearTimeout(PRESENCE_HB_TIMEOUT);\n\n if (!PRESENCE_HB_INTERVAL || PRESENCE_HB_INTERVAL >= 500 ||\n PRESENCE_HB_INTERVAL < 1 ||\n (!generate_channel_list(CHANNELS,true).length && !generate_channel_group_list(CHANNEL_GROUPS, true).length ) )\n {\n PRESENCE_HB_RUNNING = false;\n return;\n }\n\n PRESENCE_HB_RUNNING = true;\n SELF['presence_heartbeat']({\n 'callback' : function(r) {\n PRESENCE_HB_TIMEOUT = timeout( _presence_heartbeat, (PRESENCE_HB_INTERVAL) * SECOND );\n },\n 'error' : function(e) {\n error && error(\"Presence Heartbeat unable to reach Pubnub servers.\" + JSON.stringify(e));\n PRESENCE_HB_TIMEOUT = timeout( _presence_heartbeat, (PRESENCE_HB_INTERVAL) * SECOND );\n }\n });\n }\n\n function start_presence_heartbeat() {\n !PRESENCE_HB_RUNNING && _presence_heartbeat();\n }\n\n function publish(next) {\n\n if (NO_WAIT_FOR_PENDING) {\n if (!PUB_QUEUE.length) return;\n } else {\n if (next) PUB_QUEUE.sending = 0;\n if ( PUB_QUEUE.sending || !PUB_QUEUE.length ) return;\n PUB_QUEUE.sending = 1;\n }\n\n xdr(PUB_QUEUE.shift());\n }\n function each_channel_group(callback) {\n var count = 0;\n\n each( generate_channel_group_list(CHANNEL_GROUPS), function(channel_group) {\n var chang = CHANNEL_GROUPS[channel_group];\n\n if (!chang) return;\n\n count++;\n (callback||function(){})(chang);\n } );\n\n return count;\n }\n\n function each_channel(callback) {\n var count = 0;\n\n each( generate_channel_list(CHANNELS), function(channel) {\n var chan = CHANNELS[channel];\n\n if (!chan) return;\n\n count++;\n (callback||function(){})(chan);\n } );\n\n return count;\n }\n function _invoke_callback(response, callback, err) {\n if (typeof response == 'object') {\n if (response['error']) {\n var callback_data = {};\n\n if (response['message']) {\n callback_data['message'] = response['message'];\n }\n\n if (response['payload']) {\n callback_data['payload'] = response['payload'];\n }\n\n err && err(callback_data);\n return;\n\n }\n if (response['payload']) {\n if (response['next_page'])\n callback && callback(response['payload'], response['next_page']);\n else\n callback && callback(response['payload']);\n return;\n }\n }\n callback && callback(response);\n }\n\n function _invoke_error(response,err) {\n\n if (typeof response == 'object' && response['error']) {\n var callback_data = {};\n\n if (response['message']) {\n callback_data['message'] = response['message'];\n }\n\n if (response['payload']) {\n callback_data['payload'] = response['payload'];\n }\n \n err && err(callback_data);\n return;\n } else {\n err && err(response);\n }\n }\n function CR(args, callback, url1, data) {\n var callback = args['callback'] || callback\n , err = args['error'] || error\n , jsonp = jsonp_cb();\n\n data = data || {};\n \n if (!data['auth']) {\n data['auth'] = args['auth_key'] || AUTH_KEY;\n }\n \n var url = [\n STD_ORIGIN, 'v1', 'channel-registration',\n 'sub-key', SUBSCRIBE_KEY\n ];\n\n url.push.apply(url,url1);\n \n if (jsonp) data['callback'] = jsonp;\n \n xdr({\n callback : jsonp,\n data : _get_url_params(data),\n success : function(response) {\n _invoke_callback(response, callback, err);\n },\n fail : function(response) {\n _invoke_error(response, err);\n },\n url : url\n });\n\n }\n\n // Announce Leave Event\n var SELF = {\n 'LEAVE' : function( channel, blocking, auth_key, callback, error ) {\n\n var data = { 'uuid' : UUID, 'auth' : auth_key || AUTH_KEY }\n , origin = nextorigin(ORIGIN)\n , callback = callback || function(){}\n , err = error || function(){}\n , url\n , params\n , jsonp = jsonp_cb();\n\n // Prevent Leaving a Presence Channel\n if (channel.indexOf(PRESENCE_SUFFIX) > 0) return true;\n\n\n if (COMPATIBLE_35) {\n if (!SSL) return false;\n if (jsonp == '0') return false;\n }\n\n if (NOLEAVE) return false;\n\n if (jsonp != '0') data['callback'] = jsonp;\n\n if (USE_INSTANCEID) data['instanceid'] = INSTANCEID;\n\n url = [\n origin, 'v2', 'presence', 'sub_key',\n SUBSCRIBE_KEY, 'channel', encode(channel), 'leave'\n ];\n\n params = _get_url_params(data);\n\n\n if (sendBeacon) {\n url_string = build_url(url, params);\n if (sendBeacon(url_string)) {\n callback && callback({\"status\": 200, \"action\": \"leave\", \"message\": \"OK\", \"service\": \"Presence\"});\n return true;\n }\n }\n\n\n xdr({\n blocking : blocking || SSL,\n timeout : 2000,\n callback : jsonp,\n data : params,\n success : function(response) {\n _invoke_callback(response, callback, err);\n },\n fail : function(response) {\n _invoke_error(response, err);\n },\n url : url\n });\n return true;\n },\n 'LEAVE_GROUP' : function( channel_group, blocking, auth_key, callback, error ) {\n\n var data = { 'uuid' : UUID, 'auth' : auth_key || AUTH_KEY }\n , origin = nextorigin(ORIGIN)\n , url\n , params\n , callback = callback || function(){}\n , err = error || function(){}\n , jsonp = jsonp_cb();\n\n // Prevent Leaving a Presence Channel Group\n if (channel_group.indexOf(PRESENCE_SUFFIX) > 0) return true;\n\n if (COMPATIBLE_35) {\n if (!SSL) return false;\n if (jsonp == '0') return false;\n }\n\n if (NOLEAVE) return false;\n\n if (jsonp != '0') data['callback'] = jsonp;\n\n if (channel_group && channel_group.length > 0) data['channel-group'] = channel_group;\n\n if (USE_INSTANCEID) data['instanceid'] = INSTANCEID;\n\n url = [\n origin, 'v2', 'presence', 'sub_key',\n SUBSCRIBE_KEY, 'channel', encode(','), 'leave'\n ];\n\n params = _get_url_params(data);\n\n if (sendBeacon) {\n url_string = build_url(url, params);\n if (sendBeacon(url_string)) {\n callback && callback({\"status\": 200, \"action\": \"leave\", \"message\": \"OK\", \"service\": \"Presence\"});\n return true;\n }\n }\n\n xdr({\n blocking : blocking || SSL,\n timeout : 5000,\n callback : jsonp,\n data : params,\n success : function(response) {\n _invoke_callback(response, callback, err);\n },\n fail : function(response) {\n _invoke_error(response, err);\n },\n url : url\n });\n return true;\n },\n 'set_resumed' : function(resumed) {\n RESUMED = resumed;\n },\n 'get_cipher_key' : function() {\n return CIPHER_KEY;\n },\n 'set_cipher_key' : function(key) {\n CIPHER_KEY = key;\n },\n 'raw_encrypt' : function(input, key) {\n return encrypt(input, key);\n },\n 'raw_decrypt' : function(input, key) {\n return decrypt(input, key);\n },\n 'get_heartbeat' : function() {\n return PRESENCE_HB;\n },\n \n 'set_heartbeat' : function(heartbeat, heartbeat_interval) {\n PRESENCE_HB = validate_presence_heartbeat(heartbeat, PRESENCE_HB, error);\n PRESENCE_HB_INTERVAL = heartbeat_interval || (PRESENCE_HB / 2) - 1;\n if (PRESENCE_HB == 2) {\n PRESENCE_HB_INTERVAL = 1;\n }\n CONNECT();\n _presence_heartbeat();\n },\n \n 'get_heartbeat_interval' : function() {\n return PRESENCE_HB_INTERVAL;\n },\n \n 'set_heartbeat_interval' : function(heartbeat_interval) {\n PRESENCE_HB_INTERVAL = heartbeat_interval;\n _presence_heartbeat();\n },\n \n 'get_version' : function() {\n return SDK_VER;\n },\n 'getGcmMessageObject' : function(obj) {\n return {\n 'data' : obj\n }\n },\n 'getApnsMessageObject' : function(obj) {\n var x = {\n 'aps' : { 'badge' : 1, 'alert' : ''}\n }\n for (k in obj) {\n k[x] = obj[k];\n }\n return x;\n },\n 'newPnMessage' : function() {\n var x = {};\n if (gcm) x['pn_gcm'] = gcm;\n if (apns) x['pn_apns'] = apns;\n for ( k in n ) {\n x[k] = n[k];\n }\n return x;\n },\n\n '_add_param' : function(key,val) {\n params[key] = val;\n },\n\n 'channel_group' : function(args, callback) {\n var ns_ch = args['channel_group']\n , callback = callback || args['callback']\n , channels = args['channels'] || args['channel']\n , cloak = args['cloak']\n , namespace\n , channel_group\n , url = []\n , data = {}\n , mode = args['mode'] || 'add';\n\n\n if (ns_ch) {\n var ns_ch_a = ns_ch.split(':');\n\n if (ns_ch_a.length > 1) {\n namespace = (ns_ch_a[0] === '*')?null:ns_ch_a[0];\n\n channel_group = ns_ch_a[1];\n } else {\n channel_group = ns_ch_a[0];\n }\n }\n\n namespace && url.push('namespace') && url.push(encode(namespace));\n\n url.push('channel-group');\n\n if (channel_group && channel_group !== '*') {\n url.push(channel_group);\n }\n\n if (channels ) {\n if (isArray(channels)) {\n channels = channels.join(',');\n }\n data[mode] = channels;\n data['cloak'] = (CLOAK)?'true':'false';\n } else {\n if (mode === 'remove') url.push('remove');\n }\n\n if (typeof cloak != 'undefined') data['cloak'] = (cloak)?'true':'false';\n\n CR(args, callback, url, data);\n },\n\n 'channel_group_list_groups' : function(args, callback) {\n var namespace;\n\n namespace = args['namespace'] || args['ns'] || args['channel_group'] || null;\n if (namespace) {\n args[\"channel_group\"] = namespace + \":*\";\n }\n\n SELF['channel_group'](args, callback);\n },\n\n 'channel_group_list_channels' : function(args, callback) {\n if (!args['channel_group']) return error('Missing Channel Group');\n SELF['channel_group'](args, callback);\n },\n\n 'channel_group_remove_channel' : function(args, callback) {\n if (!args['channel_group']) return error('Missing Channel Group');\n if (!args['channel'] && !args['channels'] ) return error('Missing Channel');\n\n args['mode'] = 'remove';\n SELF['channel_group'](args,callback);\n },\n\n 'channel_group_remove_group' : function(args, callback) {\n if (!args['channel_group']) return error('Missing Channel Group');\n if (args['channel']) return error('Use channel_group_remove_channel if you want to remove a channel from a group.');\n\n args['mode'] = 'remove';\n SELF['channel_group'](args,callback);\n },\n\n 'channel_group_add_channel' : function(args, callback) {\n if (!args['channel_group']) return error('Missing Channel Group');\n if (!args['channel'] && !args['channels'] ) return error('Missing Channel');\n SELF['channel_group'](args,callback);\n },\n\n 'channel_group_cloak' : function(args, callback) {\n if (typeof args['cloak'] == 'undefined') {\n callback(CLOAK);\n return;\n }\n CLOAK = args['cloak'];\n SELF['channel_group'](args,callback);\n },\n\n 'channel_group_list_namespaces' : function(args, callback) {\n var url = ['namespace'];\n CR(args, callback, url);\n },\n 'channel_group_remove_namespace' : function(args, callback) {\n var url = ['namespace',args['namespace'],'remove'];\n CR(args, callback, url);\n },\n\n /*\n PUBNUB.history({\n channel : 'my_chat_channel',\n limit : 100,\n callback : function(history) { }\n });\n */\n 'history' : function( args, callback ) {\n var callback = args['callback'] || callback\n , count = args['count'] || args['limit'] || 100\n , reverse = args['reverse'] || \"false\"\n , err = args['error'] || function(){}\n , auth_key = args['auth_key'] || AUTH_KEY\n , cipher_key = args['cipher_key']\n , channel = args['channel']\n , channel_group = args['channel_group']\n , start = args['start']\n , end = args['end']\n , include_token = args['include_token']\n , string_msg_token = args['string_message_token'] || false\n , params = {}\n , jsonp = jsonp_cb();\n\n // Make sure we have a Channel\n if (!channel && !channel_group) return error('Missing Channel');\n if (!callback) return error('Missing Callback');\n if (!SUBSCRIBE_KEY) return error('Missing Subscribe Key');\n\n params['stringtoken'] = 'true';\n params['count'] = count;\n params['reverse'] = reverse;\n params['auth'] = auth_key;\n\n if (channel_group) {\n params['channel-group'] = channel_group;\n if (!channel) {\n channel = ','; \n }\n }\n if (jsonp) params['callback'] = jsonp;\n if (start) params['start'] = start;\n if (end) params['end'] = end;\n if (include_token) params['include_token'] = 'true';\n if (string_msg_token) params['string_message_token'] = 'true';\n\n // Send Message\n xdr({\n callback : jsonp,\n data : _get_url_params(params),\n success : function(response) {\n if (typeof response == 'object' && response['error']) {\n err({'message' : response['message'], 'payload' : response['payload']});\n return;\n }\n var messages = response[0];\n var decrypted_messages = [];\n for (var a = 0; a < messages.length; a++) {\n if (include_token) {\n var new_message = decrypt(messages[a]['message'],cipher_key);\n var timetoken = messages[a]['timetoken'];\n try {\n decrypted_messages['push']({\"message\" : JSON['parse'](new_message), \"timetoken\" : timetoken});\n } catch (e) {\n decrypted_messages['push'](({\"message\" : new_message, \"timetoken\" : timetoken}));\n }\n } else {\n var new_message = decrypt(messages[a],cipher_key);\n try {\n decrypted_messages['push'](JSON['parse'](new_message));\n } catch (e) {\n decrypted_messages['push']((new_message));\n } \n }\n }\n callback([decrypted_messages, response[1], response[2]]);\n },\n fail : function(response) {\n _invoke_error(response, err);\n },\n url : [\n STD_ORIGIN, 'v2', 'history', 'sub-key',\n SUBSCRIBE_KEY, 'channel', encode(channel)\n ]\n });\n },\n\n /*\n PUBNUB.replay({\n source : 'my_channel',\n destination : 'new_channel'\n });\n */\n 'replay' : function(args, callback) {\n var callback = callback || args['callback'] || function(){}\n , auth_key = args['auth_key'] || AUTH_KEY\n , source = args['source']\n , destination = args['destination']\n , stop = args['stop']\n , start = args['start']\n , end = args['end']\n , reverse = args['reverse']\n , limit = args['limit']\n , jsonp = jsonp_cb()\n , data = {}\n , url;\n\n // Check User Input\n if (!source) return error('Missing Source Channel');\n if (!destination) return error('Missing Destination Channel');\n if (!PUBLISH_KEY) return error('Missing Publish Key');\n if (!SUBSCRIBE_KEY) return error('Missing Subscribe Key');\n\n // Setup URL Params\n if (jsonp != '0') data['callback'] = jsonp;\n if (stop) data['stop'] = 'all';\n if (reverse) data['reverse'] = 'true';\n if (start) data['start'] = start;\n if (end) data['end'] = end;\n if (limit) data['count'] = limit;\n\n data['auth'] = auth_key;\n\n // Compose URL Parts\n url = [\n STD_ORIGIN, 'v1', 'replay',\n PUBLISH_KEY, SUBSCRIBE_KEY,\n source, destination\n ];\n\n // Start (or Stop) Replay!\n xdr({\n callback : jsonp,\n success : function(response) {\n _invoke_callback(response, callback, err);\n },\n fail : function() { callback([ 0, 'Disconnected' ]) },\n url : url,\n data : _get_url_params(data)\n });\n },\n\n /*\n PUBNUB.auth('AJFLKAJSDKLA');\n */\n 'auth' : function(auth) {\n AUTH_KEY = auth;\n CONNECT();\n },\n\n /*\n PUBNUB.time(function(time){ });\n */\n 'time' : function(callback) {\n var jsonp = jsonp_cb();\n\n var data = { 'uuid' : UUID, 'auth' : AUTH_KEY }\n\n if (USE_INSTANCEID) data['instanceid'] = INSTANCEID;\n\n xdr({\n callback : jsonp,\n data : _get_url_params(data),\n timeout : SECOND * 5,\n url : [STD_ORIGIN, 'time', jsonp],\n success : function(response) { callback(response[0]) },\n fail : function() { callback(0) }\n });\n },\n\n /*\n PUBNUB.publish({\n channel : 'my_chat_channel',\n message : 'hello!'\n });\n */\n 'publish' : function( args, callback ) {\n var msg = args['message'];\n if (!msg) return error('Missing Message');\n\n var callback = callback || args['callback'] || msg['callback'] || function(){}\n , channel = args['channel'] || msg['channel']\n , auth_key = args['auth_key'] || AUTH_KEY\n , cipher_key = args['cipher_key']\n , err = args['error'] || msg['error'] || function() {}\n , post = args['post'] || false\n , store = ('store_in_history' in args) ? args['store_in_history']: true\n , jsonp = jsonp_cb()\n , add_msg = 'push'\n , params\n , url;\n\n if (args['prepend']) add_msg = 'unshift'\n\n if (!channel) return error('Missing Channel');\n if (!PUBLISH_KEY) return error('Missing Publish Key');\n if (!SUBSCRIBE_KEY) return error('Missing Subscribe Key');\n\n if (msg['getPubnubMessage']) {\n msg = msg['getPubnubMessage']();\n }\n\n // If trying to send Object\n msg = JSON['stringify'](encrypt(msg, cipher_key));\n\n // Create URL\n url = [\n STD_ORIGIN, 'publish',\n PUBLISH_KEY, SUBSCRIBE_KEY,\n 0, encode(channel),\n jsonp, encode(msg)\n ];\n\n params = { 'uuid' : UUID, 'auth' : auth_key }\n\n if (!store) params['store'] =\"0\"\n\n if (USE_INSTANCEID) params['instanceid'] = INSTANCEID;\n\n // Queue Message Send\n PUB_QUEUE[add_msg]({\n callback : jsonp,\n timeout : SECOND * 5,\n url : url,\n data : _get_url_params(params),\n fail : function(response){\n _invoke_error(response, err);\n publish(1);\n },\n success : function(response) {\n _invoke_callback(response, callback, err);\n publish(1);\n },\n mode : (post)?'POST':'GET'\n });\n\n // Send Message\n publish();\n },\n\n /*\n PUBNUB.unsubscribe({ channel : 'my_chat' });\n */\n 'unsubscribe' : function(args, callback) {\n var channel = args['channel']\n , channel_group = args['channel_group']\n , auth_key = args['auth_key'] || AUTH_KEY\n , callback = callback || args['callback'] || function(){}\n , err = args['error'] || function(){};\n\n TIMETOKEN = 0;\n SUB_RESTORE = 1; // REVISIT !!!!\n\n if (channel) {\n\n // Prepare LeaveChannel(s)\n var leave_c = map( (\n channel.join ? channel.join(',') : ''+channel\n ).split(','), function(channel) {\n if (!CHANNELS[channel]) return;\n return channel;\n } ).join(',');\n\n // Prepare Channel(s)\n channel = map( (\n channel.join ? channel.join(',') : ''+channel\n ).split(','), function(channel) {\n if (!CHANNELS[channel]) return;\n return channel + ',' + channel + PRESENCE_SUFFIX;\n } ).join(',');\n\n // Iterate over Channels\n each(channel.split(','), function(ch) {\n if (!ch) return;\n CHANNELS[ch] = 0;\n if (ch in STATE) delete STATE[ch];\n } );\n\n var CB_CALLED = true;\n if (READY) {\n CB_CALLED = SELF['LEAVE'](leave_c, 0 , auth_key, callback, err);\n }\n if (!CB_CALLED) callback({action : \"leave\"});\n }\n\n if (channel_group) {\n\n // Prepare channel group(s)\n var leave_gc = map( (\n channel_group.join ? channel_group.join(',') : ''+channel_group\n ).split(','), function(channel_group) {\n if (!CHANNEL_GROUPS[channel_group]) return;\n return channel_group;\n } ).join(',');\n\n // Prepare channel group(s)\n channel_group = map( (\n channel_group.join ? channel_group.join(',') : ''+channel_group\n ).split(','), function(channel_group) {\n if (!CHANNEL_GROUPS[channel_group]) return;\n return channel_group + ',' + channel_group + PRESENCE_SUFFIX;\n } ).join(',');\n\n // Iterate over channel groups\n each( channel_group.split(','), function(chg) {\n if (!chg) return;\n CHANNEL_GROUPS[chg] = 0;\n if (chg in STATE) delete STATE[chg];\n } );\n\n var CB_CALLED = true;\n if (READY) {\n CB_CALLED = SELF['LEAVE_GROUP'](leave_gc, 0 , auth_key, callback, err);\n }\n if (!CB_CALLED) callback({action : \"leave\"});\n }\n\n // Reset Connection if Count Less\n CONNECT();\n },\n\n /*\n PUBNUB.subscribe({\n channel : 'my_chat'\n callback : function(message) { }\n });\n */\n 'subscribe' : function( args, callback ) {\n var channel = args['channel']\n , channel_group = args['channel_group']\n , callback = callback || args['callback']\n , callback = callback || args['message']\n , connect = args['connect'] || function(){}\n , reconnect = args['reconnect'] || function(){}\n , disconnect = args['disconnect'] || function(){}\n , SUB_ERROR = args['error'] || SUB_ERROR || function(){}\n , idlecb = args['idle'] || function(){}\n , presence = args['presence'] || 0\n , noheresync = args['noheresync'] || 0\n , backfill = args['backfill'] || 0\n , timetoken = args['timetoken'] || 0\n , sub_timeout = args['timeout'] || SUB_TIMEOUT\n , windowing = args['windowing'] || SUB_WINDOWING\n , state = args['state']\n , heartbeat = args['heartbeat'] || args['pnexpires']\n , heartbeat_interval = args['heartbeat_interval']\n , restore = args['restore'] || SUB_RESTORE;\n\n AUTH_KEY = args['auth_key'] || AUTH_KEY;\n\n // Restore Enabled?\n SUB_RESTORE = restore;\n\n // Always Reset the TT\n TIMETOKEN = timetoken;\n\n // Make sure we have a Channel\n if (!channel && !channel_group) {\n return error('Missing Channel');\n }\n\n if (!callback) return error('Missing Callback');\n if (!SUBSCRIBE_KEY) return error('Missing Subscribe Key');\n\n if (heartbeat || heartbeat === 0 || heartbeat_interval || heartbeat_interval === 0) {\n SELF['set_heartbeat'](heartbeat, heartbeat_interval);\n }\n\n // Setup Channel(s)\n if (channel) {\n each( (channel.join ? channel.join(',') : ''+channel).split(','),\n function(channel) {\n var settings = CHANNELS[channel] || {};\n\n // Store Channel State\n CHANNELS[SUB_CHANNEL = channel] = {\n name : channel,\n connected : settings.connected,\n disconnected : settings.disconnected,\n subscribed : 1,\n callback : SUB_CALLBACK = callback,\n 'cipher_key' : args['cipher_key'],\n connect : connect,\n disconnect : disconnect,\n reconnect : reconnect\n };\n\n if (state) {\n if (channel in state) {\n STATE[channel] = state[channel];\n } else {\n STATE[channel] = state;\n }\n }\n\n // Presence Enabled?\n if (!presence) return;\n\n // Subscribe Presence Channel\n SELF['subscribe']({\n 'channel' : channel + PRESENCE_SUFFIX,\n 'callback' : presence,\n 'restore' : restore\n });\n\n // Presence Subscribed?\n if (settings.subscribed) return;\n\n // See Who's Here Now?\n if (noheresync) return;\n SELF['here_now']({\n 'channel' : channel,\n 'data' : _get_url_params({ 'uuid' : UUID, 'auth' : AUTH_KEY }),\n 'callback' : function(here) {\n each( 'uuids' in here ? here['uuids'] : [],\n function(uid) { presence( {\n 'action' : 'join',\n 'uuid' : uid,\n 'timestamp' : Math.floor(rnow() / 1000),\n 'occupancy' : here['occupancy'] || 1\n }, here, channel ); } );\n }\n });\n } );\n }\n\n // Setup Channel Groups\n if (channel_group) {\n each( (channel_group.join ? channel_group.join(',') : ''+channel_group).split(','),\n function(channel_group) {\n var settings = CHANNEL_GROUPS[channel_group] || {};\n\n CHANNEL_GROUPS[channel_group] = {\n name : channel_group,\n connected : settings.connected,\n disconnected : settings.disconnected,\n subscribed : 1,\n callback : SUB_CALLBACK = callback,\n 'cipher_key' : args['cipher_key'],\n connect : connect,\n disconnect : disconnect,\n reconnect : reconnect\n };\n\n // Presence Enabled?\n if (!presence) return;\n\n // Subscribe Presence Channel\n SELF['subscribe']({\n 'channel_group' : channel_group + PRESENCE_SUFFIX,\n 'callback' : presence,\n 'restore' : restore,\n 'auth_key' : AUTH_KEY\n });\n\n // Presence Subscribed?\n if (settings.subscribed) return;\n\n // See Who's Here Now?\n if (noheresync) return;\n SELF['here_now']({\n 'channel_group' : channel_group,\n 'data' : _get_url_params({ 'uuid' : UUID, 'auth' : AUTH_KEY }),\n 'callback' : function(here) {\n each( 'uuids' in here ? here['uuids'] : [],\n function(uid) { presence( {\n 'action' : 'join',\n 'uuid' : uid,\n 'timestamp' : Math.floor(rnow() / 1000),\n 'occupancy' : here['occupancy'] || 1\n }, here, channel_group ); } );\n }\n });\n } );\n }\n\n\n // Test Network Connection\n function _test_connection(success) {\n if (success) {\n // Begin Next Socket Connection\n timeout( CONNECT, windowing);\n }\n else {\n // New Origin on Failed Connection\n STD_ORIGIN = nextorigin( ORIGIN, 1 );\n SUB_ORIGIN = nextorigin( ORIGIN, 1 );\n\n // Re-test Connection\n timeout( function() {\n SELF['time'](_test_connection);\n }, SECOND );\n }\n\n // Disconnect & Reconnect\n each_channel(function(channel){\n // Reconnect\n if (success && channel.disconnected) {\n channel.disconnected = 0;\n return channel.reconnect(channel.name);\n }\n\n // Disconnect\n if (!success && !channel.disconnected) {\n channel.disconnected = 1;\n channel.disconnect(channel.name);\n }\n });\n \n // Disconnect & Reconnect for channel groups\n each_channel_group(function(channel_group){\n // Reconnect\n if (success && channel_group.disconnected) {\n channel_group.disconnected = 0;\n return channel_group.reconnect(channel_group.name);\n }\n\n // Disconnect\n if (!success && !channel_group.disconnected) {\n channel_group.disconnected = 1;\n channel_group.disconnect(channel_group.name);\n }\n });\n }\n\n // Evented Subscribe\n function _connect() {\n var jsonp = jsonp_cb()\n , channels = generate_channel_list(CHANNELS).join(',')\n , channel_groups = generate_channel_group_list(CHANNEL_GROUPS).join(',');\n\n // Stop Connection\n if (!channels && !channel_groups) return;\n\n if (!channels) channels = ',';\n\n // Connect to PubNub Subscribe Servers\n _reset_offline();\n\n var data = _get_url_params({ 'uuid' : UUID, 'auth' : AUTH_KEY });\n\n if (channel_groups) {\n data['channel-group'] = channel_groups;\n }\n\n\n var st = JSON.stringify(STATE);\n if (st.length > 2) data['state'] = JSON.stringify(STATE);\n\n if (PRESENCE_HB) data['heartbeat'] = PRESENCE_HB;\n\n if (USE_INSTANCEID) data['instanceid'] = INSTANCEID;\n\n start_presence_heartbeat();\n SUB_RECEIVER = xdr({\n timeout : sub_timeout,\n callback : jsonp,\n fail : function(response) {\n if (response && response['error'] && response['service']) {\n _invoke_error(response, SUB_ERROR);\n _test_connection(1);\n } else {\n SELF['time'](function(success){\n !success && ( _invoke_error(response, SUB_ERROR));\n _test_connection(success);\n });\n }\n },\n data : _get_url_params(data),\n url : [\n SUB_ORIGIN, 'subscribe',\n SUBSCRIBE_KEY, encode(channels),\n jsonp, TIMETOKEN\n ],\n success : function(messages) {\n\n // Check for Errors\n if (!messages || (\n typeof messages == 'object' &&\n 'error' in messages &&\n messages['error']\n )) {\n SUB_ERROR(messages['error']);\n return timeout( CONNECT, SECOND );\n }\n\n // User Idle Callback\n idlecb(messages[1]);\n\n // Restore Previous Connection Point if Needed\n TIMETOKEN = !TIMETOKEN &&\n SUB_RESTORE &&\n db['get'](SUBSCRIBE_KEY) || messages[1];\n\n /*\n // Connect\n each_channel_registry(function(registry){\n if (registry.connected) return;\n registry.connected = 1;\n registry.connect(channel.name);\n });\n */\n\n // Connect\n each_channel(function(channel){\n if (channel.connected) return;\n channel.connected = 1;\n channel.connect(channel.name);\n });\n\n // Connect for channel groups\n each_channel_group(function(channel_group){\n if (channel_group.connected) return;\n channel_group.connected = 1;\n channel_group.connect(channel_group.name);\n });\n\n if (RESUMED && !SUB_RESTORE) {\n TIMETOKEN = 0;\n RESUMED = false;\n // Update Saved Timetoken\n db['set']( SUBSCRIBE_KEY, 0 );\n timeout( _connect, windowing );\n return;\n }\n\n // Invoke Memory Catchup and Receive Up to 100\n // Previous Messages from the Queue.\n if (backfill) {\n TIMETOKEN = 10000;\n backfill = 0;\n }\n\n // Update Saved Timetoken\n db['set']( SUBSCRIBE_KEY, messages[1] );\n\n // Route Channel <---> Callback for Message\n var next_callback = (function() {\n var channels = '';\n var channels2 = '';\n\n if (messages.length > 3) {\n channels = messages[3];\n channels2 = messages[2];\n } else if (messages.length > 2) {\n channels = messages[2];\n } else {\n channels = map(\n generate_channel_list(CHANNELS), function(chan) { return map(\n Array(messages[0].length)\n .join(',').split(','),\n function() { return chan; }\n ) }).join(',')\n }\n\n var list = channels.split(',');\n var list2 = (channels2)?channels2.split(','):[];\n\n return function() {\n var channel = list.shift()||SUB_CHANNEL;\n var channel2 = list2.shift();\n\n var chobj = {};\n\n if (channel2) {\n if (channel && channel.indexOf('-pnpres') >= 0 \n && channel2.indexOf('-pnpres') < 0) {\n channel2 += '-pnpres';\n }\n chobj = CHANNEL_GROUPS[channel2] || CHANNELS[channel2] || {'callback' : function(){}};\n } else {\n chobj = CHANNELS[channel];\n }\n\n var r = [\n chobj\n .callback||SUB_CALLBACK,\n channel.split(PRESENCE_SUFFIX)[0]\n ];\n channel2 && r.push(channel2.split(PRESENCE_SUFFIX)[0]);\n return r;\n };\n })();\n\n var latency = detect_latency(+messages[1]);\n each( messages[0], function(msg) {\n var next = next_callback();\n var decrypted_msg = decrypt(msg,\n (CHANNELS[next[1]])?CHANNELS[next[1]]['cipher_key']:null);\n next[0] && next[0]( decrypted_msg, messages, next[2] || next[1], latency, next[1]);\n });\n\n timeout( _connect, windowing );\n }\n });\n }\n\n CONNECT = function() {\n _reset_offline();\n timeout( _connect, windowing );\n };\n\n // Reduce Status Flicker\n if (!READY) return READY_BUFFER.push(CONNECT);\n\n // Connect Now\n CONNECT();\n },\n\n /*\n PUBNUB.here_now({ channel : 'my_chat', callback : fun });\n */\n 'here_now' : function( args, callback ) {\n var callback = args['callback'] || callback\n , debug = args['debug']\n , err = args['error'] || function(){}\n , auth_key = args['auth_key'] || AUTH_KEY\n , channel = args['channel']\n , channel_group = args['channel_group']\n , jsonp = jsonp_cb()\n , uuids = ('uuids' in args) ? args['uuids'] : true\n , state = args['state']\n , data = { 'uuid' : UUID, 'auth' : auth_key };\n\n if (!uuids) data['disable_uuids'] = 1;\n if (state) data['state'] = 1;\n\n // Make sure we have a Channel\n if (!callback) return error('Missing Callback');\n if (!SUBSCRIBE_KEY) return error('Missing Subscribe Key');\n\n var url = [\n STD_ORIGIN, 'v2', 'presence',\n 'sub_key', SUBSCRIBE_KEY\n ];\n\n channel && url.push('channel') && url.push(encode(channel));\n\n if (jsonp != '0') { data['callback'] = jsonp; }\n\n if (channel_group) {\n data['channel-group'] = channel_group;\n !channel && url.push('channel') && url.push(','); \n }\n\n if (USE_INSTANCEID) data['instanceid'] = INSTANCEID;\n\n xdr({\n callback : jsonp,\n data : _get_url_params(data),\n success : function(response) {\n _invoke_callback(response, callback, err);\n },\n fail : function(response) {\n _invoke_error(response, err);\n },\n debug : debug,\n url : url\n });\n },\n\n /*\n PUBNUB.current_channels_by_uuid({ channel : 'my_chat', callback : fun });\n */\n 'where_now' : function( args, callback ) {\n var callback = args['callback'] || callback\n , err = args['error'] || function(){}\n , auth_key = args['auth_key'] || AUTH_KEY\n , jsonp = jsonp_cb()\n , uuid = args['uuid'] || UUID\n , data = { 'auth' : auth_key };\n\n // Make sure we have a Channel\n if (!callback) return error('Missing Callback');\n if (!SUBSCRIBE_KEY) return error('Missing Subscribe Key');\n\n if (jsonp != '0') { data['callback'] = jsonp; }\n\n if (USE_INSTANCEID) data['instanceid'] = INSTANCEID;\n\n xdr({\n callback : jsonp,\n data : _get_url_params(data),\n success : function(response) {\n _invoke_callback(response, callback, err);\n },\n fail : function(response) {\n _invoke_error(response, err);\n },\n url : [\n STD_ORIGIN, 'v2', 'presence',\n 'sub_key', SUBSCRIBE_KEY,\n 'uuid', encode(uuid)\n ]\n });\n },\n\n 'state' : function(args, callback) {\n var callback = args['callback'] || callback || function(r) {}\n , err = args['error'] || function(){}\n , auth_key = args['auth_key'] || AUTH_KEY\n , jsonp = jsonp_cb()\n , state = args['state']\n , uuid = args['uuid'] || UUID\n , channel = args['channel']\n , channel_group = args['channel_group']\n , url\n , data = _get_url_params({ 'auth' : auth_key });\n\n // Make sure we have a Channel\n if (!SUBSCRIBE_KEY) return error('Missing Subscribe Key');\n if (!uuid) return error('Missing UUID');\n if (!channel && !channel_group) return error('Missing Channel');\n\n if (jsonp != '0') { data['callback'] = jsonp; }\n\n if (typeof channel != 'undefined'\n && CHANNELS[channel] && CHANNELS[channel].subscribed ) {\n if (state) STATE[channel] = state;\n }\n\n if (typeof channel_group != 'undefined'\n && CHANNEL_GROUPS[channel_group]\n && CHANNEL_GROUPS[channel_group].subscribed\n ) {\n if (state) STATE[channel_group] = state;\n data['channel-group'] = channel_group;\n\n if (!channel) {\n channel = ',';\n }\n }\n\n data['state'] = JSON.stringify(state);\n\n if (USE_INSTANCEID) data['instanceid'] = INSTANCEID;\n\n if (state) {\n url = [\n STD_ORIGIN, 'v2', 'presence',\n 'sub-key', SUBSCRIBE_KEY,\n 'channel', channel,\n 'uuid', uuid, 'data'\n ]\n } else {\n url = [\n STD_ORIGIN, 'v2', 'presence',\n 'sub-key', SUBSCRIBE_KEY,\n 'channel', channel,\n 'uuid', encode(uuid)\n ]\n }\n\n xdr({\n callback : jsonp,\n data : _get_url_params(data),\n success : function(response) {\n _invoke_callback(response, callback, err);\n },\n fail : function(response) {\n _invoke_error(response, err);\n },\n url : url\n\n });\n\n },\n\n /*\n PUBNUB.grant({\n channel : 'my_chat',\n callback : fun,\n error : fun,\n ttl : 24 * 60, // Minutes\n read : true,\n write : true,\n auth_key : '3y8uiajdklytowsj'\n });\n */\n 'grant' : function( args, callback ) {\n var callback = args['callback'] || callback\n , err = args['error'] || function(){}\n , channel = args['channel'] || args['channels']\n , channel_group = args['channel_group']\n , jsonp = jsonp_cb()\n , ttl = args['ttl']\n , r = (args['read'] )?\"1\":\"0\"\n , w = (args['write'])?\"1\":\"0\"\n , m = (args['manage'])?\"1\":\"0\"\n , auth_key = args['auth_key'] || args['auth_keys'];\n\n if (!callback) return error('Missing Callback');\n if (!SUBSCRIBE_KEY) return error('Missing Subscribe Key');\n if (!PUBLISH_KEY) return error('Missing Publish Key');\n if (!SECRET_KEY) return error('Missing Secret Key');\n\n var timestamp = Math.floor(new Date().getTime() / 1000)\n , sign_input = SUBSCRIBE_KEY + \"\\n\" + PUBLISH_KEY + \"\\n\"\n + \"grant\" + \"\\n\";\n\n var data = {\n 'w' : w,\n 'r' : r,\n 'timestamp' : timestamp\n };\n if (args['manage']) {\n data['m'] = m;\n }\n if (isArray(channel)) {\n channel = channel['join'](',');\n }\n if (isArray(auth_key)) {\n auth_key = auth_key['join'](',');\n }\n if (typeof channel != 'undefined' && channel != null && channel.length > 0) data['channel'] = channel;\n if (typeof channel_group != 'undefined' && channel_group != null && channel_group.length > 0) {\n data['channel-group'] = channel_group;\n }\n if (jsonp != '0') { data['callback'] = jsonp; }\n if (ttl || ttl === 0) data['ttl'] = ttl;\n\n if (auth_key) data['auth'] = auth_key;\n\n data = _get_url_params(data)\n\n if (!auth_key) delete data['auth'];\n\n sign_input += _get_pam_sign_input_from_params(data);\n\n var signature = hmac_SHA256( sign_input, SECRET_KEY );\n\n signature = signature.replace( /\\+/g, \"-\" );\n signature = signature.replace( /\\//g, \"_\" );\n\n data['signature'] = signature;\n\n xdr({\n callback : jsonp,\n data : data,\n success : function(response) {\n _invoke_callback(response, callback, err);\n },\n fail : function(response) {\n _invoke_error(response, err);\n },\n url : [\n STD_ORIGIN, 'v1', 'auth', 'grant' ,\n 'sub-key', SUBSCRIBE_KEY\n ]\n });\n },\n\n /*\n PUBNUB.mobile_gw_provision ({\n device_id: 'A655FBA9931AB',\n op : 'add' | 'remove',\n gw_type : 'apns' | 'gcm',\n channel : 'my_chat',\n callback : fun,\n error : fun,\n });\n */\n\n 'mobile_gw_provision' : function( args ) {\n\n var callback = args['callback'] || function(){}\n , auth_key = args['auth_key'] || AUTH_KEY\n , err = args['error'] || function() {}\n , jsonp = jsonp_cb()\n , channel = args['channel']\n , op = args['op']\n , gw_type = args['gw_type']\n , device_id = args['device_id']\n , params\n , url;\n\n if (!device_id) return error('Missing Device ID (device_id)');\n if (!gw_type) return error('Missing GW Type (gw_type: gcm or apns)');\n if (!op) return error('Missing GW Operation (op: add or remove)');\n if (!channel) return error('Missing gw destination Channel (channel)');\n if (!PUBLISH_KEY) return error('Missing Publish Key');\n if (!SUBSCRIBE_KEY) return error('Missing Subscribe Key');\n\n // Create URL\n url = [\n STD_ORIGIN, 'v1/push/sub-key',\n SUBSCRIBE_KEY, 'devices', device_id\n ];\n\n params = { 'uuid' : UUID, 'auth' : auth_key, 'type': gw_type};\n\n if (op == \"add\") {\n params['add'] = channel;\n } else if (op == \"remove\") {\n params['remove'] = channel;\n }\n\n if (USE_INSTANCEID) data['instanceid'] = INSTANCEID;\n\n xdr({\n callback : jsonp,\n data : params,\n success : function(response) {\n _invoke_callback(response, callback, err);\n },\n fail : function(response) {\n _invoke_error(response, err);\n },\n url : url\n });\n\n },\n\n /*\n PUBNUB.audit({\n channel : 'my_chat',\n callback : fun,\n error : fun,\n read : true,\n write : true,\n auth_key : '3y8uiajdklytowsj'\n });\n */\n 'audit' : function( args, callback ) {\n var callback = args['callback'] || callback\n , err = args['error'] || function(){}\n , channel = args['channel']\n , channel_group = args['channel_group']\n , auth_key = args['auth_key']\n , jsonp = jsonp_cb();\n\n // Make sure we have a Channel\n if (!callback) return error('Missing Callback');\n if (!SUBSCRIBE_KEY) return error('Missing Subscribe Key');\n if (!PUBLISH_KEY) return error('Missing Publish Key');\n if (!SECRET_KEY) return error('Missing Secret Key');\n\n var timestamp = Math.floor(new Date().getTime() / 1000)\n , sign_input = SUBSCRIBE_KEY + \"\\n\"\n + PUBLISH_KEY + \"\\n\"\n + \"audit\" + \"\\n\";\n\n var data = {'timestamp' : timestamp };\n if (jsonp != '0') { data['callback'] = jsonp; }\n if (typeof channel != 'undefined' && channel != null && channel.length > 0) data['channel'] = channel;\n if (typeof channel_group != 'undefined' && channel_group != null && channel_group.length > 0) {\n data['channel-group'] = channel_group;\n }\n if (auth_key) data['auth'] = auth_key;\n\n data = _get_url_params(data);\n\n if (!auth_key) delete data['auth'];\n\n sign_input += _get_pam_sign_input_from_params(data);\n\n var signature = hmac_SHA256( sign_input, SECRET_KEY );\n\n signature = signature.replace( /\\+/g, \"-\" );\n signature = signature.replace( /\\//g, \"_\" );\n\n data['signature'] = signature;\n xdr({\n callback : jsonp,\n data : data,\n success : function(response) {\n _invoke_callback(response, callback, err);\n },\n fail : function(response) {\n _invoke_error(response, err);\n },\n url : [\n STD_ORIGIN, 'v1', 'auth', 'audit' ,\n 'sub-key', SUBSCRIBE_KEY\n ]\n });\n },\n\n /*\n PUBNUB.revoke({\n channel : 'my_chat',\n callback : fun,\n error : fun,\n auth_key : '3y8uiajdklytowsj'\n });\n */\n 'revoke' : function( args, callback ) {\n args['read'] = false;\n args['write'] = false;\n SELF['grant']( args, callback );\n },\n 'set_uuid' : function(uuid) {\n UUID = uuid;\n CONNECT();\n },\n 'get_uuid' : function() {\n return UUID;\n },\n 'isArray' : function(arg) {\n return isArray(arg);\n },\n 'get_subscibed_channels' : function() {\n return generate_channel_list(CHANNELS, true);\n },\n 'presence_heartbeat' : function(args) {\n var callback = args['callback'] || function() {}\n var err = args['error'] || function() {}\n var jsonp = jsonp_cb();\n var data = { 'uuid' : UUID, 'auth' : AUTH_KEY };\n\n var st = JSON['stringify'](STATE);\n if (st.length > 2) data['state'] = JSON['stringify'](STATE);\n\n if (PRESENCE_HB > 0 && PRESENCE_HB < 320) data['heartbeat'] = PRESENCE_HB;\n\n if (jsonp != '0') { data['callback'] = jsonp; }\n\n var channels = encode(generate_channel_list(CHANNELS, true)['join'](','));\n var channel_groups = generate_channel_group_list(CHANNEL_GROUPS, true)['join'](',');\n\n if (!channels) channels = ',';\n if (channel_groups) data['channel-group'] = channel_groups;\n\n if (USE_INSTANCEID) data['instanceid'] = INSTANCEID;\n\n xdr({\n callback : jsonp,\n data : _get_url_params(data),\n timeout : SECOND * 5,\n url : [\n STD_ORIGIN, 'v2', 'presence',\n 'sub-key', SUBSCRIBE_KEY,\n 'channel' , channels,\n 'heartbeat'\n ],\n success : function(response) {\n _invoke_callback(response, callback, err);\n },\n fail : function(response) { _invoke_error(response, err); }\n });\n },\n 'stop_timers': function () {\n clearTimeout(_poll_timer);\n clearTimeout(_poll_timer2);\n clearTimeout(PRESENCE_HB_TIMEOUT);\n },\n 'shutdown': function () {\n SELF['stop_timers']();\n shutdown && shutdown();\n },\n\n // Expose PUBNUB Functions\n 'xdr' : xdr,\n 'ready' : ready,\n 'db' : db,\n 'uuid' : generate_uuid,\n 'map' : map,\n 'each' : each,\n 'each-channel' : each_channel,\n 'grep' : grep,\n 'offline' : function(){ _reset_offline(\n 1, { \"message\" : \"Offline. Please check your network settings.\" })\n },\n 'supplant' : supplant,\n 'now' : rnow,\n 'unique' : unique,\n 'updater' : updater\n };\n\n function _poll_online() {\n _is_online() || _reset_offline( 1, {\n \"error\" : \"Offline. Please check your network settings. \"\n });\n _poll_timer && clearTimeout(_poll_timer);\n _poll_timer = timeout( _poll_online, SECOND );\n }\n\n function _poll_online2() {\n if (!TIME_CHECK) return;\n SELF['time'](function(success){\n detect_time_detla( function(){}, success );\n success || _reset_offline( 1, {\n \"error\" : \"Heartbeat failed to connect to Pubnub Servers.\" +\n \"Please check your network settings.\"\n });\n _poll_timer2 && clearTimeout(_poll_timer2);\n _poll_timer2 = timeout( _poll_online2, KEEPALIVE );\n });\n }\n\n function _reset_offline(err, msg) {\n SUB_RECEIVER && SUB_RECEIVER(err, msg);\n SUB_RECEIVER = null;\n\n clearTimeout(_poll_timer);\n clearTimeout(_poll_timer2);\n }\n \n if (!UUID) UUID = SELF['uuid']();\n if (!INSTANCEID) INSTANCEID = SELF['uuid']();\n db['set']( SUBSCRIBE_KEY + 'uuid', UUID );\n\n _poll_timer = timeout( _poll_online, SECOND );\n _poll_timer2 = timeout( _poll_online2, KEEPALIVE );\n PRESENCE_HB_TIMEOUT = timeout(\n start_presence_heartbeat,\n ( PRESENCE_HB_INTERVAL - 3 ) * SECOND\n );\n\n // Detect Age of Message\n function detect_latency(tt) {\n var adjusted_time = rnow() - TIME_DRIFT;\n return adjusted_time - tt / 10000;\n }\n\n detect_time_detla();\n function detect_time_detla( cb, time ) {\n var stime = rnow();\n\n time && calculate(time) || SELF['time'](calculate);\n\n function calculate(time) {\n if (!time) return;\n var ptime = time / 10000\n , latency = (rnow() - stime) / 2;\n TIME_DRIFT = rnow() - (ptime + latency);\n cb && cb(TIME_DRIFT);\n }\n }\n\n return SELF;\n}\nfunction crypto_obj() {\n\n function SHA256(s) {\n return CryptoJS['SHA256'](s)['toString'](CryptoJS['enc']['Hex']);\n }\n\n var iv = \"0123456789012345\";\n\n var allowedKeyEncodings = ['hex', 'utf8', 'base64', 'binary'];\n var allowedKeyLengths = [128, 256];\n var allowedModes = ['ecb', 'cbc'];\n\n var defaultOptions = {\n 'encryptKey': true,\n 'keyEncoding': 'utf8',\n 'keyLength': 256,\n 'mode': 'cbc'\n };\n\n function parse_options(options) {\n\n // Defaults\n options = options || {};\n if (!options['hasOwnProperty']('encryptKey')) options['encryptKey'] = defaultOptions['encryptKey'];\n if (!options['hasOwnProperty']('keyEncoding')) options['keyEncoding'] = defaultOptions['keyEncoding'];\n if (!options['hasOwnProperty']('keyLength')) options['keyLength'] = defaultOptions['keyLength'];\n if (!options['hasOwnProperty']('mode')) options['mode'] = defaultOptions['mode'];\n\n // Validation\n if (allowedKeyEncodings['indexOf'](options['keyEncoding']['toLowerCase']()) == -1) options['keyEncoding'] = defaultOptions['keyEncoding'];\n if (allowedKeyLengths['indexOf'](parseInt(options['keyLength'], 10)) == -1) options['keyLength'] = defaultOptions['keyLength'];\n if (allowedModes['indexOf'](options['mode']['toLowerCase']()) == -1) options['mode'] = defaultOptions['mode'];\n\n return options;\n\n }\n\n function decode_key(key, options) {\n if (options['keyEncoding'] == 'base64') {\n return CryptoJS['enc']['Base64']['parse'](key);\n } else if (options['keyEncoding'] == 'hex') {\n return CryptoJS['enc']['Hex']['parse'](key);\n } else {\n return key;\n }\n }\n\n function get_padded_key(key, options) {\n key = decode_key(key, options);\n if (options['encryptKey']) {\n return CryptoJS['enc']['Utf8']['parse'](SHA256(key)['slice'](0, 32));\n } else {\n return key;\n }\n }\n\n function get_mode(options) {\n if (options['mode'] == 'ecb') {\n return CryptoJS['mode']['ECB'];\n } else {\n return CryptoJS['mode']['CBC'];\n }\n }\n\n function get_iv(options) {\n return (options['mode'] == 'cbc') ? CryptoJS['enc']['Utf8']['parse'](iv) : null;\n }\n\n return {\n\n 'encrypt': function(data, key, options) {\n if (!key) return data;\n options = parse_options(options);\n var iv = get_iv(options);\n var mode = get_mode(options);\n var cipher_key = get_padded_key(key, options);\n var hex_message = JSON['stringify'](data);\n var encryptedHexArray = CryptoJS['AES']['encrypt'](hex_message, cipher_key, {'iv': iv, 'mode': mode})['ciphertext'];\n var base_64_encrypted = encryptedHexArray['toString'](CryptoJS['enc']['Base64']);\n return base_64_encrypted || data;\n },\n\n 'decrypt': function(data, key, options) {\n if (!key) return data;\n options = parse_options(options);\n var iv = get_iv(options);\n var mode = get_mode(options);\n var cipher_key = get_padded_key(key, options);\n try {\n var binary_enc = CryptoJS['enc']['Base64']['parse'](data);\n var json_plain = CryptoJS['AES']['decrypt']({'ciphertext': binary_enc}, cipher_key, {'iv': iv, 'mode': mode})['toString'](CryptoJS['enc']['Utf8']);\n var plaintext = JSON['parse'](json_plain);\n return plaintext;\n }\n catch (e) {\n return undefined;\n }\n }\n };\n}\n/**\n * UTIL LOCALS\n */\n\nvar SWF = 'https://pubnub.a.ssl.fastly.net/pubnub.swf'\n, ASYNC = 'async'\n, UA = navigator.userAgent\n, PNSDK = 'PubNub-JS-' + 'Web' + '/' + '3.7.16'\n, XORIGN = UA.indexOf('MSIE 6') == -1;\n\n/**\n * CONSOLE COMPATIBILITY\n */\nwindow.console || (window.console=window.console||{});\nconsole.log || (\n console.log =\n console.error =\n ((window.opera||{}).postError||function(){})\n);\n\n/**\n * LOCAL STORAGE OR COOKIE\n */\nvar db = (function(){\n var store = {};\n var ls = false;\n try {\n ls = window['localStorage'];\n } catch (e) { }\n var cookieGet = function(key) {\n if (document.cookie.indexOf(key) == -1) return null;\n return ((document.cookie||'').match(\n RegExp(key+'=([^;]+)')\n )||[])[1] || null;\n };\n var cookieSet = function( key, value ) {\n document.cookie = key + '=' + value +\n '; expires=Thu, 1 Aug 2030 20:00:00 UTC; path=/';\n };\n var cookieTest = (function() {\n try {\n cookieSet('pnctest', '1');\n return cookieGet('pnctest') === '1';\n } catch (e) {\n return false;\n }\n }());\n return {\n 'get' : function(key) {\n try {\n if (ls) return ls.getItem(key);\n if (cookieTest) return cookieGet(key);\n return store[key];\n } catch(e) {\n return store[key];\n }\n },\n 'set' : function( key, value ) {\n try {\n if (ls) return ls.setItem( key, value ) && 0;\n if (cookieTest) cookieSet( key, value );\n store[key] = value;\n } catch(e) {\n store[key] = value;\n }\n }\n };\n})();\n\nfunction get_hmac_SHA256(data,key) {\n var hash = CryptoJS['HmacSHA256'](data, key);\n return hash.toString(CryptoJS['enc']['Base64']);\n}\n\n/**\n * $\n * =\n * var div = $('divid');\n */\nfunction $(id) { return document.getElementById(id) }\n\n/**\n * ERROR\n * =====\n * error('message');\n */\nfunction error(message) { console['error'](message) }\n\n/**\n * SEARCH\n * ======\n * var elements = search('a div span');\n */\nfunction search( elements, start) {\n var list = [];\n each( elements.split(/\\s+/), function(el) {\n each( (start || document).getElementsByTagName(el), function(node) {\n list.push(node);\n } );\n });\n return list;\n}\n\n/**\n * BIND\n * ====\n * bind( 'keydown', search('a')[0], function(element) {\n * ...\n * } );\n */\nfunction bind( type, el, fun ) {\n each( type.split(','), function(etype) {\n var rapfun = function(e) {\n if (!e) e = window.event;\n if (!fun(e)) {\n e.cancelBubble = true;\n e.preventDefault && e.preventDefault();\n e.stopPropagation && e.stopPropagation();\n }\n };\n\n if ( el.addEventListener ) el.addEventListener( etype, rapfun, false );\n else if ( el.attachEvent ) el.attachEvent( 'on' + etype, rapfun );\n else el[ 'on' + etype ] = rapfun;\n } );\n}\n\n/**\n * UNBIND\n * ======\n * unbind( 'keydown', search('a')[0] );\n */\nfunction unbind( type, el, fun ) {\n if ( el.removeEventListener ) el.removeEventListener( type, false );\n else if ( el.detachEvent ) el.detachEvent( 'on' + type, false );\n else el[ 'on' + type ] = null;\n}\n\n/**\n * HEAD\n * ====\n * head().appendChild(elm);\n */\nfunction head() { return search('head')[0] }\n\n/**\n * ATTR\n * ====\n * var attribute = attr( node, 'attribute' );\n */\nfunction attr( node, attribute, value ) {\n if (value) node.setAttribute( attribute, value );\n else return node && node.getAttribute && node.getAttribute(attribute);\n}\n\n/**\n * CSS\n * ===\n * var obj = create('div');\n */\nfunction css( element, styles ) {\n for (var style in styles) if (styles.hasOwnProperty(style))\n try {element.style[style] = styles[style] + (\n '|width|height|top|left|'.indexOf(style) > 0 &&\n typeof styles[style] == 'number'\n ? 'px' : ''\n )}catch(e){}\n}\n\n/**\n * CREATE\n * ======\n * var obj = create('div');\n */\nfunction create(element) { return document.createElement(element) }\n\n\n/**\n * jsonp_cb\n * ========\n * var callback = jsonp_cb();\n */\nfunction jsonp_cb() { return XORIGN || FDomainRequest() ? 0 : unique() }\n\n\n\n/**\n * EVENTS\n * ======\n * PUBNUB.events.bind( 'you-stepped-on-flower', function(message) {\n * // Do Stuff with message\n * } );\n *\n * PUBNUB.events.fire( 'you-stepped-on-flower', \"message-data\" );\n * PUBNUB.events.fire( 'you-stepped-on-flower', {message:\"data\"} );\n * PUBNUB.events.fire( 'you-stepped-on-flower', [1,2,3] );\n *\n */\nvar events = {\n 'list' : {},\n 'unbind' : function( name ) { events.list[name] = [] },\n 'bind' : function( name, fun ) {\n (events.list[name] = events.list[name] || []).push(fun);\n },\n 'fire' : function( name, data ) {\n each(\n events.list[name] || [],\n function(fun) { fun(data) }\n );\n }\n};\n\n/**\n * XDR Cross Domain Request\n * ========================\n * xdr({\n * url : ['http://www.blah.com/url'],\n * success : function(response) {},\n * fail : function() {}\n * });\n */\nfunction xdr( setup ) {\n if (XORIGN || FDomainRequest()) return ajax(setup);\n\n var script = create('script')\n , callback = setup.callback\n , id = unique()\n , finished = 0\n , xhrtme = setup.timeout || DEF_TIMEOUT\n , timer = timeout( function(){done(1, {\"message\" : \"timeout\"})}, xhrtme )\n , fail = setup.fail || function(){}\n , data = setup.data || {}\n , success = setup.success || function(){}\n , append = function() { head().appendChild(script) }\n , done = function( failed, response ) {\n if (finished) return;\n finished = 1;\n\n script.onerror = null;\n clearTimeout(timer);\n\n (failed || !response) || success(response);\n\n timeout( function() {\n failed && fail();\n var s = $(id)\n , p = s && s.parentNode;\n p && p.removeChild(s);\n }, SECOND );\n };\n\n window[callback] = function(response) {\n done( 0, response );\n };\n\n if (!setup.blocking) script[ASYNC] = ASYNC;\n\n script.onerror = function() { done(1) };\n script.src = build_url( setup.url, data );\n\n attr( script, 'id', id );\n\n append();\n return done;\n}\n\n/**\n * CORS XHR Request\n * ================\n * xdr({\n * url : ['http://www.blah.com/url'],\n * success : function(response) {},\n * fail : function() {}\n * });\n */\nfunction ajax( setup ) {\n var xhr, response\n , finished = function() {\n if (loaded) return;\n loaded = 1;\n\n clearTimeout(timer);\n\n try { response = JSON['parse'](xhr.responseText); }\n catch (r) { return done(1); }\n\n complete = 1;\n success(response);\n }\n , complete = 0\n , loaded = 0\n , xhrtme = setup.timeout || DEF_TIMEOUT\n , timer = timeout( function(){done(1, {\"message\" : \"timeout\"})}, xhrtme )\n , fail = setup.fail || function(){}\n , data = setup.data || {}\n , success = setup.success || function(){}\n , async = !(setup.blocking)\n , done = function(failed,response) {\n if (complete) return;\n complete = 1;\n\n clearTimeout(timer);\n\n if (xhr) {\n xhr.onerror = xhr.onload = null;\n xhr.abort && xhr.abort();\n xhr = null;\n }\n\n failed && fail(response);\n };\n\n // Send\n try {\n xhr = FDomainRequest() ||\n window.XDomainRequest &&\n new XDomainRequest() ||\n new XMLHttpRequest();\n\n xhr.onerror = xhr.onabort = function(e){ done(\n 1, e || (xhr && xhr.responseText) || { \"error\" : \"Network Connection Error\"}\n ) };\n xhr.onload = xhr.onloadend = finished;\n xhr.onreadystatechange = function() {\n if (xhr && xhr.readyState == 4) {\n switch(xhr.status) {\n case 200:\n break;\n default:\n try {\n response = JSON['parse'](xhr.responseText);\n done(1,response);\n }\n catch (r) { return done(1, {status : xhr.status, payload : null, message : xhr.responseText}); }\n return;\n }\n }\n }\n\n var url = build_url(setup.url,data);\n\n xhr.open( 'GET', url, async );\n if (async) xhr.timeout = xhrtme;\n xhr.send();\n }\n catch(eee) {\n done(0);\n XORIGN = 0;\n return xdr(setup);\n }\n\n // Return 'done'\n return done;\n}\n\n// Test Connection State\nfunction _is_online() {\n if (!('onLine' in navigator)) return 1;\n try { return navigator['onLine'] }\n catch (e) { return true }\n}\n\n\nfunction sendBeacon(url) {\n if (!('sendBeacon' in navigator)) return false;\n\n return navigator['sendBeacon'](url);\n}\n\n/* =-====================================================================-= */\n/* =-====================================================================-= */\n/* =-========================= PUBNUB ===========================-= */\n/* =-====================================================================-= */\n/* =-====================================================================-= */\n\nvar PDIV = $('pubnub') || 0\n, CREATE_PUBNUB = function(setup) {\n\n // Force JSONP if requested from user.\n if (setup['jsonp']) XORIGN = 0;\n else XORIGN = UA.indexOf('MSIE 6') == -1;\n\n var SUBSCRIBE_KEY = setup['subscribe_key'] || ''\n , KEEPALIVE = (+setup['keepalive'] || DEF_KEEPALIVE) * SECOND\n , UUID = setup['uuid'] || db['get'](SUBSCRIBE_KEY+'uuid')||'';\n\n var leave_on_unload = setup['leave_on_unload'] || 0;\n\n setup['xdr'] = xdr;\n setup['db'] = db;\n setup['error'] = setup['error'] || error;\n setup['_is_online'] = _is_online;\n setup['jsonp_cb'] = jsonp_cb;\n setup['hmac_SHA256']= get_hmac_SHA256;\n setup['crypto_obj'] = crypto_obj();\n setup['sendBeacon'] = sendBeacon;\n setup['params'] = { 'pnsdk' : PNSDK }\n\n var SELF = function(setup) {\n return CREATE_PUBNUB(setup);\n };\n\n var PN = PN_API(setup);\n\n for (var prop in PN) {\n if (PN.hasOwnProperty(prop)) {\n SELF[prop] = PN[prop];\n }\n }\n SELF['css'] = css;\n SELF['$'] = $;\n SELF['create'] = create;\n SELF['bind'] = bind;\n SELF['head'] = head;\n SELF['search'] = search;\n SELF['attr'] = attr;\n SELF['events'] = events;\n SELF['init'] = SELF;\n SELF['secure'] = SELF;\n SELF['crypto_obj'] = crypto_obj(); // export to instance\n\n\n // Add Leave Functions\n bind( 'beforeunload', window, function() {\n if (leave_on_unload) SELF['each-channel'](function(ch){ SELF['LEAVE']( ch.name, 0 ) });\n return true;\n } );\n\n // Return without Testing\n if (setup['notest']) return SELF;\n\n bind( 'offline', window, SELF['offline'] );\n bind( 'offline', document, SELF['offline'] );\n\n // Return PUBNUB Socket Object\n return SELF;\n};\nCREATE_PUBNUB['init'] = CREATE_PUBNUB;\nCREATE_PUBNUB['secure'] = CREATE_PUBNUB;\nCREATE_PUBNUB['crypto_obj'] = crypto_obj(); // export to constructor\n\n// Bind for PUBNUB Readiness to Subscribe\nif (document.readyState === 'complete') {\n timeout( ready, 0 );\n}\nelse {\n bind( 'load', window, function(){ timeout( ready, 0 ) } );\n}\n\nvar pdiv = PDIV || {};\n\n// CREATE A PUBNUB GLOBAL OBJECT\nPUBNUB = CREATE_PUBNUB({\n 'notest' : 1,\n 'publish_key' : attr( pdiv, 'pub-key' ),\n 'subscribe_key' : attr( pdiv, 'sub-key' ),\n 'ssl' : !document.location.href.indexOf('https') ||\n attr( pdiv, 'ssl' ) == 'on',\n 'origin' : attr( pdiv, 'origin' ),\n 'uuid' : attr( pdiv, 'uuid' )\n});\n\n// jQuery Interface\nwindow['jQuery'] && (window['jQuery']['PUBNUB'] = CREATE_PUBNUB);\n\n// For Modern JS + Testling.js - http://testling.com/\ntypeof(module) !== 'undefined' && (module['exports'] = PUBNUB) && ready();\n\nvar pubnubs = $('pubnubs') || 0;\n\n// LEAVE NOW IF NO PDIV.\nif (!PDIV) return;\n\n// PUBNUB Flash Socket\ncss( PDIV, { 'position' : 'absolute', 'top' : -SECOND } );\n\nif ('opera' in window || attr( PDIV, 'flash' )) PDIV['innerHTML'] =\n '';\n\n// Create Interface for Opera Flash\nPUBNUB['rdx'] = function( id, data ) {\n if (!data) return FDomainRequest[id]['onerror']();\n FDomainRequest[id]['responseText'] = unescape(data);\n FDomainRequest[id]['onload']();\n};\n\nfunction FDomainRequest() {\n if (!pubnubs || !pubnubs['get']) return 0;\n\n var fdomainrequest = {\n 'id' : FDomainRequest['id']++,\n 'send' : function() {},\n 'abort' : function() { fdomainrequest['id'] = {} },\n 'open' : function( method, url ) {\n FDomainRequest[fdomainrequest['id']] = fdomainrequest;\n pubnubs['get']( fdomainrequest['id'], url );\n }\n };\n\n return fdomainrequest;\n}\nFDomainRequest['id'] = SECOND;\n\n})();\n(function(){\n\n// ---------------------------------------------------------------------------\n// WEBSOCKET INTERFACE\n// ---------------------------------------------------------------------------\nvar WS = PUBNUB['ws'] = function( url, protocols ) {\n if (!(this instanceof WS)) return new WS( url, protocols );\n\n var self = this\n , url = self.url = url || ''\n , protocol = self.protocol = protocols || 'Sec-WebSocket-Protocol'\n , bits = url.split('/')\n , setup = {\n 'ssl' : bits[0] === 'wss:'\n ,'origin' : bits[2]\n ,'publish_key' : bits[3]\n ,'subscribe_key' : bits[4]\n ,'channel' : bits[5]\n };\n\n // READY STATES\n self['CONNECTING'] = 0; // The connection is not yet open.\n self['OPEN'] = 1; // The connection is open and ready to communicate.\n self['CLOSING'] = 2; // The connection is in the process of closing.\n self['CLOSED'] = 3; // The connection is closed or couldn't be opened.\n\n // CLOSE STATES\n self['CLOSE_NORMAL'] = 1000; // Normal Intended Close; completed.\n self['CLOSE_GOING_AWAY'] = 1001; // Closed Unexpecttedly.\n self['CLOSE_PROTOCOL_ERROR'] = 1002; // Server: Not Supported.\n self['CLOSE_UNSUPPORTED'] = 1003; // Server: Unsupported Protocol.\n self['CLOSE_TOO_LARGE'] = 1004; // Server: Too Much Data.\n self['CLOSE_NO_STATUS'] = 1005; // Server: No reason.\n self['CLOSE_ABNORMAL'] = 1006; // Abnormal Disconnect.\n\n // Events Default\n self['onclose'] = self['onerror'] =\n self['onmessage'] = self['onopen'] =\n self['onsend'] = function(){};\n\n // Attributes\n self['binaryType'] = '';\n self['extensions'] = '';\n self['bufferedAmount'] = 0;\n self['trasnmitting'] = false;\n self['buffer'] = [];\n self['readyState'] = self['CONNECTING'];\n\n // Close if no setup.\n if (!url) {\n self['readyState'] = self['CLOSED'];\n self['onclose']({\n 'code' : self['CLOSE_ABNORMAL'],\n 'reason' : 'Missing URL',\n 'wasClean' : true\n });\n return self;\n }\n\n // PubNub WebSocket Emulation\n self.pubnub = PUBNUB['init'](setup);\n self.pubnub.setup = setup;\n self.setup = setup;\n\n self.pubnub['subscribe']({\n 'restore' : false,\n 'channel' : setup['channel'],\n 'disconnect' : self['onerror'],\n 'reconnect' : self['onopen'],\n 'error' : function() {\n self['onclose']({\n 'code' : self['CLOSE_ABNORMAL'],\n 'reason' : 'Missing URL',\n 'wasClean' : false\n });\n },\n 'callback' : function(message) {\n self['onmessage']({ 'data' : message });\n },\n 'connect' : function() {\n self['readyState'] = self['OPEN'];\n self['onopen']();\n }\n });\n};\n\n// ---------------------------------------------------------------------------\n// WEBSOCKET SEND\n// ---------------------------------------------------------------------------\nWS.prototype.send = function(data) {\n var self = this;\n self.pubnub['publish']({\n 'channel' : self.pubnub.setup['channel'],\n 'message' : data,\n 'callback' : function(response) {\n self['onsend']({ 'data' : response });\n }\n });\n};\n\n// ---------------------------------------------------------------------------\n// WEBSOCKET CLOSE\n// ---------------------------------------------------------------------------\nWS.prototype.close = function() {\n var self = this;\n self.pubnub['unsubscribe']({ 'channel' : self.pubnub.setup['channel'] });\n self['readyState'] = self['CLOSED'];\n self['onclose']({});\n};\n\n})();\n/*\nCryptoJS v3.1.2\ncode.google.com/p/crypto-js\n(c) 2009-2013 by Jeff Mott. All rights reserved.\ncode.google.com/p/crypto-js/wiki/License\n*/\nvar CryptoJS=CryptoJS||function(h,s){var f={},g=f.lib={},q=function(){},m=g.Base={extend:function(a){q.prototype=this;var c=new q;a&&c.mixIn(a);c.hasOwnProperty(\"init\")||(c.init=function(){c.$super.init.apply(this,arguments)});c.init.prototype=c;c.$super=this;return c},create:function(){var a=this.extend();a.init.apply(a,arguments);return a},init:function(){},mixIn:function(a){for(var c in a)a.hasOwnProperty(c)&&(this[c]=a[c]);a.hasOwnProperty(\"toString\")&&(this.toString=a.toString)},clone:function(){return this.init.prototype.extend(this)}},\nr=g.WordArray=m.extend({init:function(a,c){a=this.words=a||[];this.sigBytes=c!=s?c:4*a.length},toString:function(a){return(a||k).stringify(this)},concat:function(a){var c=this.words,d=a.words,b=this.sigBytes;a=a.sigBytes;this.clamp();if(b%4)for(var e=0;e>>2]|=(d[e>>>2]>>>24-8*(e%4)&255)<<24-8*((b+e)%4);else if(65535>>2]=d[e>>>2];else c.push.apply(c,d);this.sigBytes+=a;return this},clamp:function(){var a=this.words,c=this.sigBytes;a[c>>>2]&=4294967295<<\n32-8*(c%4);a.length=h.ceil(c/4)},clone:function(){var a=m.clone.call(this);a.words=this.words.slice(0);return a},random:function(a){for(var c=[],d=0;d>>2]>>>24-8*(b%4)&255;d.push((e>>>4).toString(16));d.push((e&15).toString(16))}return d.join(\"\")},parse:function(a){for(var c=a.length,d=[],b=0;b>>3]|=parseInt(a.substr(b,\n2),16)<<24-4*(b%8);return new r.init(d,c/2)}},n=l.Latin1={stringify:function(a){var c=a.words;a=a.sigBytes;for(var d=[],b=0;b>>2]>>>24-8*(b%4)&255));return d.join(\"\")},parse:function(a){for(var c=a.length,d=[],b=0;b>>2]|=(a.charCodeAt(b)&255)<<24-8*(b%4);return new r.init(d,c)}},j=l.Utf8={stringify:function(a){try{return decodeURIComponent(escape(n.stringify(a)))}catch(c){throw Error(\"Malformed UTF-8 data\");}},parse:function(a){return n.parse(unescape(encodeURIComponent(a)))}},\nu=g.BufferedBlockAlgorithm=m.extend({reset:function(){this._data=new r.init;this._nDataBytes=0},_append:function(a){\"string\"==typeof a&&(a=j.parse(a));this._data.concat(a);this._nDataBytes+=a.sigBytes},_process:function(a){var c=this._data,d=c.words,b=c.sigBytes,e=this.blockSize,f=b/(4*e),f=a?h.ceil(f):h.max((f|0)-this._minBufferSize,0);a=f*e;b=h.min(4*a,b);if(a){for(var g=0;gn;){var j;a:{j=k;for(var u=h.sqrt(j),t=2;t<=u;t++)if(!(j%t)){j=!1;break a}j=!0}j&&(8>n&&(m[n]=l(h.pow(k,0.5))),r[n]=l(h.pow(k,1/3)),n++);k++}var a=[],f=f.SHA256=q.extend({_doReset:function(){this._hash=new g.init(m.slice(0))},_doProcessBlock:function(c,d){for(var b=this._hash.words,e=b[0],f=b[1],g=b[2],j=b[3],h=b[4],m=b[5],n=b[6],q=b[7],p=0;64>p;p++){if(16>p)a[p]=\nc[d+p]|0;else{var k=a[p-15],l=a[p-2];a[p]=((k<<25|k>>>7)^(k<<14|k>>>18)^k>>>3)+a[p-7]+((l<<15|l>>>17)^(l<<13|l>>>19)^l>>>10)+a[p-16]}k=q+((h<<26|h>>>6)^(h<<21|h>>>11)^(h<<7|h>>>25))+(h&m^~h&n)+r[p]+a[p];l=((e<<30|e>>>2)^(e<<19|e>>>13)^(e<<10|e>>>22))+(e&f^e&g^f&g);q=n;n=m;m=h;h=j+k|0;j=g;g=f;f=e;e=k+l|0}b[0]=b[0]+e|0;b[1]=b[1]+f|0;b[2]=b[2]+g|0;b[3]=b[3]+j|0;b[4]=b[4]+h|0;b[5]=b[5]+m|0;b[6]=b[6]+n|0;b[7]=b[7]+q|0},_doFinalize:function(){var a=this._data,d=a.words,b=8*this._nDataBytes,e=8*a.sigBytes;\nd[e>>>5]|=128<<24-e%32;d[(e+64>>>9<<4)+14]=h.floor(b/4294967296);d[(e+64>>>9<<4)+15]=b;a.sigBytes=4*d.length;this._process();return this._hash},clone:function(){var a=q.clone.call(this);a._hash=this._hash.clone();return a}});s.SHA256=q._createHelper(f);s.HmacSHA256=q._createHmacHelper(f)})(Math);\n\n// HMAC SHA256\n(function(){var h=CryptoJS,s=h.enc.Utf8;h.algo.HMAC=h.lib.Base.extend({init:function(f,g){f=this._hasher=new f.init;\"string\"==typeof g&&(g=s.parse(g));var h=f.blockSize,m=4*h;g.sigBytes>m&&(g=f.finalize(g));g.clamp();for(var r=this._oKey=g.clone(),l=this._iKey=g.clone(),k=r.words,n=l.words,j=0;j>>2]>>>24-8*(r%4)&255)<<16|(l[r+1>>>2]>>>24-8*((r+1)%4)&255)<<8|l[r+2>>>2]>>>24-8*((r+2)%4)&255,v=0;4>v&&r+0.75*v>>6*(3-v)&63));if(l=t.charAt(64))for(;d.length%4;)d.push(l);return d.join(\"\")},parse:function(d){var l=d.length,s=this._map,t=s.charAt(64);t&&(t=d.indexOf(t),-1!=t&&(l=t));for(var t=[],r=0,w=0;w<\nl;w++)if(w%4){var v=s.indexOf(d.charAt(w-1))<<2*(w%4),b=s.indexOf(d.charAt(w))>>>6-2*(w%4);t[r>>>2]|=(v|b)<<24-8*(r%4);r++}return p.create(t,r)},_map:\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\"}})();\n\n// BlockCipher\n(function(u){function p(b,n,a,c,e,j,k){b=b+(n&a|~n&c)+e+k;return(b<>>32-j)+n}function d(b,n,a,c,e,j,k){b=b+(n&c|a&~c)+e+k;return(b<>>32-j)+n}function l(b,n,a,c,e,j,k){b=b+(n^a^c)+e+k;return(b<>>32-j)+n}function s(b,n,a,c,e,j,k){b=b+(a^(n|~c))+e+k;return(b<>>32-j)+n}for(var t=CryptoJS,r=t.lib,w=r.WordArray,v=r.Hasher,r=t.algo,b=[],x=0;64>x;x++)b[x]=4294967296*u.abs(u.sin(x+1))|0;r=r.MD5=v.extend({_doReset:function(){this._hash=new w.init([1732584193,4023233417,2562383102,271733878])},\n_doProcessBlock:function(q,n){for(var a=0;16>a;a++){var c=n+a,e=q[c];q[c]=(e<<8|e>>>24)&16711935|(e<<24|e>>>8)&4278255360}var a=this._hash.words,c=q[n+0],e=q[n+1],j=q[n+2],k=q[n+3],z=q[n+4],r=q[n+5],t=q[n+6],w=q[n+7],v=q[n+8],A=q[n+9],B=q[n+10],C=q[n+11],u=q[n+12],D=q[n+13],E=q[n+14],x=q[n+15],f=a[0],m=a[1],g=a[2],h=a[3],f=p(f,m,g,h,c,7,b[0]),h=p(h,f,m,g,e,12,b[1]),g=p(g,h,f,m,j,17,b[2]),m=p(m,g,h,f,k,22,b[3]),f=p(f,m,g,h,z,7,b[4]),h=p(h,f,m,g,r,12,b[5]),g=p(g,h,f,m,t,17,b[6]),m=p(m,g,h,f,w,22,b[7]),\nf=p(f,m,g,h,v,7,b[8]),h=p(h,f,m,g,A,12,b[9]),g=p(g,h,f,m,B,17,b[10]),m=p(m,g,h,f,C,22,b[11]),f=p(f,m,g,h,u,7,b[12]),h=p(h,f,m,g,D,12,b[13]),g=p(g,h,f,m,E,17,b[14]),m=p(m,g,h,f,x,22,b[15]),f=d(f,m,g,h,e,5,b[16]),h=d(h,f,m,g,t,9,b[17]),g=d(g,h,f,m,C,14,b[18]),m=d(m,g,h,f,c,20,b[19]),f=d(f,m,g,h,r,5,b[20]),h=d(h,f,m,g,B,9,b[21]),g=d(g,h,f,m,x,14,b[22]),m=d(m,g,h,f,z,20,b[23]),f=d(f,m,g,h,A,5,b[24]),h=d(h,f,m,g,E,9,b[25]),g=d(g,h,f,m,k,14,b[26]),m=d(m,g,h,f,v,20,b[27]),f=d(f,m,g,h,D,5,b[28]),h=d(h,f,\nm,g,j,9,b[29]),g=d(g,h,f,m,w,14,b[30]),m=d(m,g,h,f,u,20,b[31]),f=l(f,m,g,h,r,4,b[32]),h=l(h,f,m,g,v,11,b[33]),g=l(g,h,f,m,C,16,b[34]),m=l(m,g,h,f,E,23,b[35]),f=l(f,m,g,h,e,4,b[36]),h=l(h,f,m,g,z,11,b[37]),g=l(g,h,f,m,w,16,b[38]),m=l(m,g,h,f,B,23,b[39]),f=l(f,m,g,h,D,4,b[40]),h=l(h,f,m,g,c,11,b[41]),g=l(g,h,f,m,k,16,b[42]),m=l(m,g,h,f,t,23,b[43]),f=l(f,m,g,h,A,4,b[44]),h=l(h,f,m,g,u,11,b[45]),g=l(g,h,f,m,x,16,b[46]),m=l(m,g,h,f,j,23,b[47]),f=s(f,m,g,h,c,6,b[48]),h=s(h,f,m,g,w,10,b[49]),g=s(g,h,f,m,\nE,15,b[50]),m=s(m,g,h,f,r,21,b[51]),f=s(f,m,g,h,u,6,b[52]),h=s(h,f,m,g,k,10,b[53]),g=s(g,h,f,m,B,15,b[54]),m=s(m,g,h,f,e,21,b[55]),f=s(f,m,g,h,v,6,b[56]),h=s(h,f,m,g,x,10,b[57]),g=s(g,h,f,m,t,15,b[58]),m=s(m,g,h,f,D,21,b[59]),f=s(f,m,g,h,z,6,b[60]),h=s(h,f,m,g,C,10,b[61]),g=s(g,h,f,m,j,15,b[62]),m=s(m,g,h,f,A,21,b[63]);a[0]=a[0]+f|0;a[1]=a[1]+m|0;a[2]=a[2]+g|0;a[3]=a[3]+h|0},_doFinalize:function(){var b=this._data,n=b.words,a=8*this._nDataBytes,c=8*b.sigBytes;n[c>>>5]|=128<<24-c%32;var e=u.floor(a/\n4294967296);n[(c+64>>>9<<4)+15]=(e<<8|e>>>24)&16711935|(e<<24|e>>>8)&4278255360;n[(c+64>>>9<<4)+14]=(a<<8|a>>>24)&16711935|(a<<24|a>>>8)&4278255360;b.sigBytes=4*(n.length+1);this._process();b=this._hash;n=b.words;for(a=0;4>a;a++)c=n[a],n[a]=(c<<8|c>>>24)&16711935|(c<<24|c>>>8)&4278255360;return b},clone:function(){var b=v.clone.call(this);b._hash=this._hash.clone();return b}});t.MD5=v._createHelper(r);t.HmacMD5=v._createHmacHelper(r)})(Math);\n(function(){var u=CryptoJS,p=u.lib,d=p.Base,l=p.WordArray,p=u.algo,s=p.EvpKDF=d.extend({cfg:d.extend({keySize:4,hasher:p.MD5,iterations:1}),init:function(d){this.cfg=this.cfg.extend(d)},compute:function(d,r){for(var p=this.cfg,s=p.hasher.create(),b=l.create(),u=b.words,q=p.keySize,p=p.iterations;u.length>>2]&255}};d.BlockCipher=v.extend({cfg:v.cfg.extend({mode:b,padding:q}),reset:function(){v.reset.call(this);var a=this.cfg,b=a.iv,a=a.mode;if(this._xformMode==this._ENC_XFORM_MODE)var c=a.createEncryptor;else c=a.createDecryptor,this._minBufferSize=1;this._mode=c.call(a,\nthis,b&&b.words)},_doProcessBlock:function(a,b){this._mode.processBlock(a,b)},_doFinalize:function(){var a=this.cfg.padding;if(this._xformMode==this._ENC_XFORM_MODE){a.pad(this._data,this.blockSize);var b=this._process(!0)}else b=this._process(!0),a.unpad(b);return b},blockSize:4});var n=d.CipherParams=l.extend({init:function(a){this.mixIn(a)},toString:function(a){return(a||this.formatter).stringify(this)}}),b=(p.format={}).OpenSSL={stringify:function(a){var b=a.ciphertext;a=a.salt;return(a?s.create([1398893684,\n1701076831]).concat(a).concat(b):b).toString(r)},parse:function(a){a=r.parse(a);var b=a.words;if(1398893684==b[0]&&1701076831==b[1]){var c=s.create(b.slice(2,4));b.splice(0,4);a.sigBytes-=16}return n.create({ciphertext:a,salt:c})}},a=d.SerializableCipher=l.extend({cfg:l.extend({format:b}),encrypt:function(a,b,c,d){d=this.cfg.extend(d);var l=a.createEncryptor(c,d);b=l.finalize(b);l=l.cfg;return n.create({ciphertext:b,key:c,iv:l.iv,algorithm:a,mode:l.mode,padding:l.padding,blockSize:a.blockSize,formatter:d.format})},\ndecrypt:function(a,b,c,d){d=this.cfg.extend(d);b=this._parse(b,d.format);return a.createDecryptor(c,d).finalize(b.ciphertext)},_parse:function(a,b){return\"string\"==typeof a?b.parse(a,this):a}}),p=(p.kdf={}).OpenSSL={execute:function(a,b,c,d){d||(d=s.random(8));a=w.create({keySize:b+c}).compute(a,d);c=s.create(a.words.slice(b),4*c);a.sigBytes=4*b;return n.create({key:a,iv:c,salt:d})}},c=d.PasswordBasedCipher=a.extend({cfg:a.cfg.extend({kdf:p}),encrypt:function(b,c,d,l){l=this.cfg.extend(l);d=l.kdf.execute(d,\nb.keySize,b.ivSize);l.iv=d.iv;b=a.encrypt.call(this,b,c,d.key,l);b.mixIn(d);return b},decrypt:function(b,c,d,l){l=this.cfg.extend(l);c=this._parse(c,l.format);d=l.kdf.execute(d,b.keySize,b.ivSize,c.salt);l.iv=d.iv;return a.decrypt.call(this,b,c,d.key,l)}})}();\n\n// AES\n(function(){for(var u=CryptoJS,p=u.lib.BlockCipher,d=u.algo,l=[],s=[],t=[],r=[],w=[],v=[],b=[],x=[],q=[],n=[],a=[],c=0;256>c;c++)a[c]=128>c?c<<1:c<<1^283;for(var e=0,j=0,c=0;256>c;c++){var k=j^j<<1^j<<2^j<<3^j<<4,k=k>>>8^k&255^99;l[e]=k;s[k]=e;var z=a[e],F=a[z],G=a[F],y=257*a[k]^16843008*k;t[e]=y<<24|y>>>8;r[e]=y<<16|y>>>16;w[e]=y<<8|y>>>24;v[e]=y;y=16843009*G^65537*F^257*z^16843008*e;b[k]=y<<24|y>>>8;x[k]=y<<16|y>>>16;q[k]=y<<8|y>>>24;n[k]=y;e?(e=z^a[a[a[G^z]]],j^=a[a[j]]):e=j=1}var H=[0,1,2,4,8,\n16,32,64,128,27,54],d=d.AES=p.extend({_doReset:function(){for(var a=this._key,c=a.words,d=a.sigBytes/4,a=4*((this._nRounds=d+6)+1),e=this._keySchedule=[],j=0;j>>24]<<24|l[k>>>16&255]<<16|l[k>>>8&255]<<8|l[k&255]):(k=k<<8|k>>>24,k=l[k>>>24]<<24|l[k>>>16&255]<<16|l[k>>>8&255]<<8|l[k&255],k^=H[j/d|0]<<24);e[j]=e[j-d]^k}c=this._invKeySchedule=[];for(d=0;dd||4>=j?k:b[l[k>>>24]]^x[l[k>>>16&255]]^q[l[k>>>\n8&255]]^n[l[k&255]]},encryptBlock:function(a,b){this._doCryptBlock(a,b,this._keySchedule,t,r,w,v,l)},decryptBlock:function(a,c){var d=a[c+1];a[c+1]=a[c+3];a[c+3]=d;this._doCryptBlock(a,c,this._invKeySchedule,b,x,q,n,s);d=a[c+1];a[c+1]=a[c+3];a[c+3]=d},_doCryptBlock:function(a,b,c,d,e,j,l,f){for(var m=this._nRounds,g=a[b]^c[0],h=a[b+1]^c[1],k=a[b+2]^c[2],n=a[b+3]^c[3],p=4,r=1;r>>24]^e[h>>>16&255]^j[k>>>8&255]^l[n&255]^c[p++],s=d[h>>>24]^e[k>>>16&255]^j[n>>>8&255]^l[g&255]^c[p++],t=\nd[k>>>24]^e[n>>>16&255]^j[g>>>8&255]^l[h&255]^c[p++],n=d[n>>>24]^e[g>>>16&255]^j[h>>>8&255]^l[k&255]^c[p++],g=q,h=s,k=t;q=(f[g>>>24]<<24|f[h>>>16&255]<<16|f[k>>>8&255]<<8|f[n&255])^c[p++];s=(f[h>>>24]<<24|f[k>>>16&255]<<16|f[n>>>8&255]<<8|f[g&255])^c[p++];t=(f[k>>>24]<<24|f[n>>>16&255]<<16|f[g>>>8&255]<<8|f[h&255])^c[p++];n=(f[n>>>24]<<24|f[g>>>16&255]<<16|f[h>>>8&255]<<8|f[k&255])^c[p++];a[b]=q;a[b+1]=s;a[b+2]=t;a[b+3]=n},keySize:8});u.AES=p._createHelper(d)})();\n\n// Mode ECB\nCryptoJS.mode.ECB = (function () {\n var ECB = CryptoJS.lib.BlockCipherMode.extend();\n\n ECB.Encryptor = ECB.extend({\n processBlock: function (words, offset) {\n this._cipher.encryptBlock(words, offset);\n }\n });\n\n ECB.Decryptor = ECB.extend({\n processBlock: function (words, offset) {\n this._cipher.decryptBlock(words, offset);\n }\n });\n\n return ECB;\n}());// Moved to hmac-sha-256.js\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./bower_components/pubnub/web/pubnub.js\n ** module id = 10\n ** module chunks = 0\n **/","export default class Cache {\n\n static defaultPrefix = 'rc-';\n\n constructor(storage, prefix) {\n this.setPrefix(prefix);\n this._storage = storage;\n }\n\n setPrefix(prefix) {\n this._prefix = prefix || Cache.defaultPrefix;\n return this;\n }\n\n setItem(key, data) {\n this._storage[this._prefixKey(key)] = JSON.stringify(data);\n return this;\n }\n\n removeItem(key) {\n delete this._storage[this._prefixKey(key)];\n return this;\n }\n\n getItem(key) {\n var item = this._storage[this._prefixKey(key)];\n if (!item) return null;\n return JSON.parse(item);\n }\n\n clean() {\n\n for (var key in this._storage) {\n\n if (!this._storage.hasOwnProperty(key)) continue;\n\n if (key.indexOf(this._prefix) === 0) {\n delete this._storage[key];\n }\n\n }\n\n return this;\n\n }\n\n _prefixKey(key) {\n return this._prefix + key;\n }\n\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/core/Cache.js\n **/","export default class Observable {\n\n constructor() {\n this.off();\n }\n\n hasListeners(event) {\n return (event in this._listeners);\n }\n\n on(events, callback) {\n\n if (typeof events == 'string') events = [events];\n if (!events) throw new Error('No events to subscribe to');\n if (typeof callback !== 'function') throw new Error('Callback must be a function');\n\n events.forEach((event) => {\n\n if (!this.hasListeners(event)) this._listeners[event] = [];\n\n this._listeners[event].push(callback);\n\n });\n\n return this;\n\n }\n\n emit(event, ...args) {\n\n var result = null;\n\n if (!this.hasListeners(event)) return null;\n\n this._listeners[event].some((callback) => {\n\n result = callback.apply(this, args);\n return (result === false);\n\n });\n\n return result;\n\n }\n\n off(event, callback) {\n\n if (!event) {\n\n this._listeners = {};\n\n } else {\n\n if (!callback) {\n\n delete this._listeners[event];\n\n } else {\n\n if (!this.hasListeners(event)) return this;\n\n this._listeners[event].forEach((cb, i) => {\n\n if (cb === callback) delete this._listeners[event][i];\n\n });\n\n }\n\n }\n\n return this;\n\n }\n\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/core/Observable.js\n **/","import {Promise} from '../core/Externals';\nimport {poll, stopPolling} from './Utils';\n\nexport default class Queue {\n\n static _pollInterval = 250;\n static _releaseTimeout = 5000;\n\n constructor(cache, cacheId) {\n\n this._cache = cache;\n this._cacheId = cacheId;\n this._promise = null;\n\n }\n\n isPaused() {\n\n var time = this._cache.getItem(this._cacheId);\n\n return !!time && Date.now() - parseInt(time) < Queue._releaseTimeout;\n }\n\n pause() {\n this._cache.setItem(this._cacheId, Date.now());\n return this;\n }\n\n resume() {\n this._cache.removeItem(this._cacheId);\n return this;\n }\n\n poll() {\n\n if (this._promise) return this._promise;\n\n this._promise = new Promise((resolve, reject) => {\n\n poll((next) => {\n\n if (this.isPaused()) return next();\n\n this._promise = null;\n\n this.resume(); // this is actually not needed but why not\n\n resolve(null);\n\n }, Queue._pollInterval);\n\n });\n\n return this._promise;\n\n }\n\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/core/Queue.js\n **/","import {fetch, Request, Response, Headers, Promise} from '../core/Externals';\nimport {queryStringify} from '../core/Utils';\nimport {findHeaderName} from './Utils';\nimport Observable from '../core/Observable';\nimport ApiResponse from './ApiResponse';\n\nexport default class Client extends Observable {\n\n static _allowedMethods = ['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'OPTIONS', 'HEAD'];\n\n events = {\n beforeRequest: 'beforeRequest',\n requestSuccess: 'requestSuccess',\n requestError: 'requestError'\n };\n\n /**\n * @param {Request} request\n * @return {Promise}\n */\n async sendRequest(request) {\n\n var apiResponse = new ApiResponse(request);\n\n try {\n\n //TODO Stop request if listeners return false\n this.emit(this.events.beforeRequest, apiResponse);\n\n apiResponse._response = await this._loadResponse(request);\n\n if (apiResponse._isMultipart() || apiResponse._isJson()) {\n apiResponse._text = await apiResponse.response().text();\n }\n\n if (!apiResponse.ok()) throw new Error('Response has unsuccessful status');\n\n this.emit(this.events.requestSuccess, apiResponse);\n\n return apiResponse;\n\n } catch (e) {\n\n if (!e.apiResponse) e = this.makeError(e, apiResponse);\n\n this.emit(this.events.requestError, e);\n\n throw e;\n\n }\n\n }\n\n /**\n * @param {Request} request\n * @return {Promise}\n * @private\n */\n async _loadResponse(request) {\n return await fetch.call(null, request);\n }\n\n /**\n * Wraps the JS Error object with transaction information\n * @param {Error|IApiError} e\n * @param {ApiResponse} apiResponse\n * @return {IApiError}\n */\n makeError(e, apiResponse) {\n\n // Wrap only if regular error\n if (!e.hasOwnProperty('apiResponse') && !e.hasOwnProperty('originalMessage')) {\n\n e.apiResponse = apiResponse;\n e.originalMessage = e.message;\n e.message = (apiResponse && apiResponse.error(true)) || e.originalMessage;\n\n }\n\n return e;\n\n }\n\n /**\n *\n * @param {object} init\n * @param {object} [init.url]\n * @param {object} [init.body]\n * @param {string} [init.method]\n * @param {object} [init.query]\n * @param {object} [init.headers]\n * @return {Request}\n */\n createRequest(init) {\n\n init = init || {};\n init.headers = init.headers || {};\n\n // Sanity checks\n if (!init.url) throw new Error('Url is not defined');\n if (!init.method) init.method = 'GET';\n if (init.method && Client._allowedMethods.indexOf(init.method) < 0) throw new Error('Method has wrong value: ' + init.method);\n\n // Defaults\n init.credentials = init.credentials || 'include';\n init.mode = init.mode || 'cors';\n\n // Append Query String\n if (init.query) {\n init.url = init.url + (init.url.indexOf('?') > -1 ? '&' : '?') + queryStringify(init.query);\n }\n\n if (!(findHeaderName('Accept', init.headers))) {\n init.headers['Accept'] = ApiResponse._jsonContentType;\n }\n\n // Serialize body\n //TODO Check that body is a plain object\n if (typeof init.body !== 'string' || !init.body) {\n\n var contentTypeHeaderName = findHeaderName(ApiResponse._contentType, init.headers);\n\n if (!contentTypeHeaderName) {\n contentTypeHeaderName = ApiResponse._contentType;\n init.headers[contentTypeHeaderName] = ApiResponse._jsonContentType;\n }\n\n var contentType = init.headers[contentTypeHeaderName];\n\n // Assign a new encoded body\n if (contentType.indexOf(ApiResponse._jsonContentType) > -1) {\n init.body = JSON.stringify(init.body);\n } else if (contentType.indexOf(ApiResponse._urlencodedContentType) > -1) {\n init.body = queryStringify(init.body);\n }\n\n }\n\n // Create a request with encoded body\n var req = new Request(init.url, init);\n\n // Keep the original body accessible directly (for mocks)\n req.originalBody = init.body;\n\n return req;\n\n }\n\n}\n\n/**\n * @name IApiError\n * @property {string} stack\n * @property {string} originalMessage\n * @property {ApiResponse} apiResponse\n */\n\n\n/** WEBPACK FOOTER **\n ** ./src/http/Client.js\n **/","import {fetch, Request, Response, Headers, Promise} from '../core/Externals';\nimport * as utils from '../core/Utils';\n\n/**\n * Creates a response\n * @param stringBody\n * @param init\n * @return {Response}\n */\nexport function createResponse(stringBody, init) {\n\n init = init || {};\n\n var response = new Response(stringBody, init);\n\n //TODO Wait for https://github.com/bitinn/node-fetch/issues/38\n if (utils.isNodeJS()) {\n\n response._text = stringBody;\n response._decode = function() {\n return this._text;\n };\n\n }\n\n return response;\n\n}\n\nexport function findHeaderName(name, headers) {\n name = name.toLowerCase();\n return Object.keys(headers).reduce(function(res, key) {\n if (res) return res;\n if (name == key.toLowerCase()) return key;\n return res;\n }, null);\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/http/Utils.js\n **/","import {fetch, Request, Response, Headers, Promise} from '../core/Externals';\nimport * as utils from './Utils';\n\nexport default class ApiResponse {\n\n static _contentType = 'Content-Type';\n static _jsonContentType = 'application/json';\n static _multipartContentType = 'multipart/mixed';\n static _urlencodedContentType = 'application/x-www-form-urlencoded';\n static _headerSeparator = ':';\n static _bodySeparator = '\\n\\n';\n static _boundarySeparator = '--';\n\n /**\n * @param {Request} request\n * @param {Response} response\n * @param {string} responseText\n */\n constructor(request, response, responseText) {\n\n /** @type {Request} */\n this._request = request;\n\n /** @type {Response} */\n this._response = response;\n\n this._text = responseText;\n this._json = null;\n this._multipart = [];\n\n }\n\n /**\n * @return {Response}\n */\n response() {\n return this._response;\n }\n\n /**\n * @return {Request}\n */\n request() {\n return this._request;\n }\n\n /**\n * @return {boolean}\n */\n ok() {\n return this._response && this._response.ok;\n }\n\n /**\n * @return {string}\n */\n text() {\n if (!this._isJson() && !this._isMultipart()) throw new Error('Response is not text');\n return this._text;\n }\n\n /**\n * @return {object}\n */\n json() {\n if (!this._isJson()) throw new Error('Response is not JSON');\n if (!this._json) {\n this._json = this._text ? JSON.parse(this._text) : null;\n }\n return this._json;\n }\n\n /**\n * @param [skipOKCheck]\n * @return {string}\n */\n error(skipOKCheck) {\n\n if (this.ok() && !skipOKCheck) return null;\n\n var message = (this._response && this._response.status ? this._response.status + ' ' : '') +\n (this._response && this._response.statusText ? this._response.statusText : '');\n\n try {\n\n if (this.json().message) message = this.json().message;\n if (this.json().error_description) message = this.json().error_description;\n if (this.json().description) message = this.json().description;\n\n } catch (e) {}\n\n return message;\n\n }\n\n /**\n * @return {ApiResponse[]}\n */\n multipart() {\n\n if (!this._isMultipart()) throw new Error('Response is not multipart');\n\n if (!this._multipart.length) {\n\n // Step 1. Split multipart response\n\n var text = this.text();\n\n if (!text) throw new Error('No response body');\n\n var boundary = this._getContentType().match(/boundary=([^;]+)/i)[1];\n\n if (!boundary) throw new Error('Cannot find boundary');\n\n var parts = text.toString().split(ApiResponse._boundarySeparator + boundary);\n\n if (parts[0].trim() === '') parts.shift();\n if (parts[parts.length - 1].trim() == ApiResponse._boundarySeparator) parts.pop();\n\n if (parts.length < 1) throw new Error('No parts in body');\n\n // Step 2. Parse status info\n\n var statusInfo = ApiResponse.create(parts.shift(), this._response.status, this._response.statusText).json();\n\n // Step 3. Parse all other parts\n\n this._multipart = parts.map((part:string, i) => {\n\n var status = statusInfo.response[i].status;\n\n return ApiResponse.create(part, status);\n\n });\n\n }\n\n return this._multipart;\n\n }\n\n _isContentType(contentType) {\n return this._getContentType().indexOf(contentType) > -1;\n }\n\n _getContentType() {\n return this._response.headers.get(ApiResponse._contentType) || '';\n }\n\n _isMultipart() {\n return this._isContentType(ApiResponse._multipartContentType);\n }\n\n _isUrlEncoded() {\n return this._isContentType(ApiResponse._urlencodedContentType);\n }\n\n _isJson() {\n return this._isContentType(ApiResponse._jsonContentType);\n }\n\n /**\n * Method is used to create ApiResponse object from string parts of multipart/mixed response\n * @param {string} [text]\n * @param {number} [status]\n * @param {string} [statusText]\n * @return {ApiResponse}\n */\n static create(text, status, statusText) {\n\n text = text || '';\n status = status || 200;\n statusText = statusText || 'OK';\n\n text = text.replace(/\\r/g, '');\n\n var headers = new Headers(),\n headersAndBody = text.split(ApiResponse._bodySeparator),\n headersText = (headersAndBody.length > 1) ? headersAndBody.shift() : '';\n\n text = headersAndBody.join(ApiResponse._bodySeparator);\n\n (headersText || '')\n .split('\\n')\n .forEach((header:string) => {\n\n var split = header.trim().split(ApiResponse._headerSeparator),\n key = split.shift().trim(),\n value = split.join(ApiResponse._headerSeparator).trim();\n\n if (key) headers.append(key, value);\n\n });\n\n return new ApiResponse(null, utils.createResponse(text, {\n headers: headers,\n status: status,\n statusText: statusText\n }), text);\n\n }\n\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/http/ApiResponse.js\n **/","import Registry from './Registry';\nimport {default as HttpClient} from '../http/Client';\n\nexport default class Client extends HttpClient {\n\n constructor() {\n super();\n this._registry = new Registry();\n }\n\n registry() {\n return this._registry;\n }\n\n async _loadResponse(request) {\n\n var mock = this._registry.find(request);\n\n return await mock.getResponse(request);\n\n }\n\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/mocks/ClientMock.js\n **/","import Mock from './Mock';\n\nexport default class Registry {\n\n constructor() {\n this._mocks = [];\n }\n\n add(mock) {\n this._mocks.push(mock);\n return this;\n }\n\n clear() {\n this._mocks = [];\n return this;\n }\n\n find(request) {\n\n //console.log('Registry is looking for', request);\n\n var mock = this._mocks.shift();\n\n if (!mock) throw new Error('No mock in registry for request ' + request.method + ' ' + request.url);\n\n if (!mock.test(request)) throw new Error('Wrong request ' + request.method + ' ' + request.url +\n ' for expected mock ' + mock.method() + ' ' + mock.path());\n\n return mock;\n\n }\n\n apiCall(method:string, path:string, response:any, status, statusText) {\n\n this.add(new Mock(method, path, response, status, statusText));\n\n return this;\n\n }\n\n authentication() {\n\n this.apiCall('POST', '/restapi/oauth/token', {\n 'access_token': 'ACCESS_TOKEN',\n 'token_type': 'bearer',\n 'expires_in': 3600,\n 'refresh_token': 'REFRESH_TOKEN',\n 'refresh_token_expires_in': 60480,\n 'scope': 'SMS RCM Foo Boo',\n 'expireTime': new Date().getTime() + 3600000\n });\n\n return this;\n\n }\n\n logout() {\n\n this.apiCall('POST', '/restapi/oauth/revoke', {});\n\n return this;\n\n }\n\n presenceLoad(id) {\n\n this.apiCall('GET', '/restapi/v1.0/account/~/extension/' + id + '/presence', {\n \"uri\": \"https://platform.ringcentral.com/restapi/v1.0/account/123/extension/\" + id + \"/presence\",\n \"extension\": {\n \"uri\": \"https://platform.ringcentral.com/restapi/v1.0/account/123/extension/\" + id,\n \"id\": id,\n \"extensionNumber\": \"101\"\n },\n \"activeCalls\": [],\n \"presenceStatus\": \"Available\",\n \"telephonyStatus\": \"Ringing\",\n \"userStatus\": \"Available\",\n \"dndStatus\": \"TakeAllCalls\",\n \"extensionId\": id\n });\n\n return this;\n\n }\n\n subscribeGeneric(expiresIn) {\n\n expiresIn = expiresIn || 15 * 60 * 60;\n\n var date = new Date();\n\n this.apiCall('POST', '/restapi/v1.0/subscription', {\n 'eventFilters': [\n '/restapi/v1.0/account/~/extension/~/presence'\n ],\n 'expirationTime': new Date(date.getTime() + (expiresIn * 1000)).toISOString(),\n 'expiresIn': expiresIn,\n 'deliveryMode': {\n 'transportType': 'PubNub',\n 'encryption': false,\n 'address': '123_foo',\n 'subscriberKey': 'sub-c-foo',\n 'secretKey': 'sec-c-bar'\n },\n 'id': 'foo-bar-baz',\n 'creationTime': date.toISOString(),\n 'status': 'Active',\n 'uri': 'https://platform.ringcentral.com/restapi/v1.0/subscription/foo-bar-baz'\n });\n\n return this;\n\n }\n\n subscribeOnPresence(id, detailed) {\n\n id = id || '1';\n\n var date = new Date();\n\n this.apiCall('POST', '/restapi/v1.0/subscription', {\n 'eventFilters': ['/restapi/v1.0/account/~/extension/' + id + '/presence' + (detailed ? '?detailedTelephonyState=true' : '')],\n 'expirationTime': new Date(date.getTime() + (15 * 60 * 60 * 1000)).toISOString(),\n 'deliveryMode': {\n 'transportType': 'PubNub',\n 'encryption': true,\n 'address': '123_foo',\n 'subscriberKey': 'sub-c-foo',\n 'secretKey': 'sec-c-bar',\n 'encryptionAlgorithm': 'AES',\n 'encryptionKey': 'VQwb6EVNcQPBhE/JgFZ2zw=='\n },\n 'creationTime': date.toISOString(),\n 'id': 'foo-bar-baz',\n 'status': 'Active',\n 'uri': 'https://platform.ringcentral.com/restapi/v1.0/subscription/foo-bar-baz'\n });\n\n return this;\n\n }\n\n tokenRefresh(failure) {\n\n if (!failure) {\n\n this.apiCall('POST', '/restapi/oauth/token', {\n 'access_token': 'ACCESS_TOKEN_FROM_REFRESH',\n 'token_type': 'bearer',\n 'expires_in': 3600,\n 'refresh_token': 'REFRESH_TOKEN_FROM_REFRESH',\n 'refresh_token_expires_in': 60480,\n 'scope': 'SMS RCM Foo Boo'\n });\n\n } else {\n\n this.apiCall('POST', '/restapi/oauth/token', {\n 'message': 'Wrong token',\n 'error_description': 'Wrong token',\n 'description': 'Wrong token'\n }, 400);\n\n }\n\n return this;\n\n }\n\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/mocks/Registry.js\n **/","import ApiResponse from '../http/ApiResponse';\nimport {delay} from '../core/Utils';\nimport {createResponse} from '../http/Utils';\n\nexport default class Mock {\n\n constructor(method, path, json, status, statusText, delay) {\n this._method = method.toUpperCase();\n this._path = path;\n this._json = json || {};\n this._delay = delay || 10;\n this._status = status || 200;\n this._statusText = statusText || 'OK';\n }\n\n path() {\n return this._path;\n }\n\n method() {\n return this._method;\n }\n\n test(request:Request) {\n\n return request.url.indexOf(this._path) > -1 &&\n request.method.toUpperCase() == this._method;\n\n }\n\n async getResponse(request) {\n\n await delay(this._delay);\n\n return this.createResponse(this._json);\n\n }\n\n createResponse(json, init) {\n\n init = init || {};\n\n init.status = init.status || this._status;\n init.statusText = init.statusText || this._statusText;\n\n var str = JSON.stringify(json),\n res = createResponse(str, init);\n\n res.headers.set(ApiResponse._contentType, ApiResponse._jsonContentType);\n\n return res;\n\n }\n\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/mocks/Mock.js\n **/","import Observable from '../core/Observable';\nimport Queue from '../core/Queue';\nimport Auth from './Auth';\nimport {Promise} from '../core/Externals';\nimport {queryStringify, parseQueryString, delay} from '../core/Utils';\n\nexport default class Platform extends Observable {\n\n static _urlPrefix = '/restapi';\n static _apiVersion = 'v1.0';\n static _accessTokenTtl = null; // Platform server by default sets it to 60 * 60 = 1 hour\n static _refreshTokenTtl = 10 * 60 * 60; // 10 hours\n static _refreshTokenTtlRemember = 7 * 24 * 60 * 60; // 1 week\n static _tokenEndpoint = '/restapi/oauth/token';\n static _revokeEndpoint = '/restapi/oauth/revoke';\n static _authorizeEndpoint = '/restapi/oauth/authorize';\n static _refreshDelayMs = 100;\n static _cacheId = 'platform';\n static _clearCacheOnRefreshError = true;\n\n events = {\n beforeLogin: 'beforeLogin',\n loginSuccess: 'loginSuccess',\n loginError: 'loginError',\n beforeRefresh: 'beforeRefresh',\n refreshSuccess: 'refreshSuccess',\n refreshError: 'refreshError',\n beforeLogout: 'beforeLogout',\n logoutSuccess: 'logoutSuccess',\n logoutError: 'logoutError'\n };\n\n constructor(client, cache, server, appKey, appSecret) {\n\n super();\n\n this._server = server;\n this._appKey = appKey;\n this._appSecret = appSecret;\n\n /** @type {Cache} */\n this._cache = cache;\n\n /** @type {Client} */\n this._client = client;\n\n this._queue = new Queue(this._cache, Platform._cacheId + '-refresh');\n\n this._auth = new Auth(this._cache, Platform._cacheId);\n\n }\n\n /**\n * @return {Auth}\n */\n auth() {\n return this._auth;\n }\n\n /**\n * @return {Client}\n */\n client() {\n return this._client;\n }\n\n /**\n * @param {string} path\n * @param {object} [options]\n * @param {boolean} [options.addServer]\n * @param {string} [options.addMethod]\n * @param {boolean} [options.addToken]\n * @return {string}\n */\n createUrl(path, options) {\n\n path = path || '';\n options = options || {};\n\n var builtUrl = '',\n hasHttp = path.indexOf('http://') != -1 || path.indexOf('https://') != -1;\n\n if (options.addServer && !hasHttp) builtUrl += this._server;\n\n if (path.indexOf(Platform._urlPrefix) == -1 && !hasHttp) builtUrl += Platform._urlPrefix + '/' + Platform._apiVersion;\n\n builtUrl += path;\n\n if (options.addMethod || options.addToken) builtUrl += (path.indexOf('?') > -1 ? '&' : '?');\n\n if (options.addMethod) builtUrl += '_method=' + options.addMethod;\n if (options.addToken) builtUrl += (options.addMethod ? '&' : '') + 'access_token=' + this._auth.accessToken();\n\n return builtUrl;\n\n }\n\n /**\n * @param {string} options.redirectUri\n * @param {string} options.state\n * @param {string} options.brandId\n * @param {string} options.display\n * @param {string} options.prompt\n * @return {string}\n */\n authUrl(options) {\n\n options = options || {};\n\n return this.createUrl(Platform._authorizeEndpoint + '?' + queryStringify({\n 'response_type': 'code',\n 'redirect_uri': options.redirectUri || '',\n 'client_id': this._appKey,\n 'state': options.state || '',\n 'brand_id': options.brandId || '',\n 'display': options.display || '',\n 'prompt': options.prompt || ''\n }), {addServer: true})\n\n }\n\n /**\n * @param {string} url\n * @return {Object}\n */\n parseAuthRedirectUrl(url:string) {\n\n var qs = parseQueryString(url.split('?').reverse()[0]),\n error = qs.error_description || qs.error;\n\n if (error) {\n var e = new Error(error);\n e.error = qs.error;\n throw e;\n }\n\n return qs;\n\n }\n\n /**\n * @return {Promise}\n */\n async loggedIn() {\n\n try {\n await this._ensureAuthentication();\n return true;\n } catch (e) {\n return false;\n }\n\n }\n\n /**\n * @param {string} options.username\n * @param {string} options.password\n * @param {string} options.extension\n * @param {string} options.code\n * @param {string} options.redirectUri\n * @param {string} options.endpointId\n * @returns {Promise}\n */\n async login(options) {\n\n try {\n\n options = options || {};\n\n options.remember = options.remember || false;\n\n this.emit(this.events.beforeLogin);\n\n var body = {\n \"access_token_ttl\": Platform._accessTokenTtl,\n \"refresh_token_ttl\": options.remember ? Platform._refreshTokenTtlRemember : Platform._refreshTokenTtl\n };\n\n if (!options.code) {\n\n body.grant_type = 'password';\n body.username = options.username;\n body.password = options.password;\n body.extension = options.extension || '';\n\n } else if (options.code) {\n\n body.grant_type = 'authorization_code';\n body.code = options.code;\n body.redirect_uri = options.redirectUri;\n //body.client_id = this.getCredentials().key; // not needed\n\n }\n\n if (options.endpointId) body.endpoint_id = options.endpointId;\n\n var apiResponse = await this._tokenRequest(Platform._tokenEndpoint, body),\n json = apiResponse.json();\n\n this._auth\n .setData(json)\n .setRemember(options.remember);\n\n this.emit(this.events.loginSuccess, apiResponse);\n\n return apiResponse;\n\n } catch (e) {\n\n this._cache.clean();\n\n this.emit(this.events.loginError, e);\n\n throw e;\n\n }\n\n }\n\n /**\n * @returns {Promise}\n */\n async refresh() {\n\n try {\n\n this.emit(this.events.beforeRefresh);\n\n if (this._queue.isPaused()) {\n\n await this._queue.poll();\n\n if (!this._isAccessTokenValid()) {\n throw new Error('Automatic authentification timeout');\n }\n\n this.emit(this.events.refreshSuccess, null);\n\n return null;\n\n }\n\n this._queue.pause();\n\n // Make sure all existing AJAX calls had a chance to reach the server\n await delay(Platform._refreshDelayMs);\n\n // Perform sanity checks\n if (!this._auth.refreshToken()) throw new Error('Refresh token is missing');\n if (!this._auth.refreshTokenValid()) throw new Error('Refresh token has expired');\n if (!this._queue.isPaused()) throw new Error('Queue was resumed before refresh call');\n\n /** @type {ApiResponse} */\n var res = await this._tokenRequest(Platform._tokenEndpoint, {\n \"grant_type\": \"refresh_token\",\n \"refresh_token\": this._auth.refreshToken(),\n \"access_token_ttl\": Platform._accessTokenTtl,\n \"refresh_token_ttl\": this._auth.remember() ? Platform._refreshTokenTtlRemember : Platform._refreshTokenTtl\n }),\n json = res.json();\n\n if (!json.access_token) {\n throw this._client.makeError(new Error('Malformed OAuth response'), res);\n }\n\n this._auth.setData(json);\n this._queue.resume();\n\n this.emit(this.events.refreshSuccess, res);\n\n return res;\n\n } catch (e) {\n\n e = this._client.makeError(e);\n\n if (Platform._clearCacheOnRefreshError) {\n this._cache.clean();\n }\n\n this.emit(this.events.refreshError, e);\n\n throw e;\n\n }\n\n }\n\n /**\n * @returns {Promise}\n */\n async logout() {\n\n try {\n\n this.emit(this.events.beforeLogout);\n\n this._queue.pause();\n\n var res = await this._tokenRequest(Platform._revokeEndpoint, {\n token: this._auth.accessToken()\n });\n\n this._queue.resume();\n this._cache.clean();\n\n this.emit(this.events.logoutSuccess, res);\n\n return res;\n\n } catch (e) {\n\n this._queue.resume();\n\n this.emit(this.events.logoutError, e);\n\n throw e;\n\n }\n\n }\n\n /**\n * @param {Request} request\n * @param {object} [options]\n * @param {boolean} [options.skipAuthCheck]\n * @return {Promise}\n */\n async inflateRequest(request, options) {\n\n options = options || {};\n\n if (options.skipAuthCheck) return request;\n\n await this._ensureAuthentication();\n\n request.headers.set('Authorization', this._authHeader());\n //request.url = this.createUrl(request.url, {addServer: true}); //FIXME Spec prevents this...\n\n //TODO Add User-Agent here\n\n return request;\n\n }\n\n /**\n * @param {Request} request\n * @param {object} [options]\n * @param {boolean} [options.skipAuthCheck]\n * @return {Promise}\n */\n async sendRequest(request, options) {\n\n try {\n\n request = await this.inflateRequest(request, options);\n\n return (await this._client.sendRequest(request));\n\n } catch (e) {\n\n // Guard is for errors that come from polling\n if (!e.apiResponse || !e.apiResponse.response() || (e.apiResponse.response().status != 401)) throw e;\n\n this._auth.cancelAccessToken();\n\n return (await this.sendRequest(request, options));\n\n }\n\n }\n\n /**\n * General purpose function to send anything to server\n * @param {string} options.url\n * @param {object} [options.body]\n * @param {string} [options.method]\n * @param {object} [options.query]\n * @param {object} [options.headers]\n * @param {boolean} [options.skipAuthCheck]\n * @return {Promise}\n */\n async send(options = {}) {\n\n //FIXME https://github.com/bitinn/node-fetch/issues/43\n options.url = this.createUrl(options.url, {addServer: true});\n\n return await this.sendRequest(this._client.createRequest(options), options);\n\n }\n\n /**\n * @param {string} url\n * @param {object} [query]\n * @param {object} [options]\n * @param {object} [options.headers]\n * @param {boolean} [options.skipAuthCheck]\n * @return {Promise}\n */\n async get(url, query, options) {\n options = options || {};\n options.method = 'GET';\n options.url = url;\n options.query = query;\n return await this.send(options);\n }\n\n /**\n * @param {string} url\n * @param {object} body\n * @param {object} [query]\n * @param {object} [options]\n * @param {object} [options.headers]\n * @param {boolean} [options.skipAuthCheck]\n * @return {Promise}\n */\n async post(url, body, query, options) {\n options = options || {};\n options.method = 'POST';\n options.url = url;\n options.query = query;\n options.body = body;\n return await this.send(options);\n }\n\n /**\n * @param {string} url\n * @param {object} [body]\n * @param {object} [query]\n * @param {object} [options]\n * @param {object} [options.headers]\n * @param {boolean} [options.skipAuthCheck]\n * @return {Promise}\n */\n async put(url, body, query, options) {\n options = options || {};\n options.method = 'PUT';\n options.url = url;\n options.query = query;\n options.body = body;\n return await this.send(options);\n }\n\n /**\n * @param {string} url\n * @param {string} [query]\n * @param {object} [options]\n * @param {object} [options.headers]\n * @param {boolean} [options.skipAuthCheck]\n * @return {Promise}\n */\n async 'delete'(url, query, options) {\n options = options || {};\n options.method = 'DELETE';\n options.url = url;\n options.query = query;\n return await this.send(options);\n }\n\n async _tokenRequest(path, body) {\n\n return await this.send({\n url: path,\n skipAuthCheck: true,\n body: body,\n method: 'POST',\n headers: {\n 'Authorization': 'Basic ' + this._apiKey(),\n 'Content-Type': 'application/x-www-form-urlencoded'\n }\n });\n\n }\n\n async _ensureAuthentication() {\n\n if (this._isAccessTokenValid()) return null;\n return await this.refresh();\n\n }\n\n _isAccessTokenValid() {\n\n return (this._auth.accessTokenValid() && !this._queue.isPaused());\n\n }\n\n _apiKey() {\n var apiKey = this._appKey + ':' + this._appSecret;\n return (typeof btoa == 'function') ? btoa(apiKey) : new Buffer(apiKey).toString('base64');\n }\n\n _authHeader() {\n var token = this._auth.accessToken();\n return this._auth.tokenType() + (token ? ' ' + token : '');\n }\n\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/platform/Platform.js\n **/","export default class Auth {\n\n static refreshHandicapMs:number = 60 * 1000; // 1 minute\n static forcedTokenType = 'forced';\n\n constructor(cache, cacheId:string) {\n\n /** @type {Cache} */\n this._cache = cache;\n this._cacheId = cacheId;\n\n }\n\n accessToken() {\n return this.data().access_token;\n }\n\n refreshToken() {\n return this.data().refresh_token;\n }\n\n tokenType() {\n return this.data().token_type;\n }\n\n /**\n * @return {{token_type: string, access_token: string, expires_in: number, refresh_token: string, refresh_token_expires_in: number}}\n */\n data() {\n\n return this._cache.getItem(this._cacheId) || {\n token_type: '',\n access_token: '',\n expires_in: 0,\n refresh_token: '',\n refresh_token_expires_in: 0\n };\n\n }\n\n /**\n * @param {object} newData\n * @return {Auth}\n */\n setData(newData) {\n\n newData = newData || {};\n\n var data = this.data();\n\n Object.keys(newData).forEach((key) => {\n data[key] = newData[key];\n });\n\n data.expire_time = Date.now() + (data.expires_in * 1000);\n data.refresh_token_expire_time = Date.now() + (data.refresh_token_expires_in * 1000);\n\n this._cache.setItem(this._cacheId, data);\n\n return this;\n\n }\n\n /**\n * Check if there is a valid (not expired) access token\n * @return {boolean}\n */\n accessTokenValid() {\n\n var authData = this.data();\n return (authData.token_type === Auth.forcedTokenType || (authData.expire_time - Auth.refreshHandicapMs > Date.now()));\n\n }\n\n /**\n * Check if there is a valid (not expired) access token\n * @return {boolean}\n */\n refreshTokenValid() {\n\n return (this.data().refresh_token_expire_time > Date.now());\n\n }\n\n /**\n * @return {Auth}\n */\n cancelAccessToken() {\n\n return this.setData({\n access_token: '',\n expires_in: 0\n });\n\n }\n\n /**\n * This method sets a special authentication mode used in Service Web\n * @return {Auth}\n */\n forceAuthentication() {\n\n this.setData({\n token_type: Auth.forcedTokenType,\n access_token: '',\n expires_in: 0,\n refresh_token: '',\n refresh_token_expires_in: 0\n });\n\n return this;\n\n }\n\n /**\n * @param remember\n * @return {Auth}\n */\n setRemember(remember) {\n\n return this.setData({remember: remember});\n\n }\n\n /**\n * @return {boolean}\n */\n remember() {\n\n return !!this.data().remember;\n\n }\n\n}\n\n//export interface IAuthData {\n// remember?:boolean;\n// token_type?:string;\n// access_token?:string;\n// expires_in?:number; // actually it's string\n// expire_time?:number;\n// refresh_token?:string;\n// refresh_token_expires_in?:number; // actually it's string\n// refresh_token_expire_time?:number;\n// scope?:string;\n//}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/platform/Auth.js\n **/","import PubnubMock from './PubnubMock.js';\nimport {PUBNUB} from '../core/Externals';\n\nexport default class PubnubMockFactory {\n\n constructor() {\n this.crypto_obj = PUBNUB.crypto_obj;\n }\n\n init(options:PUBNUBInitOptions) {\n return new PubnubMock(options);\n }\n\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/pubnub/PubnubFactory.js\n **/","import Observable from '../core/Observable';\nimport {PUBNUB} from '../core/Externals';\n\nexport default class PubnubMock extends Observable {\n\n constructor(options) {\n super();\n this.options = options;\n this.crypto_obj = PUBNUB.crypto_obj;\n }\n\n ready() {}\n\n subscribe(options:PUBNUBSubscribeOptions) {\n this.on('message-' + options.channel, options.message);\n }\n\n unsubscribe(options:PUBNUBUnsubscribeOptions) {\n this.off('message-' + options.channel);\n }\n\n receiveMessage(msg, channel) {\n this.emit('message-' + channel, msg, 'env', channel);\n }\n\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/pubnub/PubnubMock.js\n **/","import Observable from '../core/Observable';\nimport Client from '../http/Client';\nimport {poll, stopPolling, delay} from '../core/Utils';\n\nexport default class Subscription extends Observable {\n\n static _renewHandicapMs = 2 * 60 * 1000;\n static _pollInterval = 10 * 1000;\n\n events = {\n notification: 'notification',\n removeSuccess: 'removeSuccess',\n removeError: 'removeError',\n renewSuccess: 'renewSuccess',\n renewError: 'renewError',\n subscribeSuccess: 'subscribeSuccess',\n subscribeError: 'subscribeError'\n };\n\n constructor(pubnubFactory, platform) {\n\n super();\n\n this._pubnubFactory = pubnubFactory;\n this._platform = platform;\n this._pubnub = null;\n this._timeout = null;\n this._subscription = {};\n\n }\n\n subscribed(){\n\n return !!(this._subscription.id &&\n this._subscription.deliveryMode &&\n this._subscription.deliveryMode.subscriberKey &&\n this._subscription.deliveryMode.address);\n\n }\n\n /**\n * @return {boolean}\n */\n alive() {\n\n return this.subscribed() && Date.now() < this.expirationTime();\n\n }\n\n expirationTime() {\n return new Date(this._subscription.expirationTime || 0).getTime() - Subscription._renewHandicapMs;\n }\n\n setSubscription(subscription) {\n\n subscription = subscription || {};\n\n this._clearTimeout();\n\n this._subscription = subscription;\n\n if (!this._pubnub) this._subscribeAtPubnub();\n\n this._setTimeout();\n\n return this;\n\n }\n\n subscription() {\n return this._subscription;\n }\n\n /**\n * Creates or updates subscription if there is an active one\n * @returns {Promise}\n */\n async register() {\n\n if (this.alive()) {\n return await this.renew();\n } else {\n return await this.subscribe();\n }\n\n }\n\n eventFilters() {\n return this._subscription.eventFilters || [];\n }\n\n /**\n * @param {string[]} events\n * @return {Subscription}\n */\n addEventFilters(events) {\n this.setEventFilters(this.eventFilters().concat(events));\n return this;\n }\n\n /**\n * @param {string[]} events\n * @return {Subscription}\n */\n setEventFilters(events) {\n this._subscription.eventFilters = events;\n return this;\n }\n\n /**\n * @returns {Promise}\n */\n async subscribe() {\n\n try {\n\n this._clearTimeout();\n\n if (!this.eventFilters().length) throw new Error('Events are undefined');\n\n var response = await this._platform.post('/restapi/v1.0/subscription', {\n eventFilters: this._getFullEventFilters(),\n deliveryMode: {\n transportType: 'PubNub'\n }\n }),\n json = response.json();\n\n this.setSubscription(json)\n .emit(this.events.subscribeSuccess, response);\n\n return response;\n\n\n } catch (e) {\n\n e = this._platform.client().makeError(e);\n\n this.reset()\n .emit(this.events.subscribeError, e);\n\n throw e;\n\n }\n\n }\n\n /**\n * @returns {Promise}\n */\n async renew() {\n\n try {\n\n this._clearTimeout();\n\n if (!this.alive()) throw new Error('Subscription is not alive');\n\n if (!this.eventFilters().length) throw new Error('Events are undefined');\n\n var response = await this._platform.put('/restapi/v1.0/subscription/' + this._subscription.id, {\n eventFilters: this._getFullEventFilters()\n });\n\n var json = response.json();\n\n this.setSubscription(json)\n .emit(this.events.renewSuccess, response);\n\n return response;\n\n } catch (e) {\n\n e = this._platform.client().makeError(e);\n\n this.reset()\n .emit(this.events.renewError, e);\n\n throw e;\n\n }\n\n }\n\n /**\n * @returns {Promise}\n */\n async remove() {\n\n try {\n\n if (!this.subscribed()) throw new Error('No subscription');\n\n var response = await this._platform.delete('/restapi/v1.0/subscription/' + this._subscription.id);\n\n this.reset()\n .emit(this.events.removeSuccess, response);\n\n return response;\n\n } catch (e) {\n\n e = this._platform.client().makeError(e);\n\n this.emit(this.events.removeError, e);\n\n throw e;\n\n }\n\n }\n\n /**\n * @returns {Promise}\n */\n resubscribe() {\n\n return this.reset().setEventFilters(this.eventFilters()).subscribe();\n\n }\n\n /**\n * Remove subscription and disconnect from PUBNUB\n * This method resets subscription at client side but backend is not notified\n */\n reset() {\n this._clearTimeout();\n if (this.subscribed() && this._pubnub) this._pubnub.unsubscribe({channel: this._subscription.deliveryMode.address});\n this._subscription = {};\n return this;\n }\n\n _getFullEventFilters() {\n\n return this.eventFilters().map((event) => {\n return this._platform.createUrl(event);\n });\n\n }\n\n _setTimeout() {\n\n this._clearTimeout();\n\n if (!this.alive()) throw new Error('Subscription is not alive');\n\n poll((next)=> {\n\n if (this.alive()) return next();\n\n this.renew();\n\n }, Subscription._pollInterval, this._timeout);\n\n return this;\n\n }\n\n _clearTimeout() {\n\n stopPolling(this._timeout);\n\n return this;\n\n }\n\n _decrypt(message:any) {\n\n if (!this.subscribed()) throw new Error('No subscription');\n\n if (this._subscription.deliveryMode.encryptionKey) {\n\n var PUBNUB = this._pubnubFactory;\n\n message = PUBNUB.crypto_obj.decrypt(message, this._subscription.deliveryMode.encryptionKey, {\n encryptKey: false,\n keyEncoding: 'base64',\n keyLength: 128,\n mode: 'ecb'\n });\n\n }\n\n return message;\n\n }\n\n _notify(message:any) {\n\n this.emit(this.events.notification, this._decrypt(message));\n\n return this;\n\n }\n\n _subscribeAtPubnub():Subscription {\n\n if (!this.alive()) throw new Error('Subscription is not alive');\n\n var PUBNUB = this._pubnubFactory;\n\n this._pubnub = PUBNUB.init({\n ssl: true,\n subscribe_key: this._subscription.deliveryMode.subscriberKey\n });\n\n this._pubnub.ready();\n\n this._pubnub.subscribe({\n channel: this._subscription.deliveryMode.address,\n message: this._notify.bind(this),\n connect: () => {}\n });\n\n return this;\n\n }\n\n}\n\n//export interface ISubscription {\n// id?:string;\n// uri?: string;\n// eventFilters?:string[];\n// expirationTime?:string; // 2014-03-12T19:54:35.613Z\n// expiresIn?:number;\n// deliveryMode?: {\n// transportType?:string;\n// encryption?:boolean;\n// address?:string;\n// subscriberKey?:string;\n// encryptionKey?:string;\n// secretKey?:string;\n// };\n// creationTime?:string; // 2014-03-12T19:54:35.613Z\n// status?:string; // Active\n//}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/subscription/Subscription.js\n **/","import Subscription from './Subscription';\nimport Queue from '../core/Queue';\n\nexport default class CachedSubscription extends Subscription {\n\n constructor(pubnubFactory, platform, cache, cacheKey) {\n\n super(pubnubFactory, platform);\n\n this._cache = cache;\n this._cacheKey = cacheKey;\n this._renewQueue = new Queue(this._cache, cacheKey + '-renew');\n this._resubscribeQueue = new Queue(this._cache, cacheKey + '-resubscribe');\n\n this.events = {\n ...this.events,\n queuedRenewSuccess: 'queuedRenewSuccess',\n queuedRenewError: 'queuedRenewError',\n queuedResubscribeSuccess: 'queuedResubscribeSuccess',\n queuedResubscribeError: 'queuedResubscribeError'\n };\n\n this.on(this.events.renewError, () => {\n this.resubscribe();\n });\n\n this.on([this.events.subscribeSuccess, this.events.renewSuccess], () => {\n this._cache.setItem(this._cacheKey, this.subscription());\n });\n\n this.on(this.events.removeSuccess, () => {\n this._cache.removeItem(this._cacheKey);\n });\n\n }\n\n /**\n * TODO Combine with Platform.refresh and move elsewhere\n * @param actionCb\n * @param queue\n * @param successEvent\n * @param errorEvent\n * @param errorMessage\n * @return {*}\n * @private\n */\n async _queue(actionCb, queue, successEvent, errorEvent, errorMessage) {\n\n try {\n\n if (queue.isPaused()) {\n\n await queue.poll();\n\n if (!this.alive()) {\n throw new Error(errorMessage);\n }\n\n this.emit(successEvent, null);\n\n return null;\n\n }\n\n queue.pause();\n\n var res = await actionCb.call(this);\n\n queue.resume();\n\n this.emit(successEvent, res);\n\n return res;\n\n } catch (e) {\n\n this.emit(errorEvent, e);\n\n throw e;\n\n }\n\n }\n\n /**\n * @returns {Promise}\n */\n renew() {\n\n return this._queue(\n super.renew,\n this._renewQueue,\n this.events.queuedRenewSuccess,\n this.events.queuedRenewError,\n 'Subscription is not alive after renew timeout'\n );\n\n }\n\n /**\n * @returns {Promise}\n */\n resubscribe() {\n\n return this._queue(\n super.resubscribe,\n this._resubscribeQueue,\n this.events.queuedResubscribeSuccess,\n this.events.queuedResubscribeError,\n 'Subscription is not alive after resubscribe timeout'\n );\n\n }\n\n /**\n * @param {string[]} events\n * @return {CachedSubscription}\n */\n restore(events) {\n\n var cachedSubscriptionData = this._cache.getItem(this._cacheKey);\n\n if (cachedSubscriptionData) {\n try {\n this.setSubscription(cachedSubscriptionData);\n } catch (e) {}\n } else {\n this.setEventFilters(events);\n }\n\n return this;\n\n }\n\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/subscription/CachedSubscription.js\n **/","/**\n * Copyright (c) 2014, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * https://raw.github.com/facebook/regenerator/master/LICENSE file. An\n * additional grant of patent rights can be found in the PATENTS file in\n * the same directory.\n */\n\n!(function(global) {\n \"use strict\";\n\n var hasOwn = Object.prototype.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n var inModule = typeof module === \"object\";\n var runtime = global.regeneratorRuntime;\n if (runtime) {\n if (inModule) {\n // If regeneratorRuntime is defined globally and we're in a module,\n // make the exports object identical to regeneratorRuntime.\n module.exports = runtime;\n }\n // Don't bother evaluating the rest of this file if the runtime was\n // already defined globally.\n return;\n }\n\n // Define the runtime globally (as expected by generated code) as either\n // module.exports (if we're in a module) or a new, empty object.\n runtime = global.regeneratorRuntime = inModule ? module.exports : {};\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided, then outerFn.prototype instanceof Generator.\n var generator = Object.create((outerFn || Generator).prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n runtime.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype;\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] = GeneratorFunction.displayName = \"GeneratorFunction\";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n runtime.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n runtime.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = \"GeneratorFunction\";\n }\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `value instanceof AwaitArgument` to determine if the yielded value is\n // meant to be awaited. Some may consider the name of this method too\n // cutesy, but they are curmudgeons.\n runtime.awrap = function(arg) {\n return new AwaitArgument(arg);\n };\n\n function AwaitArgument(arg) {\n this.arg = arg;\n }\n\n function AsyncIterator(generator) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value instanceof AwaitArgument) {\n return Promise.resolve(value.arg).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return Promise.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration. If the Promise is rejected, however, the\n // result for this iteration will be rejected with the same\n // reason. Note that rejections of yielded Promises are not\n // thrown back into the generator function, as is the case\n // when an awaited Promise is rejected. This difference in\n // behavior between yield and await is important, because it\n // allows the consumer to decide what to do with the yielded\n // rejection (swallow it and continue, manually .throw it back\n // into the generator, abandon iteration, whatever). With\n // await, by contrast, there is no opportunity to examine the\n // rejection reason outside the generator function, so the\n // only option is to throw it from the await expression, and\n // let the generator function handle the exception.\n result.value = unwrapped;\n resolve(result);\n }, reject);\n }\n }\n\n if (typeof process === \"object\" && process.domain) {\n invoke = process.domain.bind(invoke);\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new Promise(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n runtime.async = function(innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList)\n );\n\n return runtime.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n if (method === \"return\" ||\n (method === \"throw\" && delegate.iterator[method] === undefined)) {\n // A return or throw (when the delegate iterator has no throw\n // method) always terminates the yield* loop.\n context.delegate = null;\n\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n var returnMethod = delegate.iterator[\"return\"];\n if (returnMethod) {\n var record = tryCatch(returnMethod, delegate.iterator, arg);\n if (record.type === \"throw\") {\n // If the return method threw an exception, let that\n // exception prevail over the original return or throw.\n method = \"throw\";\n arg = record.arg;\n continue;\n }\n }\n\n if (method === \"return\") {\n // Continue with the outer return, now that the delegate\n // iterator has been terminated.\n continue;\n }\n }\n\n var record = tryCatch(\n delegate.iterator[method],\n delegate.iterator,\n arg\n );\n\n if (record.type === \"throw\") {\n context.delegate = null;\n\n // Like returning generator.throw(uncaught), but without the\n // overhead of an extra function call.\n method = \"throw\";\n arg = record.arg;\n continue;\n }\n\n // Delegate generator ran and handled its own exceptions so\n // regardless of what the method was, we continue as if it is\n // \"next\" with an undefined arg.\n method = \"next\";\n arg = undefined;\n\n var info = record.arg;\n if (info.done) {\n context[delegate.resultName] = info.value;\n context.next = delegate.nextLoc;\n } else {\n state = GenStateSuspendedYield;\n return info;\n }\n\n context.delegate = null;\n }\n\n if (method === \"next\") {\n if (state === GenStateSuspendedYield) {\n context.sent = arg;\n } else {\n context.sent = undefined;\n }\n\n } else if (method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw arg;\n }\n\n if (context.dispatchException(arg)) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n method = \"next\";\n arg = undefined;\n }\n\n } else if (method === \"return\") {\n context.abrupt(\"return\", arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n var info = {\n value: record.arg,\n done: context.done\n };\n\n if (record.arg === ContinueSentinel) {\n if (context.delegate && method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n arg = undefined;\n }\n } else {\n return info;\n }\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(arg) call above.\n method = \"throw\";\n arg = record.arg;\n }\n }\n };\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp[toStringTagSymbol] = \"Generator\";\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n runtime.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n runtime.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n this.sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n return !!caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.next = finallyEntry.finallyLoc;\n } else {\n this.complete(record);\n }\n\n return ContinueSentinel;\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = record.arg;\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n return ContinueSentinel;\n }\n };\n})(\n // Among the various tricks for obtaining a reference to the global\n // object, this seems to be the most reliable technique that does not\n // use indirect eval (which violates Content Security Policy).\n typeof global === \"object\" ? global :\n typeof window === \"object\" ? window :\n typeof self === \"object\" ? self : this\n);\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/regenerator/runtime.js\n ** module id = 26\n ** module chunks = 0\n **/"],"sourceRoot":""} \ No newline at end of file diff --git a/build/ringcentral-bundle.min.js b/build/ringcentral-bundle.min.js index bb6a59a7..9e4a51c5 100644 --- a/build/ringcentral-bundle.min.js +++ b/build/ringcentral-bundle.min.js @@ -1,5 +1,5 @@ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.SDK=t():(e.RingCentral=e.RingCentral||{},e.RingCentral.SDK=t())}(this,function(){return function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={exports:{},id:r,loaded:!1};return e[r].call(o.exports,o,o.exports,t),o.loaded=!0,o.exports}var n={};return t.m=e,t.c=n,t.p="/build/",t(0)}([function(e,t,n){e.exports=n(1)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}function o(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,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}t.__esModule=!0;var s=function(){function e(e,t){for(var n=0;ne;e+=2){var t=re[e],n=re[e+1];t(n),re[e]=void 0,re[e+1]=void 0}Y=0}function b(){try{var e=n(!function(){var e=new Error('Cannot find module "vertx"');throw e.code="MODULE_NOT_FOUND",e}());return G=e.runOnLoop||e.runOnContext,p()}catch(t){return y()}}function m(){}function v(){return new TypeError("You cannot resolve a promise with itself")}function g(){return new TypeError("A promises callback cannot return that same promise.")}function w(e){try{return e.then}catch(t){return ue.error=t,ue}}function k(e,t,n,r){try{e.call(t,n,r)}catch(o){return o}}function E(e,t,n){Q(function(e){var r=!1,o=k(n,t,function(n){r||(r=!0,t!==n?O(e,n):R(e,n))},function(t){r||(r=!0,C(e,t))},"Settle: "+(e._label||" unknown promise"));!r&&o&&(r=!0,C(e,o))},e)}function x(e,t){t._state===ie?R(e,t._result):t._state===se?C(e,t._result):P(t,void 0,function(t){O(e,t)},function(t){C(e,t)})}function S(e,t){if(t.constructor===e.constructor)x(e,t);else{var n=w(t);n===ue?C(e,ue.error):void 0===n?R(e,t):u(n)?E(e,t,n):R(e,t)}}function O(e,t){e===t?C(e,v()):s(t)?S(e,t):R(e,t)}function T(e){e._onerror&&e._onerror(e._result),M(e)}function R(e,t){e._state===oe&&(e._result=t,e._state=ie,0!==e._subscribers.length&&Q(M,e))}function C(e,t){e._state===oe&&(e._state=se,e._result=t,Q(T,e))}function P(e,t,n,r){var o=e._subscribers,i=o.length;e._onerror=null,o[i]=t,o[i+ie]=n,o[i+se]=r,0===i&&e._state&&Q(M,e)}function M(e){var t=e._subscribers,n=e._state;if(0!==t.length){for(var r,o,i=e._result,s=0;ss;s++)P(r.resolve(e[s]),void 0,t,n);return o}function L(e){var t=this;if(e&&"object"==typeof e&&e.constructor===t)return e;var n=new t(m);return O(n,e),n}function U(e){var t=this,n=new t(m);return C(n,e),n}function q(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function H(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}function K(e){this._id=de++,this._state=void 0,this._result=void 0,this._subscribers=[],m!==e&&(u(e)||q(),this instanceof K||H(),N(this,e))}function J(){var e;if("undefined"!=typeof o)e=o;else if("undefined"!=typeof self)e=self;else try{e=Function("return this")()}catch(t){throw new Error("polyfill failed because global object is unavailable in this environment")}var n=e.Promise;(!n||"[object Promise]"!==Object.prototype.toString.call(n.resolve())||n.cast)&&(e.Promise=ye)}var z;z=Array.isArray?Array.isArray:function(e){return"[object Array]"===Object.prototype.toString.call(e)};var G,V,W,X=z,Y=0,Q=({}.toString,c),$="undefined"!=typeof window?window:void 0,Z=$||{},ee=Z.MutationObserver||Z.WebKitMutationObserver,te="undefined"!=typeof process&&"[object process]"==={}.toString.call(process),ne="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,re=new Array(1e3);W=te?f():ee?h():ne?d():void 0===$?b():y();var oe=void 0,ie=1,se=2,ue=new A,ae=new A;D.prototype._validateInput=function(e){return X(e)},D.prototype._validationError=function(){return new Error("Array Methods must be provided an Array")},D.prototype._init=function(){this._result=new Array(this.length)};var ce=D;D.prototype._enumerate=function(){for(var e=this,t=e.length,n=e.promise,r=e._input,o=0;n._state===oe&&t>o;o++)e._eachEntry(r[o],o)},D.prototype._eachEntry=function(e,t){var n=this,r=n._instanceConstructor;a(e)?e.constructor===r&&e._state!==oe?(e._onerror=null,n._settledAt(e._state,t,e._result)):n._willSettleAt(r.resolve(e),t):(n._remaining--,n._result[t]=e)},D.prototype._settledAt=function(e,t,n){var r=this,o=r.promise;o._state===oe&&(r._remaining--,e===se?C(o,n):r._result[t]=n),0===r._remaining&&R(o,r._result)},D.prototype._willSettleAt=function(e,t){var n=this;P(e,void 0,function(e){n._settledAt(ie,t,e)},function(e){n._settledAt(se,t,e)})};var le=F,fe=I,pe=L,he=U,de=0,ye=K;K.all=le,K.race=fe,K.resolve=pe,K.reject=he,K._setScheduler=l,K._asap=Q,K.prototype={constructor:K,then:function(e,t){var n=this,r=n._state;if(r===ie&&!e||r===se&&!t)return this;var o=new this.constructor(m),i=n._result;if(r){var s=arguments[r-1];Q(function(){B(r,o,s,i)})}else P(n,o,e,t);return o},"catch":function(e){return this.then(null,e)}};var _e=J,be={Promise:ye,polyfill:_e};n(8).amd?(r=function(){return be}.call(t,n,t,i),!(void 0!==r&&(i.exports=r))):"undefined"!=typeof i&&i.exports?i.exports=be:"undefined"!=typeof this&&(this.ES6Promise=be),_e()}).call(this)}).call(t,n(5).setImmediate,function(){return this}(),n(7)(e))},function(e,t,n){(function(e,r){function o(e,t){this._id=e,this._clearFn=t}var i=n(6).nextTick,s=Function.prototype.apply,u=Array.prototype.slice,a={},c=0;t.setTimeout=function(){return new o(s.call(setTimeout,window,arguments),clearTimeout)},t.setInterval=function(){return new o(s.call(setInterval,window,arguments),clearInterval)},t.clearTimeout=t.clearInterval=function(e){e.close()},o.prototype.unref=o.prototype.ref=function(){},o.prototype.close=function(){this._clearFn.call(window,this._id)},t.enroll=function(e,t){clearTimeout(e._idleTimeoutId),e._idleTimeout=t},t.unenroll=function(e){clearTimeout(e._idleTimeoutId),e._idleTimeout=-1},t._unrefActive=t.active=function(e){clearTimeout(e._idleTimeoutId);var t=e._idleTimeout;t>=0&&(e._idleTimeoutId=setTimeout(function(){e._onTimeout&&e._onTimeout()},t))},t.setImmediate="function"==typeof e?e:function(e){var n=c++,r=arguments.length<2?!1:u.call(arguments,1);return a[n]=!0,i(function(){a[n]&&(r?e.apply(null,r):e.call(null),t.clearImmediate(n))}),n},t.clearImmediate="function"==typeof r?r:function(e){delete a[e]}}).call(t,n(5).setImmediate,n(5).clearImmediate)},function(e,t){function n(){c=!1,s.length?a=s.concat(a):l=-1,a.length&&r()}function r(){if(!c){var e=setTimeout(n);c=!0;for(var t=a.length;t;){for(s=a,a=[];++l1)for(var n=1;n-1?t:e}function c(e,t){t=t||{};var r=t.body;if(c.prototype.isPrototypeOf(e)){if(e.bodyUsed)throw new TypeError("Already read");this.url=e.url,this.credentials=e.credentials,t.headers||(this.headers=new n(e.headers)),this.method=e.method,this.mode=e.mode,r||(r=e._bodyInit,e.bodyUsed=!0)}else this.url=e;if(this.credentials=t.credentials||this.credentials||"omit",(t.headers||!this.headers)&&(this.headers=new n(t.headers)),this.method=a(t.method||this.method||"GET"),this.mode=t.mode||this.mode||null,this.referrer=null,("GET"===this.method||"HEAD"===this.method)&&r)throw new TypeError("Body not allowed for GET or HEAD requests");this._initBody(r)}function l(e){var t=new FormData;return e.trim().split("&").forEach(function(e){if(e){var n=e.split("="),r=n.shift().replace(/\+/g," "),o=n.join("=").replace(/\+/g," ");t.append(decodeURIComponent(r),decodeURIComponent(o))}}),t}function f(e){var t=new n,r=e.getAllResponseHeaders().trim().split("\n");return r.forEach(function(e){var n=e.trim().split(":"),r=n.shift().trim(),o=n.join(":").trim();t.append(r,o)}),t}function p(e,t){t||(t={}),this._initBody(e),this.type="default",this.url=null,this.status=t.status,this.ok=this.status>=200&&this.status<300,this.statusText=t.statusText,this.headers=t.headers instanceof n?t.headers:new n(t.headers),this.url=t.url||""}if(!self.fetch){n.prototype.append=function(n,r){n=e(n),r=t(r);var o=this.map[n];o||(o=[],this.map[n]=o),o.push(r)},n.prototype["delete"]=function(t){delete this.map[e(t)]},n.prototype.get=function(t){var n=this.map[e(t)];return n?n[0]:null},n.prototype.getAll=function(t){return this.map[e(t)]||[]},n.prototype.has=function(t){return this.map.hasOwnProperty(e(t))},n.prototype.set=function(n,r){this.map[e(n)]=[t(r)]},n.prototype.forEach=function(e,t){Object.getOwnPropertyNames(this.map).forEach(function(n){this.map[n].forEach(function(r){e.call(t,r,n,this)},this)},this)};var h={blob:"FileReader"in self&&"Blob"in self&&function(){try{return new Blob,!0}catch(e){return!1}}(),formData:"FormData"in self},d=["DELETE","GET","HEAD","OPTIONS","POST","PUT"];u.call(c.prototype),u.call(p.prototype),self.Headers=n,self.Request=c,self.Response=p,self.fetch=function(e,t){var n;return n=c.prototype.isPrototypeOf(e)&&!t?e:new c(e,t),new Promise(function(e,t){function r(){return"responseURL"in o?o.responseURL:/^X-Request-URL:/m.test(o.getAllResponseHeaders())?o.getResponseHeader("X-Request-URL"):void 0}var o=new XMLHttpRequest;o.onload=function(){var n=1223===o.status?204:o.status;if(100>n||n>599)return void t(new TypeError("Network request failed"));var i={status:n,statusText:o.statusText,headers:f(o),url:r()},s="response"in o?o.response:o.responseText;e(new p(s,i))},o.onerror=function(){t(new TypeError("Network request failed"))},o.open(n.method,n.url,!0),"include"===n.credentials&&(o.withCredentials=!0),"responseType"in o&&h.blob&&(o.responseType="blob"),n.headers.forEach(function(e,t){o.setRequestHeader(t,e)}),o.send("undefined"==typeof n._bodyInit?null:n._bodyInit)})},self.fetch.polyfill=!0}}()},function(module,exports,__webpack_require__){(function(module){function unique(){return"x"+ ++NOW+ +new Date}function rnow(){return+new Date}function build_url(e,t){var n=e.join(URLBIT),r=[];return t?(each(t,function(e,t){var n="object"==typeof t?JSON.stringify(t):t;"undefined"!=typeof t&&null!=t&&encode(n).length>0&&r.push(e+"="+encode(n))}),n+="?"+r.join(PARAMSBIT)):n}function updater(e,t){var n,r=0,o=function(){r+t>rnow()?(clearTimeout(n),n=setTimeout(o,t)):(r=rnow(),e())};return o}function grep(e,t){var n=[];return each(e||[],function(e){t(e)&&n.push(e)}),n}function supplant(e,t){return e.replace(REPL,function(e,n){return t[n]||e})}function timeout(e,t){return setTimeout(e,t)}function generate_uuid(e){var t="xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(e){var t=16*Math.random()|0,n="x"==e?t:3&t|8;return n.toString(16)});return e&&e(t),t}function isArray(e){return!!e&&"string"!=typeof e&&(Array.isArray&&Array.isArray(e)||"number"==typeof e.length)}function each(e,t){if(e&&t)if(isArray(e))for(var n=0,r=e.length;r>n;)t.call(e[n],e[n],n++);else for(var n in e)e.hasOwnProperty&&e.hasOwnProperty(n)&&t.call(e[n],n,e[n])}function map(e,t){var n=[];return each(e||[],function(e,r){n.push(t(e,r))}),n}function pam_encode(e){return encodeURIComponent(e).replace(/[!'()*~]/g,function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()})}function encode(e){return encodeURIComponent(e)}function generate_channel_list(e,t){var n=[];return each(e,function(e,r){t?e.search("-pnpres")<0&&r.subscribed&&n.push(e):r.subscribed&&n.push(e)}),n.sort()}function generate_channel_group_list(e,t){var n=[];return each(e,function(e,r){t?e.search("-pnpres")<0&&r.subscribed&&n.push(e):r.subscribed&&n.push(e)}),n.sort()}function ready(){timeout(function(){READY||(READY=1,each(READY_BUFFER,function(e){e()}))},SECOND)}function PNmessage(e){return msg=e||{apns:{}},msg.getPubnubMessage=function(){var e={};if(Object.keys(msg.apns).length){e.pn_apns={aps:{alert:msg.apns.alert,badge:msg.apns.badge}};for(var t in msg.apns)e.pn_apns[t]=msg.apns[t];var n=["badge","alert"];for(var t in n)delete e.pn_apns[n[t]]}msg.gcm&&(e.pn_gcm={data:msg.gcm});for(var t in msg)e[t]=msg[t];var r=["apns","gcm","publish","channel","callback","error"];for(var t in r)delete e[r[t]];return e},msg.publish=function(){var e=msg.getPubnubMessage();msg.pubnub&&msg.channel&&msg.pubnub.publish({message:e,channel:msg.channel,callback:msg.callback,error:msg.error})},msg}function PN_API(e){function t(e){return e||(e={}),each(ie,function(t,n){t in e||(e[t]=n)}),e}function r(e){var t=[];return each(e,function(e,n){t.push(e)}),t}function o(e){return r(e).sort()}function i(e){var t="",n=o(e);for(var r in n){var i=n[r];t+=i+"="+pam_encode(e[i]),r!=n.length-1&&(t+="&")}return t}function s(e,t,n){var r=!1;if("undefined"==typeof e)return t;if("number"==typeof e)r=e>PRESENCE_HB_THRESHOLD||0==e?!1:!0;else{if("boolean"==typeof e)return e?PRESENCE_HB_DEFAULT:0;r=!0}return r?(n&&n("Presence Heartbeat value invalid. Valid range ( x > "+PRESENCE_HB_THRESHOLD+" or x = 0). Current Value : "+(t||PRESENCE_HB_THRESHOLD)),t||PRESENCE_HB_THRESHOLD):e}function u(e,t){return be.encrypt(e,t||le)||e}function a(e,t){return be.decrypt(e,t||le)||be.decrypt(e,le)||e}function c(){return clearTimeout($),!ee||ee>=500||1>ee||!generate_channel_list(X,!0).length&&!generate_channel_group_list(Y,!0).length?void(te=!1):(te=!0,void me.presence_heartbeat({callback:function(e){$=timeout(c,ee*SECOND)},error:function(e){se&&se("Presence Heartbeat unable to reach Pubnub servers."+JSON.stringify(e)),$=timeout(c,ee*SECOND)}}))}function l(){!te&&c()}function f(e){if(ne){if(!U.length)return}else{if(e&&(U.sending=0),U.sending||!U.length)return;U.sending=1}oe(U.shift())}function p(e){var t=0;return each(generate_channel_group_list(Y),function(n){var r=Y[n];r&&(t++,(e||function(){})(r))}),t}function h(e){var t=0;return each(generate_channel_list(X),function(n){var r=X[n];r&&(t++,(e||function(){})(r))}),t}function d(e,t,n){if("object"==typeof e){if(e.error){var r={};return e.message&&(r.message=e.message),e.payload&&(r.payload=e.payload),void(n&&n(r))}if(e.payload)return void(e.next_page?t&&t(e.payload,e.next_page):t&&t(e.payload))}t&&t(e)}function y(e,t){if("object"==typeof e&&e.error){var n={};return e.message&&(n.message=e.message),e.payload&&(n.payload=e.payload),void(t&&t(n))}t&&t(e)}function _(e,n,r,o){var n=e.callback||n,i=e.error||se,s=ae();o=o||{},o.auth||(o.auth=e.auth_key||A);var u=[F,"v1","channel-registration","sub-key",M];u.push.apply(u,r),s&&(o.callback=s),oe({callback:s,data:t(o),success:function(e){d(e,n,i)},fail:function(e){y(e,i)},url:u})}function b(){ue()||v(1,{error:"Offline. Please check your network settings. "}),E&&clearTimeout(E),E=timeout(b,SECOND)}function m(){R&&me.time(function(e){w(function(){},e),e||v(1,{error:"Heartbeat failed to connect to Pubnub Servers.Please check your network settings."}),x&&clearTimeout(x),x=timeout(m,T)})}function v(e,t){z&&z(e,t),z=null,clearTimeout(E),clearTimeout(x)}function g(e){var t=rnow()-H;return t-e/1e4}function w(e,t){function n(t){if(t){var n=t/1e4,o=(rnow()-r)/2;H=rnow()-(n+o),e&&e(H)}}var r=rnow();t&&n(t)||me.time(n)}var E,x,S=+e.windowing||DEF_WINDOWING,O=(+e.timeout||DEF_SUB_TIMEOUT)*SECOND,T=(+e.keepalive||DEF_KEEPALIVE)*SECOND,R=e.timecheck||0,C=e.noleave||0,P=e.publish_key,M=e.subscribe_key,A=e.auth_key||"",j=e.secret_key||"",B=e.hmac_SHA256,N=e.ssl?"s":"",D="http"+N+"://"+(e.origin||"pubsub.pubnub.com"),F=nextorigin(D),I=nextorigin(D),L=function(){},U=[],q=!0,H=0,K=0,J=0,z=0,G=e.restore||0,V=0,W=!1,X={},Y={},Q={},$=null,Z=s(e.heartbeat||e.pnexpires||0,e.error),ee=e.heartbeat_interval||Z/2-1,te=!1,ne=e.no_wait_for_pending,re=e["compatible_3.5"]||!1,oe=e.xdr,ie=e.params||{},se=e.error||function(){},ue=e._is_online||function(){return 1},ae=e.jsonp_cb||function(){return 0},ce=e.db||{get:function(){},set:function(){}},le=e.cipher_key,fe=e.uuid||!e.unique_uuid&&ce&&ce.get(M+"uuid")||"",pe=e.instance_id||!1,he="",de=e.shutdown,ye="undefined"!=typeof e.use_send_beacon?e.use_send_beacon:!0,_e=ye?e.sendBeacon:null;2===Z&&(ee=1);var be=e.crypto_obj||{encrypt:function(e,t){return e},decrypt:function(e,t){return e}},me={LEAVE:function(e,n,r,o,i){var s,u={uuid:fe,auth:r||A},a=nextorigin(D),o=o||function(){},c=i||function(){},l=ae();if(e.indexOf(PRESENCE_SUFFIX)>0)return!0;if(re){if(!N)return!1;if("0"==l)return!1}return C?!1:("0"!=l&&(u.callback=l),pe&&(u.instanceid=he),s=[a,"v2","presence","sub_key",M,"channel",encode(e),"leave"],ie=t(u),_e&&(url_string=build_url(s,ie),_e(url_string))?(o&&o({status:200,action:"leave",message:"OK",service:"Presence"}),!0):(oe({blocking:n||N,timeout:2e3,callback:l,data:ie,success:function(e){d(e,o,c)},fail:function(e){y(e,c)},url:s}),!0))},LEAVE_GROUP:function(e,n,r,o,i){var s={uuid:fe,auth:r||A},u=nextorigin(D),o=o||function(){},a=i||function(){},c=ae();if(e.indexOf(PRESENCE_SUFFIX)>0)return!0;if(re){if(!N)return!1;if("0"==c)return!1}return C?!1:("0"!=c&&(s.callback=c),e&&e.length>0&&(s["channel-group"]=e),pe&&(s.instanceid=he),oe({blocking:n||N,timeout:5e3,callback:c,data:t(s),success:function(e){d(e,o,a)},fail:function(e){y(e,a)},url:[u,"v2","presence","sub_key",M,"channel",encode(","),"leave"]}),!0)},set_resumed:function(e){W=e},get_cipher_key:function(){return le},set_cipher_key:function(e){le=e},raw_encrypt:function(e,t){return u(e,t)},raw_decrypt:function(e,t){return a(e,t)},get_heartbeat:function(){return Z},set_heartbeat:function(e,t){Z=s(e,Z,se),ee=t||Z/2-1,2==Z&&(ee=1),L(),c()},get_heartbeat_interval:function(){return ee},set_heartbeat_interval:function(e){ee=e,c()},get_version:function(){return SDK_VER},getGcmMessageObject:function(e){return{data:e}},getApnsMessageObject:function(e){var t={aps:{badge:1,alert:""}};for(k in e)k[t]=e[k];return t},newPnMessage:function(){var e={};gcm&&(e.pn_gcm=gcm),apns&&(e.pn_apns=apns);for(k in n)e[k]=n[k];return e},_add_param:function(e,t){ie[e]=t},channel_group:function(e,t){var n,r,o=e.channel_group,t=t||e.callback,i=e.channels||e.channel,s=e.cloak,u=[],a={},c=e.mode||"add";if(o){var l=o.split(":");l.length>1?(n="*"===l[0]?null:l[0],r=l[1]):r=l[0]}n&&u.push("namespace")&&u.push(encode(n)),u.push("channel-group"),r&&"*"!==r&&u.push(r),i?(isArray(i)&&(i=i.join(",")),a[c]=i,a.cloak=q?"true":"false"):"remove"===c&&u.push("remove"),"undefined"!=typeof s&&(a.cloak=s?"true":"false"),_(e,t,u,a)},channel_group_list_groups:function(e,t){var n;n=e.namespace||e.ns||e.channel_group||null,n&&(e.channel_group=n+":*"),me.channel_group(e,t)},channel_group_list_channels:function(e,t){return e.channel_group?void me.channel_group(e,t):se("Missing Channel Group")},channel_group_remove_channel:function(e,t){return e.channel_group?e.channel||e.channels?(e.mode="remove",void me.channel_group(e,t)):se("Missing Channel"):se("Missing Channel Group")},channel_group_remove_group:function(e,t){return e.channel_group?e.channel?se("Use channel_group_remove_channel if you want to remove a channel from a group."):(e.mode="remove",void me.channel_group(e,t)):se("Missing Channel Group")},channel_group_add_channel:function(e,t){return e.channel_group?e.channel||e.channels?void me.channel_group(e,t):se("Missing Channel"):se("Missing Channel Group")},channel_group_cloak:function(e,t){return"undefined"==typeof e.cloak?void t(q):(q=e.cloak,void me.channel_group(e,t))},channel_group_list_namespaces:function(e,t){var n=["namespace"];_(e,t,n)},channel_group_remove_namespace:function(e,t){var n=["namespace",e.namespace,"remove"];_(e,t,n)},history:function(e,n){var n=e.callback||n,r=e.count||e.limit||100,o=e.reverse||"false",i=e.error||function(){},s=e.auth_key||A,u=e.cipher_key,c=e.channel,l=e.channel_group,f=e.start,p=e.end,h=e.include_token,d=e.string_message_token||!1,_={},b=ae();return c||l?n?M?(_.stringtoken="true",_.count=r,_.reverse=o,_.auth=s,l&&(_["channel-group"]=l,c||(c=",")),b&&(_.callback=b),f&&(_.start=f),p&&(_.end=p),h&&(_.include_token="true"),d&&(_.string_message_token="true"),void oe({callback:b,data:t(_),success:function(e){if("object"==typeof e&&e.error)return void i({message:e.message,payload:e.payload});for(var t=e[0],r=[],o=0;o2&&(s.state=JSON.stringify(Q)),Z&&(s.heartbeat=Z),pe&&(s.instanceid=he),l(),z=oe({timeout:E,callback:e,fail:function(e){e&&e.error&&e.service?(y(e,d),r(1)):me.time(function(t){!t&&y(e,d),r(t)})},data:t(s),url:[I,"subscribe",M,encode(n),e,V],success:function(e){if(!e||"object"==typeof e&&"error"in e&&e.error)return d(e.error),timeout(L,SECOND);if(_(e[1]),V=!V&&G&&ce.get(M)||e[1],h(function(e){e.connected||(e.connected=1,e.connect(e.name))}),p(function(e){e.connected||(e.connected=1,e.connect(e.name))}),W&&!G)return V=0,W=!1,ce.set(M,0),void timeout(o,x);w&&(V=1e4,w=0),ce.set(M,e[1]);var t=function(){var t="",n="";e.length>3?(t=e[3],n=e[2]):t=e.length>2?e[2]:map(generate_channel_list(X),function(t){return map(Array(e[0].length).join(",").split(","),function(){return t})}).join(",");var r=t.split(","),o=n?n.split(","):[];return function(){var e=r.shift()||J,t=o.shift(),n={};t?(e&&e.indexOf("-pnpres")>=0&&t.indexOf("-pnpres")<0&&(t+="-pnpres"),n=Y[t]||X[t]||{callback:function(){}}):n=X[e];var i=[n.callback||K,e.split(PRESENCE_SUFFIX)[0]]; -return t&&i.push(t.split(PRESENCE_SUFFIX)[0]),i}}(),n=g(+e[1]);each(e[0],function(r){var o=t(),i=a(r,X[o[1]]?X[o[1]].cipher_key:null);o[0]&&o[0](i,e,o[2]||o[1],n,o[1])}),timeout(o,x)}})}}var i=e.channel,s=e.channel_group,n=n||e.callback,n=n||e.message,u=e.connect||function(){},c=e.reconnect||function(){},f=e.disconnect||function(){},d=e.error||d||function(){},_=e.idle||function(){},b=e.presence||0,m=e.noheresync||0,w=e.backfill||0,k=e.timetoken||0,E=e.timeout||O,x=e.windowing||S,T=e.state,R=e.heartbeat||e.pnexpires,C=e.heartbeat_interval,P=e.restore||G;return A=e.auth_key||A,G=P,V=k,i||s?n?M?((R||0===R||C||0===C)&&me.set_heartbeat(R,C),i&&each((i.join?i.join(","):""+i).split(","),function(r){var o=X[r]||{};X[J=r]={name:r,connected:o.connected,disconnected:o.disconnected,subscribed:1,callback:K=n,cipher_key:e.cipher_key,connect:u,disconnect:f,reconnect:c},T&&(r in T?Q[r]=T[r]:Q[r]=T),b&&(me.subscribe({channel:r+PRESENCE_SUFFIX,callback:b,restore:P}),o.subscribed||m||me.here_now({channel:r,data:t({uuid:fe,auth:A}),callback:function(e){each("uuids"in e?e.uuids:[],function(t){b({action:"join",uuid:t,timestamp:Math.floor(rnow()/1e3),occupancy:e.occupancy||1},e,r)})}}))}),s&&each((s.join?s.join(","):""+s).split(","),function(r){var o=Y[r]||{};Y[r]={name:r,connected:o.connected,disconnected:o.disconnected,subscribed:1,callback:K=n,cipher_key:e.cipher_key,connect:u,disconnect:f,reconnect:c},b&&(me.subscribe({channel_group:r+PRESENCE_SUFFIX,callback:b,restore:P,auth_key:A}),o.subscribed||m||me.here_now({channel_group:r,data:t({uuid:fe,auth:A}),callback:function(e){each("uuids"in e?e.uuids:[],function(t){b({action:"join",uuid:t,timestamp:Math.floor(rnow()/1e3),occupancy:e.occupancy||1},e,r)})}}))}),L=function(){v(),timeout(o,x)},READY?void L():READY_BUFFER.push(L)):se("Missing Subscribe Key"):se("Missing Callback"):se("Missing Channel")},here_now:function(e,n){var n=e.callback||n,r=e.error||function(){},o=e.auth_key||A,i=e.channel,s=e.channel_group,u=ae(),a="uuids"in e?e.uuids:!0,c=e.state,l={uuid:fe,auth:o};if(a||(l.disable_uuids=1),c&&(l.state=1),!n)return se("Missing Callback");if(!M)return se("Missing Subscribe Key");var f=[F,"v2","presence","sub_key",M];i&&f.push("channel")&&f.push(encode(i)),"0"!=u&&(l.callback=u),s&&(l["channel-group"]=s,!i&&f.push("channel")&&f.push(",")),pe&&(l.instanceid=he),oe({callback:u,data:t(l),success:function(e){d(e,n,r)},fail:function(e){y(e,r)},url:f})},where_now:function(e,n){var n=e.callback||n,r=e.error||function(){},o=e.auth_key||A,i=ae(),s=e.uuid||fe,u={auth:o};return n?M?("0"!=i&&(u.callback=i),pe&&(u.instanceid=he),void oe({callback:i,data:t(u),success:function(e){d(e,n,r)},fail:function(e){y(e,r)},url:[F,"v2","presence","sub_key",M,"uuid",encode(s)]})):se("Missing Subscribe Key"):se("Missing Callback")},state:function(e,n){var r,n=e.callback||n||function(e){},o=e.error||function(){},i=e.auth_key||A,s=ae(),u=e.state,a=e.uuid||fe,c=e.channel,l=e.channel_group,f=t({auth:i});return M?a?c||l?("0"!=s&&(f.callback=s),"undefined"!=typeof c&&X[c]&&X[c].subscribed&&u&&(Q[c]=u),"undefined"!=typeof l&&Y[l]&&Y[l].subscribed&&(u&&(Q[l]=u),f["channel-group"]=l,c||(c=",")),f.state=JSON.stringify(u),pe&&(f.instanceid=he),r=u?[F,"v2","presence","sub-key",M,"channel",c,"uuid",a,"data"]:[F,"v2","presence","sub-key",M,"channel",c,"uuid",encode(a)],void oe({callback:s,data:t(f),success:function(e){d(e,n,o)},fail:function(e){y(e,o)},url:r})):se("Missing Channel"):se("Missing UUID"):se("Missing Subscribe Key")},grant:function(e,n){var n=e.callback||n,r=e.error||function(){},o=e.channel||e.channels,s=e.channel_group,u=ae(),a=e.ttl,c=e.read?"1":"0",l=e.write?"1":"0",f=e.manage?"1":"0",p=e.auth_key||e.auth_keys;if(!n)return se("Missing Callback");if(!M)return se("Missing Subscribe Key");if(!P)return se("Missing Publish Key");if(!j)return se("Missing Secret Key");var h=Math.floor((new Date).getTime()/1e3),_=M+"\n"+P+"\ngrant\n",b={w:l,r:c,timestamp:h};e.manage&&(b.m=f),isArray(o)&&(o=o.join(",")),isArray(p)&&(p=p.join(",")),"undefined"!=typeof o&&null!=o&&o.length>0&&(b.channel=o),"undefined"!=typeof s&&null!=s&&s.length>0&&(b["channel-group"]=s),"0"!=u&&(b.callback=u),(a||0===a)&&(b.ttl=a),p&&(b.auth=p),b=t(b),p||delete b.auth,_+=i(b);var m=B(_,j);m=m.replace(/\+/g,"-"),m=m.replace(/\//g,"_"),b.signature=m,oe({callback:u,data:b,success:function(e){d(e,n,r)},fail:function(e){y(e,r)},url:[F,"v1","auth","grant","sub-key",M]})},mobile_gw_provision:function(e){var t,n,r=e.callback||function(){},o=e.auth_key||A,i=e.error||function(){},s=ae(),u=e.channel,a=e.op,c=e.gw_type,l=e.device_id;return l?c?a?u?P?M?(n=[F,"v1/push/sub-key",M,"devices",l],t={uuid:fe,auth:o,type:c},"add"==a?t.add=u:"remove"==a&&(t.remove=u),pe&&(data.instanceid=he),void oe({callback:s,data:t,success:function(e){d(e,r,i)},fail:function(e){y(e,i)},url:n})):se("Missing Subscribe Key"):se("Missing Publish Key"):se("Missing gw destination Channel (channel)"):se("Missing GW Operation (op: add or remove)"):se("Missing GW Type (gw_type: gcm or apns)"):se("Missing Device ID (device_id)")},audit:function(e,n){var n=e.callback||n,r=e.error||function(){},o=e.channel,s=e.channel_group,u=e.auth_key,a=ae();if(!n)return se("Missing Callback");if(!M)return se("Missing Subscribe Key");if(!P)return se("Missing Publish Key");if(!j)return se("Missing Secret Key");var c=Math.floor((new Date).getTime()/1e3),l=M+"\n"+P+"\naudit\n",f={timestamp:c};"0"!=a&&(f.callback=a),"undefined"!=typeof o&&null!=o&&o.length>0&&(f.channel=o),"undefined"!=typeof s&&null!=s&&s.length>0&&(f["channel-group"]=s),u&&(f.auth=u),f=t(f),u||delete f.auth,l+=i(f);var p=B(l,j);p=p.replace(/\+/g,"-"),p=p.replace(/\//g,"_"),f.signature=p,oe({callback:a,data:f,success:function(e){d(e,n,r)},fail:function(e){y(e,r)},url:[F,"v1","auth","audit","sub-key",M]})},revoke:function(e,t){e.read=!1,e.write=!1,me.grant(e,t)},set_uuid:function(e){fe=e,L()},get_uuid:function(){return fe},isArray:function(e){return isArray(e)},get_subscibed_channels:function(){return generate_channel_list(X,!0)},presence_heartbeat:function(e){var n=e.callback||function(){},r=e.error||function(){},o=ae(),i={uuid:fe,auth:A},s=JSON.stringify(Q);s.length>2&&(i.state=JSON.stringify(Q)),Z>0&&320>Z&&(i.heartbeat=Z),"0"!=o&&(i.callback=o);var u=encode(generate_channel_list(X,!0).join(",")),a=generate_channel_group_list(Y,!0).join(",");u||(u=","),a&&(i["channel-group"]=a),pe&&(i.instanceid=he),oe({callback:o,data:t(i),timeout:5*SECOND,url:[F,"v2","presence","sub-key",M,"channel",u,"heartbeat"],success:function(e){d(e,n,r)},fail:function(e){y(e,r)}})},stop_timers:function(){clearTimeout(E),clearTimeout(x),clearTimeout($)},shutdown:function(){me.stop_timers(),de&&de()},xdr:oe,ready:ready,db:ce,uuid:generate_uuid,map:map,each:each,"each-channel":h,grep:grep,offline:function(){v(1,{message:"Offline. Please check your network settings."})},supplant:supplant,now:rnow,unique:unique,updater:updater};return fe||(fe=me.uuid()),he||(he=me.uuid()),ce.set(M+"uuid",fe),E=timeout(b,SECOND),x=timeout(m,T),$=timeout(l,(ee-3)*SECOND),w(),me}function crypto_obj(){function e(e){return CryptoJS.SHA256(e).toString(CryptoJS.enc.Hex)}function t(e){return e=e||{},e.hasOwnProperty("encryptKey")||(e.encryptKey=l.encryptKey),e.hasOwnProperty("keyEncoding")||(e.keyEncoding=l.keyEncoding),e.hasOwnProperty("keyLength")||(e.keyLength=l.keyLength),e.hasOwnProperty("mode")||(e.mode=l.mode),-1==u.indexOf(e.keyEncoding.toLowerCase())&&(e.keyEncoding=l.keyEncoding),-1==a.indexOf(parseInt(e.keyLength,10))&&(e.keyLength=l.keyLength),-1==c.indexOf(e.mode.toLowerCase())&&(e.mode=l.mode),e}function n(e,t){return"base64"==t.keyEncoding?CryptoJS.enc.Base64.parse(e):"hex"==t.keyEncoding?CryptoJS.enc.Hex.parse(e):e}function r(t,r){return t=n(t,r),r.encryptKey?CryptoJS.enc.Utf8.parse(e(t).slice(0,32)):t}function o(e){return"ecb"==e.mode?CryptoJS.mode.ECB:CryptoJS.mode.CBC}function i(e){return"cbc"==e.mode?CryptoJS.enc.Utf8.parse(s):null}var s="0123456789012345",u=["hex","utf8","base64","binary"],a=[128,256],c=["ecb","cbc"],l={encryptKey:!0,keyEncoding:"utf8",keyLength:256,mode:"cbc"};return{encrypt:function(e,n,s){if(!n)return e;s=t(s);var u=i(s),a=o(s),c=r(n,s),l=JSON.stringify(e),f=CryptoJS.AES.encrypt(l,c,{iv:u,mode:a}).ciphertext,p=f.toString(CryptoJS.enc.Base64);return p||e},decrypt:function(e,n,s){if(!n)return e;s=t(s);var u=i(s),a=o(s),c=r(n,s);try{var l=CryptoJS.enc.Base64.parse(e),f=CryptoJS.AES.decrypt({ciphertext:l},c,{iv:u,mode:a}).toString(CryptoJS.enc.Utf8),p=JSON.parse(f);return p}catch(h){return void 0}}}}window.JSON&&window.JSON.stringify||function(){function toJSON(e){try{return this.valueOf()}catch(t){return null}}function quote(e){return escapable.lastIndex=0,escapable.test(e)?'"'+e.replace(escapable,function(e){var t=meta[e];return"string"==typeof t?t:"\\u"+("0000"+e.charCodeAt(0).toString(16)).slice(-4)})+'"':'"'+e+'"'}function str(e,t){var n,r,o,i,s,u=gap,a=t[e];switch(a&&"object"==typeof a&&(a=toJSON.call(a,e)),"function"==typeof rep&&(a=rep.call(t,e,a)),typeof a){case"string":return quote(a);case"number":return isFinite(a)?String(a):"null";case"boolean":case"null":return String(a);case"object":if(!a)return"null";if(gap+=indent,s=[],"[object Array]"===Object.prototype.toString.apply(a)){for(i=a.length,n=0;i>n;n+=1)s[n]=str(n,a)||"null";return o=0===s.length?"[]":gap?"[\n"+gap+s.join(",\n"+gap)+"\n"+u+"]":"["+s.join(",")+"]",gap=u,o}if(rep&&"object"==typeof rep)for(i=rep.length,n=0;i>n;n+=1)r=rep[n],"string"==typeof r&&(o=str(r,a),o&&s.push(quote(r)+(gap?": ":":")+o));else for(r in a)Object.hasOwnProperty.call(a,r)&&(o=str(r,a),o&&s.push(quote(r)+(gap?": ":":")+o));return o=0===s.length?"{}":gap?"{\n"+gap+s.join(",\n"+gap)+"\n"+u+"}":"{"+s.join(",")+"}",gap=u,o}}window.JSON||(window.JSON={});var cx=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,escapable=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,gap,indent,meta={"\b":"\\b"," ":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"},rep;"function"!=typeof JSON.stringify&&(JSON.stringify=function(e,t,n){var r;if(gap="",indent="","number"==typeof n)for(r=0;n>r;r+=1)indent+=" ";else"string"==typeof n&&(indent=n);if(rep=t,t&&"function"!=typeof t&&("object"!=typeof t||"number"!=typeof t.length))throw new Error("JSON.stringify");return str("",{"":e})}),"function"!=typeof JSON.parse&&(JSON.parse=function(text){return eval("("+text+")")})}();var NOW=1,READY=!1,READY_BUFFER=[],PRESENCE_SUFFIX="-pnpres",DEF_WINDOWING=10,DEF_TIMEOUT=1e4,DEF_SUB_TIMEOUT=310,DEF_KEEPALIVE=60,SECOND=1e3,URLBIT="/",PARAMSBIT="&",PRESENCE_HB_THRESHOLD=5,PRESENCE_HB_DEFAULT=30,SDK_VER="3.7.14",REPL=/{([\w\-]+)}/g,nextorigin=function(){var e=20,t=Math.floor(Math.random()*e);return function(n,r){return n.indexOf("pubsub.")>0&&n.replace("pubsub","ps"+(r?generate_uuid().split("-")[0]:++t0&&"number"==typeof t[n]?"px":"")}catch(r){}}function a(e){return document.createElement(e)}function c(){return v||d()?0:unique()}function l(e){if(v||d())return f(e);var n=a("script"),r=e.callback,o=unique(),u=0,c=e.timeout||DEF_TIMEOUT,l=timeout(function(){m(1,{message:"timeout"})},c),p=e.fail||function(){},h=e.data||{},y=e.success||function(){},b=function(){i().appendChild(n)},m=function(e,r){u||(u=1,n.onerror=null,clearTimeout(l),e||!r||y(r),timeout(function(){e&&p();var n=t(o),r=n&&n.parentNode;r&&r.removeChild(n)},SECOND))};return window[r]=function(e){m(0,e)},e.blocking||(n[_]=_),n.onerror=function(){m(1)},n.src=build_url(e.url,h),s(n,"id",o),b(),m}function f(e){var t,n,r=function(){if(!i){i=1,clearTimeout(u);try{n=JSON.parse(t.responseText)}catch(e){return h(1)}o=1,f(n)}},o=0,i=0,s=e.timeout||DEF_TIMEOUT,u=timeout(function(){h(1,{message:"timeout"})},s),a=e.fail||function(){},c=e.data||{},f=e.success||function(){},p=!e.blocking,h=function(e,n){o||(o=1,clearTimeout(u),t&&(t.onerror=t.onload=null,t.abort&&t.abort(),t=null),e&&a(n))};try{t=d()||window.XDomainRequest&&new XDomainRequest||new XMLHttpRequest,t.onerror=t.onabort=function(e){h(1,e||t&&t.responseText||{error:"Network Connection Error"})},t.onload=t.onloadend=r,t.onreadystatechange=function(){if(t&&4==t.readyState)switch(t.status){case 200:break;default:try{n=JSON.parse(t.responseText),h(1,n)}catch(e){return h(1,{status:t.status,payload:null,message:t.responseText})}return}};var y=build_url(e.url,c);t.open("GET",y,p),p&&(t.timeout=s),t.send()}catch(_){return h(0),v=0,l(e)}return h}function p(){if(!("onLine"in navigator))return 1;try{return navigator.onLine}catch(e){return!0}}function h(e){return"sendBeacon"in navigator?navigator.sendBeacon(e):!1}function d(){if(!S||!S.get)return 0;var e={id:d.id++,send:function(){},abort:function(){e.id={}},open:function(t,n){d[e.id]=e,S.get(e.id,n)}};return e}var y="https://pubnub.a.ssl.fastly.net/pubnub.swf",_="async",b=navigator.userAgent,m="PubNub-JS-Web/3.7.14",v=-1==b.indexOf("MSIE 6");window.console||(window.console=window.console||{}),console.log||(console.log=console.error=(window.opera||{}).postError||function(){});var g=function(){var e={},t=!1;try{t=window.localStorage}catch(n){}var r=function(e){return-1==document.cookie.indexOf(e)?null:((document.cookie||"").match(RegExp(e+"=([^;]+)"))||[])[1]||null},o=function(e,t){document.cookie=e+"="+t+"; expires=Thu, 1 Aug 2030 20:00:00 UTC; path=/"},i=function(){try{return o("pnctest","1"),"1"===r("pnctest")}catch(e){return!1}}();return{get:function(n){try{return t?t.getItem(n):i?r(n):e[n]}catch(o){return e[n]}},set:function(n,r){try{if(t)return t.setItem(n,r)&&0;i&&o(n,r),e[n]=r}catch(s){e[n]=r}}}}(),w={list:{},unbind:function(e){w.list[e]=[]},bind:function(e,t){(w.list[e]=w.list[e]||[]).push(t)},fire:function(e,t){each(w.list[e]||[],function(e){e(t)})}},k=t("pubnub")||0,E=function(f){v=f.jsonp?0:-1==b.indexOf("MSIE 6");var d=f.subscribe_key||"",y=((+f.keepalive||DEF_KEEPALIVE)*SECOND,f.uuid||g.get(d+"uuid")||"",f.leave_on_unload||0);f.xdr=l,f.db=g,f.error=f.error||n,f._is_online=p,f.jsonp_cb=c,f.hmac_SHA256=e,f.crypto_obj=crypto_obj(),f.sendBeacon=h,f.params={pnsdk:m};var _=function(e){return E(e)},k=PN_API(f);for(var x in k)k.hasOwnProperty(x)&&(_[x]=k[x]);return _.css=u,_.$=t,_.create=a,_.bind=o,_.head=i,_.search=r,_.attr=s,_.events=w,_.init=_,_.secure=_,_.crypto_obj=crypto_obj(),o("beforeunload",window,function(){return y&&_["each-channel"](function(e){_.LEAVE(e.name,0)}),!0}),f.notest?_:(o("offline",window,_.offline),o("offline",document,_.offline),_)};E.init=E,E.secure=E,E.crypto_obj=crypto_obj(),"complete"===document.readyState?timeout(ready,0):o("load",window,function(){timeout(ready,0)});var x=k||{};PUBNUB=E({notest:1,publish_key:s(x,"pub-key"),subscribe_key:s(x,"sub-key"),ssl:!document.location.href.indexOf("https")||"on"==s(x,"ssl"),origin:s(x,"origin"),uuid:s(x,"uuid")}),window.jQuery&&(window.jQuery.PUBNUB=E),"undefined"!=typeof module&&(module.exports=PUBNUB)&&ready();var S=t("pubnubs")||0;k&&(u(k,{position:"absolute",top:-SECOND}),("opera"in window||s(k,"flash"))&&(k.innerHTML=""),PUBNUB.rdx=function(e,t){return t?(d[e].responseText=unescape(t),void d[e].onload()):d[e].onerror()},d.id=SECOND)}(),function(){var e=PUBNUB.ws=function(t,n){if(!(this instanceof e))return new e(t,n);var r=this,t=r.url=t||"",o=(r.protocol=n||"Sec-WebSocket-Protocol",t.split("/")),i={ssl:"wss:"===o[0],origin:o[2],publish_key:o[3],subscribe_key:o[4],channel:o[5]};return r.CONNECTING=0,r.OPEN=1,r.CLOSING=2,r.CLOSED=3,r.CLOSE_NORMAL=1e3,r.CLOSE_GOING_AWAY=1001,r.CLOSE_PROTOCOL_ERROR=1002,r.CLOSE_UNSUPPORTED=1003,r.CLOSE_TOO_LARGE=1004,r.CLOSE_NO_STATUS=1005,r.CLOSE_ABNORMAL=1006,r.onclose=r.onerror=r.onmessage=r.onopen=r.onsend=function(){},r.binaryType="",r.extensions="",r.bufferedAmount=0,r.trasnmitting=!1,r.buffer=[],r.readyState=r.CONNECTING,t?(r.pubnub=PUBNUB.init(i),r.pubnub.setup=i,r.setup=i,void r.pubnub.subscribe({restore:!1,channel:i.channel,disconnect:r.onerror,reconnect:r.onopen,error:function(){r.onclose({code:r.CLOSE_ABNORMAL,reason:"Missing URL",wasClean:!1})},callback:function(e){r.onmessage({data:e})},connect:function(){r.readyState=r.OPEN,r.onopen()}})):(r.readyState=r.CLOSED,r.onclose({code:r.CLOSE_ABNORMAL,reason:"Missing URL",wasClean:!0}),r)};e.prototype.send=function(e){var t=this;t.pubnub.publish({channel:t.pubnub.setup.channel,message:e,callback:function(e){t.onsend({data:e})}})},e.prototype.close=function(){var e=this;e.pubnub.unsubscribe({channel:e.pubnub.setup.channel}),e.readyState=e.CLOSED,e.onclose({})}}();var CryptoJS=CryptoJS||function(e,t){var n={},r=n.lib={},o=function(){},i=r.Base={extend:function(e){o.prototype=this;var t=new o;return e&&t.mixIn(e),t.hasOwnProperty("init")||(t.init=function(){t.$super.init.apply(this,arguments)}),t.init.prototype=t,t.$super=this,t},create:function(){var e=this.extend();return e.init.apply(e,arguments),e},init:function(){},mixIn:function(e){for(var t in e)e.hasOwnProperty(t)&&(this[t]=e[t]);e.hasOwnProperty("toString")&&(this.toString=e.toString)},clone:function(){return this.init.prototype.extend(this)}},s=r.WordArray=i.extend({init:function(e,n){e=this.words=e||[],this.sigBytes=n!=t?n:4*e.length},toString:function(e){return(e||a).stringify(this)},concat:function(e){var t=this.words,n=e.words,r=this.sigBytes;if(e=e.sigBytes,this.clamp(),r%4)for(var o=0;e>o;o++)t[r+o>>>2]|=(n[o>>>2]>>>24-8*(o%4)&255)<<24-8*((r+o)%4);else if(65535o;o+=4)t[r+o>>>2]=n[o>>>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-8*(n%4),t.length=e.ceil(n/4)},clone:function(){var e=i.clone.call(this);return e.words=this.words.slice(0),e},random:function(t){for(var n=[],r=0;t>r;r+=4)n.push(4294967296*e.random()|0);return new s.init(n,t)}}),u=n.enc={},a=u.Hex={stringify:function(e){var t=e.words;e=e.sigBytes;for(var n=[],r=0;e>r;r++){var o=t[r>>>2]>>>24-8*(r%4)&255;n.push((o>>>4).toString(16)),n.push((15&o).toString(16))}return n.join("")},parse:function(e){for(var t=e.length,n=[],r=0;t>r;r+=2)n[r>>>3]|=parseInt(e.substr(r,2),16)<<24-4*(r%8);return new s.init(n,t/2)}},c=u.Latin1={stringify:function(e){var t=e.words;e=e.sigBytes;for(var n=[],r=0;e>r;r++)n.push(String.fromCharCode(t[r>>>2]>>>24-8*(r%4)&255));return n.join("")},parse:function(e){for(var t=e.length,n=[],r=0;t>r;r++)n[r>>>2]|=(255&e.charCodeAt(r))<<24-8*(r%4);return new s.init(n,t)}},l=u.Utf8={stringify:function(e){try{return decodeURIComponent(escape(c.stringify(e)))}catch(t){throw Error("Malformed UTF-8 data")}},parse:function(e){return c.parse(unescape(encodeURIComponent(e)))}},f=r.BufferedBlockAlgorithm=i.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,o=n.sigBytes,i=this.blockSize,u=o/(4*i),u=t?e.ceil(u):e.max((0|u)-this._minBufferSize,0);if(t=u*i,o=e.min(4*t,o),t){for(var a=0;t>a;a+=i)this._doProcessBlock(r,a);a=r.splice(0,t),n.sigBytes-=o}return new s.init(a,o)},clone:function(){var e=i.clone.call(this);return e._data=this._data.clone(),e},_minBufferSize:0});r.Hasher=f.extend({cfg:i.extend(),init:function(e){this.cfg=this.cfg.extend(e),this.reset()},reset:function(){f.reset.call(this),this._doReset()},update:function(e){return this._append(e),this._process(),this},finalize:function(e){return e&&this._append(e),this._doFinalize()},blockSize:16,_createHelper:function(e){return function(t,n){return new e.init(n).finalize(t)}},_createHmacHelper:function(e){return function(t,n){return new p.HMAC.init(e,n).finalize(t)}}});var p=n.algo={};return n}(Math);!function(e){for(var t=CryptoJS,n=t.lib,r=n.WordArray,o=n.Hasher,n=t.algo,i=[],s=[],u=function(e){return 4294967296*(e-(0|e))|0},a=2,c=0;64>c;){var l;e:{l=a;for(var f=e.sqrt(l),p=2;f>=p;p++)if(!(l%p)){l=!1;break e}l=!0}l&&(8>c&&(i[c]=u(e.pow(a,.5))),s[c]=u(e.pow(a,1/3)),c++),a++}var h=[],n=n.SHA256=o.extend({_doReset:function(){this._hash=new r.init(i.slice(0))},_doProcessBlock:function(e,t){for(var n=this._hash.words,r=n[0],o=n[1],i=n[2],u=n[3],a=n[4],c=n[5],l=n[6],f=n[7],p=0;64>p;p++){if(16>p)h[p]=0|e[t+p];else{var d=h[p-15],y=h[p-2];h[p]=((d<<25|d>>>7)^(d<<14|d>>>18)^d>>>3)+h[p-7]+((y<<15|y>>>17)^(y<<13|y>>>19)^y>>>10)+h[p-16]}d=f+((a<<26|a>>>6)^(a<<21|a>>>11)^(a<<7|a>>>25))+(a&c^~a&l)+s[p]+h[p],y=((r<<30|r>>>2)^(r<<19|r>>>13)^(r<<10|r>>>22))+(r&o^r&i^o&i),f=l,l=c,c=a,a=u+d|0,u=i,i=o,o=r,r=d+y|0}n[0]=n[0]+r|0,n[1]=n[1]+o|0,n[2]=n[2]+i|0,n[3]=n[3]+u|0,n[4]=n[4]+a|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,o=8*t.sigBytes;return n[o>>>5]|=128<<24-o%32,n[(o+64>>>9<<4)+14]=e.floor(r/4294967296),n[(o+64>>>9<<4)+15]=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(n),t.HmacSHA256=o._createHmacHelper(n)}(Math),function(){var e=CryptoJS,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,o=4*r;n.sigBytes>o&&(n=e.finalize(n)),n.clamp();for(var i=this._oKey=n.clone(),s=this._iKey=n.clone(),u=i.words,a=s.words,c=0;r>c;c++)u[c]^=1549556828,a[c]^=909522486;i.sigBytes=s.sigBytes=o,this.reset()},reset:function(){var e=this._hasher;e.reset(),e.update(this._iKey)},update:function(e){return this._hasher.update(e),this},finalize:function(e){var t=this._hasher;return e=t.finalize(e),t.reset(),t.finalize(this._oKey.clone().concat(e))}})}(),function(){var e=CryptoJS,t=e.lib.WordArray;e.enc.Base64={stringify:function(e){var t=e.words,n=e.sigBytes,r=this._map;e.clamp(),e=[];for(var o=0;n>o;o+=3)for(var i=(t[o>>>2]>>>24-8*(o%4)&255)<<16|(t[o+1>>>2]>>>24-8*((o+1)%4)&255)<<8|t[o+2>>>2]>>>24-8*((o+2)%4)&255,s=0;4>s&&n>o+.75*s;s++)e.push(r.charAt(i>>>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,o=r.charAt(64);o&&(o=e.indexOf(o),-1!=o&&(n=o));for(var o=[],i=0,s=0;n>s;s++)if(s%4){var u=r.indexOf(e.charAt(s-1))<<2*(s%4),a=r.indexOf(e.charAt(s))>>>6-2*(s%4);o[i>>>2]|=(u|a)<<24-8*(i%4),i++}return t.create(o,i)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="}}(),function(e){function t(e,t,n,r,o,i,s){return e=e+(t&n|~t&r)+o+s,(e<>>32-i)+t}function n(e,t,n,r,o,i,s){return e=e+(t&r|n&~r)+o+s,(e<>>32-i)+t}function r(e,t,n,r,o,i,s){return e=e+(t^n^r)+o+s,(e<>>32-i)+t}function o(e,t,n,r,o,i,s){return e=e+(n^(t|~r))+o+s,(e<>>32-i)+t}for(var i=CryptoJS,s=i.lib,u=s.WordArray,a=s.Hasher,s=i.algo,c=[],l=0;64>l;l++)c[l]=4294967296*e.abs(e.sin(l+1))|0;s=s.MD5=a.extend({_doReset:function(){this._hash=new u.init([1732584193,4023233417,2562383102,271733878])},_doProcessBlock:function(e,i){for(var s=0;16>s;s++){var u=i+s,a=e[u];e[u]=16711935&(a<<8|a>>>24)|4278255360&(a<<24|a>>>8)}var s=this._hash.words,u=e[i+0],a=e[i+1],l=e[i+2],f=e[i+3],p=e[i+4],h=e[i+5],d=e[i+6],y=e[i+7],_=e[i+8],b=e[i+9],m=e[i+10],v=e[i+11],g=e[i+12],w=e[i+13],k=e[i+14],E=e[i+15],x=s[0],S=s[1],O=s[2],T=s[3],x=t(x,S,O,T,u,7,c[0]),T=t(T,x,S,O,a,12,c[1]),O=t(O,T,x,S,l,17,c[2]),S=t(S,O,T,x,f,22,c[3]),x=t(x,S,O,T,p,7,c[4]),T=t(T,x,S,O,h,12,c[5]),O=t(O,T,x,S,d,17,c[6]),S=t(S,O,T,x,y,22,c[7]),x=t(x,S,O,T,_,7,c[8]),T=t(T,x,S,O,b,12,c[9]),O=t(O,T,x,S,m,17,c[10]),S=t(S,O,T,x,v,22,c[11]),x=t(x,S,O,T,g,7,c[12]),T=t(T,x,S,O,w,12,c[13]),O=t(O,T,x,S,k,17,c[14]),S=t(S,O,T,x,E,22,c[15]),x=n(x,S,O,T,a,5,c[16]),T=n(T,x,S,O,d,9,c[17]),O=n(O,T,x,S,v,14,c[18]),S=n(S,O,T,x,u,20,c[19]),x=n(x,S,O,T,h,5,c[20]),T=n(T,x,S,O,m,9,c[21]),O=n(O,T,x,S,E,14,c[22]),S=n(S,O,T,x,p,20,c[23]),x=n(x,S,O,T,b,5,c[24]),T=n(T,x,S,O,k,9,c[25]),O=n(O,T,x,S,f,14,c[26]),S=n(S,O,T,x,_,20,c[27]),x=n(x,S,O,T,w,5,c[28]),T=n(T,x,S,O,l,9,c[29]),O=n(O,T,x,S,y,14,c[30]),S=n(S,O,T,x,g,20,c[31]),x=r(x,S,O,T,h,4,c[32]),T=r(T,x,S,O,_,11,c[33]),O=r(O,T,x,S,v,16,c[34]),S=r(S,O,T,x,k,23,c[35]),x=r(x,S,O,T,a,4,c[36]),T=r(T,x,S,O,p,11,c[37]),O=r(O,T,x,S,y,16,c[38]),S=r(S,O,T,x,m,23,c[39]),x=r(x,S,O,T,w,4,c[40]),T=r(T,x,S,O,u,11,c[41]),O=r(O,T,x,S,f,16,c[42]),S=r(S,O,T,x,d,23,c[43]),x=r(x,S,O,T,b,4,c[44]),T=r(T,x,S,O,g,11,c[45]),O=r(O,T,x,S,E,16,c[46]),S=r(S,O,T,x,l,23,c[47]),x=o(x,S,O,T,u,6,c[48]),T=o(T,x,S,O,y,10,c[49]),O=o(O,T,x,S,k,15,c[50]),S=o(S,O,T,x,h,21,c[51]),x=o(x,S,O,T,g,6,c[52]),T=o(T,x,S,O,f,10,c[53]),O=o(O,T,x,S,m,15,c[54]),S=o(S,O,T,x,a,21,c[55]),x=o(x,S,O,T,_,6,c[56]),T=o(T,x,S,O,E,10,c[57]),O=o(O,T,x,S,d,15,c[58]),S=o(S,O,T,x,w,21,c[59]),x=o(x,S,O,T,p,6,c[60]),T=o(T,x,S,O,v,10,c[61]),O=o(O,T,x,S,l,15,c[62]),S=o(S,O,T,x,b,21,c[63]);s[0]=s[0]+x|0,s[1]=s[1]+S|0,s[2]=s[2]+O|0,s[3]=s[3]+T|0},_doFinalize:function(){var t=this._data,n=t.words,r=8*this._nDataBytes,o=8*t.sigBytes;n[o>>>5]|=128<<24-o%32;var i=e.floor(r/4294967296);for(n[(o+64>>>9<<4)+15]=16711935&(i<<8|i>>>24)|4278255360&(i<<24|i>>>8),n[(o+64>>>9<<4)+14]=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++)o=n[r],n[r]=16711935&(o<<8|o>>>24)|4278255360&(o<<24|o>>>8);return t},clone:function(){var e=a.clone.call(this);return e._hash=this._hash.clone(),e}}),i.MD5=a._createHelper(s),i.HmacMD5=a._createHmacHelper(s)}(Math),function(){var e=CryptoJS,t=e.lib,n=t.Base,r=t.WordArray,t=e.algo,o=t.EvpKDF=n.extend({cfg:n.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,o=n.hasher.create(),i=r.create(),s=i.words,u=n.keySize,n=n.iterations;s.lengthc;c++)a=o.finalize(a),o.reset();i.concat(a)}return i.sigBytes=4*u,i}});e.EvpKDF=function(e,t,n){return o.create(n).compute(e,t)}}(),CryptoJS.lib.Cipher||function(e){var t=CryptoJS,n=t.lib,r=n.Base,o=n.WordArray,i=n.BufferedBlockAlgorithm,s=t.enc.Base64,u=t.algo.EvpKDF,a=n.Cipher=i.extend({cfg:r.extend(),createEncryptor:function(e,t){return this.create(this._ENC_XFORM_MODE,e,t)},createDecryptor:function(e,t){return this.create(this._DEC_XFORM_MODE,e,t)},init:function(e,t,n){this.cfg=this.cfg.extend(n),this._xformMode=e,this._key=t,this.reset()},reset:function(){i.reset.call(this),this._doReset()},process:function(e){return this._append(e),this._process()},finalize:function(e){return e&&this._append(e),this._doFinalize()},keySize:4,ivSize:4,_ENC_XFORM_MODE:1,_DEC_XFORM_MODE:2,_createHelper:function(e){return{encrypt:function(t,n,r){return("string"==typeof n?d:h).encrypt(e,t,n,r)},decrypt:function(t,n,r){return("string"==typeof n?d:h).decrypt(e,t,n,r)}}}});n.StreamCipher=a.extend({_doFinalize:function(){return this._process(!0)},blockSize:1});var c=t.mode={},l=function(t,n,r){var o=this._iv;o?this._iv=e:o=this._prevBlock;for(var i=0;r>i;i++)t[n+i]^=o[i]},f=(n.BlockCipherMode=r.extend({createEncryptor:function(e,t){return this.Encryptor.create(e,t)},createDecryptor:function(e,t){return this.Decryptor.create(e,t)},init:function(e,t){this._cipher=e,this._iv=t}})).extend();f.Encryptor=f.extend({processBlock:function(e,t){var n=this._cipher,r=n.blockSize;l.call(this,e,t,r),n.encryptBlock(e,t),this._prevBlock=e.slice(t,t+r)}}),f.Decryptor=f.extend({processBlock:function(e,t){var n=this._cipher,r=n.blockSize,o=e.slice(t,t+r);n.decryptBlock(e,t),l.call(this,e,t,r),this._prevBlock=o}}),c=c.CBC=f,f=(t.pad={}).Pkcs7={pad:function(e,t){for(var n=4*t,n=n-e.sigBytes%n,r=n<<24|n<<16|n<<8|n,i=[],s=0;n>s;s+=4)i.push(r);n=o.create(i,n),e.concat(n)},unpad:function(e){e.sigBytes-=255&e.words[e.sigBytes-1>>>2]}},n.BlockCipher=a.extend({cfg:a.cfg.extend({mode:c,padding:f}),reset:function(){a.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 p=n.CipherParams=r.extend({init:function(e){this.mixIn(e)},toString:function(e){return(e||this.formatter).stringify(this)}}),c=(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(s)},parse:function(e){e=s.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 p.create({ciphertext:e,salt:n})}},h=n.SerializableCipher=r.extend({cfg:r.extend({format:c}),encrypt:function(e,t,n,r){r=this.cfg.extend(r);var o=e.createEncryptor(n,r);return t=o.finalize(t),o=o.cfg,p.create({ciphertext:t,key:n,iv:o.iv,algorithm:e,mode:o.mode,padding:o.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,p.create({key:e,iv:n,salt:r})}},d=n.PasswordBasedCipher=h.extend({cfg:h.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=h.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,h.decrypt.call(this,e,t,n.key,r)}})}(),function(){for(var e=CryptoJS,t=e.lib.BlockCipher,n=e.algo,r=[],o=[],i=[],s=[],u=[],a=[],c=[],l=[],f=[],p=[],h=[],d=0;256>d;d++)h[d]=128>d?d<<1:d<<1^283;for(var y=0,_=0,d=0;256>d;d++){var b=_^_<<1^_<<2^_<<3^_<<4,b=b>>>8^255&b^99;r[y]=b,o[b]=y;var m=h[y],v=h[m],g=h[v],w=257*h[b]^16843008*b;i[y]=w<<24|w>>>8,s[y]=w<<16|w>>>16,u[y]=w<<8|w>>>24,a[y]=w,w=16843009*g^65537*v^257*m^16843008*y,c[b]=w<<24|w>>>8,l[b]=w<<16|w>>>16,f[b]=w<<8|w>>>24,p[b]=w,y?(y=m^h[h[h[g^m]]],_^=h[h[_]]):y=_=1}var k=[0,1,2,4,8,16,32,64,128,27,54],n=n.AES=t.extend({_doReset:function(){for(var e=this._key,t=e.words,n=e.sigBytes/4,e=4*((this._nRounds=n+6)+1),o=this._keySchedule=[],i=0;e>i;i++)if(n>i)o[i]=t[i];else{var s=o[i-1];i%n?n>6&&4==i%n&&(s=r[s>>>24]<<24|r[s>>>16&255]<<16|r[s>>>8&255]<<8|r[255&s]):(s=s<<8|s>>>24,s=r[s>>>24]<<24|r[s>>>16&255]<<16|r[s>>>8&255]<<8|r[255&s],s^=k[i/n|0]<<24),o[i]=o[i-n]^s}for(t=this._invKeySchedule=[],n=0;e>n;n++)i=e-n,s=n%4?o[i]:o[i-4],t[n]=4>n||4>=i?s:c[r[s>>>24]]^l[r[s>>>16&255]]^f[r[s>>>8&255]]^p[r[255&s]]},encryptBlock:function(e,t){this._doCryptBlock(e,t,this._keySchedule,i,s,u,a,r)},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,c,l,f,p,o),n=e[t+1],e[t+1]=e[t+3],e[t+3]=n},_doCryptBlock:function(e,t,n,r,o,i,s,u){for(var a=this._nRounds,c=e[t]^n[0],l=e[t+1]^n[1],f=e[t+2]^n[2],p=e[t+3]^n[3],h=4,d=1;a>d;d++)var y=r[c>>>24]^o[l>>>16&255]^i[f>>>8&255]^s[255&p]^n[h++],_=r[l>>>24]^o[f>>>16&255]^i[p>>>8&255]^s[255&c]^n[h++],b=r[f>>>24]^o[p>>>16&255]^i[c>>>8&255]^s[255&l]^n[h++],p=r[p>>>24]^o[c>>>16&255]^i[l>>>8&255]^s[255&f]^n[h++],c=y,l=_,f=b; -y=(u[c>>>24]<<24|u[l>>>16&255]<<16|u[f>>>8&255]<<8|u[255&p])^n[h++],_=(u[l>>>24]<<24|u[f>>>16&255]<<16|u[p>>>8&255]<<8|u[255&c])^n[h++],b=(u[f>>>24]<<24|u[p>>>16&255]<<16|u[c>>>8&255]<<8|u[255&l])^n[h++],p=(u[p>>>24]<<24|u[c>>>16&255]<<16|u[l>>>8&255]<<8|u[255&f])^n[h++],e[t]=y,e[t+1]=_,e[t+2]=b,e[t+3]=p},keySize:8});e.AES=t._createHelper(n)}(),CryptoJS.mode.ECB=function(){var e=CryptoJS.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}()}).call(exports,__webpack_require__(7)(module))},function(e,t){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}t.__esModule=!0;var r=function(){function e(e,t){for(var n=0;n1?n-1:0),o=1;n>o;o++)r[o-1]=arguments[o];var i=null;return this.hasListeners(e)?(this._listeners[e].some(function(e){return i=e.apply(t,r),i===!1}),i):null},e.prototype.off=function(e,t){var n=this;if(e)if(t){if(!this.hasListeners(e))return this;this._listeners[e].forEach(function(r,o){r===t&&delete n._listeners[e][o]})}else delete this._listeners[e];else this._listeners={};return this},e}();t["default"]=r,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")}t.__esModule=!0;var o=function(){function e(e,t){for(var n=0;n-1?"&":"?")+a.queryStringify(e.query)),c.findHeaderName("Accept",e.headers)||(e.headers.Accept=h["default"]._jsonContentType),"string"!=typeof e.body||!e.body){var n=c.findHeaderName(h["default"]._contentType,e.headers);n||(n=h["default"]._contentType,e.headers[n]=h["default"]._jsonContentType);var r=e.headers[n];r.indexOf(h["default"]._jsonContentType)>-1?e.body=JSON.stringify(e.body):r.indexOf(h["default"]._urlencodedContentType)>-1&&(e.body=a.queryStringify(e.body))}var o=new u.Request(e.url,e);return o.originalBody=e.body,o},s(t,null,[{key:"_allowedMethods",value:["GET","POST","PUT","DELETE","PATCH","OPTIONS","HEAD"],enumerable:!0}]),t}(f["default"]);t["default"]=d,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 o(e,t){t=t||{};var n=new s.Response(e,t);return a.isNodeJS()&&(n._text=e,n._decode=function(){return this._text}),n}function i(e,t){return e=e.toLowerCase(),Object.keys(t).reduce(function(t,n){return t?t:e==n.toLowerCase()?n:t},null)}t.__esModule=!0,t.createResponse=o,t.findHeaderName=i;var s=n(3),u=n(2),a=r(u)},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 o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}t.__esModule=!0;var i=function(){function e(e,t){for(var n=0;n-1},e.prototype._getContentType=function(){return this._response.headers.get(e._contentType)||""},e.prototype._isMultipart=function(){return this._isContentType(e._multipartContentType)},e.prototype._isUrlEncoded=function(){return this._isContentType(e._urlencodedContentType)},e.prototype._isJson=function(){return this._isContentType(e._jsonContentType)},e.create=function(t,n,r){t=t||"",n=n||200,r=r||"OK",t=t.replace(/\r/g,"");var o=new s.Headers,i=t.split(e._bodySeparator),u=i.length>1?i.shift():"";return t=i.join(e._bodySeparator),(u||"").split("\n").forEach(function(t){var n=t.trim().split(e._headerSeparator),r=n.shift().trim(),i=n.join(e._headerSeparator).trim();r&&o.append(r,i)}),new e(null,a.createResponse(t,{headers:o,status:n,statusText:r}),t)},e}();t["default"]=c,e.exports=t["default"]},function(e,t,n){"use strict";function r(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")}function i(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)}t.__esModule=!0;var s=n(18),u=r(s),a=n(14),c=r(a),l=function(e){function t(){o(this,t),e.call(this),this._registry=new u["default"]}return i(t,e),t.prototype.registry=function(){return this._registry},t.prototype._loadResponse=function(e){var t;return regeneratorRuntime.async(function(n){for(;;)switch(n.prev=n.next){case 0:return t=this._registry.find(e),n.next=3,regeneratorRuntime.awrap(t.getResponse(e));case 3:return n.abrupt("return",n.sent);case 4:case"end":return n.stop()}},null,this)},t}(c["default"]);t["default"]=l,e.exports=t["default"]},function(e,t,n){"use strict";function r(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")}t.__esModule=!0;var i=n(19),s=r(i),u=function(){function e(){o(this,e),this._mocks=[]}return e.prototype.add=function(e){return this._mocks.push(e),this},e.prototype.clear=function(){return this._mocks=[],this},e.prototype.find=function(e){var t=this._mocks.shift();if(!t)throw new Error("No mock in registry for request "+e.method+" "+e.url);if(!t.test(e))throw new Error("Wrong request "+e.method+" "+e.url+" for expected mock "+t.method()+" "+t.path());return t},e.prototype.apiCall=function(e,t,n,r,o){return this.add(new s["default"](e,t,n,r,o)),this},e.prototype.authentication=function(){return this.apiCall("POST","/restapi/oauth/token",{access_token:"ACCESS_TOKEN",token_type:"bearer",expires_in:3600,refresh_token:"REFRESH_TOKEN",refresh_token_expires_in:60480,scope:"SMS RCM Foo Boo",expireTime:(new Date).getTime()+36e5}),this},e.prototype.logout=function(){return this.apiCall("POST","/restapi/oauth/revoke",{}),this},e.prototype.presenceLoad=function(e){return this.apiCall("GET","/restapi/v1.0/account/~/extension/"+e+"/presence",{uri:"https://platform.ringcentral.com/restapi/v1.0/account/123/extension/"+e+"/presence",extension:{uri:"https://platform.ringcentral.com/restapi/v1.0/account/123/extension/"+e,id:e,extensionNumber:"101"},activeCalls:[],presenceStatus:"Available",telephonyStatus:"Ringing",userStatus:"Available",dndStatus:"TakeAllCalls",extensionId:e}),this},e.prototype.subscribeGeneric=function(e){e=e||54e3;var t=new Date;return this.apiCall("POST","/restapi/v1.0/subscription",{eventFilters:["/restapi/v1.0/account/~/extension/~/presence"],expirationTime:new Date(t.getTime()+1e3*e).toISOString(),expiresIn:e,deliveryMode:{transportType:"PubNub",encryption:!1,address:"123_foo",subscriberKey:"sub-c-foo",secretKey:"sec-c-bar"},id:"foo-bar-baz",creationTime:t.toISOString(),status:"Active",uri:"https://platform.ringcentral.com/restapi/v1.0/subscription/foo-bar-baz"}),this},e.prototype.subscribeOnPresence=function(e,t){e=e||"1";var n=new Date;return this.apiCall("POST","/restapi/v1.0/subscription",{eventFilters:["/restapi/v1.0/account/~/extension/"+e+"/presence"+(t?"?detailedTelephonyState=true":"")],expirationTime:new Date(n.getTime()+54e6).toISOString(),deliveryMode:{transportType:"PubNub",encryption:!0,address:"123_foo",subscriberKey:"sub-c-foo",secretKey:"sec-c-bar",encryptionAlgorithm:"AES",encryptionKey:"VQwb6EVNcQPBhE/JgFZ2zw=="},creationTime:n.toISOString(),id:"foo-bar-baz",status:"Active",uri:"https://platform.ringcentral.com/restapi/v1.0/subscription/foo-bar-baz"}),this},e.prototype.tokenRefresh=function(e){return e?this.apiCall("POST","/restapi/oauth/token",{message:"Wrong token",error_description:"Wrong token",description:"Wrong token"},400):this.apiCall("POST","/restapi/oauth/token",{access_token:"ACCESS_TOKEN_FROM_REFRESH",token_type:"bearer",expires_in:3600,refresh_token:"REFRESH_TOKEN_FROM_REFRESH",refresh_token_expires_in:60480,scope:"SMS RCM Foo Boo"}),this},e}();t["default"]=u,e.exports=t["default"]},function(e,t,n){"use strict";function r(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")}t.__esModule=!0;var i=n(16),s=r(i),u=n(2),a=n(15),c=function(){function e(t,n,r,i,s,u){o(this,e),this._method=t.toUpperCase(),this._path=n,this._json=r||{},this._delay=u||10,this._status=i||200,this._statusText=s||"OK"}return e.prototype.path=function(){return this._path},e.prototype.method=function(){return this._method},e.prototype.test=function(e){return e.url.indexOf(this._path)>-1&&e.method.toUpperCase()==this._method},e.prototype.getResponse=function(e){return regeneratorRuntime.async(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,regeneratorRuntime.awrap(u.delay(this._delay));case 2:return e.abrupt("return",this.createResponse(this._json));case 3:case"end":return e.stop()}},null,this)},e.prototype.createResponse=function(e,t){t=t||{},t.status=t.status||this._status,t.statusText=t.statusText||this._statusText;var n=JSON.stringify(e),r=a.createResponse(n,t);return r.headers.set(s["default"]._contentType,s["default"]._jsonContentType),r},e}();t["default"]=c,e.exports=t["default"]},function(e,t,n){"use strict";function r(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")}function i(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)}t.__esModule=!0;var s=function(){function e(e,t){for(var n=0;n-1?"&":"?"),n.addMethod&&(r+="_method="+n.addMethod),n.addToken&&(r+=(n.addMethod?"&":"")+"access_token="+this._auth.accessToken()),r},t.prototype.authUrl=function(e){return e=e||{},this.createUrl(t._authorizeEndpoint+"?"+h.queryStringify({response_type:"code",redirect_uri:e.redirectUri||"",client_id:this._appKey,state:e.state||"",brand_id:e.brandId||"",display:e.display||"",prompt:e.prompt||""}),{addServer:!0})},t.prototype.parseAuthRedirectUrl=function(e){var t=h.parseQueryString(e.split("?").reverse()[0]),n=t.error_description||t.error;if(n){var r=new Error(n);throw r.error=t.error,r}return t},t.prototype.loggedIn=function(){return regeneratorRuntime.async(function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,regeneratorRuntime.awrap(this._ensureAuthentication());case 3:return e.abrupt("return",!0);case 6:return e.prev=6,e.t0=e["catch"](0),e.abrupt("return",!1);case 9:case"end":return e.stop()}},null,this,[[0,6]])},t.prototype.login=function(e){var n,r,o;return regeneratorRuntime.async(function(i){for(;;)switch(i.prev=i.next){case 0:return i.prev=0,e=e||{},e.remember=e.remember||!1,this.emit(this.events.beforeLogin),n={access_token_ttl:t._accessTokenTtl,refresh_token_ttl:e.remember?t._refreshTokenTtlRemember:t._refreshTokenTtl},e.code?e.code&&(n.grant_type="authorization_code",n.code=e.code,n.redirect_uri=e.redirectUri):(n.grant_type="password",n.username=e.username,n.password=e.password,n.extension=e.extension||""),e.endpointId&&(n.endpoint_id=e.endpointId),i.next=9,regeneratorRuntime.awrap(this._tokenRequest(t._tokenEndpoint,n));case 9:return r=i.sent,o=r.json(),this._auth.setData(o).setRemember(e.remember),this.emit(this.events.loginSuccess,r),i.abrupt("return",r);case 16:throw i.prev=16,i.t0=i["catch"](0),this._cache.clean(),this.emit(this.events.loginError,i.t0),i.t0;case 21:case"end":return i.stop()}},null,this,[[0,16]])},t.prototype.refresh=function(){var e,n;return regeneratorRuntime.async(function(r){for(;;)switch(r.prev=r.next){case 0:if(r.prev=0,this.emit(this.events.beforeRefresh),!this._queue.isPaused()){r.next=9;break}return r.next=5,regeneratorRuntime.awrap(this._queue.poll());case 5:if(this._isAccessTokenValid()){r.next=7;break}throw new Error("Automatic authentification timeout");case 7:return this.emit(this.events.refreshSuccess,null),r.abrupt("return",null);case 9:return this._queue.pause(),r.next=12,regeneratorRuntime.awrap(h.delay(t._refreshDelayMs));case 12:if(this._auth.refreshToken()){r.next=14;break}throw new Error("Refresh token is missing");case 14:if(this._auth.refreshTokenValid()){r.next=16;break}throw new Error("Refresh token has expired");case 16:if(this._queue.isPaused()){r.next=18;break}throw new Error("Queue was resumed before refresh call");case 18:return r.next=20,regeneratorRuntime.awrap(this._tokenRequest(t._tokenEndpoint,{grant_type:"refresh_token",refresh_token:this._auth.refreshToken(),access_token_ttl:t._accessTokenTtl,refresh_token_ttl:this._auth.remember()?t._refreshTokenTtlRemember:t._refreshTokenTtl}));case 20:if(e=r.sent,n=e.json(),n.access_token){r.next=24;break}throw this._client.makeError(new Error("Malformed OAuth response"),e);case 24:return this._auth.setData(n),this._queue.resume(),this.emit(this.events.refreshSuccess,e),r.abrupt("return",e);case 30:throw r.prev=30,r.t0=r["catch"](0),r.t0=this._client.makeError(r.t0),t._clearCacheOnRefreshError&&this._cache.clean(),this.emit(this.events.refreshError,r.t0),r.t0;case 36:case"end":return r.stop()}},null,this,[[0,30]])},t.prototype.logout=function(){var e;return regeneratorRuntime.async(function(n){for(;;)switch(n.prev=n.next){case 0:return n.prev=0,this.emit(this.events.beforeLogout),this._queue.pause(),n.next=5,regeneratorRuntime.awrap(this._tokenRequest(t._revokeEndpoint,{token:this._auth.accessToken()}));case 5:return e=n.sent,this._queue.resume(),this._cache.clean(),this.emit(this.events.logoutSuccess,e),n.abrupt("return",e);case 12:throw n.prev=12,n.t0=n["catch"](0),this._queue.resume(),this.emit(this.events.logoutError,n.t0),n.t0;case 17:case"end":return n.stop()}},null,this,[[0,12]])},t.prototype.inflateRequest=function(e,t){return regeneratorRuntime.async(function(n){for(;;)switch(n.prev=n.next){case 0:if(t=t||{},!t.skipAuthCheck){n.next=3;break}return n.abrupt("return",e);case 3:return n.next=5,regeneratorRuntime.awrap(this._ensureAuthentication());case 5:return e.headers.set("Authorization",this._authHeader()),n.abrupt("return",e);case 7:case"end":return n.stop()}},null,this)},t.prototype.sendRequest=function(e,t){return regeneratorRuntime.async(function(n){for(;;)switch(n.prev=n.next){case 0:return n.prev=0,n.next=3,regeneratorRuntime.awrap(this.inflateRequest(e,t));case 3:return e=n.sent,n.next=6,regeneratorRuntime.awrap(this._client.sendRequest(e));case 6:return n.abrupt("return",n.sent);case 9:if(n.prev=9,n.t0=n["catch"](0),n.t0.apiResponse&&n.t0.apiResponse.response()&&401==n.t0.apiResponse.response().status){n.next=13;break}throw n.t0;case 13:return this._auth.cancelAccessToken(),n.next=16,regeneratorRuntime.awrap(this.sendRequest(e,t));case 16:return n.abrupt("return",n.sent);case 17:case"end":return n.stop()}},null,this,[[0,9]])},t.prototype.send=function(){var e=arguments.length<=0||void 0===arguments[0]?{}:arguments[0];return regeneratorRuntime.async(function(t){for(;;)switch(t.prev=t.next){case 0:return e.url=this.createUrl(e.url,{addServer:!0}),t.next=3,regeneratorRuntime.awrap(this.sendRequest(this._client.createRequest(e),e));case 3:return t.abrupt("return",t.sent);case 4:case"end":return t.stop()}},null,this)},t.prototype.get=function(e,t,n){return regeneratorRuntime.async(function(r){for(;;)switch(r.prev=r.next){case 0:return n=n||{},n.method="GET",n.url=e,n.query=t,r.next=6,regeneratorRuntime.awrap(this.send(n));case 6:return r.abrupt("return",r.sent);case 7:case"end":return r.stop()}},null,this)},t.prototype.post=function(e,t,n,r){return regeneratorRuntime.async(function(o){for(;;)switch(o.prev=o.next){case 0:return r=r||{},r.method="POST",r.url=e,r.query=n,r.body=t,o.next=7,regeneratorRuntime.awrap(this.send(r));case 7:return o.abrupt("return",o.sent);case 8:case"end":return o.stop()}},null,this)},t.prototype.put=function(e,t,n,r){return regeneratorRuntime.async(function(o){for(;;)switch(o.prev=o.next){case 0:return r=r||{},r.method="PUT",r.url=e,r.query=n,r.body=t,o.next=7,regeneratorRuntime.awrap(this.send(r));case 7:return o.abrupt("return",o.sent);case 8:case"end":return o.stop()}},null,this)},t.prototype["delete"]=function(e,t,n){return regeneratorRuntime.async(function(r){for(;;)switch(r.prev=r.next){case 0:return n=n||{},n.method="DELETE",n.url=e,n.query=t,r.next=6,regeneratorRuntime.awrap(this.send(n));case 6:return r.abrupt("return",r.sent);case 7:case"end":return r.stop()}},null,this)},t.prototype._tokenRequest=function(e,t){return regeneratorRuntime.async(function(n){for(;;)switch(n.prev=n.next){case 0:return n.next=2,regeneratorRuntime.awrap(this.send({url:e,skipAuthCheck:!0,body:t,method:"POST",headers:{Authorization:"Basic "+this._apiKey(),"Content-Type":"application/x-www-form-urlencoded"}}));case 2:return n.abrupt("return",n.sent);case 3:case"end":return n.stop()}},null,this)},t.prototype._ensureAuthentication=function(){return regeneratorRuntime.async(function(e){for(;;)switch(e.prev=e.next){case 0:if(!this._isAccessTokenValid()){e.next=2;break}return e.abrupt("return",null);case 2:return e.next=4,regeneratorRuntime.awrap(this.refresh());case 4:return e.abrupt("return",e.sent);case 5:case"end":return e.stop()}},null,this)},t.prototype._isAccessTokenValid=function(){return this._auth.accessTokenValid()&&!this._queue.isPaused()},t.prototype._apiKey=function(){var e=this._appKey+":"+this._appSecret;return"function"==typeof btoa?btoa(e):new Buffer(e).toString("base64")},t.prototype._authHeader=function(){var e=this._auth.accessToken();return this._auth.tokenType()+(e?" "+e:"")},t}(a["default"]);t["default"]=d,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")}t.__esModule=!0;var r=function(){function e(e,t){for(var n=0;nDate.now()},e.prototype.refreshTokenValid=function(){return this.data().refresh_token_expire_time>Date.now()},e.prototype.cancelAccessToken=function(){return this.setData({access_token:"",expires_in:0})},e.prototype.forceAuthentication=function(){return this.setData({token_type:e.forcedTokenType,access_token:"",expires_in:0,refresh_token:"",refresh_token_expires_in:0}),this},e.prototype.setRemember=function(e){return this.setData({remember:e})},e.prototype.remember=function(){return!!this.data().remember},e}();t["default"]=o,e.exports=t["default"]},function(e,t,n){"use strict";function r(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")}t.__esModule=!0;var i=n(23),s=r(i),u=n(3),a=function(){function e(){o(this,e),this.crypto_obj=u.PUBNUB.crypto_obj}return e.prototype.init=function(e){return new s["default"](e)},e}();t["default"]=a,e.exports=t["default"]},function(e,t,n){"use strict";function r(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")}function i(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)}t.__esModule=!0;var s=n(12),u=r(s),a=n(3),c=function(e){function t(n){o(this,t),e.call(this),this.options=n,this.crypto_obj=a.PUBNUB.crypto_obj}return i(t,e),t.prototype.ready=function(){},t.prototype.subscribe=function(e){this.on("message-"+e.channel,e.message)},t.prototype.unsubscribe=function(e){this.off("message-"+e.channel)},t.prototype.receiveMessage=function(e,t){this.emit("message-"+t,e,"env",t)},t}(u["default"]);t["default"]=c,e.exports=t["default"]},function(e,t,n){"use strict";function r(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")}function i(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)}t.__esModule=!0;var s=function(){function e(e,t){for(var n=0;n=0;--r){var o=this.tryEntries[r],i=o.completion;if("root"===o.tryLoc)return t("end");if(o.tryLoc<=this.prev){var s=b.call(o,"catchLoc"),u=b.call(o,"finallyLoc");if(s&&u){if(this.prev=0;--n){var r=this.tryEntries[n];if(r.tryLoc<=this.prev&&b.call(r,"finallyLoc")&&this.prev=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),p(n),S}},"catch":function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var o=r.arg;p(n)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:d(e),resultName:t,nextLoc:n},S}}}("object"==typeof t?t:"object"==typeof window?window:"object"==typeof self?self:this)}).call(t,function(){return this}())}])}); +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.SDK=t():(e.RingCentral=e.RingCentral||{},e.RingCentral.SDK=t())}(this,function(){return function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={exports:{},id:r,loaded:!1};return e[r].call(o.exports,o,o.exports,t),o.loaded=!0,o.exports}var n={};return t.m=e,t.c=n,t.p="/build/",t(0)}([function(e,t,n){e.exports=n(1)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}function o(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,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}t.__esModule=!0;var s=function(){function e(e,t){for(var n=0;ne;e+=2){var t=re[e],n=re[e+1];t(n),re[e]=void 0,re[e+1]=void 0}X=0}function b(){try{var e=n(!function(){var e=new Error('Cannot find module "vertx"');throw e.code="MODULE_NOT_FOUND",e}());return G=e.runOnLoop||e.runOnContext,p()}catch(t){return y()}}function v(){}function m(){return new TypeError("You cannot resolve a promise with itself")}function g(){return new TypeError("A promises callback cannot return that same promise.")}function w(e){try{return e.then}catch(t){return ue.error=t,ue}}function k(e,t,n,r){try{e.call(t,n,r)}catch(o){return o}}function x(e,t,n){Y(function(e){var r=!1,o=k(n,t,function(n){r||(r=!0,t!==n?T(e,n):R(e,n))},function(t){r||(r=!0,C(e,t))},"Settle: "+(e._label||" unknown promise"));!r&&o&&(r=!0,C(e,o))},e)}function S(e,t){t._state===ie?R(e,t._result):t._state===se?C(e,t._result):M(t,void 0,function(t){T(e,t)},function(t){C(e,t)})}function E(e,t){if(t.constructor===e.constructor)S(e,t);else{var n=w(t);n===ue?C(e,ue.error):void 0===n?R(e,t):u(n)?x(e,t,n):R(e,t)}}function T(e,t){e===t?C(e,m()):s(t)?E(e,t):R(e,t)}function O(e){e._onerror&&e._onerror(e._result),P(e)}function R(e,t){e._state===oe&&(e._result=t,e._state=ie,0!==e._subscribers.length&&Y(P,e))}function C(e,t){e._state===oe&&(e._state=se,e._result=t,Y(O,e))}function M(e,t,n,r){var o=e._subscribers,i=o.length;e._onerror=null,o[i]=t,o[i+ie]=n,o[i+se]=r,0===i&&e._state&&Y(P,e)}function P(e){var t=e._subscribers,n=e._state;if(0!==t.length){for(var r,o,i=e._result,s=0;ss;s++)M(r.resolve(e[s]),void 0,t,n);return o}function q(e){var t=this;if(e&&"object"==typeof e&&e.constructor===t)return e;var n=new t(v);return T(n,e),n}function U(e){var t=this,n=new t(v);return C(n,e),n}function F(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function J(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}function K(e){this._id=de++,this._state=void 0,this._result=void 0,this._subscribers=[],v!==e&&(u(e)||F(),this instanceof K||J(),N(this,e))}function H(){var e;if("undefined"!=typeof o)e=o;else if("undefined"!=typeof self)e=self;else try{e=Function("return this")()}catch(t){throw new Error("polyfill failed because global object is unavailable in this environment")}var n=e.Promise;(!n||"[object Promise]"!==Object.prototype.toString.call(n.resolve())||n.cast)&&(e.Promise=ye)}var z;z=Array.isArray?Array.isArray:function(e){return"[object Array]"===Object.prototype.toString.call(e)};var G,V,W,Q=z,X=0,Y=({}.toString,c),$="undefined"!=typeof window?window:void 0,Z=$||{},ee=Z.MutationObserver||Z.WebKitMutationObserver,te="undefined"!=typeof process&&"[object process]"==={}.toString.call(process),ne="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,re=new Array(1e3);W=te?f():ee?h():ne?d():void 0===$?b():y();var oe=void 0,ie=1,se=2,ue=new j,ae=new j;L.prototype._validateInput=function(e){return Q(e)},L.prototype._validationError=function(){return new Error("Array Methods must be provided an Array")},L.prototype._init=function(){this._result=new Array(this.length)};var ce=L;L.prototype._enumerate=function(){for(var e=this,t=e.length,n=e.promise,r=e._input,o=0;n._state===oe&&t>o;o++)e._eachEntry(r[o],o)},L.prototype._eachEntry=function(e,t){var n=this,r=n._instanceConstructor;a(e)?e.constructor===r&&e._state!==oe?(e._onerror=null,n._settledAt(e._state,t,e._result)):n._willSettleAt(r.resolve(e),t):(n._remaining--,n._result[t]=e)},L.prototype._settledAt=function(e,t,n){var r=this,o=r.promise;o._state===oe&&(r._remaining--,e===se?C(o,n):r._result[t]=n),0===r._remaining&&R(o,r._result)},L.prototype._willSettleAt=function(e,t){var n=this;M(e,void 0,function(e){n._settledAt(ie,t,e)},function(e){n._settledAt(se,t,e)})};var le=I,fe=D,pe=q,he=U,de=0,ye=K;K.all=le,K.race=fe,K.resolve=pe,K.reject=he,K._setScheduler=l,K._asap=Y,K.prototype={constructor:K,then:function(e,t){var n=this,r=n._state;if(r===ie&&!e||r===se&&!t)return this;var o=new this.constructor(v),i=n._result;if(r){var s=arguments[r-1];Y(function(){B(r,o,s,i)})}else M(n,o,e,t);return o},"catch":function(e){return this.then(null,e)}};var _e=H,be={Promise:ye,polyfill:_e};n(8).amd?(r=function(){return be}.call(t,n,t,i),!(void 0!==r&&(i.exports=r))):"undefined"!=typeof i&&i.exports?i.exports=be:"undefined"!=typeof this&&(this.ES6Promise=be),_e()}).call(this)}).call(t,n(5).setImmediate,function(){return this}(),n(7)(e))},function(e,t,n){(function(e,r){function o(e,t){this._id=e,this._clearFn=t}var i=n(6).nextTick,s=Function.prototype.apply,u=Array.prototype.slice,a={},c=0;t.setTimeout=function(){return new o(s.call(setTimeout,window,arguments),clearTimeout)},t.setInterval=function(){return new o(s.call(setInterval,window,arguments),clearInterval)},t.clearTimeout=t.clearInterval=function(e){e.close()},o.prototype.unref=o.prototype.ref=function(){},o.prototype.close=function(){this._clearFn.call(window,this._id)},t.enroll=function(e,t){clearTimeout(e._idleTimeoutId),e._idleTimeout=t},t.unenroll=function(e){clearTimeout(e._idleTimeoutId),e._idleTimeout=-1},t._unrefActive=t.active=function(e){clearTimeout(e._idleTimeoutId);var t=e._idleTimeout;t>=0&&(e._idleTimeoutId=setTimeout(function(){e._onTimeout&&e._onTimeout()},t))},t.setImmediate="function"==typeof e?e:function(e){var n=c++,r=arguments.length<2?!1:u.call(arguments,1);return a[n]=!0,i(function(){a[n]&&(r?e.apply(null,r):e.call(null),t.clearImmediate(n))}),n},t.clearImmediate="function"==typeof r?r:function(e){delete a[e]}}).call(t,n(5).setImmediate,n(5).clearImmediate)},function(e,t){function n(){c=!1,s.length?a=s.concat(a):l=-1,a.length&&r()}function r(){if(!c){var e=setTimeout(n);c=!0;for(var t=a.length;t;){for(s=a,a=[];++l1)for(var n=1;n-1?t:e}function c(e,t){t=t||{};var r=t.body;if(c.prototype.isPrototypeOf(e)){if(e.bodyUsed)throw new TypeError("Already read");this.url=e.url,this.credentials=e.credentials,t.headers||(this.headers=new n(e.headers)),this.method=e.method,this.mode=e.mode,r||(r=e._bodyInit,e.bodyUsed=!0)}else this.url=e;if(this.credentials=t.credentials||this.credentials||"omit",(t.headers||!this.headers)&&(this.headers=new n(t.headers)),this.method=a(t.method||this.method||"GET"),this.mode=t.mode||this.mode||null,this.referrer=null,("GET"===this.method||"HEAD"===this.method)&&r)throw new TypeError("Body not allowed for GET or HEAD requests");this._initBody(r)}function l(e){var t=new FormData;return e.trim().split("&").forEach(function(e){if(e){var n=e.split("="),r=n.shift().replace(/\+/g," "),o=n.join("=").replace(/\+/g," ");t.append(decodeURIComponent(r),decodeURIComponent(o))}}),t}function f(e){var t=new n,r=e.getAllResponseHeaders().trim().split("\n");return r.forEach(function(e){var n=e.trim().split(":"),r=n.shift().trim(),o=n.join(":").trim();t.append(r,o)}),t}function p(e,t){t||(t={}),this._initBody(e),this.type="default",this.url=null,this.status=t.status,this.ok=this.status>=200&&this.status<300,this.statusText=t.statusText,this.headers=t.headers instanceof n?t.headers:new n(t.headers),this.url=t.url||""}if(!self.fetch){n.prototype.append=function(n,r){n=e(n),r=t(r);var o=this.map[n];o||(o=[],this.map[n]=o),o.push(r)},n.prototype["delete"]=function(t){delete this.map[e(t)]},n.prototype.get=function(t){var n=this.map[e(t)];return n?n[0]:null},n.prototype.getAll=function(t){return this.map[e(t)]||[]},n.prototype.has=function(t){return this.map.hasOwnProperty(e(t))},n.prototype.set=function(n,r){this.map[e(n)]=[t(r)]},n.prototype.forEach=function(e,t){Object.getOwnPropertyNames(this.map).forEach(function(n){this.map[n].forEach(function(r){e.call(t,r,n,this)},this)},this)};var h={blob:"FileReader"in self&&"Blob"in self&&function(){try{return new Blob,!0}catch(e){return!1}}(),formData:"FormData"in self},d=["DELETE","GET","HEAD","OPTIONS","POST","PUT"];u.call(c.prototype),u.call(p.prototype),self.Headers=n,self.Request=c,self.Response=p,self.fetch=function(e,t){var n;return n=c.prototype.isPrototypeOf(e)&&!t?e:new c(e,t),new Promise(function(e,t){function r(){return"responseURL"in o?o.responseURL:/^X-Request-URL:/m.test(o.getAllResponseHeaders())?o.getResponseHeader("X-Request-URL"):void 0}var o=new XMLHttpRequest;o.onload=function(){var n=1223===o.status?204:o.status;if(100>n||n>599)return void t(new TypeError("Network request failed"));var i={status:n,statusText:o.statusText,headers:f(o),url:r()},s="response"in o?o.response:o.responseText;e(new p(s,i))},o.onerror=function(){t(new TypeError("Network request failed"))},o.open(n.method,n.url,!0),"include"===n.credentials&&(o.withCredentials=!0),"responseType"in o&&h.blob&&(o.responseType="blob"),n.headers.forEach(function(e,t){o.setRequestHeader(t,e)}),o.send("undefined"==typeof n._bodyInit?null:n._bodyInit)})},self.fetch.polyfill=!0}}()},function(module,exports,__webpack_require__){(function(module){window.JSON&&window.JSON.stringify||function(){function toJSON(e){try{return this.valueOf()}catch(t){return null}}function quote(e){return escapable.lastIndex=0,escapable.test(e)?'"'+e.replace(escapable,function(e){var t=meta[e];return"string"==typeof t?t:"\\u"+("0000"+e.charCodeAt(0).toString(16)).slice(-4)})+'"':'"'+e+'"'}function str(e,t){var n,r,o,i,s,u=gap,a=t[e];switch(a&&"object"==typeof a&&(a=toJSON.call(a,e)),"function"==typeof rep&&(a=rep.call(t,e,a)),typeof a){case"string":return quote(a);case"number":return isFinite(a)?String(a):"null";case"boolean":case"null":return String(a);case"object":if(!a)return"null";if(gap+=indent,s=[],"[object Array]"===Object.prototype.toString.apply(a)){for(i=a.length,n=0;i>n;n+=1)s[n]=str(n,a)||"null";return o=0===s.length?"[]":gap?"[\n"+gap+s.join(",\n"+gap)+"\n"+u+"]":"["+s.join(",")+"]",gap=u,o}if(rep&&"object"==typeof rep)for(i=rep.length,n=0;i>n;n+=1)r=rep[n],"string"==typeof r&&(o=str(r,a),o&&s.push(quote(r)+(gap?": ":":")+o));else for(r in a)Object.hasOwnProperty.call(a,r)&&(o=str(r,a),o&&s.push(quote(r)+(gap?": ":":")+o));return o=0===s.length?"{}":gap?"{\n"+gap+s.join(",\n"+gap)+"\n"+u+"}":"{"+s.join(",")+"}",gap=u,o}}window.JSON||(window.JSON={});var cx=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,escapable=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,gap,indent,meta={"\b":"\\b"," ":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"},rep;"function"!=typeof JSON.stringify&&(JSON.stringify=function(e,t,n){var r;if(gap="",indent="","number"==typeof n)for(r=0;n>r;r+=1)indent+=" ";else"string"==typeof n&&(indent=n);if(rep=t,t&&"function"!=typeof t&&("object"!=typeof t||"number"!=typeof t.length))throw new Error("JSON.stringify");return str("",{"":e})}),"function"!=typeof JSON.parse&&(JSON.parse=function(text){return eval("("+text+")")})}(),window.PUBNUB||function(){function e(){return"x"+ ++N+ +new Date}function t(){return+new Date}function r(e,t){var n=e.join(H),r=[];return t?(l(t,function(e,t){var n="object"==typeof t?JSON.stringify(t):t;"undefined"!=typeof t&&null!=t&&h(n).length>0&&r.push(e+"="+h(n))}),n+="?"+r.join(z)):n}function o(e,n){var r,o=0,i=function(){o+n>t()?(clearTimeout(r),r=setTimeout(i,n)):(o=t(),e())};return i}function i(e,t){var n=[];return l(e||[],function(e){t(e)&&n.push(e)}),n}function s(e,t){return e.replace(Q,function(e,n){return t[n]||e})}function u(e,t){return setTimeout(e,t)}function a(e){var t="xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(e){var t=16*Math.random()|0,n="x"==e?t:3&t|8;return n.toString(16)});return e&&e(t),t}function c(e){return!!e&&"string"!=typeof e&&(Array.isArray&&Array.isArray(e)||"number"==typeof e.length)}function l(e,t){if(e&&t)if(c(e))for(var n=0,r=e.length;r>n;)t.call(e[n],e[n],n++);else for(var n in e)e.hasOwnProperty&&e.hasOwnProperty(n)&&t.call(e[n],n,e[n])}function f(e,t){var n=[];return l(e||[],function(e,r){n.push(t(e,r))}),n}function p(e){return encodeURIComponent(e).replace(/[!'()*~]/g,function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()})}function h(e){return encodeURIComponent(e)}function d(e,t){var n=[];return l(e,function(e,r){t?e.search("-pnpres")<0&&r.subscribed&&n.push(e):r.subscribed&&n.push(e)}),n.sort()}function y(e,t){var n=[];return l(e,function(e,r){t?e.search("-pnpres")<0&&r.subscribed&&n.push(e):r.subscribed&&n.push(e)}),n.sort()}function _(){u(function(){L||(L=1,l(I,function(e){e()}))},K)}function b(b){function v(e){return e||(e={}),l(je,function(t,n){t in e||(e[t]=n)}),e}function m(e){var t=[];return l(e,function(e,n){t.push(e)}),t}function g(e){return m(e).sort()}function w(e){var t="",n=g(e);for(var r in n){var o=n[r];t+=o+"="+p(e[o]),r!=n.length-1&&(t+="&")}return t}function x(e,t,n){var r=!1;if("undefined"==typeof e)return t;if("number"==typeof e)r=e>G||0==e?!1:!0;else{if("boolean"==typeof e)return e?V:0;r=!0}return r?(n&&n("Presence Heartbeat value invalid. Valid range ( x > "+G+" or x = 0). Current Value : "+(t||G)),t||G):e}function S(e,t){return He.encrypt(e,t||Ie)||e}function E(e,t){return He.decrypt(e,t||Ie)||He.decrypt(e,Ie)||e}function T(){return clearTimeout(Ee),!Oe||Oe>=500||1>Oe||!d(ke,!0).length&&!y(xe,!0).length?void(Re=!1):(Re=!0,void ze.presence_heartbeat({callback:function(e){Ee=u(T,Oe*K)},error:function(e){Ae&&Ae("Presence Heartbeat unable to reach Pubnub servers."+JSON.stringify(e)),Ee=u(T,Oe*K)}}))}function O(){!Re&&T()}function R(e){if(Ce){if(!he.length)return}else{if(e&&(he.sending=0),he.sending||!he.length)return;he.sending=1}Pe(he.shift())}function C(e){var t=0;return l(y(xe),function(n){var r=xe[n];r&&(t++,(e||function(){})(r))}),t}function M(e){var t=0;return l(d(ke),function(n){var r=ke[n];r&&(t++,(e||function(){})(r))}),t}function P(e,t,n){if("object"==typeof e){if(e.error){var r={};return e.message&&(r.message=e.message),e.payload&&(r.payload=e.payload),void(n&&n(r))}if(e.payload)return void(e.next_page?t&&t(e.payload,e.next_page):t&&t(e.payload))}t&&t(e)}function j(e,t){if("object"==typeof e&&e.error){var n={};return e.message&&(n.message=e.message),e.payload&&(n.payload=e.payload),void(t&&t(n))}t&&t(e)}function A(e,t,n,r){var t=e.callback||t,o=e.error||Ae,i=Ne();r=r||{},r.auth||(r.auth=e.auth_key||ie);var s=[le,"v1","channel-registration","sub-key",oe];s.push.apply(s,n),i&&(r.callback=i),Pe({callback:i,data:v(r),success:function(e){P(e,t,o)},fail:function(e){j(e,o)},url:s})}function B(){Be()||U(1,{error:"Offline. Please check your network settings. "}),Q&&clearTimeout(Q),Q=u(B,K)}function N(){te&&ze.time(function(e){z(function(){},e),e||U(1,{error:"Heartbeat failed to connect to Pubnub Servers.Please check your network settings."}),Y&&clearTimeout(Y),Y=u(N,ee)})}function U(e,t){ve&&ve(e,t),ve=null,clearTimeout(Q),clearTimeout(Y)}function H(e){var n=t()-ye;return n-e/1e4}function z(e,n){function r(n){if(n){var r=n/1e4,i=(t()-o)/2;ye=t()-(r+i),e&&e(ye)}}var o=t();n&&r(n)||ze.time(r)}var Q,Y,$=+b.windowing||q,Z=(+b.timeout||F)*K,ee=(+b.keepalive||J)*K,te=b.timecheck||0,ne=b.noleave||0,re=b.publish_key,oe=b.subscribe_key,ie=b.auth_key||"",se=b.secret_key||"",ue=b.hmac_SHA256,ae=b.ssl?"s":"",ce="http"+ae+"://"+(b.origin||"pubsub.pubnub.com"),le=X(ce),fe=X(ce),pe=function(){},he=[],de=!0,ye=0,_e=0,be=0,ve=0,me=b.restore||0,ge=0,we=!1,ke={},xe={},Se={},Ee=null,Te=x(b.heartbeat||b.pnexpires||0,b.error),Oe=b.heartbeat_interval||Te/2-1,Re=!1,Ce=b.no_wait_for_pending,Me=b["compatible_3.5"]||!1,Pe=b.xdr,je=b.params||{},Ae=b.error||function(){},Be=b._is_online||function(){return 1},Ne=b.jsonp_cb||function(){return 0},Le=b.db||{get:function(){},set:function(){}},Ie=b.cipher_key,De=b.uuid||!b.unique_uuid&&Le&&Le.get(oe+"uuid")||"",qe=b.instance_id||!1,Ue="",Fe=b.shutdown,Je="undefined"!=typeof b.use_send_beacon?b.use_send_beacon:!0,Ke=Je?b.sendBeacon:null;2===Te&&(Oe=1);var He=b.crypto_obj||{encrypt:function(e,t){return e},decrypt:function(e,t){return e}},ze={LEAVE:function(e,t,n,o,i){var s,u,a={uuid:De,auth:n||ie},c=X(ce),o=o||function(){},l=i||function(){},f=Ne();if(e.indexOf(D)>0)return!0;if(Me){if(!ae)return!1;if("0"==f)return!1}return ne?!1:("0"!=f&&(a.callback=f),qe&&(a.instanceid=Ue),s=[c,"v2","presence","sub_key",oe,"channel",h(e),"leave"],u=v(a),Ke&&(url_string=r(s,u),Ke(url_string))?(o&&o({status:200,action:"leave",message:"OK",service:"Presence"}),!0):(Pe({blocking:t||ae,timeout:2e3,callback:f,data:u,success:function(e){P(e,o,l)},fail:function(e){j(e,l)},url:s}),!0))},LEAVE_GROUP:function(e,t,n,o,i){var s,u,a={uuid:De,auth:n||ie},c=X(ce),o=o||function(){},l=i||function(){},f=Ne();if(e.indexOf(D)>0)return!0;if(Me){if(!ae)return!1;if("0"==f)return!1}return ne?!1:("0"!=f&&(a.callback=f),e&&e.length>0&&(a["channel-group"]=e),qe&&(a.instanceid=Ue),s=[c,"v2","presence","sub_key",oe,"channel",h(","),"leave"],u=v(a),Ke&&(url_string=r(s,u),Ke(url_string))?(o&&o({status:200,action:"leave",message:"OK",service:"Presence"}),!0):(Pe({blocking:t||ae,timeout:5e3,callback:f,data:u,success:function(e){P(e,o,l)},fail:function(e){j(e,l)},url:s}),!0))},set_resumed:function(e){we=e},get_cipher_key:function(){return Ie},set_cipher_key:function(e){Ie=e},raw_encrypt:function(e,t){return S(e,t)},raw_decrypt:function(e,t){return E(e,t)},get_heartbeat:function(){return Te},set_heartbeat:function(e,t){Te=x(e,Te,Ae),Oe=t||Te/2-1,2==Te&&(Oe=1),pe(),T()},get_heartbeat_interval:function(){return Oe},set_heartbeat_interval:function(e){Oe=e,T()},get_version:function(){return W},getGcmMessageObject:function(e){return{data:e}},getApnsMessageObject:function(e){var t={aps:{badge:1,alert:""}};for(k in e)k[t]=e[k];return t},newPnMessage:function(){var e={};gcm&&(e.pn_gcm=gcm),apns&&(e.pn_apns=apns);for(k in n)e[k]=n[k];return e},_add_param:function(e,t){je[e]=t},channel_group:function(e,t){var n,r,o=e.channel_group,t=t||e.callback,i=e.channels||e.channel,s=e.cloak,u=[],a={},l=e.mode||"add";if(o){var f=o.split(":");f.length>1?(n="*"===f[0]?null:f[0],r=f[1]):r=f[0]}n&&u.push("namespace")&&u.push(h(n)),u.push("channel-group"),r&&"*"!==r&&u.push(r),i?(c(i)&&(i=i.join(",")),a[l]=i,a.cloak=de?"true":"false"):"remove"===l&&u.push("remove"),"undefined"!=typeof s&&(a.cloak=s?"true":"false"),A(e,t,u,a)},channel_group_list_groups:function(e,t){var n;n=e.namespace||e.ns||e.channel_group||null,n&&(e.channel_group=n+":*"),ze.channel_group(e,t)},channel_group_list_channels:function(e,t){return e.channel_group?void ze.channel_group(e,t):Ae("Missing Channel Group")},channel_group_remove_channel:function(e,t){return e.channel_group?e.channel||e.channels?(e.mode="remove",void ze.channel_group(e,t)):Ae("Missing Channel"):Ae("Missing Channel Group")},channel_group_remove_group:function(e,t){return e.channel_group?e.channel?Ae("Use channel_group_remove_channel if you want to remove a channel from a group."):(e.mode="remove",void ze.channel_group(e,t)):Ae("Missing Channel Group")},channel_group_add_channel:function(e,t){return e.channel_group?e.channel||e.channels?void ze.channel_group(e,t):Ae("Missing Channel"):Ae("Missing Channel Group")},channel_group_cloak:function(e,t){return"undefined"==typeof e.cloak?void t(de):(de=e.cloak,void ze.channel_group(e,t))},channel_group_list_namespaces:function(e,t){var n=["namespace"];A(e,t,n)},channel_group_remove_namespace:function(e,t){var n=["namespace",e.namespace,"remove"];A(e,t,n)},history:function(e,t){var t=e.callback||t,n=e.count||e.limit||100,r=e.reverse||"false",o=e.error||function(){},i=e.auth_key||ie,s=e.cipher_key,u=e.channel,a=e.channel_group,c=e.start,l=e.end,f=e.include_token,p=e.string_message_token||!1,d={},y=Ne();return u||a?t?oe?(d.stringtoken="true",d.count=n,d.reverse=r,d.auth=i,a&&(d["channel-group"]=a,u||(u=",")),y&&(d.callback=y),c&&(d.start=c),l&&(d.end=l),f&&(d.include_token="true"),p&&(d.string_message_token="true"),void Pe({callback:y,data:v(d),success:function(e){if("object"==typeof e&&e.error)return void o({message:e.message,payload:e.payload});for(var n=e[0],r=[],i=0;i2&&(i.state=JSON.stringify(Se)),Te&&(i.heartbeat=Te),qe&&(i.instanceid=Ue),O(),ve=Pe({timeout:x,callback:e,fail:function(e){e&&e.error&&e.service?(j(e,_),r(1)):ze.time(function(t){!t&&j(e,_),r(t)})},data:v(i),url:[fe,"subscribe",oe,h(t),e,ge],success:function(e){if(!e||"object"==typeof e&&"error"in e&&e.error)return _(e.error),u(pe,K);if(b(e[1]),ge=!ge&&me&&Le.get(oe)||e[1],M(function(e){e.connected||(e.connected=1,e.connect(e.name))}),C(function(e){e.connected||(e.connected=1,e.connect(e.name))}),we&&!me)return ge=0,we=!1,Le.set(oe,0),void u(o,S);w&&(ge=1e4,w=0),Le.set(oe,e[1]);var t=function(){var t="",n="";e.length>3?(t=e[3],n=e[2]):t=e.length>2?e[2]:f(d(ke),function(t){return f(Array(e[0].length).join(",").split(","),function(){return t})}).join(",");var r=t.split(","),o=n?n.split(","):[];return function(){var e=r.shift()||be,t=o.shift(),n={};t?(e&&e.indexOf("-pnpres")>=0&&t.indexOf("-pnpres")<0&&(t+="-pnpres"),n=xe[t]||ke[t]||{callback:function(){}}):n=ke[e];var i=[n.callback||_e,e.split(D)[0]];return t&&i.push(t.split(D)[0]),i}}(),n=H(+e[1]);l(e[0],function(r){var o=t(),i=E(r,ke[o[1]]?ke[o[1]].cipher_key:null);o[0]&&o[0](i,e,o[2]||o[1],n,o[1])}),u(o,S)}})}}var i=e.channel,s=e.channel_group,n=n||e.callback,n=n||e.message,a=e.connect||function(){},c=e.reconnect||function(){},p=e.disconnect||function(){},_=e.error||_||function(){},b=e.idle||function(){},m=e.presence||0,g=e.noheresync||0,w=e.backfill||0,k=e.timetoken||0,x=e.timeout||Z,S=e.windowing||$,T=e.state,R=e.heartbeat||e.pnexpires,P=e.heartbeat_interval,A=e.restore||me;return ie=e.auth_key||ie,me=A,ge=k,i||s?n?oe?((R||0===R||P||0===P)&&ze.set_heartbeat(R,P),i&&l((i.join?i.join(","):""+i).split(","),function(r){var o=ke[r]||{};ke[be=r]={name:r,connected:o.connected,disconnected:o.disconnected,subscribed:1,callback:_e=n,cipher_key:e.cipher_key,connect:a,disconnect:p,reconnect:c},T&&(r in T?Se[r]=T[r]:Se[r]=T),m&&(ze.subscribe({channel:r+D,callback:m,restore:A}),o.subscribed||g||ze.here_now({channel:r,data:v({uuid:De,auth:ie}),callback:function(e){l("uuids"in e?e.uuids:[],function(n){m({action:"join",uuid:n,timestamp:Math.floor(t()/1e3),occupancy:e.occupancy||1},e,r)})}}))}),s&&l((s.join?s.join(","):""+s).split(","),function(r){var o=xe[r]||{};xe[r]={name:r,connected:o.connected,disconnected:o.disconnected,subscribed:1,callback:_e=n,cipher_key:e.cipher_key,connect:a,disconnect:p,reconnect:c},m&&(ze.subscribe({channel_group:r+D,callback:m,restore:A,auth_key:ie}),o.subscribed||g||ze.here_now({channel_group:r,data:v({uuid:De,auth:ie}),callback:function(e){l("uuids"in e?e.uuids:[],function(n){m({action:"join",uuid:n,timestamp:Math.floor(t()/1e3),occupancy:e.occupancy||1},e,r)})}}))}),pe=function(){U(),u(o,S)},L?void pe():I.push(pe)):Ae("Missing Subscribe Key"):Ae("Missing Callback"):Ae("Missing Channel")},here_now:function(e,t){var t=e.callback||t,n=e.debug,r=e.error||function(){},o=e.auth_key||ie,i=e.channel,s=e.channel_group,u=Ne(),a="uuids"in e?e.uuids:!0,c=e.state,l={uuid:De,auth:o};if(a||(l.disable_uuids=1),c&&(l.state=1),!t)return Ae("Missing Callback");if(!oe)return Ae("Missing Subscribe Key");var f=[le,"v2","presence","sub_key",oe];i&&f.push("channel")&&f.push(h(i)),"0"!=u&&(l.callback=u),s&&(l["channel-group"]=s,!i&&f.push("channel")&&f.push(",")),qe&&(l.instanceid=Ue),Pe({callback:u,data:v(l),success:function(e){P(e,t,r)},fail:function(e){j(e,r)},debug:n,url:f})},where_now:function(e,t){var t=e.callback||t,n=e.error||function(){},r=e.auth_key||ie,o=Ne(),i=e.uuid||De,s={auth:r};return t?oe?("0"!=o&&(s.callback=o),qe&&(s.instanceid=Ue),void Pe({callback:o,data:v(s),success:function(e){P(e,t,n)},fail:function(e){j(e,n)},url:[le,"v2","presence","sub_key",oe,"uuid",h(i)]})):Ae("Missing Subscribe Key"):Ae("Missing Callback")},state:function(e,t){var n,t=e.callback||t||function(e){},r=e.error||function(){},o=e.auth_key||ie,i=Ne(),s=e.state,u=e.uuid||De,a=e.channel,c=e.channel_group,l=v({auth:o});return oe?u?a||c?("0"!=i&&(l.callback=i),"undefined"!=typeof a&&ke[a]&&ke[a].subscribed&&s&&(Se[a]=s),"undefined"!=typeof c&&xe[c]&&xe[c].subscribed&&(s&&(Se[c]=s),l["channel-group"]=c,a||(a=",")),l.state=JSON.stringify(s),qe&&(l.instanceid=Ue),n=s?[le,"v2","presence","sub-key",oe,"channel",a,"uuid",u,"data"]:[le,"v2","presence","sub-key",oe,"channel",a,"uuid",h(u)],void Pe({callback:i,data:v(l),success:function(e){P(e,t,r)},fail:function(e){j(e,r)},url:n})):Ae("Missing Channel"):Ae("Missing UUID"):Ae("Missing Subscribe Key")},grant:function(e,t){var t=e.callback||t,n=e.error||function(){},r=e.channel||e.channels,o=e.channel_group,i=Ne(),s=e.ttl,u=e.read?"1":"0",a=e.write?"1":"0",l=e.manage?"1":"0",f=e.auth_key||e.auth_keys;if(!t)return Ae("Missing Callback");if(!oe)return Ae("Missing Subscribe Key");if(!re)return Ae("Missing Publish Key");if(!se)return Ae("Missing Secret Key");var p=Math.floor((new Date).getTime()/1e3),h=oe+"\n"+re+"\ngrant\n",d={w:a,r:u,timestamp:p};e.manage&&(d.m=l),c(r)&&(r=r.join(",")),c(f)&&(f=f.join(",")),"undefined"!=typeof r&&null!=r&&r.length>0&&(d.channel=r),"undefined"!=typeof o&&null!=o&&o.length>0&&(d["channel-group"]=o),"0"!=i&&(d.callback=i),(s||0===s)&&(d.ttl=s),f&&(d.auth=f),d=v(d),f||delete d.auth,h+=w(d);var y=ue(h,se);y=y.replace(/\+/g,"-"),y=y.replace(/\//g,"_"),d.signature=y,Pe({callback:i,data:d,success:function(e){P(e,t,n)},fail:function(e){j(e,n)},url:[le,"v1","auth","grant","sub-key",oe]})},mobile_gw_provision:function(e){var t,n,r=e.callback||function(){},o=e.auth_key||ie,i=e.error||function(){},s=Ne(),u=e.channel,a=e.op,c=e.gw_type,l=e.device_id;return l?c?a?u?re?oe?(n=[le,"v1/push/sub-key",oe,"devices",l],t={uuid:De,auth:o,type:c},"add"==a?t.add=u:"remove"==a&&(t.remove=u),qe&&(data.instanceid=Ue),void Pe({callback:s,data:t,success:function(e){P(e,r,i)},fail:function(e){j(e,i)},url:n})):Ae("Missing Subscribe Key"):Ae("Missing Publish Key"):Ae("Missing gw destination Channel (channel)"):Ae("Missing GW Operation (op: add or remove)"):Ae("Missing GW Type (gw_type: gcm or apns)"):Ae("Missing Device ID (device_id)")},audit:function(e,t){var t=e.callback||t,n=e.error||function(){},r=e.channel,o=e.channel_group,i=e.auth_key,s=Ne();if(!t)return Ae("Missing Callback");if(!oe)return Ae("Missing Subscribe Key");if(!re)return Ae("Missing Publish Key");if(!se)return Ae("Missing Secret Key");var u=Math.floor((new Date).getTime()/1e3),a=oe+"\n"+re+"\naudit\n",c={timestamp:u};"0"!=s&&(c.callback=s),"undefined"!=typeof r&&null!=r&&r.length>0&&(c.channel=r),"undefined"!=typeof o&&null!=o&&o.length>0&&(c["channel-group"]=o),i&&(c.auth=i),c=v(c),i||delete c.auth,a+=w(c);var l=ue(a,se);l=l.replace(/\+/g,"-"),l=l.replace(/\//g,"_"),c.signature=l,Pe({callback:s,data:c,success:function(e){P(e,t,n)},fail:function(e){j(e,n)},url:[le,"v1","auth","audit","sub-key",oe]})},revoke:function(e,t){e.read=!1,e.write=!1,ze.grant(e,t)},set_uuid:function(e){De=e,pe()},get_uuid:function(){return De},isArray:function(e){return c(e)},get_subscibed_channels:function(){return d(ke,!0)},presence_heartbeat:function(e){var t=e.callback||function(){},n=e.error||function(){},r=Ne(),o={uuid:De,auth:ie},i=JSON.stringify(Se);i.length>2&&(o.state=JSON.stringify(Se)),Te>0&&320>Te&&(o.heartbeat=Te),"0"!=r&&(o.callback=r);var s=h(d(ke,!0).join(",")),u=y(xe,!0).join(",");s||(s=","),u&&(o["channel-group"]=u),qe&&(o.instanceid=Ue),Pe({callback:r,data:v(o),timeout:5*K,url:[le,"v2","presence","sub-key",oe,"channel",s,"heartbeat"],success:function(e){P(e,t,n)},fail:function(e){j(e,n)}})},stop_timers:function(){clearTimeout(Q),clearTimeout(Y),clearTimeout(Ee)},shutdown:function(){ze.stop_timers(),Fe&&Fe()},xdr:Pe,ready:_,db:Le,uuid:a,map:f,each:l,"each-channel":M,grep:i,offline:function(){U(1,{message:"Offline. Please check your network settings."})},supplant:s,now:t,unique:e,updater:o};return De||(De=ze.uuid()),Ue||(Ue=ze.uuid()),Le.set(oe+"uuid",De),Q=u(B,K),Y=u(N,ee),Ee=u(O,(Oe-3)*K),z(),ze}function v(){function e(e){return CryptoJS.SHA256(e).toString(CryptoJS.enc.Hex)}function t(e){return e=e||{},e.hasOwnProperty("encryptKey")||(e.encryptKey=l.encryptKey),e.hasOwnProperty("keyEncoding")||(e.keyEncoding=l.keyEncoding),e.hasOwnProperty("keyLength")||(e.keyLength=l.keyLength),e.hasOwnProperty("mode")||(e.mode=l.mode),-1==u.indexOf(e.keyEncoding.toLowerCase())&&(e.keyEncoding=l.keyEncoding),-1==a.indexOf(parseInt(e.keyLength,10))&&(e.keyLength=l.keyLength),-1==c.indexOf(e.mode.toLowerCase())&&(e.mode=l.mode),e}function n(e,t){return"base64"==t.keyEncoding?CryptoJS.enc.Base64.parse(e):"hex"==t.keyEncoding?CryptoJS.enc.Hex.parse(e):e}function r(t,r){return t=n(t,r),r.encryptKey?CryptoJS.enc.Utf8.parse(e(t).slice(0,32)):t}function o(e){return"ecb"==e.mode?CryptoJS.mode.ECB:CryptoJS.mode.CBC}function i(e){return"cbc"==e.mode?CryptoJS.enc.Utf8.parse(s):null}var s="0123456789012345",u=["hex","utf8","base64","binary"],a=[128,256],c=["ecb","cbc"],l={encryptKey:!0,keyEncoding:"utf8",keyLength:256,mode:"cbc"};return{encrypt:function(e,n,s){if(!n)return e;s=t(s);var u=i(s),a=o(s),c=r(n,s),l=JSON.stringify(e),f=CryptoJS.AES.encrypt(l,c,{iv:u,mode:a}).ciphertext,p=f.toString(CryptoJS.enc.Base64);return p||e},decrypt:function(e,n,s){if(!n)return e;s=t(s);var u=i(s),a=o(s),c=r(n,s);try{var l=CryptoJS.enc.Base64.parse(e),f=CryptoJS.AES.decrypt({ciphertext:l},c,{iv:u,mode:a}).toString(CryptoJS.enc.Utf8),p=JSON.parse(f);return p}catch(h){return}}}}function m(e,t){var n=CryptoJS.HmacSHA256(e,t);return n.toString(CryptoJS.enc.Base64)}function g(e){return document.getElementById(e)}function w(e){console.error(e)}function x(e,t){var n=[];return l(e.split(/\s+/),function(e){l((t||document).getElementsByTagName(e),function(e){n.push(e)})}),n}function S(e,t,n){l(e.split(","),function(e){var r=function(e){e||(e=window.event),n(e)||(e.cancelBubble=!0,e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation())};t.addEventListener?t.addEventListener(e,r,!1):t.attachEvent?t.attachEvent("on"+e,r):t["on"+e]=r})}function E(){return x("head")[0]}function T(e,t,n){return n?void e.setAttribute(t,n):e&&e.getAttribute&&e.getAttribute(t)}function O(e,t){for(var n in t)if(t.hasOwnProperty(n))try{e.style[n]=t[n]+("|width|height|top|left|".indexOf(n)>0&&"number"==typeof t[n]?"px":"")}catch(r){}}function R(e){return document.createElement(e)}function C(){return te||B()?0:e()}function M(t){if(te||B())return P(t);var n=R("script"),o=t.callback,i=e(),s=0,a=t.timeout||U,c=u(function(){d(1,{message:"timeout"})},a),l=t.fail||function(){},f=t.data||{},p=t.success||function(){},h=function(){E().appendChild(n)},d=function(e,t){s||(s=1,n.onerror=null,clearTimeout(c),e||!t||p(t),u(function(){e&&l();var t=g(i),n=t&&t.parentNode;n&&n.removeChild(t)},K))};return window[o]=function(e){d(0,e)},t.blocking||(n[$]=$),n.onerror=function(){d(1)},n.src=r(t.url,f),T(n,"id",i),h(),d}function P(e){var t,n,o=function(){if(!s){s=1,clearTimeout(c);try{n=JSON.parse(t.responseText)}catch(e){return d(1)}i=1,p(n)}},i=0,s=0,a=e.timeout||U,c=u(function(){d(1,{message:"timeout"})},a),l=e.fail||function(){},f=e.data||{},p=e.success||function(){},h=!e.blocking,d=function(e,n){i||(i=1,clearTimeout(c),t&&(t.onerror=t.onload=null,t.abort&&t.abort(),t=null),e&&l(n))};try{t=B()||window.XDomainRequest&&new XDomainRequest||new XMLHttpRequest,t.onerror=t.onabort=function(e){d(1,e||t&&t.responseText||{error:"Network Connection Error"})},t.onload=t.onloadend=o,t.onreadystatechange=function(){if(t&&4==t.readyState)switch(t.status){case 200:break;default:try{n=JSON.parse(t.responseText),d(1,n)}catch(e){return d(1,{status:t.status,payload:null,message:t.responseText})}return}};var y=r(e.url,f);t.open("GET",y,h),h&&(t.timeout=a),t.send()}catch(_){return d(0),te=0,M(e)}return d}function j(){if(!("onLine"in navigator))return 1;try{return navigator.onLine}catch(e){return!0}}function A(e){return"sendBeacon"in navigator?navigator.sendBeacon(e):!1}function B(){if(!ue||!ue.get)return 0;var e={id:B.id++,send:function(){},abort:function(){e.id={}},open:function(t,n){B[e.id]=e,ue.get(e.id,n)}};return e}var N=1,L=!1,I=[],D="-pnpres",q=10,U=1e4,F=310,J=60,K=1e3,H="/",z="&",G=5,V=30,W="3.7.16",Q=/{([\w\-]+)}/g,X=function(){var e=20,t=Math.floor(Math.random()*e);return function(n,r){return n.indexOf("pubsub.")>0&&n.replace("pubsub","ps"+(r?a().split("-")[0]:++t"),PUBNUB.rdx=function(e,t){return t?(B[e].responseText=unescape(t),void B[e].onload()):B[e].onerror()},B.id=K)}(),function(){var e=PUBNUB.ws=function(t,n){if(!(this instanceof e))return new e(t,n);var r=this,t=r.url=t||"",o=(r.protocol=n||"Sec-WebSocket-Protocol",t.split("/")),i={ssl:"wss:"===o[0],origin:o[2],publish_key:o[3],subscribe_key:o[4],channel:o[5]};return r.CONNECTING=0,r.OPEN=1,r.CLOSING=2,r.CLOSED=3,r.CLOSE_NORMAL=1e3,r.CLOSE_GOING_AWAY=1001,r.CLOSE_PROTOCOL_ERROR=1002,r.CLOSE_UNSUPPORTED=1003,r.CLOSE_TOO_LARGE=1004,r.CLOSE_NO_STATUS=1005,r.CLOSE_ABNORMAL=1006,r.onclose=r.onerror=r.onmessage=r.onopen=r.onsend=function(){},r.binaryType="",r.extensions="",r.bufferedAmount=0,r.trasnmitting=!1,r.buffer=[],r.readyState=r.CONNECTING,t?(r.pubnub=PUBNUB.init(i),r.pubnub.setup=i,r.setup=i,void r.pubnub.subscribe({restore:!1,channel:i.channel,disconnect:r.onerror,reconnect:r.onopen,error:function(){r.onclose({code:r.CLOSE_ABNORMAL,reason:"Missing URL",wasClean:!1})},callback:function(e){r.onmessage({data:e})},connect:function(){r.readyState=r.OPEN,r.onopen()}})):(r.readyState=r.CLOSED,r.onclose({code:r.CLOSE_ABNORMAL,reason:"Missing URL",wasClean:!0}),r)};e.prototype.send=function(e){var t=this;t.pubnub.publish({channel:t.pubnub.setup.channel,message:e,callback:function(e){t.onsend({data:e})}})},e.prototype.close=function(){var e=this;e.pubnub.unsubscribe({channel:e.pubnub.setup.channel}),e.readyState=e.CLOSED,e.onclose({})}}();var CryptoJS=CryptoJS||function(e,t){var n={},r=n.lib={},o=function(){},i=r.Base={extend:function(e){o.prototype=this;var t=new o;return e&&t.mixIn(e),t.hasOwnProperty("init")||(t.init=function(){t.$super.init.apply(this,arguments)}),t.init.prototype=t,t.$super=this,t},create:function(){var e=this.extend();return e.init.apply(e,arguments),e},init:function(){},mixIn:function(e){for(var t in e)e.hasOwnProperty(t)&&(this[t]=e[t]);e.hasOwnProperty("toString")&&(this.toString=e.toString)},clone:function(){return this.init.prototype.extend(this)}},s=r.WordArray=i.extend({init:function(e,n){e=this.words=e||[],this.sigBytes=n!=t?n:4*e.length},toString:function(e){return(e||a).stringify(this)},concat:function(e){var t=this.words,n=e.words,r=this.sigBytes;if(e=e.sigBytes,this.clamp(),r%4)for(var o=0;e>o;o++)t[r+o>>>2]|=(n[o>>>2]>>>24-8*(o%4)&255)<<24-8*((r+o)%4);else if(65535o;o+=4)t[r+o>>>2]=n[o>>>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-8*(n%4),t.length=e.ceil(n/4)},clone:function(){var e=i.clone.call(this);return e.words=this.words.slice(0),e},random:function(t){for(var n=[],r=0;t>r;r+=4)n.push(4294967296*e.random()|0);return new s.init(n,t)}}),u=n.enc={},a=u.Hex={stringify:function(e){var t=e.words;e=e.sigBytes;for(var n=[],r=0;e>r;r++){var o=t[r>>>2]>>>24-8*(r%4)&255;n.push((o>>>4).toString(16)),n.push((15&o).toString(16))}return n.join("")},parse:function(e){for(var t=e.length,n=[],r=0;t>r;r+=2)n[r>>>3]|=parseInt(e.substr(r,2),16)<<24-4*(r%8);return new s.init(n,t/2)}},c=u.Latin1={stringify:function(e){var t=e.words;e=e.sigBytes;for(var n=[],r=0;e>r;r++)n.push(String.fromCharCode(t[r>>>2]>>>24-8*(r%4)&255));return n.join("")},parse:function(e){for(var t=e.length,n=[],r=0;t>r;r++)n[r>>>2]|=(255&e.charCodeAt(r))<<24-8*(r%4);return new s.init(n,t)}},l=u.Utf8={stringify:function(e){try{return decodeURIComponent(escape(c.stringify(e)))}catch(t){throw Error("Malformed UTF-8 data")}},parse:function(e){return c.parse(unescape(encodeURIComponent(e)))}},f=r.BufferedBlockAlgorithm=i.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,o=n.sigBytes,i=this.blockSize,u=o/(4*i),u=t?e.ceil(u):e.max((0|u)-this._minBufferSize,0);if(t=u*i,o=e.min(4*t,o),t){for(var a=0;t>a;a+=i)this._doProcessBlock(r,a);a=r.splice(0,t),n.sigBytes-=o}return new s.init(a,o)},clone:function(){var e=i.clone.call(this);return e._data=this._data.clone(),e},_minBufferSize:0});r.Hasher=f.extend({cfg:i.extend(),init:function(e){this.cfg=this.cfg.extend(e),this.reset()},reset:function(){f.reset.call(this),this._doReset()},update:function(e){return this._append(e),this._process(),this},finalize:function(e){return e&&this._append(e),this._doFinalize()},blockSize:16,_createHelper:function(e){return function(t,n){return new e.init(n).finalize(t)}},_createHmacHelper:function(e){return function(t,n){return new p.HMAC.init(e,n).finalize(t)}}});var p=n.algo={};return n}(Math);!function(e){for(var t=CryptoJS,n=t.lib,r=n.WordArray,o=n.Hasher,n=t.algo,i=[],s=[],u=function(e){return 4294967296*(e-(0|e))|0},a=2,c=0;64>c;){var l;e:{l=a;for(var f=e.sqrt(l),p=2;f>=p;p++)if(!(l%p)){l=!1;break e}l=!0}l&&(8>c&&(i[c]=u(e.pow(a,.5))),s[c]=u(e.pow(a,1/3)),c++),a++}var h=[],n=n.SHA256=o.extend({_doReset:function(){this._hash=new r.init(i.slice(0))},_doProcessBlock:function(e,t){for(var n=this._hash.words,r=n[0],o=n[1],i=n[2],u=n[3],a=n[4],c=n[5],l=n[6],f=n[7],p=0;64>p;p++){if(16>p)h[p]=0|e[t+p];else{var d=h[p-15],y=h[p-2];h[p]=((d<<25|d>>>7)^(d<<14|d>>>18)^d>>>3)+h[p-7]+((y<<15|y>>>17)^(y<<13|y>>>19)^y>>>10)+h[p-16]}d=f+((a<<26|a>>>6)^(a<<21|a>>>11)^(a<<7|a>>>25))+(a&c^~a&l)+s[p]+h[p],y=((r<<30|r>>>2)^(r<<19|r>>>13)^(r<<10|r>>>22))+(r&o^r&i^o&i),f=l,l=c,c=a,a=u+d|0,u=i,i=o,o=r,r=d+y|0}n[0]=n[0]+r|0,n[1]=n[1]+o|0,n[2]=n[2]+i|0,n[3]=n[3]+u|0,n[4]=n[4]+a|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,o=8*t.sigBytes;return n[o>>>5]|=128<<24-o%32,n[(o+64>>>9<<4)+14]=e.floor(r/4294967296),n[(o+64>>>9<<4)+15]=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(n),t.HmacSHA256=o._createHmacHelper(n)}(Math),function(){var e=CryptoJS,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,o=4*r;n.sigBytes>o&&(n=e.finalize(n)),n.clamp();for(var i=this._oKey=n.clone(),s=this._iKey=n.clone(),u=i.words,a=s.words,c=0;r>c;c++)u[c]^=1549556828,a[c]^=909522486;i.sigBytes=s.sigBytes=o,this.reset()},reset:function(){var e=this._hasher;e.reset(),e.update(this._iKey)},update:function(e){return this._hasher.update(e),this},finalize:function(e){var t=this._hasher;return e=t.finalize(e),t.reset(),t.finalize(this._oKey.clone().concat(e))}})}(),function(){var e=CryptoJS,t=e.lib.WordArray;e.enc.Base64={stringify:function(e){var t=e.words,n=e.sigBytes,r=this._map;e.clamp(),e=[];for(var o=0;n>o;o+=3)for(var i=(t[o>>>2]>>>24-8*(o%4)&255)<<16|(t[o+1>>>2]>>>24-8*((o+1)%4)&255)<<8|t[o+2>>>2]>>>24-8*((o+2)%4)&255,s=0;4>s&&n>o+.75*s;s++)e.push(r.charAt(i>>>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,o=r.charAt(64);o&&(o=e.indexOf(o),-1!=o&&(n=o));for(var o=[],i=0,s=0;n>s;s++)if(s%4){var u=r.indexOf(e.charAt(s-1))<<2*(s%4),a=r.indexOf(e.charAt(s))>>>6-2*(s%4);o[i>>>2]|=(u|a)<<24-8*(i%4),i++}return t.create(o,i)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="}}(),function(e){function t(e,t,n,r,o,i,s){return e=e+(t&n|~t&r)+o+s,(e<>>32-i)+t}function n(e,t,n,r,o,i,s){return e=e+(t&r|n&~r)+o+s,(e<>>32-i)+t}function r(e,t,n,r,o,i,s){return e=e+(t^n^r)+o+s,(e<>>32-i)+t}function o(e,t,n,r,o,i,s){return e=e+(n^(t|~r))+o+s,(e<>>32-i)+t}for(var i=CryptoJS,s=i.lib,u=s.WordArray,a=s.Hasher,s=i.algo,c=[],l=0;64>l;l++)c[l]=4294967296*e.abs(e.sin(l+1))|0;s=s.MD5=a.extend({_doReset:function(){this._hash=new u.init([1732584193,4023233417,2562383102,271733878])},_doProcessBlock:function(e,i){for(var s=0;16>s;s++){var u=i+s,a=e[u];e[u]=16711935&(a<<8|a>>>24)|4278255360&(a<<24|a>>>8)}var s=this._hash.words,u=e[i+0],a=e[i+1],l=e[i+2],f=e[i+3],p=e[i+4],h=e[i+5],d=e[i+6],y=e[i+7],_=e[i+8],b=e[i+9],v=e[i+10],m=e[i+11],g=e[i+12],w=e[i+13],k=e[i+14],x=e[i+15],S=s[0],E=s[1],T=s[2],O=s[3],S=t(S,E,T,O,u,7,c[0]),O=t(O,S,E,T,a,12,c[1]),T=t(T,O,S,E,l,17,c[2]),E=t(E,T,O,S,f,22,c[3]),S=t(S,E,T,O,p,7,c[4]),O=t(O,S,E,T,h,12,c[5]),T=t(T,O,S,E,d,17,c[6]),E=t(E,T,O,S,y,22,c[7]),S=t(S,E,T,O,_,7,c[8]),O=t(O,S,E,T,b,12,c[9]),T=t(T,O,S,E,v,17,c[10]),E=t(E,T,O,S,m,22,c[11]),S=t(S,E,T,O,g,7,c[12]),O=t(O,S,E,T,w,12,c[13]),T=t(T,O,S,E,k,17,c[14]),E=t(E,T,O,S,x,22,c[15]),S=n(S,E,T,O,a,5,c[16]),O=n(O,S,E,T,d,9,c[17]),T=n(T,O,S,E,m,14,c[18]),E=n(E,T,O,S,u,20,c[19]),S=n(S,E,T,O,h,5,c[20]),O=n(O,S,E,T,v,9,c[21]),T=n(T,O,S,E,x,14,c[22]),E=n(E,T,O,S,p,20,c[23]),S=n(S,E,T,O,b,5,c[24]),O=n(O,S,E,T,k,9,c[25]),T=n(T,O,S,E,f,14,c[26]),E=n(E,T,O,S,_,20,c[27]),S=n(S,E,T,O,w,5,c[28]),O=n(O,S,E,T,l,9,c[29]),T=n(T,O,S,E,y,14,c[30]),E=n(E,T,O,S,g,20,c[31]),S=r(S,E,T,O,h,4,c[32]),O=r(O,S,E,T,_,11,c[33]),T=r(T,O,S,E,m,16,c[34]),E=r(E,T,O,S,k,23,c[35]),S=r(S,E,T,O,a,4,c[36]),O=r(O,S,E,T,p,11,c[37]),T=r(T,O,S,E,y,16,c[38]),E=r(E,T,O,S,v,23,c[39]),S=r(S,E,T,O,w,4,c[40]),O=r(O,S,E,T,u,11,c[41]),T=r(T,O,S,E,f,16,c[42]),E=r(E,T,O,S,d,23,c[43]),S=r(S,E,T,O,b,4,c[44]),O=r(O,S,E,T,g,11,c[45]),T=r(T,O,S,E,x,16,c[46]),E=r(E,T,O,S,l,23,c[47]),S=o(S,E,T,O,u,6,c[48]),O=o(O,S,E,T,y,10,c[49]),T=o(T,O,S,E,k,15,c[50]),E=o(E,T,O,S,h,21,c[51]),S=o(S,E,T,O,g,6,c[52]),O=o(O,S,E,T,f,10,c[53]),T=o(T,O,S,E,v,15,c[54]),E=o(E,T,O,S,a,21,c[55]),S=o(S,E,T,O,_,6,c[56]),O=o(O,S,E,T,x,10,c[57]),T=o(T,O,S,E,d,15,c[58]),E=o(E,T,O,S,w,21,c[59]),S=o(S,E,T,O,p,6,c[60]),O=o(O,S,E,T,m,10,c[61]),T=o(T,O,S,E,l,15,c[62]),E=o(E,T,O,S,b,21,c[63]);s[0]=s[0]+S|0,s[1]=s[1]+E|0,s[2]=s[2]+T|0,s[3]=s[3]+O|0},_doFinalize:function(){var t=this._data,n=t.words,r=8*this._nDataBytes,o=8*t.sigBytes;n[o>>>5]|=128<<24-o%32;var i=e.floor(r/4294967296);for(n[(o+64>>>9<<4)+15]=16711935&(i<<8|i>>>24)|4278255360&(i<<24|i>>>8),n[(o+64>>>9<<4)+14]=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++)o=n[r],n[r]=16711935&(o<<8|o>>>24)|4278255360&(o<<24|o>>>8);return t},clone:function(){var e=a.clone.call(this);return e._hash=this._hash.clone(),e}}),i.MD5=a._createHelper(s),i.HmacMD5=a._createHmacHelper(s)}(Math),function(){var e=CryptoJS,t=e.lib,n=t.Base,r=t.WordArray,t=e.algo,o=t.EvpKDF=n.extend({cfg:n.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,o=n.hasher.create(),i=r.create(),s=i.words,u=n.keySize,n=n.iterations;s.lengthc;c++)a=o.finalize(a),o.reset();i.concat(a)}return i.sigBytes=4*u,i}});e.EvpKDF=function(e,t,n){return o.create(n).compute(e,t)}}(),CryptoJS.lib.Cipher||function(e){var t=CryptoJS,n=t.lib,r=n.Base,o=n.WordArray,i=n.BufferedBlockAlgorithm,s=t.enc.Base64,u=t.algo.EvpKDF,a=n.Cipher=i.extend({cfg:r.extend(),createEncryptor:function(e,t){return this.create(this._ENC_XFORM_MODE,e,t)},createDecryptor:function(e,t){return this.create(this._DEC_XFORM_MODE,e,t)},init:function(e,t,n){this.cfg=this.cfg.extend(n),this._xformMode=e,this._key=t,this.reset()},reset:function(){i.reset.call(this),this._doReset()},process:function(e){return this._append(e),this._process()},finalize:function(e){return e&&this._append(e),this._doFinalize()},keySize:4,ivSize:4,_ENC_XFORM_MODE:1,_DEC_XFORM_MODE:2,_createHelper:function(e){return{encrypt:function(t,n,r){return("string"==typeof n?d:h).encrypt(e,t,n,r)},decrypt:function(t,n,r){return("string"==typeof n?d:h).decrypt(e,t,n,r)}}}});n.StreamCipher=a.extend({_doFinalize:function(){return this._process(!0)},blockSize:1});var c=t.mode={},l=function(t,n,r){var o=this._iv;o?this._iv=e:o=this._prevBlock;for(var i=0;r>i;i++)t[n+i]^=o[i]},f=(n.BlockCipherMode=r.extend({createEncryptor:function(e,t){return this.Encryptor.create(e,t)},createDecryptor:function(e,t){return this.Decryptor.create(e,t)},init:function(e,t){this._cipher=e,this._iv=t}})).extend();f.Encryptor=f.extend({processBlock:function(e,t){var n=this._cipher,r=n.blockSize;l.call(this,e,t,r),n.encryptBlock(e,t),this._prevBlock=e.slice(t,t+r)}}),f.Decryptor=f.extend({processBlock:function(e,t){var n=this._cipher,r=n.blockSize,o=e.slice(t,t+r);n.decryptBlock(e,t),l.call(this,e,t,r),this._prevBlock=o}}),c=c.CBC=f,f=(t.pad={}).Pkcs7={pad:function(e,t){for(var n=4*t,n=n-e.sigBytes%n,r=n<<24|n<<16|n<<8|n,i=[],s=0;n>s;s+=4)i.push(r);n=o.create(i,n),e.concat(n)},unpad:function(e){e.sigBytes-=255&e.words[e.sigBytes-1>>>2]}},n.BlockCipher=a.extend({cfg:a.cfg.extend({mode:c,padding:f}),reset:function(){a.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 p=n.CipherParams=r.extend({init:function(e){this.mixIn(e)},toString:function(e){return(e||this.formatter).stringify(this)}}),c=(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(s)},parse:function(e){e=s.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 p.create({ciphertext:e,salt:n})}},h=n.SerializableCipher=r.extend({cfg:r.extend({format:c}),encrypt:function(e,t,n,r){r=this.cfg.extend(r);var o=e.createEncryptor(n,r);return t=o.finalize(t),o=o.cfg,p.create({ciphertext:t,key:n,iv:o.iv,algorithm:e,mode:o.mode,padding:o.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,p.create({key:e,iv:n,salt:r})}},d=n.PasswordBasedCipher=h.extend({cfg:h.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=h.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,h.decrypt.call(this,e,t,n.key,r)}})}(),function(){for(var e=CryptoJS,t=e.lib.BlockCipher,n=e.algo,r=[],o=[],i=[],s=[],u=[],a=[],c=[],l=[],f=[],p=[],h=[],d=0;256>d;d++)h[d]=128>d?d<<1:d<<1^283;for(var y=0,_=0,d=0;256>d;d++){var b=_^_<<1^_<<2^_<<3^_<<4,b=b>>>8^255&b^99;r[y]=b,o[b]=y;var v=h[y],m=h[v],g=h[m],w=257*h[b]^16843008*b;i[y]=w<<24|w>>>8,s[y]=w<<16|w>>>16,u[y]=w<<8|w>>>24,a[y]=w,w=16843009*g^65537*m^257*v^16843008*y,c[b]=w<<24|w>>>8,l[b]=w<<16|w>>>16,f[b]=w<<8|w>>>24,p[b]=w,y?(y=v^h[h[h[g^v]]],_^=h[h[_]]):y=_=1}var k=[0,1,2,4,8,16,32,64,128,27,54],n=n.AES=t.extend({_doReset:function(){for(var e=this._key,t=e.words,n=e.sigBytes/4,e=4*((this._nRounds=n+6)+1),o=this._keySchedule=[],i=0;e>i;i++)if(n>i)o[i]=t[i];else{var s=o[i-1];i%n?n>6&&4==i%n&&(s=r[s>>>24]<<24|r[s>>>16&255]<<16|r[s>>>8&255]<<8|r[255&s]):(s=s<<8|s>>>24,s=r[s>>>24]<<24|r[s>>>16&255]<<16|r[s>>>8&255]<<8|r[255&s],s^=k[i/n|0]<<24),o[i]=o[i-n]^s}for(t=this._invKeySchedule=[],n=0;e>n;n++)i=e-n,s=n%4?o[i]:o[i-4],t[n]=4>n||4>=i?s:c[r[s>>>24]]^l[r[s>>>16&255]]^f[r[s>>>8&255]]^p[r[255&s]]},encryptBlock:function(e,t){this._doCryptBlock(e,t,this._keySchedule,i,s,u,a,r)},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,c,l,f,p,o),n=e[t+1],e[t+1]=e[t+3],e[t+3]=n},_doCryptBlock:function(e,t,n,r,o,i,s,u){for(var a=this._nRounds,c=e[t]^n[0],l=e[t+1]^n[1],f=e[t+2]^n[2],p=e[t+3]^n[3],h=4,d=1;a>d;d++)var y=r[c>>>24]^o[l>>>16&255]^i[f>>>8&255]^s[255&p]^n[h++],_=r[l>>>24]^o[f>>>16&255]^i[p>>>8&255]^s[255&c]^n[h++],b=r[f>>>24]^o[p>>>16&255]^i[c>>>8&255]^s[255&l]^n[h++],p=r[p>>>24]^o[c>>>16&255]^i[l>>>8&255]^s[255&f]^n[h++],c=y,l=_,f=b;y=(u[c>>>24]<<24|u[l>>>16&255]<<16|u[f>>>8&255]<<8|u[255&p])^n[h++],_=(u[l>>>24]<<24|u[f>>>16&255]<<16|u[p>>>8&255]<<8|u[255&c])^n[h++],b=(u[f>>>24]<<24|u[p>>>16&255]<<16|u[c>>>8&255]<<8|u[255&l])^n[h++],p=(u[p>>>24]<<24|u[c>>>16&255]<<16|u[l>>>8&255]<<8|u[255&f])^n[h++],e[t]=y,e[t+1]=_,e[t+2]=b,e[t+3]=p},keySize:8});e.AES=t._createHelper(n)}(),CryptoJS.mode.ECB=function(){var e=CryptoJS.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}()}).call(exports,__webpack_require__(7)(module))},function(e,t){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}t.__esModule=!0;var r=function(){function e(e,t){for(var n=0;n1?n-1:0),o=1;n>o;o++)r[o-1]=arguments[o];var i=null;return this.hasListeners(e)?(this._listeners[e].some(function(e){return i=e.apply(t,r),i===!1}),i):null},e.prototype.off=function(e,t){var n=this;if(e)if(t){if(!this.hasListeners(e))return this;this._listeners[e].forEach(function(r,o){r===t&&delete n._listeners[e][o]})}else delete this._listeners[e];else this._listeners={};return this},e}();t["default"]=r,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")}t.__esModule=!0;var o=function(){function e(e,t){for(var n=0;n-1?"&":"?")+a.queryStringify(e.query)),c.findHeaderName("Accept",e.headers)||(e.headers.Accept=h["default"]._jsonContentType),"string"!=typeof e.body||!e.body){var n=c.findHeaderName(h["default"]._contentType,e.headers);n||(n=h["default"]._contentType,e.headers[n]=h["default"]._jsonContentType);var r=e.headers[n];r.indexOf(h["default"]._jsonContentType)>-1?e.body=JSON.stringify(e.body):r.indexOf(h["default"]._urlencodedContentType)>-1&&(e.body=a.queryStringify(e.body))}var o=new u.Request(e.url,e);return o.originalBody=e.body,o},s(t,null,[{key:"_allowedMethods",value:["GET","POST","PUT","DELETE","PATCH","OPTIONS","HEAD"],enumerable:!0}]),t}(f["default"]);t["default"]=d,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 o(e,t){t=t||{};var n=new s.Response(e,t);return a.isNodeJS()&&(n._text=e,n._decode=function(){return this._text}),n}function i(e,t){return e=e.toLowerCase(),Object.keys(t).reduce(function(t,n){return t?t:e==n.toLowerCase()?n:t},null)}t.__esModule=!0,t.createResponse=o,t.findHeaderName=i;var s=n(3),u=n(2),a=r(u)},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 o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}t.__esModule=!0;var i=function(){function e(e,t){for(var n=0;n-1},e.prototype._getContentType=function(){return this._response.headers.get(e._contentType)||""},e.prototype._isMultipart=function(){return this._isContentType(e._multipartContentType)},e.prototype._isUrlEncoded=function(){return this._isContentType(e._urlencodedContentType)},e.prototype._isJson=function(){return this._isContentType(e._jsonContentType)},e.create=function(t,n,r){t=t||"",n=n||200,r=r||"OK",t=t.replace(/\r/g,"");var o=new s.Headers,i=t.split(e._bodySeparator),u=i.length>1?i.shift():"";return t=i.join(e._bodySeparator),(u||"").split("\n").forEach(function(t){var n=t.trim().split(e._headerSeparator),r=n.shift().trim(),i=n.join(e._headerSeparator).trim();r&&o.append(r,i)}),new e(null,a.createResponse(t,{headers:o,status:n,statusText:r}),t)},e}();t["default"]=c,e.exports=t["default"]},function(e,t,n){"use strict";function r(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")}function i(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)}t.__esModule=!0;var s=n(18),u=r(s),a=n(14),c=r(a),l=function(e){function t(){o(this,t),e.call(this),this._registry=new u["default"]}return i(t,e),t.prototype.registry=function(){return this._registry},t.prototype._loadResponse=function(e){var t;return regeneratorRuntime.async(function(n){for(;;)switch(n.prev=n.next){case 0:return t=this._registry.find(e),n.next=3,regeneratorRuntime.awrap(t.getResponse(e));case 3:return n.abrupt("return",n.sent);case 4:case"end":return n.stop()}},null,this)},t}(c["default"]);t["default"]=l,e.exports=t["default"]},function(e,t,n){"use strict";function r(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")}t.__esModule=!0;var i=n(19),s=r(i),u=function(){function e(){o(this,e),this._mocks=[]}return e.prototype.add=function(e){return this._mocks.push(e),this},e.prototype.clear=function(){return this._mocks=[],this},e.prototype.find=function(e){var t=this._mocks.shift();if(!t)throw new Error("No mock in registry for request "+e.method+" "+e.url);if(!t.test(e))throw new Error("Wrong request "+e.method+" "+e.url+" for expected mock "+t.method()+" "+t.path());return t},e.prototype.apiCall=function(e,t,n,r,o){return this.add(new s["default"](e,t,n,r,o)),this},e.prototype.authentication=function(){return this.apiCall("POST","/restapi/oauth/token",{access_token:"ACCESS_TOKEN",token_type:"bearer",expires_in:3600,refresh_token:"REFRESH_TOKEN",refresh_token_expires_in:60480,scope:"SMS RCM Foo Boo",expireTime:(new Date).getTime()+36e5}),this},e.prototype.logout=function(){return this.apiCall("POST","/restapi/oauth/revoke",{}),this},e.prototype.presenceLoad=function(e){return this.apiCall("GET","/restapi/v1.0/account/~/extension/"+e+"/presence",{uri:"https://platform.ringcentral.com/restapi/v1.0/account/123/extension/"+e+"/presence",extension:{uri:"https://platform.ringcentral.com/restapi/v1.0/account/123/extension/"+e,id:e,extensionNumber:"101"},activeCalls:[],presenceStatus:"Available",telephonyStatus:"Ringing",userStatus:"Available",dndStatus:"TakeAllCalls",extensionId:e}),this},e.prototype.subscribeGeneric=function(e){e=e||54e3;var t=new Date;return this.apiCall("POST","/restapi/v1.0/subscription",{eventFilters:["/restapi/v1.0/account/~/extension/~/presence"],expirationTime:new Date(t.getTime()+1e3*e).toISOString(),expiresIn:e,deliveryMode:{transportType:"PubNub",encryption:!1,address:"123_foo",subscriberKey:"sub-c-foo",secretKey:"sec-c-bar"},id:"foo-bar-baz",creationTime:t.toISOString(),status:"Active",uri:"https://platform.ringcentral.com/restapi/v1.0/subscription/foo-bar-baz"}),this},e.prototype.subscribeOnPresence=function(e,t){e=e||"1";var n=new Date;return this.apiCall("POST","/restapi/v1.0/subscription",{eventFilters:["/restapi/v1.0/account/~/extension/"+e+"/presence"+(t?"?detailedTelephonyState=true":"")],expirationTime:new Date(n.getTime()+54e6).toISOString(),deliveryMode:{transportType:"PubNub",encryption:!0,address:"123_foo",subscriberKey:"sub-c-foo",secretKey:"sec-c-bar",encryptionAlgorithm:"AES",encryptionKey:"VQwb6EVNcQPBhE/JgFZ2zw=="},creationTime:n.toISOString(),id:"foo-bar-baz",status:"Active",uri:"https://platform.ringcentral.com/restapi/v1.0/subscription/foo-bar-baz"}),this},e.prototype.tokenRefresh=function(e){return e?this.apiCall("POST","/restapi/oauth/token",{message:"Wrong token",error_description:"Wrong token",description:"Wrong token"},400):this.apiCall("POST","/restapi/oauth/token",{access_token:"ACCESS_TOKEN_FROM_REFRESH",token_type:"bearer",expires_in:3600,refresh_token:"REFRESH_TOKEN_FROM_REFRESH",refresh_token_expires_in:60480,scope:"SMS RCM Foo Boo"}),this},e}();t["default"]=u,e.exports=t["default"]},function(e,t,n){"use strict";function r(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")}t.__esModule=!0;var i=n(16),s=r(i),u=n(2),a=n(15),c=function(){function e(t,n,r,i,s,u){o(this,e),this._method=t.toUpperCase(),this._path=n,this._json=r||{},this._delay=u||10,this._status=i||200,this._statusText=s||"OK"}return e.prototype.path=function(){return this._path},e.prototype.method=function(){return this._method},e.prototype.test=function(e){return e.url.indexOf(this._path)>-1&&e.method.toUpperCase()==this._method},e.prototype.getResponse=function(e){return regeneratorRuntime.async(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,regeneratorRuntime.awrap(u.delay(this._delay));case 2:return e.abrupt("return",this.createResponse(this._json));case 3:case"end":return e.stop()}},null,this)},e.prototype.createResponse=function(e,t){t=t||{},t.status=t.status||this._status,t.statusText=t.statusText||this._statusText;var n=JSON.stringify(e),r=a.createResponse(n,t);return r.headers.set(s["default"]._contentType,s["default"]._jsonContentType),r},e}();t["default"]=c,e.exports=t["default"]},function(e,t,n){"use strict";function r(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")}function i(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)}t.__esModule=!0;var s=function(){function e(e,t){for(var n=0;n-1?"&":"?"),n.addMethod&&(r+="_method="+n.addMethod),n.addToken&&(r+=(n.addMethod?"&":"")+"access_token="+this._auth.accessToken()),r},t.prototype.authUrl=function(e){return e=e||{},this.createUrl(t._authorizeEndpoint+"?"+h.queryStringify({response_type:"code",redirect_uri:e.redirectUri||"",client_id:this._appKey,state:e.state||"",brand_id:e.brandId||"",display:e.display||"",prompt:e.prompt||""}),{addServer:!0})},t.prototype.parseAuthRedirectUrl=function(e){var t=h.parseQueryString(e.split("?").reverse()[0]),n=t.error_description||t.error;if(n){var r=new Error(n);throw r.error=t.error,r}return t},t.prototype.loggedIn=function(){return regeneratorRuntime.async(function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,regeneratorRuntime.awrap(this._ensureAuthentication());case 3:return e.abrupt("return",!0);case 6:return e.prev=6,e.t0=e["catch"](0),e.abrupt("return",!1);case 9:case"end":return e.stop()}},null,this,[[0,6]])},t.prototype.login=function(e){var n,r,o;return regeneratorRuntime.async(function(i){for(;;)switch(i.prev=i.next){case 0:return i.prev=0,e=e||{},e.remember=e.remember||!1,this.emit(this.events.beforeLogin),n={access_token_ttl:t._accessTokenTtl,refresh_token_ttl:e.remember?t._refreshTokenTtlRemember:t._refreshTokenTtl},e.code?e.code&&(n.grant_type="authorization_code",n.code=e.code,n.redirect_uri=e.redirectUri):(n.grant_type="password",n.username=e.username,n.password=e.password,n.extension=e.extension||""),e.endpointId&&(n.endpoint_id=e.endpointId),i.next=9,regeneratorRuntime.awrap(this._tokenRequest(t._tokenEndpoint,n));case 9:return r=i.sent,o=r.json(),this._auth.setData(o).setRemember(e.remember),this.emit(this.events.loginSuccess,r),i.abrupt("return",r);case 16:throw i.prev=16,i.t0=i["catch"](0),this._cache.clean(),this.emit(this.events.loginError,i.t0),i.t0;case 21:case"end":return i.stop()}},null,this,[[0,16]])},t.prototype.refresh=function(){var e,n;return regeneratorRuntime.async(function(r){for(;;)switch(r.prev=r.next){case 0:if(r.prev=0,this.emit(this.events.beforeRefresh),!this._queue.isPaused()){r.next=9;break}return r.next=5,regeneratorRuntime.awrap(this._queue.poll());case 5:if(this._isAccessTokenValid()){r.next=7;break}throw new Error("Automatic authentification timeout");case 7:return this.emit(this.events.refreshSuccess,null),r.abrupt("return",null);case 9:return this._queue.pause(),r.next=12,regeneratorRuntime.awrap(h.delay(t._refreshDelayMs));case 12:if(this._auth.refreshToken()){r.next=14;break}throw new Error("Refresh token is missing");case 14:if(this._auth.refreshTokenValid()){r.next=16;break}throw new Error("Refresh token has expired");case 16:if(this._queue.isPaused()){r.next=18;break}throw new Error("Queue was resumed before refresh call");case 18:return r.next=20,regeneratorRuntime.awrap(this._tokenRequest(t._tokenEndpoint,{grant_type:"refresh_token",refresh_token:this._auth.refreshToken(),access_token_ttl:t._accessTokenTtl,refresh_token_ttl:this._auth.remember()?t._refreshTokenTtlRemember:t._refreshTokenTtl}));case 20:if(e=r.sent,n=e.json(),n.access_token){r.next=24;break}throw this._client.makeError(new Error("Malformed OAuth response"),e);case 24:return this._auth.setData(n),this._queue.resume(),this.emit(this.events.refreshSuccess,e),r.abrupt("return",e);case 30:throw r.prev=30,r.t0=r["catch"](0),r.t0=this._client.makeError(r.t0),t._clearCacheOnRefreshError&&this._cache.clean(),this.emit(this.events.refreshError,r.t0),r.t0;case 36:case"end":return r.stop()}},null,this,[[0,30]])},t.prototype.logout=function(){var e;return regeneratorRuntime.async(function(n){for(;;)switch(n.prev=n.next){case 0:return n.prev=0,this.emit(this.events.beforeLogout),this._queue.pause(),n.next=5,regeneratorRuntime.awrap(this._tokenRequest(t._revokeEndpoint,{token:this._auth.accessToken()}));case 5:return e=n.sent,this._queue.resume(),this._cache.clean(),this.emit(this.events.logoutSuccess,e),n.abrupt("return",e);case 12:throw n.prev=12,n.t0=n["catch"](0),this._queue.resume(),this.emit(this.events.logoutError,n.t0),n.t0;case 17:case"end":return n.stop()}},null,this,[[0,12]])},t.prototype.inflateRequest=function(e,t){return regeneratorRuntime.async(function(n){for(;;)switch(n.prev=n.next){case 0:if(t=t||{},!t.skipAuthCheck){n.next=3;break}return n.abrupt("return",e);case 3:return n.next=5,regeneratorRuntime.awrap(this._ensureAuthentication());case 5:return e.headers.set("Authorization",this._authHeader()),n.abrupt("return",e);case 7:case"end":return n.stop()}},null,this)},t.prototype.sendRequest=function(e,t){return regeneratorRuntime.async(function(n){for(;;)switch(n.prev=n.next){case 0:return n.prev=0,n.next=3,regeneratorRuntime.awrap(this.inflateRequest(e,t));case 3:return e=n.sent,n.next=6,regeneratorRuntime.awrap(this._client.sendRequest(e));case 6:return n.abrupt("return",n.sent);case 9:if(n.prev=9,n.t0=n["catch"](0),n.t0.apiResponse&&n.t0.apiResponse.response()&&401==n.t0.apiResponse.response().status){n.next=13;break}throw n.t0;case 13:return this._auth.cancelAccessToken(),n.next=16,regeneratorRuntime.awrap(this.sendRequest(e,t));case 16:return n.abrupt("return",n.sent);case 17:case"end":return n.stop()}},null,this,[[0,9]])},t.prototype.send=function(){var e=arguments.length<=0||void 0===arguments[0]?{}:arguments[0];return regeneratorRuntime.async(function(t){for(;;)switch(t.prev=t.next){case 0:return e.url=this.createUrl(e.url,{addServer:!0}),t.next=3,regeneratorRuntime.awrap(this.sendRequest(this._client.createRequest(e),e));case 3:return t.abrupt("return",t.sent);case 4:case"end":return t.stop()}},null,this)},t.prototype.get=function(e,t,n){return regeneratorRuntime.async(function(r){for(;;)switch(r.prev=r.next){case 0:return n=n||{},n.method="GET",n.url=e,n.query=t,r.next=6,regeneratorRuntime.awrap(this.send(n));case 6:return r.abrupt("return",r.sent);case 7:case"end":return r.stop()}},null,this)},t.prototype.post=function(e,t,n,r){return regeneratorRuntime.async(function(o){for(;;)switch(o.prev=o.next){case 0:return r=r||{},r.method="POST",r.url=e,r.query=n,r.body=t,o.next=7,regeneratorRuntime.awrap(this.send(r));case 7:return o.abrupt("return",o.sent);case 8:case"end":return o.stop()}},null,this)},t.prototype.put=function(e,t,n,r){return regeneratorRuntime.async(function(o){for(;;)switch(o.prev=o.next){case 0:return r=r||{},r.method="PUT",r.url=e,r.query=n,r.body=t,o.next=7,regeneratorRuntime.awrap(this.send(r));case 7:return o.abrupt("return",o.sent);case 8:case"end":return o.stop()}},null,this)},t.prototype["delete"]=function(e,t,n){return regeneratorRuntime.async(function(r){for(;;)switch(r.prev=r.next){case 0:return n=n||{},n.method="DELETE",n.url=e,n.query=t,r.next=6,regeneratorRuntime.awrap(this.send(n));case 6:return r.abrupt("return",r.sent);case 7:case"end":return r.stop()}},null,this)},t.prototype._tokenRequest=function(e,t){return regeneratorRuntime.async(function(n){for(;;)switch(n.prev=n.next){case 0:return n.next=2,regeneratorRuntime.awrap(this.send({url:e,skipAuthCheck:!0,body:t,method:"POST",headers:{Authorization:"Basic "+this._apiKey(),"Content-Type":"application/x-www-form-urlencoded"}}));case 2:return n.abrupt("return",n.sent);case 3:case"end":return n.stop()}},null,this)},t.prototype._ensureAuthentication=function(){return regeneratorRuntime.async(function(e){for(;;)switch(e.prev=e.next){case 0:if(!this._isAccessTokenValid()){e.next=2;break}return e.abrupt("return",null);case 2:return e.next=4,regeneratorRuntime.awrap(this.refresh());case 4:return e.abrupt("return",e.sent);case 5:case"end":return e.stop()}},null,this)},t.prototype._isAccessTokenValid=function(){return this._auth.accessTokenValid()&&!this._queue.isPaused()},t.prototype._apiKey=function(){var e=this._appKey+":"+this._appSecret;return"function"==typeof btoa?btoa(e):new Buffer(e).toString("base64")},t.prototype._authHeader=function(){var e=this._auth.accessToken();return this._auth.tokenType()+(e?" "+e:"")},t}(a["default"]);t["default"]=d,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")}t.__esModule=!0;var r=function(){function e(e,t){for(var n=0;nDate.now()},e.prototype.refreshTokenValid=function(){return this.data().refresh_token_expire_time>Date.now()},e.prototype.cancelAccessToken=function(){return this.setData({access_token:"",expires_in:0})},e.prototype.forceAuthentication=function(){return this.setData({token_type:e.forcedTokenType,access_token:"",expires_in:0,refresh_token:"",refresh_token_expires_in:0}),this},e.prototype.setRemember=function(e){return this.setData({remember:e})},e.prototype.remember=function(){return!!this.data().remember},e}();t["default"]=o,e.exports=t["default"]},function(e,t,n){"use strict";function r(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")}t.__esModule=!0;var i=n(23),s=r(i),u=n(3),a=function(){function e(){o(this,e),this.crypto_obj=u.PUBNUB.crypto_obj}return e.prototype.init=function(e){return new s["default"](e)},e}();t["default"]=a,e.exports=t["default"]},function(e,t,n){"use strict";function r(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")}function i(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)}t.__esModule=!0;var s=n(12),u=r(s),a=n(3),c=function(e){function t(n){o(this,t),e.call(this),this.options=n,this.crypto_obj=a.PUBNUB.crypto_obj}return i(t,e),t.prototype.ready=function(){},t.prototype.subscribe=function(e){this.on("message-"+e.channel,e.message)},t.prototype.unsubscribe=function(e){this.off("message-"+e.channel)},t.prototype.receiveMessage=function(e,t){this.emit("message-"+t,e,"env",t)},t}(u["default"]);t["default"]=c,e.exports=t["default"]},function(e,t,n){"use strict";function r(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")}function i(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)}t.__esModule=!0;var s=function(){function e(e,t){for(var n=0;n=0;--r){var o=this.tryEntries[r],i=o.completion;if("root"===o.tryLoc)return t("end");if(o.tryLoc<=this.prev){var s=b.call(o,"catchLoc"),u=b.call(o,"finallyLoc");if(s&&u){if(this.prev=0;--n){var r=this.tryEntries[n];if(r.tryLoc<=this.prev&&b.call(r,"finallyLoc")&&this.prev=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),p(n),O}},"catch":function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var o=r.arg;p(n)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:d(e),resultName:t,nextLoc:n},O}}}("object"==typeof t?t:"object"==typeof window?window:"object"==typeof self?self:this)}).call(t,function(){return this}())}])}); //# sourceMappingURL=ringcentral-bundle.min.js.map diff --git a/build/ringcentral-bundle.min.js.map b/build/ringcentral-bundle.min.js.map index 3e7fdb6c..7a7f0e52 100644 --- a/build/ringcentral-bundle.min.js.map +++ b/build/ringcentral-bundle.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","ringcentral-bundle.js","webpack:/webpack/bootstrap 376cc765ad2cf3304422","webpack:///src/SDK.js","webpack:///src/core/Utils.js","webpack:///src/core/Externals.js","webpack:///bower_components/es6-promise/promise.js","webpack:///(webpack)/~/node-libs-browser/~/timers-browserify/main.js","webpack:///(webpack)/~/node-libs-browser/~/process/browser.js","webpack:///(webpack)/buildin/module.js","webpack:///(webpack)/buildin/amd-define.js","webpack:///bower_components/fetch/fetch.js","webpack:///bower_components/pubnub/web/pubnub.js","webpack:///src/core/Cache.js","webpack:///src/core/Observable.js","webpack:///src/core/Queue.js","webpack:///src/http/Client.js","webpack:///src/http/Utils.js","webpack:///src/http/ApiResponse.js","webpack:///src/mocks/ClientMock.js","webpack:///src/mocks/Registry.js","webpack:///src/mocks/Mock.js","webpack:///src/platform/Platform.js","webpack:///src/platform/Auth.js","webpack:///src/pubnub/PubnubFactory.js","webpack:///src/pubnub/PubnubMock.js","webpack:///src/subscription/Subscription.js","webpack:///src/subscription/CachedSubscription.js","webpack:///~/regenerator/runtime.js"],"names":["root","factory","exports","module","define","amd","this","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","_interopRequireDefault","obj","__esModule","default","_interopRequireWildcard","newObj","key","Object","prototype","hasOwnProperty","_classCallCheck","instance","Constructor","TypeError","_createClass","defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","defineProperty","protoProps","staticProps","_coreUtils","Utils","_coreCache","_coreCache2","_coreExternals","Externals","_coreObservable","_coreObservable2","_coreQueue","_coreQueue2","_httpClient","_httpClient2","_httpApiResponse","_httpApiResponse2","_httpUtils","HttpUtils","_mocksClientMock","_mocksClientMock2","_mocksMock","_mocksMock2","_mocksRegistry","_mocksRegistry2","_platformPlatform","_platformPlatform2","_platformAuth","_platformAuth2","_pubnubPubnubFactory","_pubnubPubnubFactory2","_subscriptionSubscription","_subscriptionSubscription2","_subscriptionCachedSubscription","_subscriptionCachedSubscription2","SDK","options","_cache","localStorage","cachePrefix","_client","client","_platform","server","appKey","appSecret","_pubnubFactory","pubnubFactory","PUBNUB","value","sandbox","production","platform","createSubscription","createCachedSubscription","cacheKey","cache","Cache","Observable","Queue","Client","ApiResponse","Auth","Platform","Subscription","Registry","Mock","PubnubMockFactory","queryStringify","parameters","array","keys","forEach","k","v","isArray","vv","push","encodeURIComponent","join","parseQueryString","queryString","argsParsed","split","arg","decodeURIComponent","indexOf","trim","pair","isFunction","Array","poll","fn","interval","timeout","stopPolling","next","delay","setTimeout","clearTimeout","isNodeJS","process","isBrowser","window","_ExternalsJs","Promise","resolve","reject","_es6Promise","_es6Promise2","_nodeFetch","_nodeFetch2","_pubnub","_pubnub2","Function","fetch","Request","Response","Headers","__WEBPACK_AMD_DEFINE_RESULT__","setImmediate","global","lib$es6$promise$utils$$objectOrFunction","x","lib$es6$promise$utils$$isFunction","lib$es6$promise$utils$$isMaybeThenable","lib$es6$promise$asap$$asap","callback","lib$es6$promise$asap$$queue","lib$es6$promise$asap$$len","lib$es6$promise$asap$$customSchedulerFn","lib$es6$promise$asap$$flush","lib$es6$promise$asap$$scheduleFlush","lib$es6$promise$asap$$setScheduler","scheduleFn","lib$es6$promise$asap$$useNextTick","nextTick","version","versions","node","match","lib$es6$promise$asap$$useVertxTimer","lib$es6$promise$asap$$vertxNext","lib$es6$promise$asap$$useMutationObserver","iterations","observer","lib$es6$promise$asap$$BrowserMutationObserver","document","createTextNode","observe","characterData","data","lib$es6$promise$asap$$useMessageChannel","channel","MessageChannel","port1","onmessage","port2","postMessage","lib$es6$promise$asap$$useSetTimeout","undefined","lib$es6$promise$asap$$attemptVertex","vertx","e","Error","code","runOnLoop","runOnContext","lib$es6$promise$$internal$$noop","lib$es6$promise$$internal$$selfFullfillment","lib$es6$promise$$internal$$cannotReturnOwn","lib$es6$promise$$internal$$getThen","promise","then","error","lib$es6$promise$$internal$$GET_THEN_ERROR","lib$es6$promise$$internal$$tryThen","fulfillmentHandler","rejectionHandler","lib$es6$promise$$internal$$handleForeignThenable","thenable","lib$es6$promise$asap$$default","sealed","lib$es6$promise$$internal$$resolve","lib$es6$promise$$internal$$fulfill","reason","lib$es6$promise$$internal$$reject","_label","lib$es6$promise$$internal$$handleOwnThenable","_state","lib$es6$promise$$internal$$FULFILLED","_result","lib$es6$promise$$internal$$REJECTED","lib$es6$promise$$internal$$subscribe","lib$es6$promise$$internal$$handleMaybeThenable","maybeThenable","constructor","lib$es6$promise$$internal$$publishRejection","_onerror","lib$es6$promise$$internal$$publish","lib$es6$promise$$internal$$PENDING","_subscribers","parent","child","onFulfillment","onRejection","subscribers","settled","detail","lib$es6$promise$$internal$$invokeCallback","lib$es6$promise$$internal$$ErrorObject","lib$es6$promise$$internal$$tryCatch","lib$es6$promise$$internal$$TRY_CATCH_ERROR","succeeded","failed","hasCallback","lib$es6$promise$$internal$$initializePromise","resolver","lib$es6$promise$enumerator$$Enumerator","input","enumerator","_instanceConstructor","_validateInput","_input","_remaining","_init","_enumerate","_validationError","lib$es6$promise$promise$all$$all","entries","lib$es6$promise$enumerator$$default","lib$es6$promise$promise$race$$race","lib$es6$promise$utils$$isArray","lib$es6$promise$promise$resolve$$resolve","object","lib$es6$promise$promise$reject$$reject","lib$es6$promise$promise$$needsResolver","lib$es6$promise$promise$$needsNew","lib$es6$promise$promise$$Promise","_id","lib$es6$promise$promise$$counter","lib$es6$promise$polyfill$$polyfill","local","self","P","toString","cast","lib$es6$promise$promise$$default","lib$es6$promise$utils$$_isArray","lib$es6$promise$asap$$browserWindow","lib$es6$promise$asap$$browserGlobal","MutationObserver","WebKitMutationObserver","lib$es6$promise$asap$$isNode","lib$es6$promise$asap$$isWorker","Uint8ClampedArray","importScripts","_eachEntry","entry","_settledAt","_willSettleAt","state","lib$es6$promise$promise$all$$default","lib$es6$promise$promise$race$$default","lib$es6$promise$promise$resolve$$default","lib$es6$promise$promise$reject$$default","all","race","_setScheduler","_asap","result","arguments","catch","lib$es6$promise$polyfill$$default","lib$es6$promise$umd$$ES6Promise","polyfill","clearImmediate","Timeout","clearFn","_clearFn","apply","slice","immediateIds","nextImmediateId","setInterval","clearInterval","close","unref","ref","enroll","item","msecs","_idleTimeoutId","_idleTimeout","unenroll","_unrefActive","active","_onTimeout","args","cleanUpNextTick","draining","currentQueue","queue","concat","queueIndex","drainQueue","len","run","Item","fun","noop","title","browser","env","argv","on","addListener","once","off","removeListener","removeAllListeners","emit","binding","name","cwd","chdir","dir","umask","webpackPolyfill","deprecate","paths","children","normalizeName","String","test","toLowerCase","normalizeValue","headers","map","append","getOwnPropertyNames","consumed","body","bodyUsed","fileReaderReady","reader","onload","onerror","readBlobAsArrayBuffer","blob","FileReader","readAsArrayBuffer","readBlobAsText","readAsText","Body","_initBody","_bodyInit","_bodyText","support","Blob","isPrototypeOf","_bodyBlob","formData","FormData","_bodyFormData","rejected","arrayBuffer","text","decode","json","JSON","parse","normalizeMethod","method","upcased","toUpperCase","methods","url","credentials","mode","referrer","form","bytes","shift","replace","xhr","head","pairs","getAllResponseHeaders","header","bodyInit","type","status","ok","statusText","list","get","values","getAll","has","set","thisArg","init","request","responseURL","getResponseHeader","XMLHttpRequest","response","responseText","open","withCredentials","responseType","setRequestHeader","send","unique","NOW","Date","rnow","build_url","url_components","url_params","URLBIT","params","each","value_str","encode","PARAMSBIT","updater","rate","last","runnit","grep","fin","l","supplant","str","REPL","_","wait","generate_uuid","u","r","Math","random","o","f","pam_encode","charCodeAt","path","generate_channel_list","channels","nopresence","search","subscribed","sort","generate_channel_group_list","channel_groups","channel_group","ready","READY","READY_BUFFER","connect","SECOND","PNmessage","msg","apns","aps","alert","badge","exclude1","exclude","getPubnubMessage","publish","message","PN_API","setup","_get_url_params","_object_to_key_list","_object_to_key_list_sorted","_get_pam_sign_input_from_params","si","validate_presence_heartbeat","heartbeat","cur_heartbeat","err","PRESENCE_HB_THRESHOLD","PRESENCE_HB_DEFAULT","encrypt","crypto_obj","CIPHER_KEY","decrypt","_presence_heartbeat","PRESENCE_HB_TIMEOUT","PRESENCE_HB_INTERVAL","CHANNELS","CHANNEL_GROUPS","PRESENCE_HB_RUNNING","SELF","stringify","start_presence_heartbeat","NO_WAIT_FOR_PENDING","PUB_QUEUE","sending","xdr","each_channel_group","count","chang","each_channel","chan","_invoke_callback","callback_data","_invoke_error","CR","url1","jsonp","jsonp_cb","AUTH_KEY","STD_ORIGIN","SUBSCRIBE_KEY","success","fail","_poll_online","_is_online","_reset_offline","_poll_timer","_poll_online2","TIME_CHECK","detect_time_detla","_poll_timer2","KEEPALIVE","SUB_RECEIVER","detect_latency","tt","adjusted_time","TIME_DRIFT","cb","time","calculate","ptime","latency","stime","SUB_WINDOWING","DEF_WINDOWING","SUB_TIMEOUT","DEF_SUB_TIMEOUT","DEF_KEEPALIVE","NOLEAVE","PUBLISH_KEY","SECRET_KEY","hmac_SHA256","SSL","ORIGIN","nextorigin","SUB_ORIGIN","CONNECT","CLOAK","SUB_CALLBACK","SUB_CHANNEL","SUB_RESTORE","TIMETOKEN","RESUMED","STATE","PRESENCE_HB","COMPATIBLE_35","db","UUID","USE_INSTANCEID","INSTANCEID","shutdown","use_send_beacon","sendBeacon","a","b","LEAVE","blocking","auth_key","uuid","auth","origin","PRESENCE_SUFFIX","url_string","action","service","LEAVE_GROUP","set_resumed","resumed","get_cipher_key","set_cipher_key","raw_encrypt","raw_decrypt","get_heartbeat","set_heartbeat","heartbeat_interval","get_heartbeat_interval","set_heartbeat_interval","get_version","SDK_VER","getGcmMessageObject","getApnsMessageObject","newPnMessage","gcm","n","_add_param","val","namespace","ns_ch","cloak","ns_ch_a","channel_group_list_groups","channel_group_list_channels","channel_group_remove_channel","channel_group_remove_group","channel_group_add_channel","channel_group_cloak","channel_group_list_namespaces","channel_group_remove_namespace","history","reverse","cipher_key","start","end","include_token","string_msg_token","payload","messages","decrypted_messages","new_message","replay","source","destination","stop","limit","post","store","add_msg","unsubscribe","ch","CB_CALLED","chg","subscribe","_test_connection","windowing","disconnected","reconnect","disconnect","_connect","st","sub_timeout","SUB_ERROR","idlecb","connected","backfill","next_callback","channels2","list2","channel2","chobj","decrypted_msg","presence","noheresync","timetoken","restore","settings","here","uid","timestamp","floor","occupancy","here_now","uuids","where_now","grant","ttl","w","getTime","sign_input","signature","mobile_gw_provision","op","gw_type","device_id","audit","revoke","set_uuid","get_uuid","get_subscibed_channels","presence_heartbeat","stop_timers","each-channel","offline","now","SHA256","s","CryptoJS","parse_options","defaultOptions","allowedKeyEncodings","allowedKeyLengths","parseInt","allowedModes","decode_key","get_padded_key","get_mode","get_iv","iv","encryptKey","keyEncoding","keyLength","hex_message","encryptedHexArray","base_64_encrypted","binary_enc","json_plain","ciphertext","plaintext","toJSON","valueOf","quote","string","escapable","lastIndex","meta","holder","partial","mind","gap","rep","isFinite","indent","cx","\b","\t","\n","\f","\r","\"","\\","replacer","space","eval","DEF_TIMEOUT","max","ori","failover","get_hmac_SHA256","hash","$","getElementById","console","elements","el","getElementsByTagName","bind","etype","rapfun","event","cancelBubble","preventDefault","stopPropagation","addEventListener","attachEvent","attr","attribute","setAttribute","getAttribute","css","element","styles","style","create","createElement","XORIGN","FDomainRequest","ajax","script","finished","xhrtme","timer","done","appendChild","parentNode","removeChild","ASYNC","src","complete","async","abort","XDomainRequest","onabort","onloadend","onreadystatechange","readyState","eee","navigator","pubnubs","fdomainrequest","SWF","UA","userAgent","PNSDK","log","opera","postError","ls","cookieGet","cookie","RegExp","cookieSet","cookieTest","getItem","setItem","events","unbind","fire","PDIV","CREATE_PUBNUB","leave_on_unload","pnsdk","PN","prop","pdiv","notest","publish_key","subscribe_key","ssl","location","href","position","top","unescape","WS","protocols","bits","protocol","pubnub","wasClean","h","g","lib","q","Base","extend","mixIn","$super","clone","WordArray","words","sigBytes","d","clamp","ceil","enc","Hex","substr","Latin1","fromCharCode","j","Utf8","escape","BufferedBlockAlgorithm","reset","_data","_nDataBytes","_append","_process","blockSize","_minBufferSize","min","_doProcessBlock","splice","Hasher","cfg","_doReset","update","finalize","_doFinalize","_createHelper","_createHmacHelper","t","HMAC","algo","sqrt","pow","_hash","HmacSHA256","_hasher","_oKey","_iKey","Base64","_map","charAt","abs","sin","MD5","z","A","B","C","D","E","HmacMD5","EvpKDF","keySize","hasher","compute","Cipher","createEncryptor","_ENC_XFORM_MODE","createDecryptor","_DEC_XFORM_MODE","_xformMode","_key","ivSize","StreamCipher","_iv","_prevBlock","BlockCipherMode","Encryptor","Decryptor","_cipher","processBlock","encryptBlock","decryptBlock","CBC","pad","Pkcs7","unpad","BlockCipher","padding","_mode","CipherParams","formatter","format","OpenSSL","salt","SerializableCipher","algorithm","_parse","kdf","execute","PasswordBasedCipher","F","G","y","H","AES","_nRounds","_keySchedule","_invKeySchedule","_doCryptBlock","ECB","offset","storage","prefix","setPrefix","_storage","_prefix","defaultPrefix","_prefixKey","removeItem","clean","hasListeners","_listeners","_this","_this2","_len","some","_this3","_Utils","cacheId","_cacheId","_promise","isPaused","_releaseTimeout","pause","resume","_pollInterval","_inherits","subClass","superClass","setPrototypeOf","__proto__","_ApiResponse","_ApiResponse2","_Observable","beforeRequest","requestSuccess","requestError","sendRequest","apiResponse","regeneratorRuntime","context$2$0","prev","awrap","_loadResponse","_response","sent","_isMultipart","_isJson","_text","abrupt","t0","makeError","originalMessage","createRequest","_allowedMethods","query","findHeaderName","_jsonContentType","contentTypeHeaderName","_contentType","contentType","_urlencodedContentType","req","originalBody","createResponse","stringBody","utils","_decode","reduce","res","_request","_json","_multipart","skipOKCheck","error_description","description","multipart","boundary","_getContentType","parts","_boundarySeparator","pop","statusInfo","part","_isContentType","_multipartContentType","_isUrlEncoded","headersAndBody","_bodySeparator","headersText","_headerSeparator","_Registry","_Registry2","_HttpClient","_registry","registry","mock","find","getResponse","_Mock","_Mock2","_mocks","add","clear","apiCall","authentication","access_token","token_type","expires_in","refresh_token","refresh_token_expires_in","scope","expireTime","logout","presenceLoad","uri","extension","extensionNumber","activeCalls","presenceStatus","telephonyStatus","userStatus","dndStatus","extensionId","subscribeGeneric","expiresIn","date","eventFilters","expirationTime","toISOString","deliveryMode","transportType","encryption","address","subscriberKey","secretKey","creationTime","subscribeOnPresence","detailed","encryptionAlgorithm","encryptionKey","tokenRefresh","failure","_method","_path","_delay","_status","_statusText","_Auth","_Auth2","beforeLogin","loginSuccess","loginError","beforeRefresh","refreshSuccess","refreshError","beforeLogout","logoutSuccess","logoutError","_server","_appKey","_appSecret","_queue","_auth","createUrl","builtUrl","hasHttp","addServer","_urlPrefix","_apiVersion","addMethod","addToken","accessToken","authUrl","_authorizeEndpoint","response_type","redirect_uri","redirectUri","client_id","brand_id","brandId","display","prompt","parseAuthRedirectUrl","qs","loggedIn","_ensureAuthentication","login","remember","access_token_ttl","_accessTokenTtl","refresh_token_ttl","_refreshTokenTtlRemember","_refreshTokenTtl","grant_type","username","password","endpointId","endpoint_id","_tokenRequest","_tokenEndpoint","setData","setRemember","refresh","_isAccessTokenValid","_refreshDelayMs","refreshToken","refreshTokenValid","_clearCacheOnRefreshError","_revokeEndpoint","token","inflateRequest","skipAuthCheck","_authHeader","cancelAccessToken","put","Authorization","_apiKey","Content-Type","accessTokenValid","apiKey","btoa","Buffer","tokenType","newData","expire_time","refresh_token_expire_time","authData","forcedTokenType","refreshHandicapMs","forceAuthentication","_PubnubMockJs","_PubnubMockJs2","PubnubMock","receiveMessage","notification","removeSuccess","removeError","renewSuccess","renewError","subscribeSuccess","subscribeError","_timeout","_subscription","alive","_renewHandicapMs","setSubscription","subscription","_clearTimeout","_subscribeAtPubnub","_setTimeout","register","renew","addEventFilters","setEventFilters","_getFullEventFilters","remove","resubscribe","_decrypt","_notify","_extends","assign","_Subscription2","_Subscription3","CachedSubscription","_Subscription","_cacheKey","_renewQueue","_resubscribeQueue","queuedRenewSuccess","queuedRenewError","queuedResubscribeSuccess","queuedResubscribeError","actionCb","successEvent","errorEvent","errorMessage","cachedSubscriptionData","wrap","innerFn","outerFn","tryLocsList","generator","Generator","context","Context","_invoke","makeInvokeMethod","tryCatch","GeneratorFunction","GeneratorFunctionPrototype","defineIteratorMethods","AwaitArgument","AsyncIterator","invoke","invokeNext","invokeThrow","unwrapped","enqueue","callInvokeWithMethodAndArg","previousPromise","domain","GenStateSuspendedStart","GenStateExecuting","GenStateCompleted","doneResult","delegate","iterator","returnMethod","record","info","GenStateSuspendedYield","resultName","nextLoc","dispatchException","ContinueSentinel","pushTryEntry","locs","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","iterable","iteratorMethod","iteratorSymbol","isNaN","hasOwn","Symbol","inModule","runtime","Gp","displayName","isGeneratorFunction","genFun","ctor","mark","iter","skipTempReset","rootEntry","rootRecord","rval","exception","handle","loc","caught","hasCatch","hasFinally","finallyEntry","finish","thrown","delegateYield"],"mappings":"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","file":"ringcentral-bundle.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"SDK\"] = factory();\n\telse\n\t\troot[\"RingCentral\"] = root[\"RingCentral\"] || {}, root[\"RingCentral\"][\"SDK\"] = factory();\n})(this, function() {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/universalModuleDefinition\n **/","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"SDK\"] = factory();\n\telse\n\t\troot[\"RingCentral\"] = root[\"RingCentral\"] || {}, root[\"RingCentral\"][\"SDK\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"/build/\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ function(module, exports, __webpack_require__) {\n\nmodule.exports = __webpack_require__(1);\n\n\n/***/ },\n/* 1 */\n/***/ function(module, exports, __webpack_require__) {\n\n'use strict';\n\nexports.__esModule = true;\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nvar _coreUtils = __webpack_require__(2);\n\nvar Utils = _interopRequireWildcard(_coreUtils);\n\nvar _coreCache = __webpack_require__(11);\n\nvar _coreCache2 = _interopRequireDefault(_coreCache);\n\nvar _coreExternals = __webpack_require__(3);\n\nvar Externals = _interopRequireWildcard(_coreExternals);\n\nvar _coreObservable = __webpack_require__(12);\n\nvar _coreObservable2 = _interopRequireDefault(_coreObservable);\n\nvar _coreQueue = __webpack_require__(13);\n\nvar _coreQueue2 = _interopRequireDefault(_coreQueue);\n\nvar _httpClient = __webpack_require__(14);\n\nvar _httpClient2 = _interopRequireDefault(_httpClient);\n\nvar _httpApiResponse = __webpack_require__(16);\n\nvar _httpApiResponse2 = _interopRequireDefault(_httpApiResponse);\n\nvar _httpUtils = __webpack_require__(15);\n\nvar HttpUtils = _interopRequireWildcard(_httpUtils);\n\nvar _mocksClientMock = __webpack_require__(17);\n\nvar _mocksClientMock2 = _interopRequireDefault(_mocksClientMock);\n\nvar _mocksMock = __webpack_require__(19);\n\nvar _mocksMock2 = _interopRequireDefault(_mocksMock);\n\nvar _mocksRegistry = __webpack_require__(18);\n\nvar _mocksRegistry2 = _interopRequireDefault(_mocksRegistry);\n\nvar _platformPlatform = __webpack_require__(20);\n\nvar _platformPlatform2 = _interopRequireDefault(_platformPlatform);\n\nvar _platformAuth = __webpack_require__(21);\n\nvar _platformAuth2 = _interopRequireDefault(_platformAuth);\n\nvar _pubnubPubnubFactory = __webpack_require__(22);\n\nvar _pubnubPubnubFactory2 = _interopRequireDefault(_pubnubPubnubFactory);\n\nvar _subscriptionSubscription = __webpack_require__(24);\n\nvar _subscriptionSubscription2 = _interopRequireDefault(_subscriptionSubscription);\n\nvar _subscriptionCachedSubscription = __webpack_require__(25);\n\nvar _subscriptionCachedSubscription2 = _interopRequireDefault(_subscriptionCachedSubscription);\n\n__webpack_require__(26);\n\nvar SDK = (function () {\n _createClass(SDK, null, [{\n key: 'version',\n value: '2.0.0',\n enumerable: true\n }, {\n key: 'server',\n value: {\n sandbox: 'https://platform.devtest.ringcentral.com',\n production: 'https://platform.ringcentral.com'\n },\n\n /**\n * @constructor\n * @param {object} [options]\n * @param {string} [options.server]\n * @param {string} [options.cachePrefix]\n * @param {string} [options.appSecret]\n * @param {string} [options.appKey]\n * @param {string} [options.appName]\n * @param {string} [options.appVersion]\n * @param {string} [options.pubnubFactory]\n * @param {string} [options.client]\n */\n enumerable: true\n }]);\n\n function SDK(options) {\n _classCallCheck(this, SDK);\n\n options = options || {};\n\n this._cache = new _coreCache2['default'](Externals.localStorage, options.cachePrefix);\n\n this._client = options.client || new _httpClient2['default']();\n\n this._platform = new _platformPlatform2['default'](this._client, this._cache, options.server, options.appKey, options.appSecret);\n\n this._pubnubFactory = options.pubnubFactory || Externals.PUBNUB;\n }\n\n /**\n * @return {Platform}\n */\n\n SDK.prototype.platform = function platform() {\n return this._platform;\n };\n\n /**\n * @return {Subscription}\n */\n\n SDK.prototype.createSubscription = function createSubscription() {\n return new _subscriptionSubscription2['default'](this._pubnubFactory, this._platform);\n };\n\n /**\n * @return {CachedSubscription}\n */\n\n SDK.prototype.createCachedSubscription = function createCachedSubscription(cacheKey) {\n return new _subscriptionCachedSubscription2['default'](this._pubnubFactory, this._platform, this._cache, cacheKey);\n };\n\n /**\n * @return {Cache}\n */\n\n SDK.prototype.cache = function cache() {\n return this._cache;\n };\n\n _createClass(SDK, null, [{\n key: 'core',\n value: {\n Cache: _coreCache2['default'],\n Observable: _coreObservable2['default'],\n Utils: Utils,\n Externals: Externals,\n Queue: _coreQueue2['default']\n },\n enumerable: true\n }, {\n key: 'http',\n value: {\n Client: _httpClient2['default'],\n ApiResponse: _httpApiResponse2['default'],\n Utils: HttpUtils\n },\n enumerable: true\n }, {\n key: 'platform',\n value: {\n Auth: _platformAuth2['default'],\n Platform: _platformPlatform2['default']\n },\n enumerable: true\n }, {\n key: 'subscription',\n value: {\n Subscription: _subscriptionSubscription2['default']\n },\n enumerable: true\n }, {\n key: 'mocks',\n value: {\n Client: _mocksClientMock2['default'],\n Registry: _mocksRegistry2['default'],\n Mock: _mocksMock2['default']\n },\n enumerable: true\n }, {\n key: 'pubnub',\n value: {\n PubnubMockFactory: _pubnubPubnubFactory2['default']\n },\n enumerable: true\n }]);\n\n return SDK;\n})();\n\nexports['default'] = SDK;\nmodule.exports = exports['default'];\n\n/***/ },\n/* 2 */\n/***/ function(module, exports, __webpack_require__) {\n\n'use strict';\n\nexports.__esModule = true;\nexports.queryStringify = queryStringify;\nexports.parseQueryString = parseQueryString;\nexports.isFunction = isFunction;\nexports.isArray = isArray;\nexports.poll = poll;\nexports.stopPolling = stopPolling;\nexports.isNodeJS = isNodeJS;\nexports.isBrowser = isBrowser;\nexports.delay = delay;\n\nvar _ExternalsJs = __webpack_require__(3);\n\n/**\n * TODO Replace with something better\n * @see https://github.com/joyent/node/blob/master/lib/querystring.js\n * @param {object} parameters\n * @returns {string}\n */\n\nfunction queryStringify(parameters) {\n\n var array = [];\n\n parameters = parameters || {};\n\n Object.keys(parameters).forEach(function (k) {\n\n var v = parameters[k];\n\n if (isArray(v)) {\n v.forEach(function (vv) {\n array.push(encodeURIComponent(k) + '=' + encodeURIComponent(vv));\n });\n } else {\n array.push(encodeURIComponent(k) + '=' + encodeURIComponent(v));\n }\n });\n\n return array.join('&');\n}\n\n/**\n * TODO Replace with something better\n * @see https://github.com/joyent/node/blob/master/lib/querystring.js\n * @param {string} queryString\n * @returns {object}\n */\n\nfunction parseQueryString(queryString) {\n\n var argsParsed = {};\n\n queryString.split('&').forEach(function (arg) {\n\n arg = decodeURIComponent(arg);\n\n if (arg.indexOf('=') == -1) {\n\n argsParsed[arg.trim()] = true;\n } else {\n\n var pair = arg.split('='),\n key = pair[0].trim(),\n value = pair[1].trim();\n\n if (key in argsParsed) {\n if (key in argsParsed && !isArray(argsParsed[key])) argsParsed[key] = [argsParsed[key]];\n argsParsed[key].push(value);\n } else {\n argsParsed[key] = value;\n }\n }\n });\n\n return argsParsed;\n}\n\n/**\n * @param obj\n * @return {boolean}\n */\n\nfunction isFunction(obj) {\n return typeof obj === \"function\";\n}\n\n/**\n * @param obj\n * @return {boolean}\n */\n\nfunction isArray(obj) {\n return Array.isArray ? Array.isArray(obj) : typeof obj === \"array\";\n}\n\n/**\n * @param fn\n * @param interval\n * @param timeout\n */\n\nfunction poll(fn, interval, timeout) {\n //NodeJS.Timer|number\n\n module.exports.stopPolling(timeout);\n\n interval = interval || 1000;\n\n var next = function next(delay) {\n\n delay = delay || interval;\n\n interval = delay;\n\n return setTimeout(function () {\n\n fn(next, delay);\n }, delay);\n };\n\n return next();\n}\n\nfunction stopPolling(timeout) {\n if (timeout) clearTimeout(timeout);\n}\n\nfunction isNodeJS() {\n return typeof process !== 'undefined';\n}\n\nfunction isBrowser() {\n return typeof window !== 'undefined';\n}\n\nfunction delay(timeout) {\n return new _ExternalsJs.Promise(function (resolve, reject) {\n setTimeout(function () {\n resolve(null);\n }, timeout);\n });\n}\n\n/***/ },\n/* 3 */\n/***/ function(module, exports, __webpack_require__) {\n\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _es6Promise = __webpack_require__(4);\n\nvar _es6Promise2 = _interopRequireDefault(_es6Promise);\n\nvar _nodeFetch = __webpack_require__(9);\n\nvar _nodeFetch2 = _interopRequireDefault(_nodeFetch);\n\nvar _pubnub = __webpack_require__(10);\n\nvar _pubnub2 = _interopRequireDefault(_pubnub);\n\nvar root = new Function('return this')();\n\nvar Promise = _es6Promise2['default'] && _es6Promise2['default'].Promise || root.Promise;\n\nexports.Promise = Promise;\nvar fetch = root.fetch || _nodeFetch2['default'];\nexports.fetch = fetch;\nvar Request = root.Request || fetch.Request;\nexports.Request = Request;\nvar Response = root.Response || fetch.Response;\nexports.Response = Response;\nvar Headers = root.Headers || fetch.Headers;\n\nexports.Headers = Headers;\nvar PUBNUB = root.PUBNUB || _pubnub2['default'];\n\nexports.PUBNUB = PUBNUB;\nvar localStorage = typeof root.localStorage !== 'undefined' ? root.localStorage : {};\nexports.localStorage = localStorage;\n\n/***/ },\n/* 4 */\n/***/ function(module, exports, __webpack_require__) {\n\nvar require;var __WEBPACK_AMD_DEFINE_RESULT__;/* WEBPACK VAR INJECTION */(function(setImmediate, global, module) {/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 2.2.0\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$toString = {}.toString;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n function lib$es6$promise$asap$$asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n var lib$es6$promise$asap$$default = lib$es6$promise$asap$$asap;\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n var nextTick = process.nextTick;\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // setImmediate should be used instead instead\n var version = process.versions.node.match(/^(?:(\\d+)\\.)?(?:(\\d+)\\.)?(\\*|\\d+)$/);\n if (Array.isArray(version) && version[1] === '0' && version[2] === '10') {\n nextTick = setImmediate;\n }\n return function() {\n nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertex() {\n try {\n var r = require;\n var vertx = __webpack_require__(!(function webpackMissingModule() { var e = new Error(\"Cannot find module \\\"vertx\\\"\"); e.code = 'MODULE_NOT_FOUND'; throw e; }()));\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && \"function\" === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertex();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFullfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$default(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable) {\n if (maybeThenable.constructor === promise.constructor) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n var then = lib$es6$promise$$internal$$getThen(maybeThenable);\n\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFullfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$default(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$default(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$default(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n var enumerator = this;\n\n enumerator._instanceConstructor = Constructor;\n enumerator.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (enumerator._validateInput(input)) {\n enumerator._input = input;\n enumerator.length = input.length;\n enumerator._remaining = input.length;\n\n enumerator._init();\n\n if (enumerator.length === 0) {\n lib$es6$promise$$internal$$fulfill(enumerator.promise, enumerator._result);\n } else {\n enumerator.length = enumerator.length || 0;\n enumerator._enumerate();\n if (enumerator._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(enumerator.promise, enumerator._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(enumerator.promise, enumerator._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validateInput = function(input) {\n return lib$es6$promise$utils$$isArray(input);\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._init = function() {\n this._result = new Array(this.length);\n };\n\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var enumerator = this;\n\n var length = enumerator.length;\n var promise = enumerator.promise;\n var input = enumerator._input;\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n enumerator._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var enumerator = this;\n var c = enumerator._instanceConstructor;\n\n if (lib$es6$promise$utils$$isMaybeThenable(entry)) {\n if (entry.constructor === c && entry._state !== lib$es6$promise$$internal$$PENDING) {\n entry._onerror = null;\n enumerator._settledAt(entry._state, i, entry._result);\n } else {\n enumerator._willSettleAt(c.resolve(entry), i);\n }\n } else {\n enumerator._remaining--;\n enumerator._result[i] = entry;\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var enumerator = this;\n var promise = enumerator.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n enumerator._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n enumerator._result[i] = value;\n }\n }\n\n if (enumerator._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, enumerator._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise’s eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n if (!lib$es6$promise$utils$$isFunction(resolver)) {\n lib$es6$promise$promise$$needsResolver();\n }\n\n if (!(this instanceof lib$es6$promise$promise$$Promise)) {\n lib$es6$promise$promise$$needsNew();\n }\n\n lib$es6$promise$$internal$$initializePromise(this, resolver);\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$default;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: function(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$default(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n },\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (\"function\" === 'function' && __webpack_require__(8)['amd']) {\n !(__WEBPACK_AMD_DEFINE_RESULT__ = function() { return lib$es6$promise$umd$$ES6Promise; }.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5).setImmediate, (function() { return this; }()), __webpack_require__(7)(module)))\n\n/***/ },\n/* 5 */\n/***/ function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function(setImmediate, clearImmediate) {var nextTick = __webpack_require__(6).nextTick;\nvar apply = Function.prototype.apply;\nvar slice = Array.prototype.slice;\nvar immediateIds = {};\nvar nextImmediateId = 0;\n\n// DOM APIs, for completeness\n\nexports.setTimeout = function() {\n return new Timeout(apply.call(setTimeout, window, arguments), clearTimeout);\n};\nexports.setInterval = function() {\n return new Timeout(apply.call(setInterval, window, arguments), clearInterval);\n};\nexports.clearTimeout =\nexports.clearInterval = function(timeout) { timeout.close(); };\n\nfunction Timeout(id, clearFn) {\n this._id = id;\n this._clearFn = clearFn;\n}\nTimeout.prototype.unref = Timeout.prototype.ref = function() {};\nTimeout.prototype.close = function() {\n this._clearFn.call(window, this._id);\n};\n\n// Does not start the time, just sets up the members needed.\nexports.enroll = function(item, msecs) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = msecs;\n};\n\nexports.unenroll = function(item) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = -1;\n};\n\nexports._unrefActive = exports.active = function(item) {\n clearTimeout(item._idleTimeoutId);\n\n var msecs = item._idleTimeout;\n if (msecs >= 0) {\n item._idleTimeoutId = setTimeout(function onTimeout() {\n if (item._onTimeout)\n item._onTimeout();\n }, msecs);\n }\n};\n\n// That's not how node.js implements it but the exposed api is the same.\nexports.setImmediate = typeof setImmediate === \"function\" ? setImmediate : function(fn) {\n var id = nextImmediateId++;\n var args = arguments.length < 2 ? false : slice.call(arguments, 1);\n\n immediateIds[id] = true;\n\n nextTick(function onNextTick() {\n if (immediateIds[id]) {\n // fn.call() is faster so we optimize for the common use-case\n // @see http://jsperf.com/call-apply-segu\n if (args) {\n fn.apply(null, args);\n } else {\n fn.call(null);\n }\n // Prevent ids from leaking\n exports.clearImmediate(id);\n }\n });\n\n return id;\n};\n\nexports.clearImmediate = typeof clearImmediate === \"function\" ? clearImmediate : function(id) {\n delete immediateIds[id];\n};\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5).setImmediate, __webpack_require__(5).clearImmediate))\n\n/***/ },\n/* 6 */\n/***/ function(module, exports) {\n\n// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n\n/***/ },\n/* 7 */\n/***/ function(module, exports) {\n\nmodule.exports = function(module) {\r\n\tif(!module.webpackPolyfill) {\r\n\t\tmodule.deprecate = function() {};\r\n\t\tmodule.paths = [];\r\n\t\t// module.parent = undefined by default\r\n\t\tmodule.children = [];\r\n\t\tmodule.webpackPolyfill = 1;\r\n\t}\r\n\treturn module;\r\n}\r\n\n\n/***/ },\n/* 8 */\n/***/ function(module, exports) {\n\nmodule.exports = function() { throw new Error(\"define cannot be used indirect\"); };\r\n\n\n/***/ },\n/* 9 */\n/***/ function(module, exports) {\n\n(function() {\n 'use strict';\n\n if (self.fetch) {\n return\n }\n\n function normalizeName(name) {\n if (typeof name !== 'string') {\n name = String(name)\n }\n if (/[^a-z0-9\\-#$%&'*+.\\^_`|~]/i.test(name)) {\n throw new TypeError('Invalid character in header field name')\n }\n return name.toLowerCase()\n }\n\n function normalizeValue(value) {\n if (typeof value !== 'string') {\n value = String(value)\n }\n return value\n }\n\n function Headers(headers) {\n this.map = {}\n\n if (headers instanceof Headers) {\n headers.forEach(function(value, name) {\n this.append(name, value)\n }, this)\n\n } else if (headers) {\n Object.getOwnPropertyNames(headers).forEach(function(name) {\n this.append(name, headers[name])\n }, this)\n }\n }\n\n Headers.prototype.append = function(name, value) {\n name = normalizeName(name)\n value = normalizeValue(value)\n var list = this.map[name]\n if (!list) {\n list = []\n this.map[name] = list\n }\n list.push(value)\n }\n\n Headers.prototype['delete'] = function(name) {\n delete this.map[normalizeName(name)]\n }\n\n Headers.prototype.get = function(name) {\n var values = this.map[normalizeName(name)]\n return values ? values[0] : null\n }\n\n Headers.prototype.getAll = function(name) {\n return this.map[normalizeName(name)] || []\n }\n\n Headers.prototype.has = function(name) {\n return this.map.hasOwnProperty(normalizeName(name))\n }\n\n Headers.prototype.set = function(name, value) {\n this.map[normalizeName(name)] = [normalizeValue(value)]\n }\n\n Headers.prototype.forEach = function(callback, thisArg) {\n Object.getOwnPropertyNames(this.map).forEach(function(name) {\n this.map[name].forEach(function(value) {\n callback.call(thisArg, value, name, this)\n }, this)\n }, this)\n }\n\n function consumed(body) {\n if (body.bodyUsed) {\n return Promise.reject(new TypeError('Already read'))\n }\n body.bodyUsed = true\n }\n\n function fileReaderReady(reader) {\n return new Promise(function(resolve, reject) {\n reader.onload = function() {\n resolve(reader.result)\n }\n reader.onerror = function() {\n reject(reader.error)\n }\n })\n }\n\n function readBlobAsArrayBuffer(blob) {\n var reader = new FileReader()\n reader.readAsArrayBuffer(blob)\n return fileReaderReady(reader)\n }\n\n function readBlobAsText(blob) {\n var reader = new FileReader()\n reader.readAsText(blob)\n return fileReaderReady(reader)\n }\n\n var support = {\n blob: 'FileReader' in self && 'Blob' in self && (function() {\n try {\n new Blob();\n return true\n } catch(e) {\n return false\n }\n })(),\n formData: 'FormData' in self\n }\n\n function Body() {\n this.bodyUsed = false\n\n\n this._initBody = function(body) {\n this._bodyInit = body\n if (typeof body === 'string') {\n this._bodyText = body\n } else if (support.blob && Blob.prototype.isPrototypeOf(body)) {\n this._bodyBlob = body\n } else if (support.formData && FormData.prototype.isPrototypeOf(body)) {\n this._bodyFormData = body\n } else if (!body) {\n this._bodyText = ''\n } else {\n throw new Error('unsupported BodyInit type')\n }\n }\n\n if (support.blob) {\n this.blob = function() {\n var rejected = consumed(this)\n if (rejected) {\n return rejected\n }\n\n if (this._bodyBlob) {\n return Promise.resolve(this._bodyBlob)\n } else if (this._bodyFormData) {\n throw new Error('could not read FormData body as blob')\n } else {\n return Promise.resolve(new Blob([this._bodyText]))\n }\n }\n\n this.arrayBuffer = function() {\n return this.blob().then(readBlobAsArrayBuffer)\n }\n\n this.text = function() {\n var rejected = consumed(this)\n if (rejected) {\n return rejected\n }\n\n if (this._bodyBlob) {\n return readBlobAsText(this._bodyBlob)\n } else if (this._bodyFormData) {\n throw new Error('could not read FormData body as text')\n } else {\n return Promise.resolve(this._bodyText)\n }\n }\n } else {\n this.text = function() {\n var rejected = consumed(this)\n return rejected ? rejected : Promise.resolve(this._bodyText)\n }\n }\n\n if (support.formData) {\n this.formData = function() {\n return this.text().then(decode)\n }\n }\n\n this.json = function() {\n return this.text().then(JSON.parse)\n }\n\n return this\n }\n\n // HTTP methods whose capitalization should be normalized\n var methods = ['DELETE', 'GET', 'HEAD', 'OPTIONS', 'POST', 'PUT']\n\n function normalizeMethod(method) {\n var upcased = method.toUpperCase()\n return (methods.indexOf(upcased) > -1) ? upcased : method\n }\n\n function Request(input, options) {\n options = options || {}\n var body = options.body\n if (Request.prototype.isPrototypeOf(input)) {\n if (input.bodyUsed) {\n throw new TypeError('Already read')\n }\n this.url = input.url\n this.credentials = input.credentials\n if (!options.headers) {\n this.headers = new Headers(input.headers)\n }\n this.method = input.method\n this.mode = input.mode\n if (!body) {\n body = input._bodyInit\n input.bodyUsed = true\n }\n } else {\n this.url = input\n }\n\n this.credentials = options.credentials || this.credentials || 'omit'\n if (options.headers || !this.headers) {\n this.headers = new Headers(options.headers)\n }\n this.method = normalizeMethod(options.method || this.method || 'GET')\n this.mode = options.mode || this.mode || null\n this.referrer = null\n\n if ((this.method === 'GET' || this.method === 'HEAD') && body) {\n throw new TypeError('Body not allowed for GET or HEAD requests')\n }\n this._initBody(body)\n }\n\n function decode(body) {\n var form = new FormData()\n body.trim().split('&').forEach(function(bytes) {\n if (bytes) {\n var split = bytes.split('=')\n var name = split.shift().replace(/\\+/g, ' ')\n var value = split.join('=').replace(/\\+/g, ' ')\n form.append(decodeURIComponent(name), decodeURIComponent(value))\n }\n })\n return form\n }\n\n function headers(xhr) {\n var head = new Headers()\n var pairs = xhr.getAllResponseHeaders().trim().split('\\n')\n pairs.forEach(function(header) {\n var split = header.trim().split(':')\n var key = split.shift().trim()\n var value = split.join(':').trim()\n head.append(key, value)\n })\n return head\n }\n\n Body.call(Request.prototype)\n\n function Response(bodyInit, options) {\n if (!options) {\n options = {}\n }\n\n this._initBody(bodyInit)\n this.type = 'default'\n this.url = null\n this.status = options.status\n this.ok = this.status >= 200 && this.status < 300\n this.statusText = options.statusText\n this.headers = options.headers instanceof Headers ? options.headers : new Headers(options.headers)\n this.url = options.url || ''\n }\n\n Body.call(Response.prototype)\n\n self.Headers = Headers;\n self.Request = Request;\n self.Response = Response;\n\n self.fetch = function(input, init) {\n var request\n if (Request.prototype.isPrototypeOf(input) && !init) {\n request = input\n } else {\n request = new Request(input, init)\n }\n\n return new Promise(function(resolve, reject) {\n var xhr = new XMLHttpRequest()\n\n function responseURL() {\n if ('responseURL' in xhr) {\n return xhr.responseURL\n }\n\n // Avoid security warnings on getResponseHeader when not allowed by CORS\n if (/^X-Request-URL:/m.test(xhr.getAllResponseHeaders())) {\n return xhr.getResponseHeader('X-Request-URL')\n }\n\n return;\n }\n\n xhr.onload = function() {\n var status = (xhr.status === 1223) ? 204 : xhr.status\n if (status < 100 || status > 599) {\n reject(new TypeError('Network request failed'))\n return\n }\n var options = {\n status: status,\n statusText: xhr.statusText,\n headers: headers(xhr),\n url: responseURL()\n }\n var body = 'response' in xhr ? xhr.response : xhr.responseText;\n resolve(new Response(body, options))\n }\n\n xhr.onerror = function() {\n reject(new TypeError('Network request failed'))\n }\n\n xhr.open(request.method, request.url, true)\n\n if (request.credentials === 'include') {\n xhr.withCredentials = true\n }\n\n if ('responseType' in xhr && support.blob) {\n xhr.responseType = 'blob'\n }\n\n request.headers.forEach(function(value, name) {\n xhr.setRequestHeader(name, value)\n })\n\n xhr.send(typeof request._bodyInit === 'undefined' ? null : request._bodyInit)\n })\n }\n self.fetch.polyfill = true\n})();\n\n\n/***/ },\n/* 10 */\n/***/ function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function(module) {// Version: 3.7.14\n/* =-====================================================================-= */\n/* =-====================================================================-= */\n/* =-========================= JSON =============================-= */\n/* =-====================================================================-= */\n/* =-====================================================================-= */\n\n(window['JSON'] && window['JSON']['stringify']) || (function () {\n window['JSON'] || (window['JSON'] = {});\n\n function toJSON(key) {\n try { return this.valueOf() }\n catch(e) { return null }\n }\n\n var cx = /[\\u0000\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g,\n escapable = /[\\\\\\\"\\x00-\\x1f\\x7f-\\x9f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g,\n gap,\n indent,\n meta = { // table of character substitutions\n '\\b': '\\\\b',\n '\\t': '\\\\t',\n '\\n': '\\\\n',\n '\\f': '\\\\f',\n '\\r': '\\\\r',\n '\"' : '\\\\\"',\n '\\\\': '\\\\\\\\'\n },\n rep;\n\n function quote(string) {\n escapable.lastIndex = 0;\n return escapable.test(string) ?\n '\"' + string.replace(escapable, function (a) {\n var c = meta[a];\n return typeof c === 'string' ? c :\n '\\\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);\n }) + '\"' :\n '\"' + string + '\"';\n }\n\n function str(key, holder) {\n var i, // The loop counter.\n k, // The member key.\n v, // The member value.\n length,\n partial,\n mind = gap,\n value = holder[key];\n\n if (value && typeof value === 'object') {\n value = toJSON.call( value, key );\n }\n\n if (typeof rep === 'function') {\n value = rep.call(holder, key, value);\n }\n\n switch (typeof value) {\n case 'string':\n return quote(value);\n\n case 'number':\n return isFinite(value) ? String(value) : 'null';\n\n case 'boolean':\n case 'null':\n return String(value);\n\n case 'object':\n\n if (!value) {\n return 'null';\n }\n\n gap += indent;\n partial = [];\n\n if (Object.prototype.toString.apply(value) === '[object Array]') {\n\n length = value.length;\n for (i = 0; i < length; i += 1) {\n partial[i] = str(i, value) || 'null';\n }\n\n v = partial.length === 0 ? '[]' :\n gap ? '[\\n' + gap +\n partial.join(',\\n' + gap) + '\\n' +\n mind + ']' :\n '[' + partial.join(',') + ']';\n gap = mind;\n return v;\n }\n if (rep && typeof rep === 'object') {\n length = rep.length;\n for (i = 0; i < length; i += 1) {\n k = rep[i];\n if (typeof k === 'string') {\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (gap ? ': ' : ':') + v);\n }\n }\n }\n } else {\n for (k in value) {\n if (Object.hasOwnProperty.call(value, k)) {\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (gap ? ': ' : ':') + v);\n }\n }\n }\n }\n\n v = partial.length === 0 ? '{}' :\n gap ? '{\\n' + gap + partial.join(',\\n' + gap) + '\\n' +\n mind + '}' : '{' + partial.join(',') + '}';\n gap = mind;\n return v;\n }\n }\n\n if (typeof JSON['stringify'] !== 'function') {\n JSON['stringify'] = function (value, replacer, space) {\n var i;\n gap = '';\n indent = '';\n\n if (typeof space === 'number') {\n for (i = 0; i < space; i += 1) {\n indent += ' ';\n }\n } else if (typeof space === 'string') {\n indent = space;\n }\n rep = replacer;\n if (replacer && typeof replacer !== 'function' &&\n (typeof replacer !== 'object' ||\n typeof replacer.length !== 'number')) {\n throw new Error('JSON.stringify');\n }\n return str('', {'': value});\n };\n }\n\n if (typeof JSON['parse'] !== 'function') {\n // JSON is parsed on the server for security.\n JSON['parse'] = function (text) {return eval('('+text+')')};\n }\n}());\nvar NOW = 1\n, READY = false\n, READY_BUFFER = []\n, PRESENCE_SUFFIX = '-pnpres'\n, DEF_WINDOWING = 10 // MILLISECONDS.\n, DEF_TIMEOUT = 10000 // MILLISECONDS.\n, DEF_SUB_TIMEOUT = 310 // SECONDS.\n, DEF_KEEPALIVE = 60 // SECONDS (FOR TIMESYNC).\n, SECOND = 1000 // A THOUSAND MILLISECONDS.\n, URLBIT = '/'\n, PARAMSBIT = '&'\n, PRESENCE_HB_THRESHOLD = 5\n, PRESENCE_HB_DEFAULT = 30\n, SDK_VER = '3.7.14'\n, REPL = /{([\\w\\-]+)}/g;\n\n/**\n * UTILITIES\n */\nfunction unique() { return'x'+ ++NOW+''+(+new Date) }\nfunction rnow() { return+new Date }\n\n/**\n * NEXTORIGIN\n * ==========\n * var next_origin = nextorigin();\n */\nvar nextorigin = (function() {\n var max = 20\n , ori = Math.floor(Math.random() * max);\n return function( origin, failover ) {\n return origin.indexOf('pubsub.') > 0\n && origin.replace(\n 'pubsub', 'ps' + (\n failover ? generate_uuid().split('-')[0] :\n (++ori < max? ori : ori=1)\n ) ) || origin;\n }\n})();\n\n\n/**\n * Build Url\n * =======\n *\n */\nfunction build_url( url_components, url_params ) {\n var url = url_components.join(URLBIT)\n , params = [];\n\n if (!url_params) return url;\n\n each( url_params, function( key, value ) {\n var value_str = (typeof value == 'object')?JSON['stringify'](value):value;\n (typeof value != 'undefined' &&\n value != null && encode(value_str).length > 0\n ) && params.push(key + \"=\" + encode(value_str));\n } );\n\n url += \"?\" + params.join(PARAMSBIT);\n return url;\n}\n\n/**\n * UPDATER\n * =======\n * var timestamp = unique();\n */\nfunction updater( fun, rate ) {\n var timeout\n , last = 0\n , runnit = function() {\n if (last + rate > rnow()) {\n clearTimeout(timeout);\n timeout = setTimeout( runnit, rate );\n }\n else {\n last = rnow();\n fun();\n }\n };\n\n return runnit;\n}\n\n/**\n * GREP\n * ====\n * var list = grep( [1,2,3], function(item) { return item % 2 } )\n */\nfunction grep( list, fun ) {\n var fin = [];\n each( list || [], function(l) { fun(l) && fin.push(l) } );\n return fin\n}\n\n/**\n * SUPPLANT\n * ========\n * var text = supplant( 'Hello {name}!', { name : 'John' } )\n */\nfunction supplant( str, values ) {\n return str.replace( REPL, function( _, match ) {\n return values[match] || _\n } );\n}\n\n/**\n * timeout\n * =======\n * timeout( function(){}, 100 );\n */\nfunction timeout( fun, wait ) {\n return setTimeout( fun, wait );\n}\n\n/**\n * uuid\n * ====\n * var my_uuid = generate_uuid();\n */\nfunction generate_uuid(callback) {\n var u = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g,\n function(c) {\n var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8);\n return v.toString(16);\n });\n if (callback) callback(u);\n return u;\n}\n\nfunction isArray(arg) {\n return !!arg && typeof arg !== 'string' && (Array.isArray && Array.isArray(arg) || typeof(arg.length) === \"number\")\n //return !!arg && (Array.isArray && Array.isArray(arg) || typeof(arg.length) === \"number\")\n}\n\n/**\n * EACH\n * ====\n * each( [1,2,3], function(item) { } )\n */\nfunction each( o, f) {\n if ( !o || !f ) return;\n\n if ( isArray(o) )\n for ( var i = 0, l = o.length; i < l; )\n f.call( o[i], o[i], i++ );\n else\n for ( var i in o )\n o.hasOwnProperty &&\n o.hasOwnProperty(i) &&\n f.call( o[i], i, o[i] );\n}\n\n/**\n * MAP\n * ===\n * var list = map( [1,2,3], function(item) { return item + 1 } )\n */\nfunction map( list, fun ) {\n var fin = [];\n each( list || [], function( k, v ) { fin.push(fun( k, v )) } );\n return fin;\n}\n\n\nfunction pam_encode(str) {\n return encodeURIComponent(str).replace(/[!'()*~]/g, function(c) {\n return '%' + c.charCodeAt(0).toString(16).toUpperCase();\n });\n}\n\n/**\n * ENCODE\n * ======\n * var encoded_data = encode('path');\n */\nfunction encode(path) { return encodeURIComponent(path) }\n\n/**\n * Generate Subscription Channel List\n * ==================================\n * generate_channel_list(channels_object);\n */\nfunction generate_channel_list(channels, nopresence) {\n var list = [];\n each( channels, function( channel, status ) {\n if (nopresence) {\n if(channel.search('-pnpres') < 0) {\n if (status.subscribed) list.push(channel);\n }\n } else {\n if (status.subscribed) list.push(channel);\n }\n });\n return list.sort();\n}\n\n/**\n * Generate Subscription Channel Groups List\n * ==================================\n * generate_channel_group_list(channels_groups object);\n */\nfunction generate_channel_group_list(channel_groups, nopresence) {\n var list = [];\n each(channel_groups, function( channel_group, status ) {\n if (nopresence) {\n if(channel_group.search('-pnpres') < 0) {\n if (status.subscribed) list.push(channel_group);\n }\n } else {\n if (status.subscribed) list.push(channel_group);\n }\n });\n return list.sort();\n}\n\n// PUBNUB READY TO CONNECT\nfunction ready() { timeout( function() {\n if (READY) return;\n READY = 1;\n each( READY_BUFFER, function(connect) { connect() } );\n}, SECOND ); }\n\nfunction PNmessage(args) {\n msg = args || {'apns' : {}},\n msg['getPubnubMessage'] = function() {\n var m = {};\n\n if (Object.keys(msg['apns']).length) {\n m['pn_apns'] = {\n 'aps' : {\n 'alert' : msg['apns']['alert'] ,\n 'badge' : msg['apns']['badge']\n }\n }\n for (var k in msg['apns']) {\n m['pn_apns'][k] = msg['apns'][k];\n }\n var exclude1 = ['badge','alert'];\n for (var k in exclude1) {\n delete m['pn_apns'][exclude1[k]];\n }\n }\n\n\n\n if (msg['gcm']) {\n m['pn_gcm'] = {\n 'data' : msg['gcm']\n }\n }\n\n for (var k in msg) {\n m[k] = msg[k];\n }\n var exclude = ['apns','gcm','publish', 'channel','callback','error'];\n for (var k in exclude) {\n delete m[exclude[k]];\n }\n\n return m;\n };\n msg['publish'] = function() {\n\n var m = msg.getPubnubMessage();\n\n if (msg['pubnub'] && msg['channel']) {\n msg['pubnub'].publish({\n 'message' : m,\n 'channel' : msg['channel'],\n 'callback' : msg['callback'],\n 'error' : msg['error']\n })\n }\n };\n return msg;\n}\n\nfunction PN_API(setup) {\n var SUB_WINDOWING = +setup['windowing'] || DEF_WINDOWING\n , SUB_TIMEOUT = (+setup['timeout'] || DEF_SUB_TIMEOUT) * SECOND\n , KEEPALIVE = (+setup['keepalive'] || DEF_KEEPALIVE) * SECOND\n , TIME_CHECK = setup['timecheck'] || 0\n , NOLEAVE = setup['noleave'] || 0\n , PUBLISH_KEY = setup['publish_key']\n , SUBSCRIBE_KEY = setup['subscribe_key']\n , AUTH_KEY = setup['auth_key'] || ''\n , SECRET_KEY = setup['secret_key'] || ''\n , hmac_SHA256 = setup['hmac_SHA256']\n , SSL = setup['ssl'] ? 's' : ''\n , ORIGIN = 'http'+SSL+'://'+(setup['origin']||'pubsub.pubnub.com')\n , STD_ORIGIN = nextorigin(ORIGIN)\n , SUB_ORIGIN = nextorigin(ORIGIN)\n , CONNECT = function(){}\n , PUB_QUEUE = []\n , CLOAK = true\n , TIME_DRIFT = 0\n , SUB_CALLBACK = 0\n , SUB_CHANNEL = 0\n , SUB_RECEIVER = 0\n , SUB_RESTORE = setup['restore'] || 0\n , SUB_BUFF_WAIT = 0\n , TIMETOKEN = 0\n , RESUMED = false\n , CHANNELS = {}\n , CHANNEL_GROUPS = {}\n , SUB_ERROR = function(){}\n , STATE = {}\n , PRESENCE_HB_TIMEOUT = null\n , PRESENCE_HB = validate_presence_heartbeat(\n setup['heartbeat'] || setup['pnexpires'] || 0, setup['error']\n )\n , PRESENCE_HB_INTERVAL = setup['heartbeat_interval'] || (PRESENCE_HB / 2) -1\n , PRESENCE_HB_RUNNING = false\n , NO_WAIT_FOR_PENDING = setup['no_wait_for_pending']\n , COMPATIBLE_35 = setup['compatible_3.5'] || false\n , xdr = setup['xdr']\n , params = setup['params'] || {}\n , error = setup['error'] || function() {}\n , _is_online = setup['_is_online'] || function() { return 1 }\n , jsonp_cb = setup['jsonp_cb'] || function() { return 0 }\n , db = setup['db'] || {'get': function(){}, 'set': function(){}}\n , CIPHER_KEY = setup['cipher_key']\n , UUID = setup['uuid'] || ( !setup['unique_uuid'] && db && db['get'](SUBSCRIBE_KEY+'uuid') || '')\n , USE_INSTANCEID = setup['instance_id'] || false\n , INSTANCEID = ''\n , shutdown = setup['shutdown']\n , use_send_beacon = (typeof setup['use_send_beacon'] != 'undefined')?setup['use_send_beacon']:true\n , sendBeacon = (use_send_beacon)?setup['sendBeacon']:null\n , _poll_timer\n , _poll_timer2;\n\n if (PRESENCE_HB === 2) PRESENCE_HB_INTERVAL = 1;\n\n var crypto_obj = setup['crypto_obj'] ||\n {\n 'encrypt' : function(a,key){ return a},\n 'decrypt' : function(b,key){return b}\n };\n\n function _get_url_params(data) {\n if (!data) data = {};\n each( params , function( key, value ) {\n if (!(key in data)) data[key] = value;\n });\n return data;\n }\n\n function _object_to_key_list(o) {\n var l = []\n each( o , function( key, value ) {\n l.push(key);\n });\n return l;\n }\n function _object_to_key_list_sorted(o) {\n return _object_to_key_list(o).sort();\n }\n\n function _get_pam_sign_input_from_params(params) {\n var si = \"\";\n var l = _object_to_key_list_sorted(params);\n\n for (var i in l) {\n var k = l[i]\n si += k + \"=\" + pam_encode(params[k]) ;\n if (i != l.length - 1) si += \"&\"\n }\n return si;\n }\n\n function validate_presence_heartbeat(heartbeat, cur_heartbeat, error) {\n var err = false;\n\n if (typeof heartbeat === 'undefined') {\n return cur_heartbeat;\n }\n\n if (typeof heartbeat === 'number') {\n if (heartbeat > PRESENCE_HB_THRESHOLD || heartbeat == 0)\n err = false;\n else\n err = true;\n } else if(typeof heartbeat === 'boolean'){\n if (!heartbeat) {\n return 0;\n } else {\n return PRESENCE_HB_DEFAULT;\n }\n } else {\n err = true;\n }\n\n if (err) {\n error && error(\"Presence Heartbeat value invalid. Valid range ( x > \" + PRESENCE_HB_THRESHOLD + \" or x = 0). Current Value : \" + (cur_heartbeat || PRESENCE_HB_THRESHOLD));\n return cur_heartbeat || PRESENCE_HB_THRESHOLD;\n } else return heartbeat;\n }\n\n function encrypt(input, key) {\n return crypto_obj['encrypt'](input, key || CIPHER_KEY) || input;\n }\n function decrypt(input, key) {\n return crypto_obj['decrypt'](input, key || CIPHER_KEY) ||\n crypto_obj['decrypt'](input, CIPHER_KEY) ||\n input;\n }\n\n function error_common(message, callback) {\n callback && callback({ 'error' : message || \"error occurred\"});\n error && error(message);\n }\n function _presence_heartbeat() {\n\n clearTimeout(PRESENCE_HB_TIMEOUT);\n\n if (!PRESENCE_HB_INTERVAL || PRESENCE_HB_INTERVAL >= 500 ||\n PRESENCE_HB_INTERVAL < 1 ||\n (!generate_channel_list(CHANNELS,true).length && !generate_channel_group_list(CHANNEL_GROUPS, true).length ) )\n {\n PRESENCE_HB_RUNNING = false;\n return;\n }\n\n PRESENCE_HB_RUNNING = true;\n SELF['presence_heartbeat']({\n 'callback' : function(r) {\n PRESENCE_HB_TIMEOUT = timeout( _presence_heartbeat, (PRESENCE_HB_INTERVAL) * SECOND );\n },\n 'error' : function(e) {\n error && error(\"Presence Heartbeat unable to reach Pubnub servers.\" + JSON.stringify(e));\n PRESENCE_HB_TIMEOUT = timeout( _presence_heartbeat, (PRESENCE_HB_INTERVAL) * SECOND );\n }\n });\n }\n\n function start_presence_heartbeat() {\n !PRESENCE_HB_RUNNING && _presence_heartbeat();\n }\n\n function publish(next) {\n\n if (NO_WAIT_FOR_PENDING) {\n if (!PUB_QUEUE.length) return;\n } else {\n if (next) PUB_QUEUE.sending = 0;\n if ( PUB_QUEUE.sending || !PUB_QUEUE.length ) return;\n PUB_QUEUE.sending = 1;\n }\n\n xdr(PUB_QUEUE.shift());\n }\n function each_channel_group(callback) {\n var count = 0;\n\n each( generate_channel_group_list(CHANNEL_GROUPS), function(channel_group) {\n var chang = CHANNEL_GROUPS[channel_group];\n\n if (!chang) return;\n\n count++;\n (callback||function(){})(chang);\n } );\n\n return count;\n }\n\n function each_channel(callback) {\n var count = 0;\n\n each( generate_channel_list(CHANNELS), function(channel) {\n var chan = CHANNELS[channel];\n\n if (!chan) return;\n\n count++;\n (callback||function(){})(chan);\n } );\n\n return count;\n }\n function _invoke_callback(response, callback, err) {\n if (typeof response == 'object') {\n if (response['error']) {\n var callback_data = {};\n\n if (response['message']) {\n callback_data['message'] = response['message'];\n }\n\n if (response['payload']) {\n callback_data['payload'] = response['payload'];\n }\n\n err && err(callback_data);\n return;\n\n }\n if (response['payload']) {\n if (response['next_page'])\n callback && callback(response['payload'], response['next_page']);\n else\n callback && callback(response['payload']);\n return;\n }\n }\n callback && callback(response);\n }\n\n function _invoke_error(response,err) {\n\n if (typeof response == 'object' && response['error']) {\n var callback_data = {};\n\n if (response['message']) {\n callback_data['message'] = response['message'];\n }\n\n if (response['payload']) {\n callback_data['payload'] = response['payload'];\n }\n \n err && err(callback_data);\n return;\n } else {\n err && err(response);\n }\n }\n function CR(args, callback, url1, data) {\n var callback = args['callback'] || callback\n , err = args['error'] || error\n , jsonp = jsonp_cb();\n\n data = data || {};\n \n if (!data['auth']) {\n data['auth'] = args['auth_key'] || AUTH_KEY;\n }\n \n var url = [\n STD_ORIGIN, 'v1', 'channel-registration',\n 'sub-key', SUBSCRIBE_KEY\n ];\n\n url.push.apply(url,url1);\n \n if (jsonp) data['callback'] = jsonp;\n \n xdr({\n callback : jsonp,\n data : _get_url_params(data),\n success : function(response) {\n _invoke_callback(response, callback, err);\n },\n fail : function(response) {\n _invoke_error(response, err);\n },\n url : url\n });\n\n }\n\n // Announce Leave Event\n var SELF = {\n 'LEAVE' : function( channel, blocking, auth_key, callback, error ) {\n\n var data = { 'uuid' : UUID, 'auth' : auth_key || AUTH_KEY }\n , origin = nextorigin(ORIGIN)\n , callback = callback || function(){}\n , err = error || function(){}\n , url\n , jsonp = jsonp_cb();\n\n\n\n // Prevent Leaving a Presence Channel\n if (channel.indexOf(PRESENCE_SUFFIX) > 0) return true;\n\n\n\n\n if (COMPATIBLE_35) {\n if (!SSL) return false;\n if (jsonp == '0') return false;\n }\n\n if (NOLEAVE) return false;\n\n if (jsonp != '0') data['callback'] = jsonp;\n\n if (USE_INSTANCEID) data['instanceid'] = INSTANCEID;\n\n url = [\n origin, 'v2', 'presence', 'sub_key',\n SUBSCRIBE_KEY, 'channel', encode(channel), 'leave'\n ];\n\n params = _get_url_params(data);\n\n\n if (sendBeacon) {\n url_string = build_url(url, params);\n if (sendBeacon(url_string)) {\n callback && callback({\"status\": 200, \"action\": \"leave\", \"message\": \"OK\", \"service\": \"Presence\"});\n return true;\n }\n }\n\n\n xdr({\n blocking : blocking || SSL,\n timeout : 2000,\n callback : jsonp,\n data : params,\n success : function(response) {\n _invoke_callback(response, callback, err);\n },\n fail : function(response) {\n _invoke_error(response, err);\n },\n url : url\n });\n return true;\n },\n 'LEAVE_GROUP' : function( channel_group, blocking, auth_key, callback, error ) {\n\n var data = { 'uuid' : UUID, 'auth' : auth_key || AUTH_KEY }\n , origin = nextorigin(ORIGIN)\n , callback = callback || function(){}\n , err = error || function(){}\n , jsonp = jsonp_cb();\n\n // Prevent Leaving a Presence Channel Group\n if (channel_group.indexOf(PRESENCE_SUFFIX) > 0) return true;\n\n if (COMPATIBLE_35) {\n if (!SSL) return false;\n if (jsonp == '0') return false;\n }\n\n if (NOLEAVE) return false;\n\n if (jsonp != '0') data['callback'] = jsonp;\n\n if (channel_group && channel_group.length > 0) data['channel-group'] = channel_group;\n\n if (USE_INSTANCEID) data['instanceid'] = INSTANCEID;\n\n xdr({\n blocking : blocking || SSL,\n timeout : 5000,\n callback : jsonp,\n data : _get_url_params(data),\n success : function(response) {\n _invoke_callback(response, callback, err);\n },\n fail : function(response) {\n _invoke_error(response, err);\n },\n url : [\n origin, 'v2', 'presence', 'sub_key',\n SUBSCRIBE_KEY, 'channel', encode(','), 'leave'\n ]\n });\n return true;\n },\n 'set_resumed' : function(resumed) {\n RESUMED = resumed;\n },\n 'get_cipher_key' : function() {\n return CIPHER_KEY;\n },\n 'set_cipher_key' : function(key) {\n CIPHER_KEY = key;\n },\n 'raw_encrypt' : function(input, key) {\n return encrypt(input, key);\n },\n 'raw_decrypt' : function(input, key) {\n return decrypt(input, key);\n },\n 'get_heartbeat' : function() {\n return PRESENCE_HB;\n },\n \n 'set_heartbeat' : function(heartbeat, heartbeat_interval) {\n PRESENCE_HB = validate_presence_heartbeat(heartbeat, PRESENCE_HB, error);\n PRESENCE_HB_INTERVAL = heartbeat_interval || (PRESENCE_HB / 2) - 1;\n if (PRESENCE_HB == 2) {\n PRESENCE_HB_INTERVAL = 1;\n }\n CONNECT();\n _presence_heartbeat();\n },\n \n 'get_heartbeat_interval' : function() {\n return PRESENCE_HB_INTERVAL;\n },\n \n 'set_heartbeat_interval' : function(heartbeat_interval) {\n PRESENCE_HB_INTERVAL = heartbeat_interval;\n _presence_heartbeat();\n },\n \n 'get_version' : function() {\n return SDK_VER;\n },\n 'getGcmMessageObject' : function(obj) {\n return {\n 'data' : obj\n }\n },\n 'getApnsMessageObject' : function(obj) {\n var x = {\n 'aps' : { 'badge' : 1, 'alert' : ''}\n }\n for (k in obj) {\n k[x] = obj[k];\n }\n return x;\n },\n 'newPnMessage' : function() {\n var x = {};\n if (gcm) x['pn_gcm'] = gcm;\n if (apns) x['pn_apns'] = apns;\n for ( k in n ) {\n x[k] = n[k];\n }\n return x;\n },\n\n '_add_param' : function(key,val) {\n params[key] = val;\n },\n\n 'channel_group' : function(args, callback) {\n var ns_ch = args['channel_group']\n , callback = callback || args['callback']\n , channels = args['channels'] || args['channel']\n , cloak = args['cloak']\n , namespace\n , channel_group\n , url = []\n , data = {}\n , mode = args['mode'] || 'add';\n\n\n if (ns_ch) {\n var ns_ch_a = ns_ch.split(':');\n\n if (ns_ch_a.length > 1) {\n namespace = (ns_ch_a[0] === '*')?null:ns_ch_a[0];\n\n channel_group = ns_ch_a[1];\n } else {\n channel_group = ns_ch_a[0];\n }\n }\n\n namespace && url.push('namespace') && url.push(encode(namespace));\n\n url.push('channel-group');\n\n if (channel_group && channel_group !== '*') {\n url.push(channel_group);\n }\n\n if (channels ) {\n if (isArray(channels)) {\n channels = channels.join(',');\n }\n data[mode] = channels;\n data['cloak'] = (CLOAK)?'true':'false';\n } else {\n if (mode === 'remove') url.push('remove');\n }\n\n if (typeof cloak != 'undefined') data['cloak'] = (cloak)?'true':'false';\n\n CR(args, callback, url, data);\n },\n\n 'channel_group_list_groups' : function(args, callback) {\n var namespace;\n\n namespace = args['namespace'] || args['ns'] || args['channel_group'] || null;\n if (namespace) {\n args[\"channel_group\"] = namespace + \":*\";\n }\n\n SELF['channel_group'](args, callback);\n },\n\n 'channel_group_list_channels' : function(args, callback) {\n if (!args['channel_group']) return error('Missing Channel Group');\n SELF['channel_group'](args, callback);\n },\n\n 'channel_group_remove_channel' : function(args, callback) {\n if (!args['channel_group']) return error('Missing Channel Group');\n if (!args['channel'] && !args['channels'] ) return error('Missing Channel');\n\n args['mode'] = 'remove';\n SELF['channel_group'](args,callback);\n },\n\n 'channel_group_remove_group' : function(args, callback) {\n if (!args['channel_group']) return error('Missing Channel Group');\n if (args['channel']) return error('Use channel_group_remove_channel if you want to remove a channel from a group.');\n\n args['mode'] = 'remove';\n SELF['channel_group'](args,callback);\n },\n\n 'channel_group_add_channel' : function(args, callback) {\n if (!args['channel_group']) return error('Missing Channel Group');\n if (!args['channel'] && !args['channels'] ) return error('Missing Channel');\n SELF['channel_group'](args,callback);\n },\n\n 'channel_group_cloak' : function(args, callback) {\n if (typeof args['cloak'] == 'undefined') {\n callback(CLOAK);\n return;\n }\n CLOAK = args['cloak'];\n SELF['channel_group'](args,callback);\n },\n\n 'channel_group_list_namespaces' : function(args, callback) {\n var url = ['namespace'];\n CR(args, callback, url);\n },\n 'channel_group_remove_namespace' : function(args, callback) {\n var url = ['namespace',args['namespace'],'remove'];\n CR(args, callback, url);\n },\n\n /*\n PUBNUB.history({\n channel : 'my_chat_channel',\n limit : 100,\n callback : function(history) { }\n });\n */\n 'history' : function( args, callback ) {\n var callback = args['callback'] || callback\n , count = args['count'] || args['limit'] || 100\n , reverse = args['reverse'] || \"false\"\n , err = args['error'] || function(){}\n , auth_key = args['auth_key'] || AUTH_KEY\n , cipher_key = args['cipher_key']\n , channel = args['channel']\n , channel_group = args['channel_group']\n , start = args['start']\n , end = args['end']\n , include_token = args['include_token']\n , string_msg_token = args['string_message_token'] || false\n , params = {}\n , jsonp = jsonp_cb();\n\n // Make sure we have a Channel\n if (!channel && !channel_group) return error('Missing Channel');\n if (!callback) return error('Missing Callback');\n if (!SUBSCRIBE_KEY) return error('Missing Subscribe Key');\n\n params['stringtoken'] = 'true';\n params['count'] = count;\n params['reverse'] = reverse;\n params['auth'] = auth_key;\n\n if (channel_group) {\n params['channel-group'] = channel_group;\n if (!channel) {\n channel = ','; \n }\n }\n if (jsonp) params['callback'] = jsonp;\n if (start) params['start'] = start;\n if (end) params['end'] = end;\n if (include_token) params['include_token'] = 'true';\n if (string_msg_token) params['string_message_token'] = 'true';\n\n // Send Message\n xdr({\n callback : jsonp,\n data : _get_url_params(params),\n success : function(response) {\n if (typeof response == 'object' && response['error']) {\n err({'message' : response['message'], 'payload' : response['payload']});\n return;\n }\n var messages = response[0];\n var decrypted_messages = [];\n for (var a = 0; a < messages.length; a++) {\n var new_message = decrypt(messages[a],cipher_key);\n try {\n decrypted_messages['push'](JSON['parse'](new_message));\n } catch (e) {\n decrypted_messages['push']((new_message));\n }\n }\n callback([decrypted_messages, response[1], response[2]]);\n },\n fail : function(response) {\n _invoke_error(response, err);\n },\n url : [\n STD_ORIGIN, 'v2', 'history', 'sub-key',\n SUBSCRIBE_KEY, 'channel', encode(channel)\n ]\n });\n },\n\n /*\n PUBNUB.replay({\n source : 'my_channel',\n destination : 'new_channel'\n });\n */\n 'replay' : function(args, callback) {\n var callback = callback || args['callback'] || function(){}\n , auth_key = args['auth_key'] || AUTH_KEY\n , source = args['source']\n , destination = args['destination']\n , stop = args['stop']\n , start = args['start']\n , end = args['end']\n , reverse = args['reverse']\n , limit = args['limit']\n , jsonp = jsonp_cb()\n , data = {}\n , url;\n\n // Check User Input\n if (!source) return error('Missing Source Channel');\n if (!destination) return error('Missing Destination Channel');\n if (!PUBLISH_KEY) return error('Missing Publish Key');\n if (!SUBSCRIBE_KEY) return error('Missing Subscribe Key');\n\n // Setup URL Params\n if (jsonp != '0') data['callback'] = jsonp;\n if (stop) data['stop'] = 'all';\n if (reverse) data['reverse'] = 'true';\n if (start) data['start'] = start;\n if (end) data['end'] = end;\n if (limit) data['count'] = limit;\n\n data['auth'] = auth_key;\n\n // Compose URL Parts\n url = [\n STD_ORIGIN, 'v1', 'replay',\n PUBLISH_KEY, SUBSCRIBE_KEY,\n source, destination\n ];\n\n // Start (or Stop) Replay!\n xdr({\n callback : jsonp,\n success : function(response) {\n _invoke_callback(response, callback, err);\n },\n fail : function() { callback([ 0, 'Disconnected' ]) },\n url : url,\n data : _get_url_params(data)\n });\n },\n\n /*\n PUBNUB.auth('AJFLKAJSDKLA');\n */\n 'auth' : function(auth) {\n AUTH_KEY = auth;\n CONNECT();\n },\n\n /*\n PUBNUB.time(function(time){ });\n */\n 'time' : function(callback) {\n var jsonp = jsonp_cb();\n\n var data = { 'uuid' : UUID, 'auth' : AUTH_KEY }\n\n if (USE_INSTANCEID) data['instanceid'] = INSTANCEID;\n\n xdr({\n callback : jsonp,\n data : _get_url_params(data),\n timeout : SECOND * 5,\n url : [STD_ORIGIN, 'time', jsonp],\n success : function(response) { callback(response[0]) },\n fail : function() { callback(0) }\n });\n },\n\n /*\n PUBNUB.publish({\n channel : 'my_chat_channel',\n message : 'hello!'\n });\n */\n 'publish' : function( args, callback ) {\n var msg = args['message'];\n if (!msg) return error('Missing Message');\n\n var callback = callback || args['callback'] || msg['callback'] || function(){}\n , channel = args['channel'] || msg['channel']\n , auth_key = args['auth_key'] || AUTH_KEY\n , cipher_key = args['cipher_key']\n , err = args['error'] || msg['error'] || function() {}\n , post = args['post'] || false\n , store = ('store_in_history' in args) ? args['store_in_history']: true\n , jsonp = jsonp_cb()\n , add_msg = 'push'\n , params\n , url;\n\n if (args['prepend']) add_msg = 'unshift'\n\n if (!channel) return error('Missing Channel');\n if (!PUBLISH_KEY) return error('Missing Publish Key');\n if (!SUBSCRIBE_KEY) return error('Missing Subscribe Key');\n\n if (msg['getPubnubMessage']) {\n msg = msg['getPubnubMessage']();\n }\n\n // If trying to send Object\n msg = JSON['stringify'](encrypt(msg, cipher_key));\n\n // Create URL\n url = [\n STD_ORIGIN, 'publish',\n PUBLISH_KEY, SUBSCRIBE_KEY,\n 0, encode(channel),\n jsonp, encode(msg)\n ];\n\n params = { 'uuid' : UUID, 'auth' : auth_key }\n\n if (!store) params['store'] =\"0\"\n\n if (USE_INSTANCEID) params['instanceid'] = INSTANCEID;\n\n // Queue Message Send\n PUB_QUEUE[add_msg]({\n callback : jsonp,\n timeout : SECOND * 5,\n url : url,\n data : _get_url_params(params),\n fail : function(response){\n _invoke_error(response, err);\n publish(1);\n },\n success : function(response) {\n _invoke_callback(response, callback, err);\n publish(1);\n },\n mode : (post)?'POST':'GET'\n });\n\n // Send Message\n publish();\n },\n\n /*\n PUBNUB.unsubscribe({ channel : 'my_chat' });\n */\n 'unsubscribe' : function(args, callback) {\n var channel = args['channel']\n , channel_group = args['channel_group']\n , auth_key = args['auth_key'] || AUTH_KEY\n , callback = callback || args['callback'] || function(){}\n , err = args['error'] || function(){};\n\n TIMETOKEN = 0;\n //SUB_RESTORE = 1; REVISIT !!!!\n\n if (channel) {\n // Prepare Channel(s)\n channel = map( (\n channel.join ? channel.join(',') : ''+channel\n ).split(','), function(channel) {\n if (!CHANNELS[channel]) return;\n return channel + ',' + channel + PRESENCE_SUFFIX;\n } ).join(',');\n\n // Iterate over Channels\n each( channel.split(','), function(ch) {\n var CB_CALLED = true;\n if (!ch) return;\n CHANNELS[ch] = 0;\n if (ch in STATE) delete STATE[ch];\n if (READY) {\n CB_CALLED = SELF['LEAVE']( ch, 0 , auth_key, callback, err);\n }\n if (!CB_CALLED) callback({action : \"leave\"});\n\n \n } );\n }\n\n if (channel_group) {\n // Prepare channel group(s)\n channel_group = map( (\n channel_group.join ? channel_group.join(',') : ''+channel_group\n ).split(','), function(channel_group) {\n if (!CHANNEL_GROUPS[channel_group]) return;\n return channel_group + ',' + channel_group + PRESENCE_SUFFIX;\n } ).join(',');\n\n // Iterate over channel groups\n each( channel_group.split(','), function(chg) {\n var CB_CALLED = true;\n if (!chg) return;\n CHANNEL_GROUPS[chg] = 0;\n if (chg in STATE) delete STATE[chg];\n if (READY) {\n CB_CALLED = SELF['LEAVE_GROUP']( chg, 0 , auth_key, callback, err);\n }\n if (!CB_CALLED) callback({action : \"leave\"});\n\n } );\n }\n\n // Reset Connection if Count Less\n CONNECT();\n },\n\n /*\n PUBNUB.subscribe({\n channel : 'my_chat'\n callback : function(message) { }\n });\n */\n 'subscribe' : function( args, callback ) {\n var channel = args['channel']\n , channel_group = args['channel_group']\n , callback = callback || args['callback']\n , callback = callback || args['message']\n , connect = args['connect'] || function(){}\n , reconnect = args['reconnect'] || function(){}\n , disconnect = args['disconnect'] || function(){}\n , SUB_ERROR = args['error'] || SUB_ERROR || function(){}\n , idlecb = args['idle'] || function(){}\n , presence = args['presence'] || 0\n , noheresync = args['noheresync'] || 0\n , backfill = args['backfill'] || 0\n , timetoken = args['timetoken'] || 0\n , sub_timeout = args['timeout'] || SUB_TIMEOUT\n , windowing = args['windowing'] || SUB_WINDOWING\n , state = args['state']\n , heartbeat = args['heartbeat'] || args['pnexpires']\n , heartbeat_interval = args['heartbeat_interval']\n , restore = args['restore'] || SUB_RESTORE;\n\n AUTH_KEY = args['auth_key'] || AUTH_KEY;\n\n // Restore Enabled?\n SUB_RESTORE = restore;\n\n // Always Reset the TT\n TIMETOKEN = timetoken;\n\n // Make sure we have a Channel\n if (!channel && !channel_group) {\n return error('Missing Channel');\n }\n\n if (!callback) return error('Missing Callback');\n if (!SUBSCRIBE_KEY) return error('Missing Subscribe Key');\n\n if (heartbeat || heartbeat === 0 || heartbeat_interval || heartbeat_interval === 0) {\n SELF['set_heartbeat'](heartbeat, heartbeat_interval);\n }\n\n // Setup Channel(s)\n if (channel) {\n each( (channel.join ? channel.join(',') : ''+channel).split(','),\n function(channel) {\n var settings = CHANNELS[channel] || {};\n\n // Store Channel State\n CHANNELS[SUB_CHANNEL = channel] = {\n name : channel,\n connected : settings.connected,\n disconnected : settings.disconnected,\n subscribed : 1,\n callback : SUB_CALLBACK = callback,\n 'cipher_key' : args['cipher_key'],\n connect : connect,\n disconnect : disconnect,\n reconnect : reconnect\n };\n\n if (state) {\n if (channel in state) {\n STATE[channel] = state[channel];\n } else {\n STATE[channel] = state;\n }\n }\n\n // Presence Enabled?\n if (!presence) return;\n\n // Subscribe Presence Channel\n SELF['subscribe']({\n 'channel' : channel + PRESENCE_SUFFIX,\n 'callback' : presence,\n 'restore' : restore\n });\n\n // Presence Subscribed?\n if (settings.subscribed) return;\n\n // See Who's Here Now?\n if (noheresync) return;\n SELF['here_now']({\n 'channel' : channel,\n 'data' : _get_url_params({ 'uuid' : UUID, 'auth' : AUTH_KEY }),\n 'callback' : function(here) {\n each( 'uuids' in here ? here['uuids'] : [],\n function(uid) { presence( {\n 'action' : 'join',\n 'uuid' : uid,\n 'timestamp' : Math.floor(rnow() / 1000),\n 'occupancy' : here['occupancy'] || 1\n }, here, channel ); } );\n }\n });\n } );\n }\n\n // Setup Channel Groups\n if (channel_group) {\n each( (channel_group.join ? channel_group.join(',') : ''+channel_group).split(','),\n function(channel_group) {\n var settings = CHANNEL_GROUPS[channel_group] || {};\n\n CHANNEL_GROUPS[channel_group] = {\n name : channel_group,\n connected : settings.connected,\n disconnected : settings.disconnected,\n subscribed : 1,\n callback : SUB_CALLBACK = callback,\n 'cipher_key' : args['cipher_key'],\n connect : connect,\n disconnect : disconnect,\n reconnect : reconnect\n };\n\n // Presence Enabled?\n if (!presence) return;\n\n // Subscribe Presence Channel\n SELF['subscribe']({\n 'channel_group' : channel_group + PRESENCE_SUFFIX,\n 'callback' : presence,\n 'restore' : restore,\n 'auth_key' : AUTH_KEY\n });\n\n // Presence Subscribed?\n if (settings.subscribed) return;\n\n // See Who's Here Now?\n if (noheresync) return;\n SELF['here_now']({\n 'channel_group' : channel_group,\n 'data' : _get_url_params({ 'uuid' : UUID, 'auth' : AUTH_KEY }),\n 'callback' : function(here) {\n each( 'uuids' in here ? here['uuids'] : [],\n function(uid) { presence( {\n 'action' : 'join',\n 'uuid' : uid,\n 'timestamp' : Math.floor(rnow() / 1000),\n 'occupancy' : here['occupancy'] || 1\n }, here, channel_group ); } );\n }\n });\n } );\n }\n\n\n // Test Network Connection\n function _test_connection(success) {\n if (success) {\n // Begin Next Socket Connection\n timeout( CONNECT, windowing);\n }\n else {\n // New Origin on Failed Connection\n STD_ORIGIN = nextorigin( ORIGIN, 1 );\n SUB_ORIGIN = nextorigin( ORIGIN, 1 );\n\n // Re-test Connection\n timeout( function() {\n SELF['time'](_test_connection);\n }, SECOND );\n }\n\n // Disconnect & Reconnect\n each_channel(function(channel){\n // Reconnect\n if (success && channel.disconnected) {\n channel.disconnected = 0;\n return channel.reconnect(channel.name);\n }\n\n // Disconnect\n if (!success && !channel.disconnected) {\n channel.disconnected = 1;\n channel.disconnect(channel.name);\n }\n });\n \n // Disconnect & Reconnect for channel groups\n each_channel_group(function(channel_group){\n // Reconnect\n if (success && channel_group.disconnected) {\n channel_group.disconnected = 0;\n return channel_group.reconnect(channel_group.name);\n }\n\n // Disconnect\n if (!success && !channel_group.disconnected) {\n channel_group.disconnected = 1;\n channel_group.disconnect(channel_group.name);\n }\n });\n }\n\n // Evented Subscribe\n function _connect() {\n var jsonp = jsonp_cb()\n , channels = generate_channel_list(CHANNELS).join(',')\n , channel_groups = generate_channel_group_list(CHANNEL_GROUPS).join(',');\n\n // Stop Connection\n if (!channels && !channel_groups) return;\n\n if (!channels) channels = ',';\n\n // Connect to PubNub Subscribe Servers\n _reset_offline();\n\n var data = _get_url_params({ 'uuid' : UUID, 'auth' : AUTH_KEY });\n\n if (channel_groups) {\n data['channel-group'] = channel_groups;\n }\n\n\n var st = JSON.stringify(STATE);\n if (st.length > 2) data['state'] = JSON.stringify(STATE);\n\n if (PRESENCE_HB) data['heartbeat'] = PRESENCE_HB;\n\n if (USE_INSTANCEID) data['instanceid'] = INSTANCEID;\n\n start_presence_heartbeat();\n SUB_RECEIVER = xdr({\n timeout : sub_timeout,\n callback : jsonp,\n fail : function(response) {\n if (response && response['error'] && response['service']) {\n _invoke_error(response, SUB_ERROR);\n _test_connection(1);\n } else {\n SELF['time'](function(success){\n !success && ( _invoke_error(response, SUB_ERROR));\n _test_connection(success);\n });\n }\n },\n data : _get_url_params(data),\n url : [\n SUB_ORIGIN, 'subscribe',\n SUBSCRIBE_KEY, encode(channels),\n jsonp, TIMETOKEN\n ],\n success : function(messages) {\n\n // Check for Errors\n if (!messages || (\n typeof messages == 'object' &&\n 'error' in messages &&\n messages['error']\n )) {\n SUB_ERROR(messages['error']);\n return timeout( CONNECT, SECOND );\n }\n\n // User Idle Callback\n idlecb(messages[1]);\n\n // Restore Previous Connection Point if Needed\n TIMETOKEN = !TIMETOKEN &&\n SUB_RESTORE &&\n db['get'](SUBSCRIBE_KEY) || messages[1];\n\n /*\n // Connect\n each_channel_registry(function(registry){\n if (registry.connected) return;\n registry.connected = 1;\n registry.connect(channel.name);\n });\n */\n\n // Connect\n each_channel(function(channel){\n if (channel.connected) return;\n channel.connected = 1;\n channel.connect(channel.name);\n });\n\n // Connect for channel groups\n each_channel_group(function(channel_group){\n if (channel_group.connected) return;\n channel_group.connected = 1;\n channel_group.connect(channel_group.name);\n });\n\n if (RESUMED && !SUB_RESTORE) {\n TIMETOKEN = 0;\n RESUMED = false;\n // Update Saved Timetoken\n db['set']( SUBSCRIBE_KEY, 0 );\n timeout( _connect, windowing );\n return;\n }\n\n // Invoke Memory Catchup and Receive Up to 100\n // Previous Messages from the Queue.\n if (backfill) {\n TIMETOKEN = 10000;\n backfill = 0;\n }\n\n // Update Saved Timetoken\n db['set']( SUBSCRIBE_KEY, messages[1] );\n\n // Route Channel <---> Callback for Message\n var next_callback = (function() {\n var channels = '';\n var channels2 = '';\n\n if (messages.length > 3) {\n channels = messages[3];\n channels2 = messages[2];\n } else if (messages.length > 2) {\n channels = messages[2];\n } else {\n channels = map(\n generate_channel_list(CHANNELS), function(chan) { return map(\n Array(messages[0].length)\n .join(',').split(','),\n function() { return chan; }\n ) }).join(',')\n }\n\n var list = channels.split(',');\n var list2 = (channels2)?channels2.split(','):[];\n\n return function() {\n var channel = list.shift()||SUB_CHANNEL;\n var channel2 = list2.shift();\n\n var chobj = {};\n\n if (channel2) {\n if (channel && channel.indexOf('-pnpres') >= 0 \n && channel2.indexOf('-pnpres') < 0) {\n channel2 += '-pnpres';\n }\n chobj = CHANNEL_GROUPS[channel2] || CHANNELS[channel2] || {'callback' : function(){}};\n } else {\n chobj = CHANNELS[channel];\n }\n\n var r = [\n chobj\n .callback||SUB_CALLBACK,\n channel.split(PRESENCE_SUFFIX)[0]\n ];\n channel2 && r.push(channel2.split(PRESENCE_SUFFIX)[0]);\n return r;\n };\n })();\n\n var latency = detect_latency(+messages[1]);\n each( messages[0], function(msg) {\n var next = next_callback();\n var decrypted_msg = decrypt(msg,\n (CHANNELS[next[1]])?CHANNELS[next[1]]['cipher_key']:null);\n next[0] && next[0]( decrypted_msg, messages, next[2] || next[1], latency, next[1]);\n });\n\n timeout( _connect, windowing );\n }\n });\n }\n\n CONNECT = function() {\n _reset_offline();\n timeout( _connect, windowing );\n };\n\n // Reduce Status Flicker\n if (!READY) return READY_BUFFER.push(CONNECT);\n\n // Connect Now\n CONNECT();\n },\n\n /*\n PUBNUB.here_now({ channel : 'my_chat', callback : fun });\n */\n 'here_now' : function( args, callback ) {\n var callback = args['callback'] || callback\n , err = args['error'] || function(){}\n , auth_key = args['auth_key'] || AUTH_KEY\n , channel = args['channel']\n , channel_group = args['channel_group']\n , jsonp = jsonp_cb()\n , uuids = ('uuids' in args) ? args['uuids'] : true\n , state = args['state']\n , data = { 'uuid' : UUID, 'auth' : auth_key };\n\n if (!uuids) data['disable_uuids'] = 1;\n if (state) data['state'] = 1;\n\n // Make sure we have a Channel\n if (!callback) return error('Missing Callback');\n if (!SUBSCRIBE_KEY) return error('Missing Subscribe Key');\n\n var url = [\n STD_ORIGIN, 'v2', 'presence',\n 'sub_key', SUBSCRIBE_KEY\n ];\n\n channel && url.push('channel') && url.push(encode(channel));\n\n if (jsonp != '0') { data['callback'] = jsonp; }\n\n if (channel_group) {\n data['channel-group'] = channel_group;\n !channel && url.push('channel') && url.push(','); \n }\n\n if (USE_INSTANCEID) data['instanceid'] = INSTANCEID;\n\n xdr({\n callback : jsonp,\n data : _get_url_params(data),\n success : function(response) {\n _invoke_callback(response, callback, err);\n },\n fail : function(response) {\n _invoke_error(response, err);\n },\n url : url\n });\n },\n\n /*\n PUBNUB.current_channels_by_uuid({ channel : 'my_chat', callback : fun });\n */\n 'where_now' : function( args, callback ) {\n var callback = args['callback'] || callback\n , err = args['error'] || function(){}\n , auth_key = args['auth_key'] || AUTH_KEY\n , jsonp = jsonp_cb()\n , uuid = args['uuid'] || UUID\n , data = { 'auth' : auth_key };\n\n // Make sure we have a Channel\n if (!callback) return error('Missing Callback');\n if (!SUBSCRIBE_KEY) return error('Missing Subscribe Key');\n\n if (jsonp != '0') { data['callback'] = jsonp; }\n\n if (USE_INSTANCEID) data['instanceid'] = INSTANCEID;\n\n xdr({\n callback : jsonp,\n data : _get_url_params(data),\n success : function(response) {\n _invoke_callback(response, callback, err);\n },\n fail : function(response) {\n _invoke_error(response, err);\n },\n url : [\n STD_ORIGIN, 'v2', 'presence',\n 'sub_key', SUBSCRIBE_KEY,\n 'uuid', encode(uuid)\n ]\n });\n },\n\n 'state' : function(args, callback) {\n var callback = args['callback'] || callback || function(r) {}\n , err = args['error'] || function(){}\n , auth_key = args['auth_key'] || AUTH_KEY\n , jsonp = jsonp_cb()\n , state = args['state']\n , uuid = args['uuid'] || UUID\n , channel = args['channel']\n , channel_group = args['channel_group']\n , url\n , data = _get_url_params({ 'auth' : auth_key });\n\n // Make sure we have a Channel\n if (!SUBSCRIBE_KEY) return error('Missing Subscribe Key');\n if (!uuid) return error('Missing UUID');\n if (!channel && !channel_group) return error('Missing Channel');\n\n if (jsonp != '0') { data['callback'] = jsonp; }\n\n if (typeof channel != 'undefined'\n && CHANNELS[channel] && CHANNELS[channel].subscribed ) {\n if (state) STATE[channel] = state;\n }\n\n if (typeof channel_group != 'undefined'\n && CHANNEL_GROUPS[channel_group]\n && CHANNEL_GROUPS[channel_group].subscribed\n ) {\n if (state) STATE[channel_group] = state;\n data['channel-group'] = channel_group;\n\n if (!channel) {\n channel = ',';\n }\n }\n\n data['state'] = JSON.stringify(state);\n\n if (USE_INSTANCEID) data['instanceid'] = INSTANCEID;\n\n if (state) {\n url = [\n STD_ORIGIN, 'v2', 'presence',\n 'sub-key', SUBSCRIBE_KEY,\n 'channel', channel,\n 'uuid', uuid, 'data'\n ]\n } else {\n url = [\n STD_ORIGIN, 'v2', 'presence',\n 'sub-key', SUBSCRIBE_KEY,\n 'channel', channel,\n 'uuid', encode(uuid)\n ]\n }\n\n xdr({\n callback : jsonp,\n data : _get_url_params(data),\n success : function(response) {\n _invoke_callback(response, callback, err);\n },\n fail : function(response) {\n _invoke_error(response, err);\n },\n url : url\n\n });\n\n },\n\n /*\n PUBNUB.grant({\n channel : 'my_chat',\n callback : fun,\n error : fun,\n ttl : 24 * 60, // Minutes\n read : true,\n write : true,\n auth_key : '3y8uiajdklytowsj'\n });\n */\n 'grant' : function( args, callback ) {\n var callback = args['callback'] || callback\n , err = args['error'] || function(){}\n , channel = args['channel'] || args['channels']\n , channel_group = args['channel_group']\n , jsonp = jsonp_cb()\n , ttl = args['ttl']\n , r = (args['read'] )?\"1\":\"0\"\n , w = (args['write'])?\"1\":\"0\"\n , m = (args['manage'])?\"1\":\"0\"\n , auth_key = args['auth_key'] || args['auth_keys'];\n\n if (!callback) return error('Missing Callback');\n if (!SUBSCRIBE_KEY) return error('Missing Subscribe Key');\n if (!PUBLISH_KEY) return error('Missing Publish Key');\n if (!SECRET_KEY) return error('Missing Secret Key');\n\n var timestamp = Math.floor(new Date().getTime() / 1000)\n , sign_input = SUBSCRIBE_KEY + \"\\n\" + PUBLISH_KEY + \"\\n\"\n + \"grant\" + \"\\n\";\n\n var data = {\n 'w' : w,\n 'r' : r,\n 'timestamp' : timestamp\n };\n if (args['manage']) {\n data['m'] = m;\n }\n if (isArray(channel)) {\n channel = channel['join'](',');\n }\n if (isArray(auth_key)) {\n auth_key = auth_key['join'](',');\n }\n if (typeof channel != 'undefined' && channel != null && channel.length > 0) data['channel'] = channel;\n if (typeof channel_group != 'undefined' && channel_group != null && channel_group.length > 0) {\n data['channel-group'] = channel_group;\n }\n if (jsonp != '0') { data['callback'] = jsonp; }\n if (ttl || ttl === 0) data['ttl'] = ttl;\n\n if (auth_key) data['auth'] = auth_key;\n\n data = _get_url_params(data)\n\n if (!auth_key) delete data['auth'];\n\n sign_input += _get_pam_sign_input_from_params(data);\n\n var signature = hmac_SHA256( sign_input, SECRET_KEY );\n\n signature = signature.replace( /\\+/g, \"-\" );\n signature = signature.replace( /\\//g, \"_\" );\n\n data['signature'] = signature;\n\n xdr({\n callback : jsonp,\n data : data,\n success : function(response) {\n _invoke_callback(response, callback, err);\n },\n fail : function(response) {\n _invoke_error(response, err);\n },\n url : [\n STD_ORIGIN, 'v1', 'auth', 'grant' ,\n 'sub-key', SUBSCRIBE_KEY\n ]\n });\n },\n\n /*\n PUBNUB.mobile_gw_provision ({\n device_id: 'A655FBA9931AB',\n op : 'add' | 'remove',\n gw_type : 'apns' | 'gcm',\n channel : 'my_chat',\n callback : fun,\n error : fun,\n });\n */\n\n 'mobile_gw_provision' : function( args ) {\n\n var callback = args['callback'] || function(){}\n , auth_key = args['auth_key'] || AUTH_KEY\n , err = args['error'] || function() {}\n , jsonp = jsonp_cb()\n , channel = args['channel']\n , op = args['op']\n , gw_type = args['gw_type']\n , device_id = args['device_id']\n , params\n , url;\n\n if (!device_id) return error('Missing Device ID (device_id)');\n if (!gw_type) return error('Missing GW Type (gw_type: gcm or apns)');\n if (!op) return error('Missing GW Operation (op: add or remove)');\n if (!channel) return error('Missing gw destination Channel (channel)');\n if (!PUBLISH_KEY) return error('Missing Publish Key');\n if (!SUBSCRIBE_KEY) return error('Missing Subscribe Key');\n\n // Create URL\n url = [\n STD_ORIGIN, 'v1/push/sub-key',\n SUBSCRIBE_KEY, 'devices', device_id\n ];\n\n params = { 'uuid' : UUID, 'auth' : auth_key, 'type': gw_type};\n\n if (op == \"add\") {\n params['add'] = channel;\n } else if (op == \"remove\") {\n params['remove'] = channel;\n }\n\n if (USE_INSTANCEID) data['instanceid'] = INSTANCEID;\n\n xdr({\n callback : jsonp,\n data : params,\n success : function(response) {\n _invoke_callback(response, callback, err);\n },\n fail : function(response) {\n _invoke_error(response, err);\n },\n url : url\n });\n\n },\n\n /*\n PUBNUB.audit({\n channel : 'my_chat',\n callback : fun,\n error : fun,\n read : true,\n write : true,\n auth_key : '3y8uiajdklytowsj'\n });\n */\n 'audit' : function( args, callback ) {\n var callback = args['callback'] || callback\n , err = args['error'] || function(){}\n , channel = args['channel']\n , channel_group = args['channel_group']\n , auth_key = args['auth_key']\n , jsonp = jsonp_cb();\n\n // Make sure we have a Channel\n if (!callback) return error('Missing Callback');\n if (!SUBSCRIBE_KEY) return error('Missing Subscribe Key');\n if (!PUBLISH_KEY) return error('Missing Publish Key');\n if (!SECRET_KEY) return error('Missing Secret Key');\n\n var timestamp = Math.floor(new Date().getTime() / 1000)\n , sign_input = SUBSCRIBE_KEY + \"\\n\"\n + PUBLISH_KEY + \"\\n\"\n + \"audit\" + \"\\n\";\n\n var data = {'timestamp' : timestamp };\n if (jsonp != '0') { data['callback'] = jsonp; }\n if (typeof channel != 'undefined' && channel != null && channel.length > 0) data['channel'] = channel;\n if (typeof channel_group != 'undefined' && channel_group != null && channel_group.length > 0) {\n data['channel-group'] = channel_group;\n }\n if (auth_key) data['auth'] = auth_key;\n\n data = _get_url_params(data);\n\n if (!auth_key) delete data['auth'];\n\n sign_input += _get_pam_sign_input_from_params(data);\n\n var signature = hmac_SHA256( sign_input, SECRET_KEY );\n\n signature = signature.replace( /\\+/g, \"-\" );\n signature = signature.replace( /\\//g, \"_\" );\n\n data['signature'] = signature;\n xdr({\n callback : jsonp,\n data : data,\n success : function(response) {\n _invoke_callback(response, callback, err);\n },\n fail : function(response) {\n _invoke_error(response, err);\n },\n url : [\n STD_ORIGIN, 'v1', 'auth', 'audit' ,\n 'sub-key', SUBSCRIBE_KEY\n ]\n });\n },\n\n /*\n PUBNUB.revoke({\n channel : 'my_chat',\n callback : fun,\n error : fun,\n auth_key : '3y8uiajdklytowsj'\n });\n */\n 'revoke' : function( args, callback ) {\n args['read'] = false;\n args['write'] = false;\n SELF['grant']( args, callback );\n },\n 'set_uuid' : function(uuid) {\n UUID = uuid;\n CONNECT();\n },\n 'get_uuid' : function() {\n return UUID;\n },\n 'isArray' : function(arg) {\n return isArray(arg);\n },\n 'get_subscibed_channels' : function() {\n return generate_channel_list(CHANNELS, true);\n },\n 'presence_heartbeat' : function(args) {\n var callback = args['callback'] || function() {}\n var err = args['error'] || function() {}\n var jsonp = jsonp_cb();\n var data = { 'uuid' : UUID, 'auth' : AUTH_KEY };\n\n var st = JSON['stringify'](STATE);\n if (st.length > 2) data['state'] = JSON['stringify'](STATE);\n\n if (PRESENCE_HB > 0 && PRESENCE_HB < 320) data['heartbeat'] = PRESENCE_HB;\n\n if (jsonp != '0') { data['callback'] = jsonp; }\n\n var channels = encode(generate_channel_list(CHANNELS, true)['join'](','));\n var channel_groups = generate_channel_group_list(CHANNEL_GROUPS, true)['join'](',');\n\n if (!channels) channels = ',';\n if (channel_groups) data['channel-group'] = channel_groups;\n\n if (USE_INSTANCEID) data['instanceid'] = INSTANCEID;\n\n xdr({\n callback : jsonp,\n data : _get_url_params(data),\n timeout : SECOND * 5,\n url : [\n STD_ORIGIN, 'v2', 'presence',\n 'sub-key', SUBSCRIBE_KEY,\n 'channel' , channels,\n 'heartbeat'\n ],\n success : function(response) {\n _invoke_callback(response, callback, err);\n },\n fail : function(response) { _invoke_error(response, err); }\n });\n },\n 'stop_timers': function () {\n clearTimeout(_poll_timer);\n clearTimeout(_poll_timer2);\n clearTimeout(PRESENCE_HB_TIMEOUT);\n },\n 'shutdown': function () {\n SELF['stop_timers']();\n shutdown && shutdown();\n },\n\n // Expose PUBNUB Functions\n 'xdr' : xdr,\n 'ready' : ready,\n 'db' : db,\n 'uuid' : generate_uuid,\n 'map' : map,\n 'each' : each,\n 'each-channel' : each_channel,\n 'grep' : grep,\n 'offline' : function(){ _reset_offline(\n 1, { \"message\" : \"Offline. Please check your network settings.\" })\n },\n 'supplant' : supplant,\n 'now' : rnow,\n 'unique' : unique,\n 'updater' : updater\n };\n\n function _poll_online() {\n _is_online() || _reset_offline( 1, {\n \"error\" : \"Offline. Please check your network settings. \"\n });\n _poll_timer && clearTimeout(_poll_timer);\n _poll_timer = timeout( _poll_online, SECOND );\n }\n\n function _poll_online2() {\n if (!TIME_CHECK) return;\n SELF['time'](function(success){\n detect_time_detla( function(){}, success );\n success || _reset_offline( 1, {\n \"error\" : \"Heartbeat failed to connect to Pubnub Servers.\" +\n \"Please check your network settings.\"\n });\n _poll_timer2 && clearTimeout(_poll_timer2);\n _poll_timer2 = timeout( _poll_online2, KEEPALIVE );\n });\n }\n\n function _reset_offline(err, msg) {\n SUB_RECEIVER && SUB_RECEIVER(err, msg);\n SUB_RECEIVER = null;\n\n clearTimeout(_poll_timer);\n clearTimeout(_poll_timer2);\n }\n \n if (!UUID) UUID = SELF['uuid']();\n if (!INSTANCEID) INSTANCEID = SELF['uuid']();\n db['set']( SUBSCRIBE_KEY + 'uuid', UUID );\n\n _poll_timer = timeout( _poll_online, SECOND );\n _poll_timer2 = timeout( _poll_online2, KEEPALIVE );\n PRESENCE_HB_TIMEOUT = timeout(\n start_presence_heartbeat,\n ( PRESENCE_HB_INTERVAL - 3 ) * SECOND\n );\n\n // Detect Age of Message\n function detect_latency(tt) {\n var adjusted_time = rnow() - TIME_DRIFT;\n return adjusted_time - tt / 10000;\n }\n\n detect_time_detla();\n function detect_time_detla( cb, time ) {\n var stime = rnow();\n\n time && calculate(time) || SELF['time'](calculate);\n\n function calculate(time) {\n if (!time) return;\n var ptime = time / 10000\n , latency = (rnow() - stime) / 2;\n TIME_DRIFT = rnow() - (ptime + latency);\n cb && cb(TIME_DRIFT);\n }\n }\n\n return SELF;\n}\nfunction crypto_obj() {\n\n function SHA256(s) {\n return CryptoJS['SHA256'](s)['toString'](CryptoJS['enc']['Hex']);\n }\n\n var iv = \"0123456789012345\";\n\n var allowedKeyEncodings = ['hex', 'utf8', 'base64', 'binary'];\n var allowedKeyLengths = [128, 256];\n var allowedModes = ['ecb', 'cbc'];\n\n var defaultOptions = {\n 'encryptKey': true,\n 'keyEncoding': 'utf8',\n 'keyLength': 256,\n 'mode': 'cbc'\n };\n\n function parse_options(options) {\n\n // Defaults\n options = options || {};\n if (!options['hasOwnProperty']('encryptKey')) options['encryptKey'] = defaultOptions['encryptKey'];\n if (!options['hasOwnProperty']('keyEncoding')) options['keyEncoding'] = defaultOptions['keyEncoding'];\n if (!options['hasOwnProperty']('keyLength')) options['keyLength'] = defaultOptions['keyLength'];\n if (!options['hasOwnProperty']('mode')) options['mode'] = defaultOptions['mode'];\n\n // Validation\n if (allowedKeyEncodings['indexOf'](options['keyEncoding']['toLowerCase']()) == -1) options['keyEncoding'] = defaultOptions['keyEncoding'];\n if (allowedKeyLengths['indexOf'](parseInt(options['keyLength'], 10)) == -1) options['keyLength'] = defaultOptions['keyLength'];\n if (allowedModes['indexOf'](options['mode']['toLowerCase']()) == -1) options['mode'] = defaultOptions['mode'];\n\n return options;\n\n }\n\n function decode_key(key, options) {\n if (options['keyEncoding'] == 'base64') {\n return CryptoJS['enc']['Base64']['parse'](key);\n } else if (options['keyEncoding'] == 'hex') {\n return CryptoJS['enc']['Hex']['parse'](key);\n } else {\n return key;\n }\n }\n\n function get_padded_key(key, options) {\n key = decode_key(key, options);\n if (options['encryptKey']) {\n return CryptoJS['enc']['Utf8']['parse'](SHA256(key)['slice'](0, 32));\n } else {\n return key;\n }\n }\n\n function get_mode(options) {\n if (options['mode'] == 'ecb') {\n return CryptoJS['mode']['ECB'];\n } else {\n return CryptoJS['mode']['CBC'];\n }\n }\n\n function get_iv(options) {\n return (options['mode'] == 'cbc') ? CryptoJS['enc']['Utf8']['parse'](iv) : null;\n }\n\n return {\n\n 'encrypt': function(data, key, options) {\n if (!key) return data;\n options = parse_options(options);\n var iv = get_iv(options);\n var mode = get_mode(options);\n var cipher_key = get_padded_key(key, options);\n var hex_message = JSON['stringify'](data);\n var encryptedHexArray = CryptoJS['AES']['encrypt'](hex_message, cipher_key, {'iv': iv, 'mode': mode})['ciphertext'];\n var base_64_encrypted = encryptedHexArray['toString'](CryptoJS['enc']['Base64']);\n return base_64_encrypted || data;\n },\n\n 'decrypt': function(data, key, options) {\n if (!key) return data;\n options = parse_options(options);\n var iv = get_iv(options);\n var mode = get_mode(options);\n var cipher_key = get_padded_key(key, options);\n try {\n var binary_enc = CryptoJS['enc']['Base64']['parse'](data);\n var json_plain = CryptoJS['AES']['decrypt']({'ciphertext': binary_enc}, cipher_key, {'iv': iv, 'mode': mode})['toString'](CryptoJS['enc']['Utf8']);\n var plaintext = JSON['parse'](json_plain);\n return plaintext;\n }\n catch (e) {\n return undefined;\n }\n }\n };\n}\n/* =-====================================================================-= */\n/* =-====================================================================-= */\n/* =-========================= UTIL =============================-= */\n/* =-====================================================================-= */\n/* =-====================================================================-= */\n\nwindow['PUBNUB'] || (function() {\n\n/**\n * UTIL LOCALS\n */\n\nvar SWF = 'https://pubnub.a.ssl.fastly.net/pubnub.swf'\n, ASYNC = 'async'\n, UA = navigator.userAgent\n, PNSDK = 'PubNub-JS-' + 'Web' + '/' + '3.7.14'\n, XORIGN = UA.indexOf('MSIE 6') == -1;\n\n/**\n * CONSOLE COMPATIBILITY\n */\nwindow.console || (window.console=window.console||{});\nconsole.log || (\n console.log =\n console.error =\n ((window.opera||{}).postError||function(){})\n);\n\n/**\n * LOCAL STORAGE OR COOKIE\n */\nvar db = (function(){\n var store = {};\n var ls = false;\n try {\n ls = window['localStorage'];\n } catch (e) { }\n var cookieGet = function(key) {\n if (document.cookie.indexOf(key) == -1) return null;\n return ((document.cookie||'').match(\n RegExp(key+'=([^;]+)')\n )||[])[1] || null;\n };\n var cookieSet = function( key, value ) {\n document.cookie = key + '=' + value +\n '; expires=Thu, 1 Aug 2030 20:00:00 UTC; path=/';\n };\n var cookieTest = (function() {\n try {\n cookieSet('pnctest', '1');\n return cookieGet('pnctest') === '1';\n } catch (e) {\n return false;\n }\n }());\n return {\n 'get' : function(key) {\n try {\n if (ls) return ls.getItem(key);\n if (cookieTest) return cookieGet(key);\n return store[key];\n } catch(e) {\n return store[key];\n }\n },\n 'set' : function( key, value ) {\n try {\n if (ls) return ls.setItem( key, value ) && 0;\n if (cookieTest) cookieSet( key, value );\n store[key] = value;\n } catch(e) {\n store[key] = value;\n }\n }\n };\n})();\n\nfunction get_hmac_SHA256(data,key) {\n var hash = CryptoJS['HmacSHA256'](data, key);\n return hash.toString(CryptoJS['enc']['Base64']);\n}\n\n/**\n * $\n * =\n * var div = $('divid');\n */\nfunction $(id) { return document.getElementById(id) }\n\n/**\n * ERROR\n * =====\n * error('message');\n */\nfunction error(message) { console['error'](message) }\n\n/**\n * SEARCH\n * ======\n * var elements = search('a div span');\n */\nfunction search( elements, start) {\n var list = [];\n each( elements.split(/\\s+/), function(el) {\n each( (start || document).getElementsByTagName(el), function(node) {\n list.push(node);\n } );\n });\n return list;\n}\n\n/**\n * BIND\n * ====\n * bind( 'keydown', search('a')[0], function(element) {\n * ...\n * } );\n */\nfunction bind( type, el, fun ) {\n each( type.split(','), function(etype) {\n var rapfun = function(e) {\n if (!e) e = window.event;\n if (!fun(e)) {\n e.cancelBubble = true;\n e.preventDefault && e.preventDefault();\n e.stopPropagation && e.stopPropagation();\n }\n };\n\n if ( el.addEventListener ) el.addEventListener( etype, rapfun, false );\n else if ( el.attachEvent ) el.attachEvent( 'on' + etype, rapfun );\n else el[ 'on' + etype ] = rapfun;\n } );\n}\n\n/**\n * UNBIND\n * ======\n * unbind( 'keydown', search('a')[0] );\n */\nfunction unbind( type, el, fun ) {\n if ( el.removeEventListener ) el.removeEventListener( type, false );\n else if ( el.detachEvent ) el.detachEvent( 'on' + type, false );\n else el[ 'on' + type ] = null;\n}\n\n/**\n * HEAD\n * ====\n * head().appendChild(elm);\n */\nfunction head() { return search('head')[0] }\n\n/**\n * ATTR\n * ====\n * var attribute = attr( node, 'attribute' );\n */\nfunction attr( node, attribute, value ) {\n if (value) node.setAttribute( attribute, value );\n else return node && node.getAttribute && node.getAttribute(attribute);\n}\n\n/**\n * CSS\n * ===\n * var obj = create('div');\n */\nfunction css( element, styles ) {\n for (var style in styles) if (styles.hasOwnProperty(style))\n try {element.style[style] = styles[style] + (\n '|width|height|top|left|'.indexOf(style) > 0 &&\n typeof styles[style] == 'number'\n ? 'px' : ''\n )}catch(e){}\n}\n\n/**\n * CREATE\n * ======\n * var obj = create('div');\n */\nfunction create(element) { return document.createElement(element) }\n\n\n/**\n * jsonp_cb\n * ========\n * var callback = jsonp_cb();\n */\nfunction jsonp_cb() { return XORIGN || FDomainRequest() ? 0 : unique() }\n\n\n\n/**\n * EVENTS\n * ======\n * PUBNUB.events.bind( 'you-stepped-on-flower', function(message) {\n * // Do Stuff with message\n * } );\n *\n * PUBNUB.events.fire( 'you-stepped-on-flower', \"message-data\" );\n * PUBNUB.events.fire( 'you-stepped-on-flower', {message:\"data\"} );\n * PUBNUB.events.fire( 'you-stepped-on-flower', [1,2,3] );\n *\n */\nvar events = {\n 'list' : {},\n 'unbind' : function( name ) { events.list[name] = [] },\n 'bind' : function( name, fun ) {\n (events.list[name] = events.list[name] || []).push(fun);\n },\n 'fire' : function( name, data ) {\n each(\n events.list[name] || [],\n function(fun) { fun(data) }\n );\n }\n};\n\n/**\n * XDR Cross Domain Request\n * ========================\n * xdr({\n * url : ['http://www.blah.com/url'],\n * success : function(response) {},\n * fail : function() {}\n * });\n */\nfunction xdr( setup ) {\n if (XORIGN || FDomainRequest()) return ajax(setup);\n\n var script = create('script')\n , callback = setup.callback\n , id = unique()\n , finished = 0\n , xhrtme = setup.timeout || DEF_TIMEOUT\n , timer = timeout( function(){done(1, {\"message\" : \"timeout\"})}, xhrtme )\n , fail = setup.fail || function(){}\n , data = setup.data || {}\n , success = setup.success || function(){}\n , append = function() { head().appendChild(script) }\n , done = function( failed, response ) {\n if (finished) return;\n finished = 1;\n\n script.onerror = null;\n clearTimeout(timer);\n\n (failed || !response) || success(response);\n\n timeout( function() {\n failed && fail();\n var s = $(id)\n , p = s && s.parentNode;\n p && p.removeChild(s);\n }, SECOND );\n };\n\n window[callback] = function(response) {\n done( 0, response );\n };\n\n if (!setup.blocking) script[ASYNC] = ASYNC;\n\n script.onerror = function() { done(1) };\n script.src = build_url( setup.url, data );\n\n attr( script, 'id', id );\n\n append();\n return done;\n}\n\n/**\n * CORS XHR Request\n * ================\n * xdr({\n * url : ['http://www.blah.com/url'],\n * success : function(response) {},\n * fail : function() {}\n * });\n */\nfunction ajax( setup ) {\n var xhr, response\n , finished = function() {\n if (loaded) return;\n loaded = 1;\n\n clearTimeout(timer);\n\n try { response = JSON['parse'](xhr.responseText); }\n catch (r) { return done(1); }\n\n complete = 1;\n success(response);\n }\n , complete = 0\n , loaded = 0\n , xhrtme = setup.timeout || DEF_TIMEOUT\n , timer = timeout( function(){done(1, {\"message\" : \"timeout\"})}, xhrtme )\n , fail = setup.fail || function(){}\n , data = setup.data || {}\n , success = setup.success || function(){}\n , async = !(setup.blocking)\n , done = function(failed,response) {\n if (complete) return;\n complete = 1;\n\n clearTimeout(timer);\n\n if (xhr) {\n xhr.onerror = xhr.onload = null;\n xhr.abort && xhr.abort();\n xhr = null;\n }\n\n failed && fail(response);\n };\n\n // Send\n try {\n xhr = FDomainRequest() ||\n window.XDomainRequest &&\n new XDomainRequest() ||\n new XMLHttpRequest();\n\n xhr.onerror = xhr.onabort = function(e){ done(\n 1, e || (xhr && xhr.responseText) || { \"error\" : \"Network Connection Error\"}\n ) };\n xhr.onload = xhr.onloadend = finished;\n xhr.onreadystatechange = function() {\n if (xhr && xhr.readyState == 4) {\n switch(xhr.status) {\n case 200:\n break;\n default:\n try {\n response = JSON['parse'](xhr.responseText);\n done(1,response);\n }\n catch (r) { return done(1, {status : xhr.status, payload : null, message : xhr.responseText}); }\n return;\n }\n }\n }\n\n var url = build_url(setup.url,data);\n\n xhr.open( 'GET', url, async );\n if (async) xhr.timeout = xhrtme;\n xhr.send();\n }\n catch(eee) {\n done(0);\n XORIGN = 0;\n return xdr(setup);\n }\n\n // Return 'done'\n return done;\n}\n\n// Test Connection State\nfunction _is_online() {\n if (!('onLine' in navigator)) return 1;\n try { return navigator['onLine'] }\n catch (e) { return true }\n}\n\n\nfunction sendBeacon(url) {\n if (!('sendBeacon' in navigator)) return false;\n\n return navigator['sendBeacon'](url);\n}\n\n/* =-====================================================================-= */\n/* =-====================================================================-= */\n/* =-========================= PUBNUB ===========================-= */\n/* =-====================================================================-= */\n/* =-====================================================================-= */\n\nvar PDIV = $('pubnub') || 0\n, CREATE_PUBNUB = function(setup) {\n\n // Force JSONP if requested from user.\n if (setup['jsonp']) XORIGN = 0;\n else XORIGN = UA.indexOf('MSIE 6') == -1;\n\n var SUBSCRIBE_KEY = setup['subscribe_key'] || ''\n , KEEPALIVE = (+setup['keepalive'] || DEF_KEEPALIVE) * SECOND\n , UUID = setup['uuid'] || db['get'](SUBSCRIBE_KEY+'uuid')||'';\n\n var leave_on_unload = setup['leave_on_unload'] || 0;\n\n setup['xdr'] = xdr;\n setup['db'] = db;\n setup['error'] = setup['error'] || error;\n setup['_is_online'] = _is_online;\n setup['jsonp_cb'] = jsonp_cb;\n setup['hmac_SHA256']= get_hmac_SHA256;\n setup['crypto_obj'] = crypto_obj();\n setup['sendBeacon'] = sendBeacon;\n setup['params'] = { 'pnsdk' : PNSDK }\n\n var SELF = function(setup) {\n return CREATE_PUBNUB(setup);\n };\n\n var PN = PN_API(setup);\n\n for (var prop in PN) {\n if (PN.hasOwnProperty(prop)) {\n SELF[prop] = PN[prop];\n }\n }\n SELF['css'] = css;\n SELF['$'] = $;\n SELF['create'] = create;\n SELF['bind'] = bind;\n SELF['head'] = head;\n SELF['search'] = search;\n SELF['attr'] = attr;\n SELF['events'] = events;\n SELF['init'] = SELF;\n SELF['secure'] = SELF;\n SELF['crypto_obj'] = crypto_obj(); // export to instance\n\n\n // Add Leave Functions\n bind( 'beforeunload', window, function() {\n if (leave_on_unload) SELF['each-channel'](function(ch){ SELF['LEAVE']( ch.name, 0 ) });\n return true;\n } );\n\n // Return without Testing\n if (setup['notest']) return SELF;\n\n bind( 'offline', window, SELF['offline'] );\n bind( 'offline', document, SELF['offline'] );\n\n // Return PUBNUB Socket Object\n return SELF;\n};\nCREATE_PUBNUB['init'] = CREATE_PUBNUB;\nCREATE_PUBNUB['secure'] = CREATE_PUBNUB;\nCREATE_PUBNUB['crypto_obj'] = crypto_obj(); // export to constructor\n\n// Bind for PUBNUB Readiness to Subscribe\nif (document.readyState === 'complete') {\n timeout( ready, 0 );\n}\nelse {\n bind( 'load', window, function(){ timeout( ready, 0 ) } );\n}\n\nvar pdiv = PDIV || {};\n\n// CREATE A PUBNUB GLOBAL OBJECT\nPUBNUB = CREATE_PUBNUB({\n 'notest' : 1,\n 'publish_key' : attr( pdiv, 'pub-key' ),\n 'subscribe_key' : attr( pdiv, 'sub-key' ),\n 'ssl' : !document.location.href.indexOf('https') ||\n attr( pdiv, 'ssl' ) == 'on',\n 'origin' : attr( pdiv, 'origin' ),\n 'uuid' : attr( pdiv, 'uuid' )\n});\n\n// jQuery Interface\nwindow['jQuery'] && (window['jQuery']['PUBNUB'] = CREATE_PUBNUB);\n\n// For Modern JS + Testling.js - http://testling.com/\ntypeof(module) !== 'undefined' && (module['exports'] = PUBNUB) && ready();\n\nvar pubnubs = $('pubnubs') || 0;\n\n// LEAVE NOW IF NO PDIV.\nif (!PDIV) return;\n\n// PUBNUB Flash Socket\ncss( PDIV, { 'position' : 'absolute', 'top' : -SECOND } );\n\nif ('opera' in window || attr( PDIV, 'flash' )) PDIV['innerHTML'] =\n '';\n\n// Create Interface for Opera Flash\nPUBNUB['rdx'] = function( id, data ) {\n if (!data) return FDomainRequest[id]['onerror']();\n FDomainRequest[id]['responseText'] = unescape(data);\n FDomainRequest[id]['onload']();\n};\n\nfunction FDomainRequest() {\n if (!pubnubs || !pubnubs['get']) return 0;\n\n var fdomainrequest = {\n 'id' : FDomainRequest['id']++,\n 'send' : function() {},\n 'abort' : function() { fdomainrequest['id'] = {} },\n 'open' : function( method, url ) {\n FDomainRequest[fdomainrequest['id']] = fdomainrequest;\n pubnubs['get']( fdomainrequest['id'], url );\n }\n };\n\n return fdomainrequest;\n}\nFDomainRequest['id'] = SECOND;\n\n})();\n(function(){\n\n// ---------------------------------------------------------------------------\n// WEBSOCKET INTERFACE\n// ---------------------------------------------------------------------------\nvar WS = PUBNUB['ws'] = function( url, protocols ) {\n if (!(this instanceof WS)) return new WS( url, protocols );\n\n var self = this\n , url = self.url = url || ''\n , protocol = self.protocol = protocols || 'Sec-WebSocket-Protocol'\n , bits = url.split('/')\n , setup = {\n 'ssl' : bits[0] === 'wss:'\n ,'origin' : bits[2]\n ,'publish_key' : bits[3]\n ,'subscribe_key' : bits[4]\n ,'channel' : bits[5]\n };\n\n // READY STATES\n self['CONNECTING'] = 0; // The connection is not yet open.\n self['OPEN'] = 1; // The connection is open and ready to communicate.\n self['CLOSING'] = 2; // The connection is in the process of closing.\n self['CLOSED'] = 3; // The connection is closed or couldn't be opened.\n\n // CLOSE STATES\n self['CLOSE_NORMAL'] = 1000; // Normal Intended Close; completed.\n self['CLOSE_GOING_AWAY'] = 1001; // Closed Unexpecttedly.\n self['CLOSE_PROTOCOL_ERROR'] = 1002; // Server: Not Supported.\n self['CLOSE_UNSUPPORTED'] = 1003; // Server: Unsupported Protocol.\n self['CLOSE_TOO_LARGE'] = 1004; // Server: Too Much Data.\n self['CLOSE_NO_STATUS'] = 1005; // Server: No reason.\n self['CLOSE_ABNORMAL'] = 1006; // Abnormal Disconnect.\n\n // Events Default\n self['onclose'] = self['onerror'] =\n self['onmessage'] = self['onopen'] =\n self['onsend'] = function(){};\n\n // Attributes\n self['binaryType'] = '';\n self['extensions'] = '';\n self['bufferedAmount'] = 0;\n self['trasnmitting'] = false;\n self['buffer'] = [];\n self['readyState'] = self['CONNECTING'];\n\n // Close if no setup.\n if (!url) {\n self['readyState'] = self['CLOSED'];\n self['onclose']({\n 'code' : self['CLOSE_ABNORMAL'],\n 'reason' : 'Missing URL',\n 'wasClean' : true\n });\n return self;\n }\n\n // PubNub WebSocket Emulation\n self.pubnub = PUBNUB['init'](setup);\n self.pubnub.setup = setup;\n self.setup = setup;\n\n self.pubnub['subscribe']({\n 'restore' : false,\n 'channel' : setup['channel'],\n 'disconnect' : self['onerror'],\n 'reconnect' : self['onopen'],\n 'error' : function() {\n self['onclose']({\n 'code' : self['CLOSE_ABNORMAL'],\n 'reason' : 'Missing URL',\n 'wasClean' : false\n });\n },\n 'callback' : function(message) {\n self['onmessage']({ 'data' : message });\n },\n 'connect' : function() {\n self['readyState'] = self['OPEN'];\n self['onopen']();\n }\n });\n};\n\n// ---------------------------------------------------------------------------\n// WEBSOCKET SEND\n// ---------------------------------------------------------------------------\nWS.prototype.send = function(data) {\n var self = this;\n self.pubnub['publish']({\n 'channel' : self.pubnub.setup['channel'],\n 'message' : data,\n 'callback' : function(response) {\n self['onsend']({ 'data' : response });\n }\n });\n};\n\n// ---------------------------------------------------------------------------\n// WEBSOCKET CLOSE\n// ---------------------------------------------------------------------------\nWS.prototype.close = function() {\n var self = this;\n self.pubnub['unsubscribe']({ 'channel' : self.pubnub.setup['channel'] });\n self['readyState'] = self['CLOSED'];\n self['onclose']({});\n};\n\n})();\n/*\nCryptoJS v3.1.2\ncode.google.com/p/crypto-js\n(c) 2009-2013 by Jeff Mott. All rights reserved.\ncode.google.com/p/crypto-js/wiki/License\n*/\nvar CryptoJS=CryptoJS||function(h,s){var f={},g=f.lib={},q=function(){},m=g.Base={extend:function(a){q.prototype=this;var c=new q;a&&c.mixIn(a);c.hasOwnProperty(\"init\")||(c.init=function(){c.$super.init.apply(this,arguments)});c.init.prototype=c;c.$super=this;return c},create:function(){var a=this.extend();a.init.apply(a,arguments);return a},init:function(){},mixIn:function(a){for(var c in a)a.hasOwnProperty(c)&&(this[c]=a[c]);a.hasOwnProperty(\"toString\")&&(this.toString=a.toString)},clone:function(){return this.init.prototype.extend(this)}},\nr=g.WordArray=m.extend({init:function(a,c){a=this.words=a||[];this.sigBytes=c!=s?c:4*a.length},toString:function(a){return(a||k).stringify(this)},concat:function(a){var c=this.words,d=a.words,b=this.sigBytes;a=a.sigBytes;this.clamp();if(b%4)for(var e=0;e>>2]|=(d[e>>>2]>>>24-8*(e%4)&255)<<24-8*((b+e)%4);else if(65535>>2]=d[e>>>2];else c.push.apply(c,d);this.sigBytes+=a;return this},clamp:function(){var a=this.words,c=this.sigBytes;a[c>>>2]&=4294967295<<\n32-8*(c%4);a.length=h.ceil(c/4)},clone:function(){var a=m.clone.call(this);a.words=this.words.slice(0);return a},random:function(a){for(var c=[],d=0;d>>2]>>>24-8*(b%4)&255;d.push((e>>>4).toString(16));d.push((e&15).toString(16))}return d.join(\"\")},parse:function(a){for(var c=a.length,d=[],b=0;b>>3]|=parseInt(a.substr(b,\n2),16)<<24-4*(b%8);return new r.init(d,c/2)}},n=l.Latin1={stringify:function(a){var c=a.words;a=a.sigBytes;for(var d=[],b=0;b>>2]>>>24-8*(b%4)&255));return d.join(\"\")},parse:function(a){for(var c=a.length,d=[],b=0;b>>2]|=(a.charCodeAt(b)&255)<<24-8*(b%4);return new r.init(d,c)}},j=l.Utf8={stringify:function(a){try{return decodeURIComponent(escape(n.stringify(a)))}catch(c){throw Error(\"Malformed UTF-8 data\");}},parse:function(a){return n.parse(unescape(encodeURIComponent(a)))}},\nu=g.BufferedBlockAlgorithm=m.extend({reset:function(){this._data=new r.init;this._nDataBytes=0},_append:function(a){\"string\"==typeof a&&(a=j.parse(a));this._data.concat(a);this._nDataBytes+=a.sigBytes},_process:function(a){var c=this._data,d=c.words,b=c.sigBytes,e=this.blockSize,f=b/(4*e),f=a?h.ceil(f):h.max((f|0)-this._minBufferSize,0);a=f*e;b=h.min(4*a,b);if(a){for(var g=0;gn;){var j;a:{j=k;for(var u=h.sqrt(j),t=2;t<=u;t++)if(!(j%t)){j=!1;break a}j=!0}j&&(8>n&&(m[n]=l(h.pow(k,0.5))),r[n]=l(h.pow(k,1/3)),n++);k++}var a=[],f=f.SHA256=q.extend({_doReset:function(){this._hash=new g.init(m.slice(0))},_doProcessBlock:function(c,d){for(var b=this._hash.words,e=b[0],f=b[1],g=b[2],j=b[3],h=b[4],m=b[5],n=b[6],q=b[7],p=0;64>p;p++){if(16>p)a[p]=\nc[d+p]|0;else{var k=a[p-15],l=a[p-2];a[p]=((k<<25|k>>>7)^(k<<14|k>>>18)^k>>>3)+a[p-7]+((l<<15|l>>>17)^(l<<13|l>>>19)^l>>>10)+a[p-16]}k=q+((h<<26|h>>>6)^(h<<21|h>>>11)^(h<<7|h>>>25))+(h&m^~h&n)+r[p]+a[p];l=((e<<30|e>>>2)^(e<<19|e>>>13)^(e<<10|e>>>22))+(e&f^e&g^f&g);q=n;n=m;m=h;h=j+k|0;j=g;g=f;f=e;e=k+l|0}b[0]=b[0]+e|0;b[1]=b[1]+f|0;b[2]=b[2]+g|0;b[3]=b[3]+j|0;b[4]=b[4]+h|0;b[5]=b[5]+m|0;b[6]=b[6]+n|0;b[7]=b[7]+q|0},_doFinalize:function(){var a=this._data,d=a.words,b=8*this._nDataBytes,e=8*a.sigBytes;\nd[e>>>5]|=128<<24-e%32;d[(e+64>>>9<<4)+14]=h.floor(b/4294967296);d[(e+64>>>9<<4)+15]=b;a.sigBytes=4*d.length;this._process();return this._hash},clone:function(){var a=q.clone.call(this);a._hash=this._hash.clone();return a}});s.SHA256=q._createHelper(f);s.HmacSHA256=q._createHmacHelper(f)})(Math);\n\n// HMAC SHA256\n(function(){var h=CryptoJS,s=h.enc.Utf8;h.algo.HMAC=h.lib.Base.extend({init:function(f,g){f=this._hasher=new f.init;\"string\"==typeof g&&(g=s.parse(g));var h=f.blockSize,m=4*h;g.sigBytes>m&&(g=f.finalize(g));g.clamp();for(var r=this._oKey=g.clone(),l=this._iKey=g.clone(),k=r.words,n=l.words,j=0;j>>2]>>>24-8*(r%4)&255)<<16|(l[r+1>>>2]>>>24-8*((r+1)%4)&255)<<8|l[r+2>>>2]>>>24-8*((r+2)%4)&255,v=0;4>v&&r+0.75*v>>6*(3-v)&63));if(l=t.charAt(64))for(;d.length%4;)d.push(l);return d.join(\"\")},parse:function(d){var l=d.length,s=this._map,t=s.charAt(64);t&&(t=d.indexOf(t),-1!=t&&(l=t));for(var t=[],r=0,w=0;w<\nl;w++)if(w%4){var v=s.indexOf(d.charAt(w-1))<<2*(w%4),b=s.indexOf(d.charAt(w))>>>6-2*(w%4);t[r>>>2]|=(v|b)<<24-8*(r%4);r++}return p.create(t,r)},_map:\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\"}})();\n\n// BlockCipher\n(function(u){function p(b,n,a,c,e,j,k){b=b+(n&a|~n&c)+e+k;return(b<>>32-j)+n}function d(b,n,a,c,e,j,k){b=b+(n&c|a&~c)+e+k;return(b<>>32-j)+n}function l(b,n,a,c,e,j,k){b=b+(n^a^c)+e+k;return(b<>>32-j)+n}function s(b,n,a,c,e,j,k){b=b+(a^(n|~c))+e+k;return(b<>>32-j)+n}for(var t=CryptoJS,r=t.lib,w=r.WordArray,v=r.Hasher,r=t.algo,b=[],x=0;64>x;x++)b[x]=4294967296*u.abs(u.sin(x+1))|0;r=r.MD5=v.extend({_doReset:function(){this._hash=new w.init([1732584193,4023233417,2562383102,271733878])},\n_doProcessBlock:function(q,n){for(var a=0;16>a;a++){var c=n+a,e=q[c];q[c]=(e<<8|e>>>24)&16711935|(e<<24|e>>>8)&4278255360}var a=this._hash.words,c=q[n+0],e=q[n+1],j=q[n+2],k=q[n+3],z=q[n+4],r=q[n+5],t=q[n+6],w=q[n+7],v=q[n+8],A=q[n+9],B=q[n+10],C=q[n+11],u=q[n+12],D=q[n+13],E=q[n+14],x=q[n+15],f=a[0],m=a[1],g=a[2],h=a[3],f=p(f,m,g,h,c,7,b[0]),h=p(h,f,m,g,e,12,b[1]),g=p(g,h,f,m,j,17,b[2]),m=p(m,g,h,f,k,22,b[3]),f=p(f,m,g,h,z,7,b[4]),h=p(h,f,m,g,r,12,b[5]),g=p(g,h,f,m,t,17,b[6]),m=p(m,g,h,f,w,22,b[7]),\nf=p(f,m,g,h,v,7,b[8]),h=p(h,f,m,g,A,12,b[9]),g=p(g,h,f,m,B,17,b[10]),m=p(m,g,h,f,C,22,b[11]),f=p(f,m,g,h,u,7,b[12]),h=p(h,f,m,g,D,12,b[13]),g=p(g,h,f,m,E,17,b[14]),m=p(m,g,h,f,x,22,b[15]),f=d(f,m,g,h,e,5,b[16]),h=d(h,f,m,g,t,9,b[17]),g=d(g,h,f,m,C,14,b[18]),m=d(m,g,h,f,c,20,b[19]),f=d(f,m,g,h,r,5,b[20]),h=d(h,f,m,g,B,9,b[21]),g=d(g,h,f,m,x,14,b[22]),m=d(m,g,h,f,z,20,b[23]),f=d(f,m,g,h,A,5,b[24]),h=d(h,f,m,g,E,9,b[25]),g=d(g,h,f,m,k,14,b[26]),m=d(m,g,h,f,v,20,b[27]),f=d(f,m,g,h,D,5,b[28]),h=d(h,f,\nm,g,j,9,b[29]),g=d(g,h,f,m,w,14,b[30]),m=d(m,g,h,f,u,20,b[31]),f=l(f,m,g,h,r,4,b[32]),h=l(h,f,m,g,v,11,b[33]),g=l(g,h,f,m,C,16,b[34]),m=l(m,g,h,f,E,23,b[35]),f=l(f,m,g,h,e,4,b[36]),h=l(h,f,m,g,z,11,b[37]),g=l(g,h,f,m,w,16,b[38]),m=l(m,g,h,f,B,23,b[39]),f=l(f,m,g,h,D,4,b[40]),h=l(h,f,m,g,c,11,b[41]),g=l(g,h,f,m,k,16,b[42]),m=l(m,g,h,f,t,23,b[43]),f=l(f,m,g,h,A,4,b[44]),h=l(h,f,m,g,u,11,b[45]),g=l(g,h,f,m,x,16,b[46]),m=l(m,g,h,f,j,23,b[47]),f=s(f,m,g,h,c,6,b[48]),h=s(h,f,m,g,w,10,b[49]),g=s(g,h,f,m,\nE,15,b[50]),m=s(m,g,h,f,r,21,b[51]),f=s(f,m,g,h,u,6,b[52]),h=s(h,f,m,g,k,10,b[53]),g=s(g,h,f,m,B,15,b[54]),m=s(m,g,h,f,e,21,b[55]),f=s(f,m,g,h,v,6,b[56]),h=s(h,f,m,g,x,10,b[57]),g=s(g,h,f,m,t,15,b[58]),m=s(m,g,h,f,D,21,b[59]),f=s(f,m,g,h,z,6,b[60]),h=s(h,f,m,g,C,10,b[61]),g=s(g,h,f,m,j,15,b[62]),m=s(m,g,h,f,A,21,b[63]);a[0]=a[0]+f|0;a[1]=a[1]+m|0;a[2]=a[2]+g|0;a[3]=a[3]+h|0},_doFinalize:function(){var b=this._data,n=b.words,a=8*this._nDataBytes,c=8*b.sigBytes;n[c>>>5]|=128<<24-c%32;var e=u.floor(a/\n4294967296);n[(c+64>>>9<<4)+15]=(e<<8|e>>>24)&16711935|(e<<24|e>>>8)&4278255360;n[(c+64>>>9<<4)+14]=(a<<8|a>>>24)&16711935|(a<<24|a>>>8)&4278255360;b.sigBytes=4*(n.length+1);this._process();b=this._hash;n=b.words;for(a=0;4>a;a++)c=n[a],n[a]=(c<<8|c>>>24)&16711935|(c<<24|c>>>8)&4278255360;return b},clone:function(){var b=v.clone.call(this);b._hash=this._hash.clone();return b}});t.MD5=v._createHelper(r);t.HmacMD5=v._createHmacHelper(r)})(Math);\n(function(){var u=CryptoJS,p=u.lib,d=p.Base,l=p.WordArray,p=u.algo,s=p.EvpKDF=d.extend({cfg:d.extend({keySize:4,hasher:p.MD5,iterations:1}),init:function(d){this.cfg=this.cfg.extend(d)},compute:function(d,r){for(var p=this.cfg,s=p.hasher.create(),b=l.create(),u=b.words,q=p.keySize,p=p.iterations;u.length>>2]&255}};d.BlockCipher=v.extend({cfg:v.cfg.extend({mode:b,padding:q}),reset:function(){v.reset.call(this);var a=this.cfg,b=a.iv,a=a.mode;if(this._xformMode==this._ENC_XFORM_MODE)var c=a.createEncryptor;else c=a.createDecryptor,this._minBufferSize=1;this._mode=c.call(a,\nthis,b&&b.words)},_doProcessBlock:function(a,b){this._mode.processBlock(a,b)},_doFinalize:function(){var a=this.cfg.padding;if(this._xformMode==this._ENC_XFORM_MODE){a.pad(this._data,this.blockSize);var b=this._process(!0)}else b=this._process(!0),a.unpad(b);return b},blockSize:4});var n=d.CipherParams=l.extend({init:function(a){this.mixIn(a)},toString:function(a){return(a||this.formatter).stringify(this)}}),b=(p.format={}).OpenSSL={stringify:function(a){var b=a.ciphertext;a=a.salt;return(a?s.create([1398893684,\n1701076831]).concat(a).concat(b):b).toString(r)},parse:function(a){a=r.parse(a);var b=a.words;if(1398893684==b[0]&&1701076831==b[1]){var c=s.create(b.slice(2,4));b.splice(0,4);a.sigBytes-=16}return n.create({ciphertext:a,salt:c})}},a=d.SerializableCipher=l.extend({cfg:l.extend({format:b}),encrypt:function(a,b,c,d){d=this.cfg.extend(d);var l=a.createEncryptor(c,d);b=l.finalize(b);l=l.cfg;return n.create({ciphertext:b,key:c,iv:l.iv,algorithm:a,mode:l.mode,padding:l.padding,blockSize:a.blockSize,formatter:d.format})},\ndecrypt:function(a,b,c,d){d=this.cfg.extend(d);b=this._parse(b,d.format);return a.createDecryptor(c,d).finalize(b.ciphertext)},_parse:function(a,b){return\"string\"==typeof a?b.parse(a,this):a}}),p=(p.kdf={}).OpenSSL={execute:function(a,b,c,d){d||(d=s.random(8));a=w.create({keySize:b+c}).compute(a,d);c=s.create(a.words.slice(b),4*c);a.sigBytes=4*b;return n.create({key:a,iv:c,salt:d})}},c=d.PasswordBasedCipher=a.extend({cfg:a.cfg.extend({kdf:p}),encrypt:function(b,c,d,l){l=this.cfg.extend(l);d=l.kdf.execute(d,\nb.keySize,b.ivSize);l.iv=d.iv;b=a.encrypt.call(this,b,c,d.key,l);b.mixIn(d);return b},decrypt:function(b,c,d,l){l=this.cfg.extend(l);c=this._parse(c,l.format);d=l.kdf.execute(d,b.keySize,b.ivSize,c.salt);l.iv=d.iv;return a.decrypt.call(this,b,c,d.key,l)}})}();\n\n// AES\n(function(){for(var u=CryptoJS,p=u.lib.BlockCipher,d=u.algo,l=[],s=[],t=[],r=[],w=[],v=[],b=[],x=[],q=[],n=[],a=[],c=0;256>c;c++)a[c]=128>c?c<<1:c<<1^283;for(var e=0,j=0,c=0;256>c;c++){var k=j^j<<1^j<<2^j<<3^j<<4,k=k>>>8^k&255^99;l[e]=k;s[k]=e;var z=a[e],F=a[z],G=a[F],y=257*a[k]^16843008*k;t[e]=y<<24|y>>>8;r[e]=y<<16|y>>>16;w[e]=y<<8|y>>>24;v[e]=y;y=16843009*G^65537*F^257*z^16843008*e;b[k]=y<<24|y>>>8;x[k]=y<<16|y>>>16;q[k]=y<<8|y>>>24;n[k]=y;e?(e=z^a[a[a[G^z]]],j^=a[a[j]]):e=j=1}var H=[0,1,2,4,8,\n16,32,64,128,27,54],d=d.AES=p.extend({_doReset:function(){for(var a=this._key,c=a.words,d=a.sigBytes/4,a=4*((this._nRounds=d+6)+1),e=this._keySchedule=[],j=0;j>>24]<<24|l[k>>>16&255]<<16|l[k>>>8&255]<<8|l[k&255]):(k=k<<8|k>>>24,k=l[k>>>24]<<24|l[k>>>16&255]<<16|l[k>>>8&255]<<8|l[k&255],k^=H[j/d|0]<<24);e[j]=e[j-d]^k}c=this._invKeySchedule=[];for(d=0;dd||4>=j?k:b[l[k>>>24]]^x[l[k>>>16&255]]^q[l[k>>>\n8&255]]^n[l[k&255]]},encryptBlock:function(a,b){this._doCryptBlock(a,b,this._keySchedule,t,r,w,v,l)},decryptBlock:function(a,c){var d=a[c+1];a[c+1]=a[c+3];a[c+3]=d;this._doCryptBlock(a,c,this._invKeySchedule,b,x,q,n,s);d=a[c+1];a[c+1]=a[c+3];a[c+3]=d},_doCryptBlock:function(a,b,c,d,e,j,l,f){for(var m=this._nRounds,g=a[b]^c[0],h=a[b+1]^c[1],k=a[b+2]^c[2],n=a[b+3]^c[3],p=4,r=1;r>>24]^e[h>>>16&255]^j[k>>>8&255]^l[n&255]^c[p++],s=d[h>>>24]^e[k>>>16&255]^j[n>>>8&255]^l[g&255]^c[p++],t=\nd[k>>>24]^e[n>>>16&255]^j[g>>>8&255]^l[h&255]^c[p++],n=d[n>>>24]^e[g>>>16&255]^j[h>>>8&255]^l[k&255]^c[p++],g=q,h=s,k=t;q=(f[g>>>24]<<24|f[h>>>16&255]<<16|f[k>>>8&255]<<8|f[n&255])^c[p++];s=(f[h>>>24]<<24|f[k>>>16&255]<<16|f[n>>>8&255]<<8|f[g&255])^c[p++];t=(f[k>>>24]<<24|f[n>>>16&255]<<16|f[g>>>8&255]<<8|f[h&255])^c[p++];n=(f[n>>>24]<<24|f[g>>>16&255]<<16|f[h>>>8&255]<<8|f[k&255])^c[p++];a[b]=q;a[b+1]=s;a[b+2]=t;a[b+3]=n},keySize:8});u.AES=p._createHelper(d)})();\n\n// Mode ECB\nCryptoJS.mode.ECB = (function () {\n var ECB = CryptoJS.lib.BlockCipherMode.extend();\n\n ECB.Encryptor = ECB.extend({\n processBlock: function (words, offset) {\n this._cipher.encryptBlock(words, offset);\n }\n });\n\n ECB.Decryptor = ECB.extend({\n processBlock: function (words, offset) {\n this._cipher.decryptBlock(words, offset);\n }\n });\n\n return ECB;\n}());// Moved to hmac-sha-256.js\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(7)(module)))\n\n/***/ },\n/* 11 */\n/***/ function(module, exports) {\n\n'use strict';\n\nexports.__esModule = true;\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nvar Cache = (function () {\n _createClass(Cache, null, [{\n key: 'defaultPrefix',\n value: 'rc-',\n enumerable: true\n }]);\n\n function Cache(storage, prefix) {\n _classCallCheck(this, Cache);\n\n this.setPrefix(prefix);\n this._storage = storage;\n }\n\n Cache.prototype.setPrefix = function setPrefix(prefix) {\n this._prefix = prefix || Cache.defaultPrefix;\n return this;\n };\n\n Cache.prototype.setItem = function setItem(key, data) {\n this._storage[this._prefixKey(key)] = JSON.stringify(data);\n return this;\n };\n\n Cache.prototype.removeItem = function removeItem(key) {\n delete this._storage[this._prefixKey(key)];\n return this;\n };\n\n Cache.prototype.getItem = function getItem(key) {\n var item = this._storage[this._prefixKey(key)];\n if (!item) return null;\n return JSON.parse(item);\n };\n\n Cache.prototype.clean = function clean() {\n\n for (var key in this._storage) {\n\n if (!this._storage.hasOwnProperty(key)) continue;\n\n if (key.indexOf(this._prefix) === 0) {\n delete this._storage[key];\n }\n }\n\n return this;\n };\n\n Cache.prototype._prefixKey = function _prefixKey(key) {\n return this._prefix + key;\n };\n\n return Cache;\n})();\n\nexports['default'] = Cache;\nmodule.exports = exports['default'];\n\n/***/ },\n/* 12 */\n/***/ function(module, exports) {\n\n'use strict';\n\nexports.__esModule = true;\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nvar Observable = (function () {\n function Observable() {\n _classCallCheck(this, Observable);\n\n this.off();\n }\n\n Observable.prototype.hasListeners = function hasListeners(event) {\n return event in this._listeners;\n };\n\n Observable.prototype.on = function on(events, callback) {\n var _this = this;\n\n if (typeof events == 'string') events = [events];\n if (!events) throw new Error('No events to subscribe to');\n if (typeof callback !== 'function') throw new Error('Callback must be a function');\n\n events.forEach(function (event) {\n\n if (!_this.hasListeners(event)) _this._listeners[event] = [];\n\n _this._listeners[event].push(callback);\n });\n\n return this;\n };\n\n Observable.prototype.emit = function emit(event) {\n var _this2 = this;\n\n for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n var result = null;\n\n if (!this.hasListeners(event)) return null;\n\n this._listeners[event].some(function (callback) {\n\n result = callback.apply(_this2, args);\n return result === false;\n });\n\n return result;\n };\n\n Observable.prototype.off = function off(event, callback) {\n var _this3 = this;\n\n if (!event) {\n\n this._listeners = {};\n } else {\n\n if (!callback) {\n\n delete this._listeners[event];\n } else {\n\n if (!this.hasListeners(event)) return this;\n\n this._listeners[event].forEach(function (cb, i) {\n\n if (cb === callback) delete _this3._listeners[event][i];\n });\n }\n }\n\n return this;\n };\n\n return Observable;\n})();\n\nexports['default'] = Observable;\nmodule.exports = exports['default'];\n\n/***/ },\n/* 13 */\n/***/ function(module, exports, __webpack_require__) {\n\n'use strict';\n\nexports.__esModule = true;\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nvar _coreExternals = __webpack_require__(3);\n\nvar _Utils = __webpack_require__(2);\n\nvar Queue = (function () {\n _createClass(Queue, null, [{\n key: '_pollInterval',\n value: 250,\n enumerable: true\n }, {\n key: '_releaseTimeout',\n value: 5000,\n enumerable: true\n }]);\n\n function Queue(cache, cacheId) {\n _classCallCheck(this, Queue);\n\n this._cache = cache;\n this._cacheId = cacheId;\n this._promise = null;\n }\n\n Queue.prototype.isPaused = function isPaused() {\n\n var time = this._cache.getItem(this._cacheId);\n\n return !!time && Date.now() - parseInt(time) < Queue._releaseTimeout;\n };\n\n Queue.prototype.pause = function pause() {\n this._cache.setItem(this._cacheId, Date.now());\n return this;\n };\n\n Queue.prototype.resume = function resume() {\n this._cache.removeItem(this._cacheId);\n return this;\n };\n\n Queue.prototype.poll = function poll() {\n var _this = this;\n\n if (this._promise) return this._promise;\n\n this._promise = new _coreExternals.Promise(function (resolve, reject) {\n\n _Utils.poll(function (next) {\n\n if (_this.isPaused()) return next();\n\n _this._promise = null;\n\n _this.resume(); // this is actually not needed but why not\n\n resolve(null);\n }, Queue._pollInterval);\n });\n\n return this._promise;\n };\n\n return Queue;\n})();\n\nexports['default'] = Queue;\nmodule.exports = exports['default'];\n\n/***/ },\n/* 14 */\n/***/ function(module, exports, __webpack_require__) {\n\n'use strict';\n\nexports.__esModule = true;\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _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; }\n\nvar _coreExternals = __webpack_require__(3);\n\nvar _coreUtils = __webpack_require__(2);\n\nvar _Utils = __webpack_require__(15);\n\nvar _coreObservable = __webpack_require__(12);\n\nvar _coreObservable2 = _interopRequireDefault(_coreObservable);\n\nvar _ApiResponse = __webpack_require__(16);\n\nvar _ApiResponse2 = _interopRequireDefault(_ApiResponse);\n\nvar Client = (function (_Observable) {\n _inherits(Client, _Observable);\n\n function Client() {\n _classCallCheck(this, Client);\n\n _Observable.apply(this, arguments);\n\n this.events = {\n beforeRequest: 'beforeRequest',\n requestSuccess: 'requestSuccess',\n requestError: 'requestError'\n };\n }\n\n /**\n * @name IApiError\n * @property {string} stack\n * @property {string} originalMessage\n * @property {ApiResponse} apiResponse\n */\n\n /**\n * @param {Request} request\n * @return {Promise}\n */\n\n Client.prototype.sendRequest = function sendRequest(request) {\n var apiResponse;\n return regeneratorRuntime.async(function sendRequest$(context$2$0) {\n while (1) switch (context$2$0.prev = context$2$0.next) {\n case 0:\n apiResponse = new _ApiResponse2['default'](request);\n context$2$0.prev = 1;\n\n //TODO Stop request if listeners return false\n this.emit(this.events.beforeRequest, apiResponse);\n\n context$2$0.next = 5;\n return regeneratorRuntime.awrap(this._loadResponse(request));\n\n case 5:\n apiResponse._response = context$2$0.sent;\n\n if (!(apiResponse._isMultipart() || apiResponse._isJson())) {\n context$2$0.next = 10;\n break;\n }\n\n context$2$0.next = 9;\n return regeneratorRuntime.awrap(apiResponse.response().text());\n\n case 9:\n apiResponse._text = context$2$0.sent;\n\n case 10:\n if (apiResponse.ok()) {\n context$2$0.next = 12;\n break;\n }\n\n throw new Error('Response has unsuccessful status');\n\n case 12:\n\n this.emit(this.events.requestSuccess, apiResponse);\n\n return context$2$0.abrupt('return', apiResponse);\n\n case 16:\n context$2$0.prev = 16;\n context$2$0.t0 = context$2$0['catch'](1);\n\n if (!context$2$0.t0.apiResponse) context$2$0.t0 = this.makeError(context$2$0.t0, apiResponse);\n\n this.emit(this.events.requestError, context$2$0.t0);\n\n throw context$2$0.t0;\n\n case 21:\n case 'end':\n return context$2$0.stop();\n }\n }, null, this, [[1, 16]]);\n };\n\n /**\n * @param {Request} request\n * @return {Promise}\n * @private\n */\n\n Client.prototype._loadResponse = function _loadResponse(request) {\n return regeneratorRuntime.async(function _loadResponse$(context$2$0) {\n while (1) switch (context$2$0.prev = context$2$0.next) {\n case 0:\n context$2$0.next = 2;\n return regeneratorRuntime.awrap(_coreExternals.fetch.call(null, request));\n\n case 2:\n return context$2$0.abrupt('return', context$2$0.sent);\n\n case 3:\n case 'end':\n return context$2$0.stop();\n }\n }, null, this);\n };\n\n /**\n * Wraps the JS Error object with transaction information\n * @param {Error|IApiError} e\n * @param {ApiResponse} apiResponse\n * @return {IApiError}\n */\n\n Client.prototype.makeError = function makeError(e, apiResponse) {\n\n // Wrap only if regular error\n if (!e.hasOwnProperty('apiResponse') && !e.hasOwnProperty('originalMessage')) {\n\n e.apiResponse = apiResponse;\n e.originalMessage = e.message;\n e.message = apiResponse && apiResponse.error(true) || e.originalMessage;\n }\n\n return e;\n };\n\n /**\n *\n * @param {object} init\n * @param {object} [init.url]\n * @param {object} [init.body]\n * @param {string} [init.method]\n * @param {object} [init.query]\n * @param {object} [init.headers]\n * @return {Request}\n */\n\n Client.prototype.createRequest = function createRequest(init) {\n\n init = init || {};\n init.headers = init.headers || {};\n\n // Sanity checks\n if (!init.url) throw new Error('Url is not defined');\n if (!init.method) init.method = 'GET';\n if (init.method && Client._allowedMethods.indexOf(init.method) < 0) throw new Error('Method has wrong value: ' + init.method);\n\n // Defaults\n init.credentials = init.credentials || 'include';\n init.mode = init.mode || 'cors';\n\n // Append Query String\n if (init.query) {\n init.url = init.url + (init.url.indexOf('?') > -1 ? '&' : '?') + _coreUtils.queryStringify(init.query);\n }\n\n if (!_Utils.findHeaderName('Accept', init.headers)) {\n init.headers['Accept'] = _ApiResponse2['default']._jsonContentType;\n }\n\n // Serialize body\n //TODO Check that body is a plain object\n if (typeof init.body !== 'string' || !init.body) {\n\n var contentTypeHeaderName = _Utils.findHeaderName(_ApiResponse2['default']._contentType, init.headers);\n\n if (!contentTypeHeaderName) {\n contentTypeHeaderName = _ApiResponse2['default']._contentType;\n init.headers[contentTypeHeaderName] = _ApiResponse2['default']._jsonContentType;\n }\n\n var contentType = init.headers[contentTypeHeaderName];\n\n // Assign a new encoded body\n if (contentType.indexOf(_ApiResponse2['default']._jsonContentType) > -1) {\n init.body = JSON.stringify(init.body);\n } else if (contentType.indexOf(_ApiResponse2['default']._urlencodedContentType) > -1) {\n init.body = _coreUtils.queryStringify(init.body);\n }\n }\n\n // Create a request with encoded body\n var req = new _coreExternals.Request(init.url, init);\n\n // Keep the original body accessible directly (for mocks)\n req.originalBody = init.body;\n\n return req;\n };\n\n _createClass(Client, null, [{\n key: '_allowedMethods',\n value: ['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'OPTIONS', 'HEAD'],\n enumerable: true\n }]);\n\n return Client;\n})(_coreObservable2['default']);\n\nexports['default'] = Client;\nmodule.exports = exports['default'];\n\n/***/ },\n/* 15 */\n/***/ function(module, exports, __webpack_require__) {\n\n'use strict';\n\nexports.__esModule = true;\nexports.createResponse = createResponse;\nexports.findHeaderName = findHeaderName;\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nvar _coreExternals = __webpack_require__(3);\n\nvar _coreUtils = __webpack_require__(2);\n\nvar utils = _interopRequireWildcard(_coreUtils);\n\n/**\n * Creates a response\n * @param stringBody\n * @param init\n * @return {Response}\n */\n\nfunction createResponse(stringBody, init) {\n\n init = init || {};\n\n var response = new _coreExternals.Response(stringBody, init);\n\n //TODO Wait for https://github.com/bitinn/node-fetch/issues/38\n if (utils.isNodeJS()) {\n\n response._text = stringBody;\n response._decode = function () {\n return this._text;\n };\n }\n\n return response;\n}\n\nfunction findHeaderName(name, headers) {\n name = name.toLowerCase();\n return Object.keys(headers).reduce(function (res, key) {\n if (res) return res;\n if (name == key.toLowerCase()) return key;\n return res;\n }, null);\n}\n\n/***/ },\n/* 16 */\n/***/ function(module, exports, __webpack_require__) {\n\n'use strict';\n\nexports.__esModule = true;\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nvar _coreExternals = __webpack_require__(3);\n\nvar _Utils = __webpack_require__(15);\n\nvar utils = _interopRequireWildcard(_Utils);\n\nvar ApiResponse = (function () {\n _createClass(ApiResponse, null, [{\n key: '_contentType',\n value: 'Content-Type',\n enumerable: true\n }, {\n key: '_jsonContentType',\n value: 'application/json',\n enumerable: true\n }, {\n key: '_multipartContentType',\n value: 'multipart/mixed',\n enumerable: true\n }, {\n key: '_urlencodedContentType',\n value: 'application/x-www-form-urlencoded',\n enumerable: true\n }, {\n key: '_headerSeparator',\n value: ':',\n enumerable: true\n }, {\n key: '_bodySeparator',\n value: '\\n\\n',\n enumerable: true\n }, {\n key: '_boundarySeparator',\n value: '--',\n\n /**\n * @param {Request} request\n * @param {Response} response\n * @param {string} responseText\n */\n enumerable: true\n }]);\n\n function ApiResponse(request, response, responseText) {\n _classCallCheck(this, ApiResponse);\n\n /** @type {Request} */\n this._request = request;\n\n /** @type {Response} */\n this._response = response;\n\n this._text = responseText;\n this._json = null;\n this._multipart = [];\n }\n\n /**\n * @return {Response}\n */\n\n ApiResponse.prototype.response = function response() {\n return this._response;\n };\n\n /**\n * @return {Request}\n */\n\n ApiResponse.prototype.request = function request() {\n return this._request;\n };\n\n /**\n * @return {boolean}\n */\n\n ApiResponse.prototype.ok = function ok() {\n return this._response && this._response.ok;\n };\n\n /**\n * @return {string}\n */\n\n ApiResponse.prototype.text = function text() {\n if (!this._isJson() && !this._isMultipart()) throw new Error('Response is not text');\n return this._text;\n };\n\n /**\n * @return {object}\n */\n\n ApiResponse.prototype.json = function json() {\n if (!this._isJson()) throw new Error('Response is not JSON');\n if (!this._json) {\n this._json = this._text ? JSON.parse(this._text) : null;\n }\n return this._json;\n };\n\n /**\n * @param [skipOKCheck]\n * @return {string}\n */\n\n ApiResponse.prototype.error = function error(skipOKCheck) {\n\n if (this.ok() && !skipOKCheck) return null;\n\n var message = (this._response && this._response.status ? this._response.status + ' ' : '') + (this._response && this._response.statusText ? this._response.statusText : '');\n\n try {\n\n if (this.json().message) message = this.json().message;\n if (this.json().error_description) message = this.json().error_description;\n if (this.json().description) message = this.json().description;\n } catch (e) {}\n\n return message;\n };\n\n /**\n * @return {ApiResponse[]}\n */\n\n ApiResponse.prototype.multipart = function multipart() {\n\n if (!this._isMultipart()) throw new Error('Response is not multipart');\n\n if (!this._multipart.length) {\n\n // Step 1. Split multipart response\n\n var text = this.text();\n\n if (!text) throw new Error('No response body');\n\n var boundary = this._getContentType().match(/boundary=([^;]+)/i)[1];\n\n if (!boundary) throw new Error('Cannot find boundary');\n\n var parts = text.toString().split(ApiResponse._boundarySeparator + boundary);\n\n if (parts[0].trim() === '') parts.shift();\n if (parts[parts.length - 1].trim() == ApiResponse._boundarySeparator) parts.pop();\n\n if (parts.length < 1) throw new Error('No parts in body');\n\n // Step 2. Parse status info\n\n var statusInfo = ApiResponse.create(parts.shift(), this._response.status, this._response.statusText).json();\n\n // Step 3. Parse all other parts\n\n this._multipart = parts.map(function (part, i) {\n\n var status = statusInfo.response[i].status;\n\n return ApiResponse.create(part, status);\n });\n }\n\n return this._multipart;\n };\n\n ApiResponse.prototype._isContentType = function _isContentType(contentType) {\n return this._getContentType().indexOf(contentType) > -1;\n };\n\n ApiResponse.prototype._getContentType = function _getContentType() {\n return this._response.headers.get(ApiResponse._contentType) || '';\n };\n\n ApiResponse.prototype._isMultipart = function _isMultipart() {\n return this._isContentType(ApiResponse._multipartContentType);\n };\n\n ApiResponse.prototype._isUrlEncoded = function _isUrlEncoded() {\n return this._isContentType(ApiResponse._urlencodedContentType);\n };\n\n ApiResponse.prototype._isJson = function _isJson() {\n return this._isContentType(ApiResponse._jsonContentType);\n };\n\n /**\n * Method is used to create ApiResponse object from string parts of multipart/mixed response\n * @param {string} [text]\n * @param {number} [status]\n * @param {string} [statusText]\n * @return {ApiResponse}\n */\n\n ApiResponse.create = function create(text, status, statusText) {\n\n text = text || '';\n status = status || 200;\n statusText = statusText || 'OK';\n\n text = text.replace(/\\r/g, '');\n\n var headers = new _coreExternals.Headers(),\n headersAndBody = text.split(ApiResponse._bodySeparator),\n headersText = headersAndBody.length > 1 ? headersAndBody.shift() : '';\n\n text = headersAndBody.join(ApiResponse._bodySeparator);\n\n (headersText || '').split('\\n').forEach(function (header) {\n\n var split = header.trim().split(ApiResponse._headerSeparator),\n key = split.shift().trim(),\n value = split.join(ApiResponse._headerSeparator).trim();\n\n if (key) headers.append(key, value);\n });\n\n return new ApiResponse(null, utils.createResponse(text, {\n headers: headers,\n status: status,\n statusText: statusText\n }), text);\n };\n\n return ApiResponse;\n})();\n\nexports['default'] = ApiResponse;\nmodule.exports = exports['default'];\n\n/***/ },\n/* 17 */\n/***/ function(module, exports, __webpack_require__) {\n\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _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; }\n\nvar _Registry = __webpack_require__(18);\n\nvar _Registry2 = _interopRequireDefault(_Registry);\n\nvar _httpClient = __webpack_require__(14);\n\nvar _httpClient2 = _interopRequireDefault(_httpClient);\n\nvar Client = (function (_HttpClient) {\n _inherits(Client, _HttpClient);\n\n function Client() {\n _classCallCheck(this, Client);\n\n _HttpClient.call(this);\n this._registry = new _Registry2['default']();\n }\n\n Client.prototype.registry = function registry() {\n return this._registry;\n };\n\n Client.prototype._loadResponse = function _loadResponse(request) {\n var mock;\n return regeneratorRuntime.async(function _loadResponse$(context$2$0) {\n while (1) switch (context$2$0.prev = context$2$0.next) {\n case 0:\n mock = this._registry.find(request);\n context$2$0.next = 3;\n return regeneratorRuntime.awrap(mock.getResponse(request));\n\n case 3:\n return context$2$0.abrupt('return', context$2$0.sent);\n\n case 4:\n case 'end':\n return context$2$0.stop();\n }\n }, null, this);\n };\n\n return Client;\n})(_httpClient2['default']);\n\nexports['default'] = Client;\nmodule.exports = exports['default'];\n\n/***/ },\n/* 18 */\n/***/ function(module, exports, __webpack_require__) {\n\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nvar _Mock = __webpack_require__(19);\n\nvar _Mock2 = _interopRequireDefault(_Mock);\n\nvar Registry = (function () {\n function Registry() {\n _classCallCheck(this, Registry);\n\n this._mocks = [];\n }\n\n Registry.prototype.add = function add(mock) {\n this._mocks.push(mock);\n return this;\n };\n\n Registry.prototype.clear = function clear() {\n this._mocks = [];\n return this;\n };\n\n Registry.prototype.find = function find(request) {\n\n //console.log('Registry is looking for', request);\n\n var mock = this._mocks.shift();\n\n if (!mock) throw new Error('No mock in registry for request ' + request.method + ' ' + request.url);\n\n if (!mock.test(request)) throw new Error('Wrong request ' + request.method + ' ' + request.url + ' for expected mock ' + mock.method() + ' ' + mock.path());\n\n return mock;\n };\n\n Registry.prototype.apiCall = function apiCall(method, path, response, status, statusText) {\n\n this.add(new _Mock2['default'](method, path, response, status, statusText));\n\n return this;\n };\n\n Registry.prototype.authentication = function authentication() {\n\n this.apiCall('POST', '/restapi/oauth/token', {\n 'access_token': 'ACCESS_TOKEN',\n 'token_type': 'bearer',\n 'expires_in': 3600,\n 'refresh_token': 'REFRESH_TOKEN',\n 'refresh_token_expires_in': 60480,\n 'scope': 'SMS RCM Foo Boo',\n 'expireTime': new Date().getTime() + 3600000\n });\n\n return this;\n };\n\n Registry.prototype.logout = function logout() {\n\n this.apiCall('POST', '/restapi/oauth/revoke', {});\n\n return this;\n };\n\n Registry.prototype.presenceLoad = function presenceLoad(id) {\n\n this.apiCall('GET', '/restapi/v1.0/account/~/extension/' + id + '/presence', {\n \"uri\": \"https://platform.ringcentral.com/restapi/v1.0/account/123/extension/\" + id + \"/presence\",\n \"extension\": {\n \"uri\": \"https://platform.ringcentral.com/restapi/v1.0/account/123/extension/\" + id,\n \"id\": id,\n \"extensionNumber\": \"101\"\n },\n \"activeCalls\": [],\n \"presenceStatus\": \"Available\",\n \"telephonyStatus\": \"Ringing\",\n \"userStatus\": \"Available\",\n \"dndStatus\": \"TakeAllCalls\",\n \"extensionId\": id\n });\n\n return this;\n };\n\n Registry.prototype.subscribeGeneric = function subscribeGeneric(expiresIn) {\n\n expiresIn = expiresIn || 15 * 60 * 60;\n\n var date = new Date();\n\n this.apiCall('POST', '/restapi/v1.0/subscription', {\n 'eventFilters': ['/restapi/v1.0/account/~/extension/~/presence'],\n 'expirationTime': new Date(date.getTime() + expiresIn * 1000).toISOString(),\n 'expiresIn': expiresIn,\n 'deliveryMode': {\n 'transportType': 'PubNub',\n 'encryption': false,\n 'address': '123_foo',\n 'subscriberKey': 'sub-c-foo',\n 'secretKey': 'sec-c-bar'\n },\n 'id': 'foo-bar-baz',\n 'creationTime': date.toISOString(),\n 'status': 'Active',\n 'uri': 'https://platform.ringcentral.com/restapi/v1.0/subscription/foo-bar-baz'\n });\n\n return this;\n };\n\n Registry.prototype.subscribeOnPresence = function subscribeOnPresence(id, detailed) {\n\n id = id || '1';\n\n var date = new Date();\n\n this.apiCall('POST', '/restapi/v1.0/subscription', {\n 'eventFilters': ['/restapi/v1.0/account/~/extension/' + id + '/presence' + (detailed ? '?detailedTelephonyState=true' : '')],\n 'expirationTime': new Date(date.getTime() + 15 * 60 * 60 * 1000).toISOString(),\n 'deliveryMode': {\n 'transportType': 'PubNub',\n 'encryption': true,\n 'address': '123_foo',\n 'subscriberKey': 'sub-c-foo',\n 'secretKey': 'sec-c-bar',\n 'encryptionAlgorithm': 'AES',\n 'encryptionKey': 'VQwb6EVNcQPBhE/JgFZ2zw=='\n },\n 'creationTime': date.toISOString(),\n 'id': 'foo-bar-baz',\n 'status': 'Active',\n 'uri': 'https://platform.ringcentral.com/restapi/v1.0/subscription/foo-bar-baz'\n });\n\n return this;\n };\n\n Registry.prototype.tokenRefresh = function tokenRefresh(failure) {\n\n if (!failure) {\n\n this.apiCall('POST', '/restapi/oauth/token', {\n 'access_token': 'ACCESS_TOKEN_FROM_REFRESH',\n 'token_type': 'bearer',\n 'expires_in': 3600,\n 'refresh_token': 'REFRESH_TOKEN_FROM_REFRESH',\n 'refresh_token_expires_in': 60480,\n 'scope': 'SMS RCM Foo Boo'\n });\n } else {\n\n this.apiCall('POST', '/restapi/oauth/token', {\n 'message': 'Wrong token',\n 'error_description': 'Wrong token',\n 'description': 'Wrong token'\n }, 400);\n }\n\n return this;\n };\n\n return Registry;\n})();\n\nexports['default'] = Registry;\nmodule.exports = exports['default'];\n\n/***/ },\n/* 19 */\n/***/ function(module, exports, __webpack_require__) {\n\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nvar _httpApiResponse = __webpack_require__(16);\n\nvar _httpApiResponse2 = _interopRequireDefault(_httpApiResponse);\n\nvar _coreUtils = __webpack_require__(2);\n\nvar _httpUtils = __webpack_require__(15);\n\nvar Mock = (function () {\n function Mock(method, path, json, status, statusText, delay) {\n _classCallCheck(this, Mock);\n\n this._method = method.toUpperCase();\n this._path = path;\n this._json = json || {};\n this._delay = delay || 10;\n this._status = status || 200;\n this._statusText = statusText || 'OK';\n }\n\n Mock.prototype.path = function path() {\n return this._path;\n };\n\n Mock.prototype.method = function method() {\n return this._method;\n };\n\n Mock.prototype.test = function test(request) {\n\n return request.url.indexOf(this._path) > -1 && request.method.toUpperCase() == this._method;\n };\n\n Mock.prototype.getResponse = function getResponse(request) {\n return regeneratorRuntime.async(function getResponse$(context$2$0) {\n while (1) switch (context$2$0.prev = context$2$0.next) {\n case 0:\n context$2$0.next = 2;\n return regeneratorRuntime.awrap(_coreUtils.delay(this._delay));\n\n case 2:\n return context$2$0.abrupt('return', this.createResponse(this._json));\n\n case 3:\n case 'end':\n return context$2$0.stop();\n }\n }, null, this);\n };\n\n Mock.prototype.createResponse = function createResponse(json, init) {\n\n init = init || {};\n\n init.status = init.status || this._status;\n init.statusText = init.statusText || this._statusText;\n\n var str = JSON.stringify(json),\n res = _httpUtils.createResponse(str, init);\n\n res.headers.set(_httpApiResponse2['default']._contentType, _httpApiResponse2['default']._jsonContentType);\n\n return res;\n };\n\n return Mock;\n})();\n\nexports['default'] = Mock;\nmodule.exports = exports['default'];\n\n/***/ },\n/* 20 */\n/***/ function(module, exports, __webpack_require__) {\n\n'use strict';\n\nexports.__esModule = true;\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _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; }\n\nvar _coreObservable = __webpack_require__(12);\n\nvar _coreObservable2 = _interopRequireDefault(_coreObservable);\n\nvar _coreQueue = __webpack_require__(13);\n\nvar _coreQueue2 = _interopRequireDefault(_coreQueue);\n\nvar _Auth = __webpack_require__(21);\n\nvar _Auth2 = _interopRequireDefault(_Auth);\n\nvar _coreExternals = __webpack_require__(3);\n\nvar _coreUtils = __webpack_require__(2);\n\nvar Platform = (function (_Observable) {\n _inherits(Platform, _Observable);\n\n _createClass(Platform, null, [{\n key: '_urlPrefix',\n value: '/restapi',\n enumerable: true\n }, {\n key: '_apiVersion',\n value: 'v1.0',\n enumerable: true\n }, {\n key: '_accessTokenTtl',\n value: null,\n // Platform server by default sets it to 60 * 60 = 1 hour\n enumerable: true\n }, {\n key: '_refreshTokenTtl',\n value: 10 * 60 * 60,\n // 10 hours\n enumerable: true\n }, {\n key: '_refreshTokenTtlRemember',\n value: 7 * 24 * 60 * 60,\n // 1 week\n enumerable: true\n }, {\n key: '_tokenEndpoint',\n value: '/restapi/oauth/token',\n enumerable: true\n }, {\n key: '_revokeEndpoint',\n value: '/restapi/oauth/revoke',\n enumerable: true\n }, {\n key: '_authorizeEndpoint',\n value: '/restapi/oauth/authorize',\n enumerable: true\n }, {\n key: '_refreshDelayMs',\n value: 100,\n enumerable: true\n }, {\n key: '_cacheId',\n value: 'platform',\n enumerable: true\n }, {\n key: '_clearCacheOnRefreshError',\n value: true,\n enumerable: true\n }]);\n\n function Platform(client, cache, server, appKey, appSecret) {\n _classCallCheck(this, Platform);\n\n _Observable.call(this);\n\n this.events = {\n beforeLogin: 'beforeLogin',\n loginSuccess: 'loginSuccess',\n loginError: 'loginError',\n beforeRefresh: 'beforeRefresh',\n refreshSuccess: 'refreshSuccess',\n refreshError: 'refreshError',\n beforeLogout: 'beforeLogout',\n logoutSuccess: 'logoutSuccess',\n logoutError: 'logoutError'\n };\n this._server = server;\n this._appKey = appKey;\n this._appSecret = appSecret;\n\n /** @type {Cache} */\n this._cache = cache;\n\n /** @type {Client} */\n this._client = client;\n\n this._queue = new _coreQueue2['default'](this._cache, Platform._cacheId + '-refresh');\n\n this._auth = new _Auth2['default'](this._cache, Platform._cacheId);\n }\n\n /**\n * @return {Auth}\n */\n\n Platform.prototype.auth = function auth() {\n return this._auth;\n };\n\n /**\n * @return {Client}\n */\n\n Platform.prototype.client = function client() {\n return this._client;\n };\n\n /**\n * @param {string} path\n * @param {object} [options]\n * @param {boolean} [options.addServer]\n * @param {string} [options.addMethod]\n * @param {boolean} [options.addToken]\n * @return {string}\n */\n\n Platform.prototype.createUrl = function createUrl(path, options) {\n\n path = path || '';\n options = options || {};\n\n var builtUrl = '',\n hasHttp = path.indexOf('http://') != -1 || path.indexOf('https://') != -1;\n\n if (options.addServer && !hasHttp) builtUrl += this._server;\n\n if (path.indexOf(Platform._urlPrefix) == -1 && !hasHttp) builtUrl += Platform._urlPrefix + '/' + Platform._apiVersion;\n\n builtUrl += path;\n\n if (options.addMethod || options.addToken) builtUrl += path.indexOf('?') > -1 ? '&' : '?';\n\n if (options.addMethod) builtUrl += '_method=' + options.addMethod;\n if (options.addToken) builtUrl += (options.addMethod ? '&' : '') + 'access_token=' + this._auth.accessToken();\n\n return builtUrl;\n };\n\n /**\n * @param {string} options.redirectUri\n * @param {string} options.state\n * @param {string} options.brandId\n * @param {string} options.display\n * @param {string} options.prompt\n * @return {string}\n */\n\n Platform.prototype.authUrl = function authUrl(options) {\n\n options = options || {};\n\n return this.createUrl(Platform._authorizeEndpoint + '?' + _coreUtils.queryStringify({\n 'response_type': 'code',\n 'redirect_uri': options.redirectUri || '',\n 'client_id': this._appKey,\n 'state': options.state || '',\n 'brand_id': options.brandId || '',\n 'display': options.display || '',\n 'prompt': options.prompt || ''\n }), { addServer: true });\n };\n\n /**\n * @param {string} url\n * @return {Object}\n */\n\n Platform.prototype.parseAuthRedirectUrl = function parseAuthRedirectUrl(url) {\n\n var qs = _coreUtils.parseQueryString(url.split('?').reverse()[0]),\n error = qs.error_description || qs.error;\n\n if (error) {\n var e = new Error(error);\n e.error = qs.error;\n throw e;\n }\n\n return qs;\n };\n\n /**\n * @return {Promise}\n */\n\n Platform.prototype.loggedIn = function loggedIn() {\n return regeneratorRuntime.async(function loggedIn$(context$2$0) {\n while (1) switch (context$2$0.prev = context$2$0.next) {\n case 0:\n context$2$0.prev = 0;\n context$2$0.next = 3;\n return regeneratorRuntime.awrap(this._ensureAuthentication());\n\n case 3:\n return context$2$0.abrupt('return', true);\n\n case 6:\n context$2$0.prev = 6;\n context$2$0.t0 = context$2$0['catch'](0);\n return context$2$0.abrupt('return', false);\n\n case 9:\n case 'end':\n return context$2$0.stop();\n }\n }, null, this, [[0, 6]]);\n };\n\n /**\n * @param {string} options.username\n * @param {string} options.password\n * @param {string} options.extension\n * @param {string} options.code\n * @param {string} options.redirectUri\n * @param {string} options.endpointId\n * @returns {Promise}\n */\n\n Platform.prototype.login = function login(options) {\n var body, apiResponse, json;\n return regeneratorRuntime.async(function login$(context$2$0) {\n while (1) switch (context$2$0.prev = context$2$0.next) {\n case 0:\n context$2$0.prev = 0;\n\n options = options || {};\n\n options.remember = options.remember || false;\n\n this.emit(this.events.beforeLogin);\n\n body = {\n \"access_token_ttl\": Platform._accessTokenTtl,\n \"refresh_token_ttl\": options.remember ? Platform._refreshTokenTtlRemember : Platform._refreshTokenTtl\n };\n\n if (!options.code) {\n\n body.grant_type = 'password';\n body.username = options.username;\n body.password = options.password;\n body.extension = options.extension || '';\n } else if (options.code) {\n\n body.grant_type = 'authorization_code';\n body.code = options.code;\n body.redirect_uri = options.redirectUri;\n //body.client_id = this.getCredentials().key; // not needed\n }\n\n if (options.endpointId) body.endpoint_id = options.endpointId;\n\n context$2$0.next = 9;\n return regeneratorRuntime.awrap(this._tokenRequest(Platform._tokenEndpoint, body));\n\n case 9:\n apiResponse = context$2$0.sent;\n json = apiResponse.json();\n\n this._auth.setData(json).setRemember(options.remember);\n\n this.emit(this.events.loginSuccess, apiResponse);\n\n return context$2$0.abrupt('return', apiResponse);\n\n case 16:\n context$2$0.prev = 16;\n context$2$0.t0 = context$2$0['catch'](0);\n\n this._cache.clean();\n\n this.emit(this.events.loginError, context$2$0.t0);\n\n throw context$2$0.t0;\n\n case 21:\n case 'end':\n return context$2$0.stop();\n }\n }, null, this, [[0, 16]]);\n };\n\n /**\n * @returns {Promise}\n */\n\n Platform.prototype.refresh = function refresh() {\n var res, json;\n return regeneratorRuntime.async(function refresh$(context$2$0) {\n while (1) switch (context$2$0.prev = context$2$0.next) {\n case 0:\n context$2$0.prev = 0;\n\n this.emit(this.events.beforeRefresh);\n\n if (!this._queue.isPaused()) {\n context$2$0.next = 9;\n break;\n }\n\n context$2$0.next = 5;\n return regeneratorRuntime.awrap(this._queue.poll());\n\n case 5:\n if (this._isAccessTokenValid()) {\n context$2$0.next = 7;\n break;\n }\n\n throw new Error('Automatic authentification timeout');\n\n case 7:\n\n this.emit(this.events.refreshSuccess, null);\n\n return context$2$0.abrupt('return', null);\n\n case 9:\n\n this._queue.pause();\n\n // Make sure all existing AJAX calls had a chance to reach the server\n context$2$0.next = 12;\n return regeneratorRuntime.awrap(_coreUtils.delay(Platform._refreshDelayMs));\n\n case 12:\n if (this._auth.refreshToken()) {\n context$2$0.next = 14;\n break;\n }\n\n throw new Error('Refresh token is missing');\n\n case 14:\n if (this._auth.refreshTokenValid()) {\n context$2$0.next = 16;\n break;\n }\n\n throw new Error('Refresh token has expired');\n\n case 16:\n if (this._queue.isPaused()) {\n context$2$0.next = 18;\n break;\n }\n\n throw new Error('Queue was resumed before refresh call');\n\n case 18:\n context$2$0.next = 20;\n return regeneratorRuntime.awrap(this._tokenRequest(Platform._tokenEndpoint, {\n \"grant_type\": \"refresh_token\",\n \"refresh_token\": this._auth.refreshToken(),\n \"access_token_ttl\": Platform._accessTokenTtl,\n \"refresh_token_ttl\": this._auth.remember() ? Platform._refreshTokenTtlRemember : Platform._refreshTokenTtl\n }));\n\n case 20:\n res = context$2$0.sent;\n json = res.json();\n\n if (json.access_token) {\n context$2$0.next = 24;\n break;\n }\n\n throw this._client.makeError(new Error('Malformed OAuth response'), res);\n\n case 24:\n\n this._auth.setData(json);\n this._queue.resume();\n\n this.emit(this.events.refreshSuccess, res);\n\n return context$2$0.abrupt('return', res);\n\n case 30:\n context$2$0.prev = 30;\n context$2$0.t0 = context$2$0['catch'](0);\n\n context$2$0.t0 = this._client.makeError(context$2$0.t0);\n\n if (Platform._clearCacheOnRefreshError) {\n this._cache.clean();\n }\n\n this.emit(this.events.refreshError, context$2$0.t0);\n\n throw context$2$0.t0;\n\n case 36:\n case 'end':\n return context$2$0.stop();\n }\n }, null, this, [[0, 30]]);\n };\n\n /**\n * @returns {Promise}\n */\n\n Platform.prototype.logout = function logout() {\n var res;\n return regeneratorRuntime.async(function logout$(context$2$0) {\n while (1) switch (context$2$0.prev = context$2$0.next) {\n case 0:\n context$2$0.prev = 0;\n\n this.emit(this.events.beforeLogout);\n\n this._queue.pause();\n\n context$2$0.next = 5;\n return regeneratorRuntime.awrap(this._tokenRequest(Platform._revokeEndpoint, {\n token: this._auth.accessToken()\n }));\n\n case 5:\n res = context$2$0.sent;\n\n this._queue.resume();\n this._cache.clean();\n\n this.emit(this.events.logoutSuccess, res);\n\n return context$2$0.abrupt('return', res);\n\n case 12:\n context$2$0.prev = 12;\n context$2$0.t0 = context$2$0['catch'](0);\n\n this._queue.resume();\n\n this.emit(this.events.logoutError, context$2$0.t0);\n\n throw context$2$0.t0;\n\n case 17:\n case 'end':\n return context$2$0.stop();\n }\n }, null, this, [[0, 12]]);\n };\n\n /**\n * @param {Request} request\n * @param {object} [options]\n * @param {boolean} [options.skipAuthCheck]\n * @return {Promise}\n */\n\n Platform.prototype.inflateRequest = function inflateRequest(request, options) {\n return regeneratorRuntime.async(function inflateRequest$(context$2$0) {\n while (1) switch (context$2$0.prev = context$2$0.next) {\n case 0:\n\n options = options || {};\n\n if (!options.skipAuthCheck) {\n context$2$0.next = 3;\n break;\n }\n\n return context$2$0.abrupt('return', request);\n\n case 3:\n context$2$0.next = 5;\n return regeneratorRuntime.awrap(this._ensureAuthentication());\n\n case 5:\n\n request.headers.set('Authorization', this._authHeader());\n //request.url = this.createUrl(request.url, {addServer: true}); //FIXME Spec prevents this...\n\n //TODO Add User-Agent here\n\n return context$2$0.abrupt('return', request);\n\n case 7:\n case 'end':\n return context$2$0.stop();\n }\n }, null, this);\n };\n\n /**\n * @param {Request} request\n * @param {object} [options]\n * @param {boolean} [options.skipAuthCheck]\n * @return {Promise}\n */\n\n Platform.prototype.sendRequest = function sendRequest(request, options) {\n return regeneratorRuntime.async(function sendRequest$(context$2$0) {\n while (1) switch (context$2$0.prev = context$2$0.next) {\n case 0:\n context$2$0.prev = 0;\n context$2$0.next = 3;\n return regeneratorRuntime.awrap(this.inflateRequest(request, options));\n\n case 3:\n request = context$2$0.sent;\n context$2$0.next = 6;\n return regeneratorRuntime.awrap(this._client.sendRequest(request));\n\n case 6:\n return context$2$0.abrupt('return', context$2$0.sent);\n\n case 9:\n context$2$0.prev = 9;\n context$2$0.t0 = context$2$0['catch'](0);\n\n if (!(!context$2$0.t0.apiResponse || !context$2$0.t0.apiResponse.response() || context$2$0.t0.apiResponse.response().status != 401)) {\n context$2$0.next = 13;\n break;\n }\n\n throw context$2$0.t0;\n\n case 13:\n\n this._auth.cancelAccessToken();\n\n context$2$0.next = 16;\n return regeneratorRuntime.awrap(this.sendRequest(request, options));\n\n case 16:\n return context$2$0.abrupt('return', context$2$0.sent);\n\n case 17:\n case 'end':\n return context$2$0.stop();\n }\n }, null, this, [[0, 9]]);\n };\n\n /**\n * General purpose function to send anything to server\n * @param {string} options.url\n * @param {object} [options.body]\n * @param {string} [options.method]\n * @param {object} [options.query]\n * @param {object} [options.headers]\n * @param {boolean} [options.skipAuthCheck]\n * @return {Promise}\n */\n\n Platform.prototype.send = function send() {\n var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];\n return regeneratorRuntime.async(function send$(context$2$0) {\n while (1) switch (context$2$0.prev = context$2$0.next) {\n case 0:\n\n //FIXME https://github.com/bitinn/node-fetch/issues/43\n options.url = this.createUrl(options.url, { addServer: true });\n\n context$2$0.next = 3;\n return regeneratorRuntime.awrap(this.sendRequest(this._client.createRequest(options), options));\n\n case 3:\n return context$2$0.abrupt('return', context$2$0.sent);\n\n case 4:\n case 'end':\n return context$2$0.stop();\n }\n }, null, this);\n };\n\n /**\n * @param {string} url\n * @param {object} [query]\n * @param {object} [options]\n * @param {object} [options.headers]\n * @param {boolean} [options.skipAuthCheck]\n * @return {Promise}\n */\n\n Platform.prototype.get = function get(url, query, options) {\n return regeneratorRuntime.async(function get$(context$2$0) {\n while (1) switch (context$2$0.prev = context$2$0.next) {\n case 0:\n options = options || {};\n options.method = 'GET';\n options.url = url;\n options.query = query;\n context$2$0.next = 6;\n return regeneratorRuntime.awrap(this.send(options));\n\n case 6:\n return context$2$0.abrupt('return', context$2$0.sent);\n\n case 7:\n case 'end':\n return context$2$0.stop();\n }\n }, null, this);\n };\n\n /**\n * @param {string} url\n * @param {object} body\n * @param {object} [query]\n * @param {object} [options]\n * @param {object} [options.headers]\n * @param {boolean} [options.skipAuthCheck]\n * @return {Promise}\n */\n\n Platform.prototype.post = function post(url, body, query, options) {\n return regeneratorRuntime.async(function post$(context$2$0) {\n while (1) switch (context$2$0.prev = context$2$0.next) {\n case 0:\n options = options || {};\n options.method = 'POST';\n options.url = url;\n options.query = query;\n options.body = body;\n context$2$0.next = 7;\n return regeneratorRuntime.awrap(this.send(options));\n\n case 7:\n return context$2$0.abrupt('return', context$2$0.sent);\n\n case 8:\n case 'end':\n return context$2$0.stop();\n }\n }, null, this);\n };\n\n /**\n * @param {string} url\n * @param {object} [body]\n * @param {object} [query]\n * @param {object} [options]\n * @param {object} [options.headers]\n * @param {boolean} [options.skipAuthCheck]\n * @return {Promise}\n */\n\n Platform.prototype.put = function put(url, body, query, options) {\n return regeneratorRuntime.async(function put$(context$2$0) {\n while (1) switch (context$2$0.prev = context$2$0.next) {\n case 0:\n options = options || {};\n options.method = 'PUT';\n options.url = url;\n options.query = query;\n options.body = body;\n context$2$0.next = 7;\n return regeneratorRuntime.awrap(this.send(options));\n\n case 7:\n return context$2$0.abrupt('return', context$2$0.sent);\n\n case 8:\n case 'end':\n return context$2$0.stop();\n }\n }, null, this);\n };\n\n /**\n * @param {string} url\n * @param {string} [query]\n * @param {object} [options]\n * @param {object} [options.headers]\n * @param {boolean} [options.skipAuthCheck]\n * @return {Promise}\n */\n\n Platform.prototype['delete'] = function _delete(url, query, options) {\n return regeneratorRuntime.async(function _delete$(context$2$0) {\n while (1) switch (context$2$0.prev = context$2$0.next) {\n case 0:\n options = options || {};\n options.method = 'DELETE';\n options.url = url;\n options.query = query;\n context$2$0.next = 6;\n return regeneratorRuntime.awrap(this.send(options));\n\n case 6:\n return context$2$0.abrupt('return', context$2$0.sent);\n\n case 7:\n case 'end':\n return context$2$0.stop();\n }\n }, null, this);\n };\n\n Platform.prototype._tokenRequest = function _tokenRequest(path, body) {\n return regeneratorRuntime.async(function _tokenRequest$(context$2$0) {\n while (1) switch (context$2$0.prev = context$2$0.next) {\n case 0:\n context$2$0.next = 2;\n return regeneratorRuntime.awrap(this.send({\n url: path,\n skipAuthCheck: true,\n body: body,\n method: 'POST',\n headers: {\n 'Authorization': 'Basic ' + this._apiKey(),\n 'Content-Type': 'application/x-www-form-urlencoded'\n }\n }));\n\n case 2:\n return context$2$0.abrupt('return', context$2$0.sent);\n\n case 3:\n case 'end':\n return context$2$0.stop();\n }\n }, null, this);\n };\n\n Platform.prototype._ensureAuthentication = function _ensureAuthentication() {\n return regeneratorRuntime.async(function _ensureAuthentication$(context$2$0) {\n while (1) switch (context$2$0.prev = context$2$0.next) {\n case 0:\n if (!this._isAccessTokenValid()) {\n context$2$0.next = 2;\n break;\n }\n\n return context$2$0.abrupt('return', null);\n\n case 2:\n context$2$0.next = 4;\n return regeneratorRuntime.awrap(this.refresh());\n\n case 4:\n return context$2$0.abrupt('return', context$2$0.sent);\n\n case 5:\n case 'end':\n return context$2$0.stop();\n }\n }, null, this);\n };\n\n Platform.prototype._isAccessTokenValid = function _isAccessTokenValid() {\n\n return this._auth.accessTokenValid() && !this._queue.isPaused();\n };\n\n Platform.prototype._apiKey = function _apiKey() {\n var apiKey = this._appKey + ':' + this._appSecret;\n return typeof btoa == 'function' ? btoa(apiKey) : new Buffer(apiKey).toString('base64');\n };\n\n Platform.prototype._authHeader = function _authHeader() {\n var token = this._auth.accessToken();\n return this._auth.tokenType() + (token ? ' ' + token : '');\n };\n\n return Platform;\n})(_coreObservable2['default']);\n\nexports['default'] = Platform;\nmodule.exports = exports['default'];\n\n// Perform sanity checks\n\n/** @type {ApiResponse} */\n\n// Guard is for errors that come from polling\n\n/***/ },\n/* 21 */\n/***/ function(module, exports) {\n\n'use strict';\n\nexports.__esModule = true;\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nvar Auth = (function () {\n _createClass(Auth, null, [{\n key: 'refreshHandicapMs',\n value: 60 * 1000,\n // 1 minute\n enumerable: true\n }, {\n key: 'forcedTokenType',\n value: 'forced',\n enumerable: true\n }]);\n\n function Auth(cache, cacheId) {\n _classCallCheck(this, Auth);\n\n /** @type {Cache} */\n this._cache = cache;\n this._cacheId = cacheId;\n }\n\n //export interface IAuthData {\n // remember?:boolean;\n // token_type?:string;\n // access_token?:string;\n // expires_in?:number; // actually it's string\n // expire_time?:number;\n // refresh_token?:string;\n // refresh_token_expires_in?:number; // actually it's string\n // refresh_token_expire_time?:number;\n // scope?:string;\n //}\n\n Auth.prototype.accessToken = function accessToken() {\n return this.data().access_token;\n };\n\n Auth.prototype.refreshToken = function refreshToken() {\n return this.data().refresh_token;\n };\n\n Auth.prototype.tokenType = function tokenType() {\n return this.data().token_type;\n };\n\n /**\n * @return {{token_type: string, access_token: string, expires_in: number, refresh_token: string, refresh_token_expires_in: number}}\n */\n\n Auth.prototype.data = function data() {\n\n return this._cache.getItem(this._cacheId) || {\n token_type: '',\n access_token: '',\n expires_in: 0,\n refresh_token: '',\n refresh_token_expires_in: 0\n };\n };\n\n /**\n * @param {object} newData\n * @return {Auth}\n */\n\n Auth.prototype.setData = function setData(newData) {\n\n newData = newData || {};\n\n var data = this.data();\n\n Object.keys(newData).forEach(function (key) {\n data[key] = newData[key];\n });\n\n data.expire_time = Date.now() + data.expires_in * 1000;\n data.refresh_token_expire_time = Date.now() + data.refresh_token_expires_in * 1000;\n\n this._cache.setItem(this._cacheId, data);\n\n return this;\n };\n\n /**\n * Check if there is a valid (not expired) access token\n * @return {boolean}\n */\n\n Auth.prototype.accessTokenValid = function accessTokenValid() {\n\n var authData = this.data();\n return authData.token_type === Auth.forcedTokenType || authData.expire_time - Auth.refreshHandicapMs > Date.now();\n };\n\n /**\n * Check if there is a valid (not expired) access token\n * @return {boolean}\n */\n\n Auth.prototype.refreshTokenValid = function refreshTokenValid() {\n\n return this.data().refresh_token_expire_time > Date.now();\n };\n\n /**\n * @return {Auth}\n */\n\n Auth.prototype.cancelAccessToken = function cancelAccessToken() {\n\n return this.setData({\n access_token: '',\n expires_in: 0\n });\n };\n\n /**\n * This method sets a special authentication mode used in Service Web\n * @return {Auth}\n */\n\n Auth.prototype.forceAuthentication = function forceAuthentication() {\n\n this.setData({\n token_type: Auth.forcedTokenType,\n access_token: '',\n expires_in: 0,\n refresh_token: '',\n refresh_token_expires_in: 0\n });\n\n return this;\n };\n\n /**\n * @param remember\n * @return {Auth}\n */\n\n Auth.prototype.setRemember = function setRemember(remember) {\n\n return this.setData({ remember: remember });\n };\n\n /**\n * @return {boolean}\n */\n\n Auth.prototype.remember = function remember() {\n\n return !!this.data().remember;\n };\n\n return Auth;\n})();\n\nexports['default'] = Auth;\nmodule.exports = exports['default'];\n\n/***/ },\n/* 22 */\n/***/ function(module, exports, __webpack_require__) {\n\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nvar _PubnubMockJs = __webpack_require__(23);\n\nvar _PubnubMockJs2 = _interopRequireDefault(_PubnubMockJs);\n\nvar _coreExternals = __webpack_require__(3);\n\nvar PubnubMockFactory = (function () {\n function PubnubMockFactory() {\n _classCallCheck(this, PubnubMockFactory);\n\n this.crypto_obj = _coreExternals.PUBNUB.crypto_obj;\n }\n\n PubnubMockFactory.prototype.init = function init(options) {\n return new _PubnubMockJs2['default'](options);\n };\n\n return PubnubMockFactory;\n})();\n\nexports['default'] = PubnubMockFactory;\nmodule.exports = exports['default'];\n\n/***/ },\n/* 23 */\n/***/ function(module, exports, __webpack_require__) {\n\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _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; }\n\nvar _coreObservable = __webpack_require__(12);\n\nvar _coreObservable2 = _interopRequireDefault(_coreObservable);\n\nvar _coreExternals = __webpack_require__(3);\n\nvar PubnubMock = (function (_Observable) {\n _inherits(PubnubMock, _Observable);\n\n function PubnubMock(options) {\n _classCallCheck(this, PubnubMock);\n\n _Observable.call(this);\n this.options = options;\n this.crypto_obj = _coreExternals.PUBNUB.crypto_obj;\n }\n\n PubnubMock.prototype.ready = function ready() {};\n\n PubnubMock.prototype.subscribe = function subscribe(options) {\n this.on('message-' + options.channel, options.message);\n };\n\n PubnubMock.prototype.unsubscribe = function unsubscribe(options) {\n this.off('message-' + options.channel);\n };\n\n PubnubMock.prototype.receiveMessage = function receiveMessage(msg, channel) {\n this.emit('message-' + channel, msg, 'env', channel);\n };\n\n return PubnubMock;\n})(_coreObservable2['default']);\n\nexports['default'] = PubnubMock;\nmodule.exports = exports['default'];\n\n/***/ },\n/* 24 */\n/***/ function(module, exports, __webpack_require__) {\n\n'use strict';\n\nexports.__esModule = true;\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _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; }\n\nvar _coreObservable = __webpack_require__(12);\n\nvar _coreObservable2 = _interopRequireDefault(_coreObservable);\n\nvar _httpClient = __webpack_require__(14);\n\nvar _httpClient2 = _interopRequireDefault(_httpClient);\n\nvar _coreUtils = __webpack_require__(2);\n\nvar Subscription = (function (_Observable) {\n _inherits(Subscription, _Observable);\n\n _createClass(Subscription, null, [{\n key: '_renewHandicapMs',\n value: 2 * 60 * 1000,\n enumerable: true\n }, {\n key: '_pollInterval',\n value: 10 * 1000,\n enumerable: true\n }]);\n\n function Subscription(pubnubFactory, platform) {\n _classCallCheck(this, Subscription);\n\n _Observable.call(this);\n\n this.events = {\n notification: 'notification',\n removeSuccess: 'removeSuccess',\n removeError: 'removeError',\n renewSuccess: 'renewSuccess',\n renewError: 'renewError',\n subscribeSuccess: 'subscribeSuccess',\n subscribeError: 'subscribeError'\n };\n this._pubnubFactory = pubnubFactory;\n this._platform = platform;\n this._pubnub = null;\n this._timeout = null;\n this._subscription = {};\n }\n\n //export interface ISubscription {\n // id?:string;\n // uri?: string;\n // eventFilters?:string[];\n // expirationTime?:string; // 2014-03-12T19:54:35.613Z\n // expiresIn?:number;\n // deliveryMode?: {\n // transportType?:string;\n // encryption?:boolean;\n // address?:string;\n // subscriberKey?:string;\n // encryptionKey?:string;\n // secretKey?:string;\n // };\n // creationTime?:string; // 2014-03-12T19:54:35.613Z\n // status?:string; // Active\n //}\n\n Subscription.prototype.subscribed = function subscribed() {\n\n return !!(this._subscription.id && this._subscription.deliveryMode && this._subscription.deliveryMode.subscriberKey && this._subscription.deliveryMode.address);\n };\n\n /**\n * @return {boolean}\n */\n\n Subscription.prototype.alive = function alive() {\n\n return this.subscribed() && Date.now() < this.expirationTime();\n };\n\n Subscription.prototype.expirationTime = function expirationTime() {\n return new Date(this._subscription.expirationTime || 0).getTime() - Subscription._renewHandicapMs;\n };\n\n Subscription.prototype.setSubscription = function setSubscription(subscription) {\n\n subscription = subscription || {};\n\n this._clearTimeout();\n\n this._subscription = subscription;\n\n if (!this._pubnub) this._subscribeAtPubnub();\n\n this._setTimeout();\n\n return this;\n };\n\n Subscription.prototype.subscription = function subscription() {\n return this._subscription;\n };\n\n /**\n * Creates or updates subscription if there is an active one\n * @returns {Promise}\n */\n\n Subscription.prototype.register = function register() {\n return regeneratorRuntime.async(function register$(context$2$0) {\n while (1) switch (context$2$0.prev = context$2$0.next) {\n case 0:\n if (!this.alive()) {\n context$2$0.next = 6;\n break;\n }\n\n context$2$0.next = 3;\n return regeneratorRuntime.awrap(this.renew());\n\n case 3:\n return context$2$0.abrupt('return', context$2$0.sent);\n\n case 6:\n context$2$0.next = 8;\n return regeneratorRuntime.awrap(this.subscribe());\n\n case 8:\n return context$2$0.abrupt('return', context$2$0.sent);\n\n case 9:\n case 'end':\n return context$2$0.stop();\n }\n }, null, this);\n };\n\n Subscription.prototype.eventFilters = function eventFilters() {\n return this._subscription.eventFilters || [];\n };\n\n /**\n * @param {string[]} events\n * @return {Subscription}\n */\n\n Subscription.prototype.addEventFilters = function addEventFilters(events) {\n this.setEventFilters(this.eventFilters().concat(events));\n return this;\n };\n\n /**\n * @param {string[]} events\n * @return {Subscription}\n */\n\n Subscription.prototype.setEventFilters = function setEventFilters(events) {\n this._subscription.eventFilters = events;\n return this;\n };\n\n /**\n * @returns {Promise}\n */\n\n Subscription.prototype.subscribe = function subscribe() {\n var response, json;\n return regeneratorRuntime.async(function subscribe$(context$2$0) {\n while (1) switch (context$2$0.prev = context$2$0.next) {\n case 0:\n context$2$0.prev = 0;\n\n this._clearTimeout();\n\n if (this.eventFilters().length) {\n context$2$0.next = 4;\n break;\n }\n\n throw new Error('Events are undefined');\n\n case 4:\n context$2$0.next = 6;\n return regeneratorRuntime.awrap(this._platform.post('/restapi/v1.0/subscription', {\n eventFilters: this._getFullEventFilters(),\n deliveryMode: {\n transportType: 'PubNub'\n }\n }));\n\n case 6:\n response = context$2$0.sent;\n json = response.json();\n\n this.setSubscription(json).emit(this.events.subscribeSuccess, response);\n\n return context$2$0.abrupt('return', response);\n\n case 12:\n context$2$0.prev = 12;\n context$2$0.t0 = context$2$0['catch'](0);\n\n context$2$0.t0 = this._platform.client().makeError(context$2$0.t0);\n\n this.reset().emit(this.events.subscribeError, context$2$0.t0);\n\n throw context$2$0.t0;\n\n case 17:\n case 'end':\n return context$2$0.stop();\n }\n }, null, this, [[0, 12]]);\n };\n\n /**\n * @returns {Promise}\n */\n\n Subscription.prototype.renew = function renew() {\n var response, json;\n return regeneratorRuntime.async(function renew$(context$2$0) {\n while (1) switch (context$2$0.prev = context$2$0.next) {\n case 0:\n context$2$0.prev = 0;\n\n this._clearTimeout();\n\n if (this.alive()) {\n context$2$0.next = 4;\n break;\n }\n\n throw new Error('Subscription is not alive');\n\n case 4:\n if (this.eventFilters().length) {\n context$2$0.next = 6;\n break;\n }\n\n throw new Error('Events are undefined');\n\n case 6:\n context$2$0.next = 8;\n return regeneratorRuntime.awrap(this._platform.put('/restapi/v1.0/subscription/' + this._subscription.id, {\n eventFilters: this._getFullEventFilters()\n }));\n\n case 8:\n response = context$2$0.sent;\n json = response.json();\n\n this.setSubscription(json).emit(this.events.renewSuccess, response);\n\n return context$2$0.abrupt('return', response);\n\n case 14:\n context$2$0.prev = 14;\n context$2$0.t0 = context$2$0['catch'](0);\n\n context$2$0.t0 = this._platform.client().makeError(context$2$0.t0);\n\n this.reset().emit(this.events.renewError, context$2$0.t0);\n\n throw context$2$0.t0;\n\n case 19:\n case 'end':\n return context$2$0.stop();\n }\n }, null, this, [[0, 14]]);\n };\n\n /**\n * @returns {Promise}\n */\n\n Subscription.prototype.remove = function remove() {\n var response;\n return regeneratorRuntime.async(function remove$(context$2$0) {\n while (1) switch (context$2$0.prev = context$2$0.next) {\n case 0:\n context$2$0.prev = 0;\n\n if (this.subscribed()) {\n context$2$0.next = 3;\n break;\n }\n\n throw new Error('No subscription');\n\n case 3:\n context$2$0.next = 5;\n return regeneratorRuntime.awrap(this._platform['delete']('/restapi/v1.0/subscription/' + this._subscription.id));\n\n case 5:\n response = context$2$0.sent;\n\n this.reset().emit(this.events.removeSuccess, response);\n\n return context$2$0.abrupt('return', response);\n\n case 10:\n context$2$0.prev = 10;\n context$2$0.t0 = context$2$0['catch'](0);\n\n context$2$0.t0 = this._platform.client().makeError(context$2$0.t0);\n\n this.emit(this.events.removeError, context$2$0.t0);\n\n throw context$2$0.t0;\n\n case 15:\n case 'end':\n return context$2$0.stop();\n }\n }, null, this, [[0, 10]]);\n };\n\n /**\n * @returns {Promise}\n */\n\n Subscription.prototype.resubscribe = function resubscribe() {\n\n return this.reset().setEventFilters(this.eventFilters()).subscribe();\n };\n\n /**\n * Remove subscription and disconnect from PUBNUB\n * This method resets subscription at client side but backend is not notified\n */\n\n Subscription.prototype.reset = function reset() {\n this._clearTimeout();\n if (this.subscribed() && this._pubnub) this._pubnub.unsubscribe({ channel: this._subscription.deliveryMode.address });\n this._subscription = {};\n return this;\n };\n\n Subscription.prototype._getFullEventFilters = function _getFullEventFilters() {\n var _this = this;\n\n return this.eventFilters().map(function (event) {\n return _this._platform.createUrl(event);\n });\n };\n\n Subscription.prototype._setTimeout = function _setTimeout() {\n var _this2 = this;\n\n this._clearTimeout();\n\n if (!this.alive()) throw new Error('Subscription is not alive');\n\n _coreUtils.poll(function (next) {\n\n if (_this2.alive()) return next();\n\n _this2.renew();\n }, Subscription._pollInterval, this._timeout);\n\n return this;\n };\n\n Subscription.prototype._clearTimeout = function _clearTimeout() {\n\n _coreUtils.stopPolling(this._timeout);\n\n return this;\n };\n\n Subscription.prototype._decrypt = function _decrypt(message) {\n\n if (!this.subscribed()) throw new Error('No subscription');\n\n if (this._subscription.deliveryMode.encryptionKey) {\n\n var PUBNUB = this._pubnubFactory;\n\n message = PUBNUB.crypto_obj.decrypt(message, this._subscription.deliveryMode.encryptionKey, {\n encryptKey: false,\n keyEncoding: 'base64',\n keyLength: 128,\n mode: 'ecb'\n });\n }\n\n return message;\n };\n\n Subscription.prototype._notify = function _notify(message) {\n\n this.emit(this.events.notification, this._decrypt(message));\n\n return this;\n };\n\n Subscription.prototype._subscribeAtPubnub = function _subscribeAtPubnub() {\n\n if (!this.alive()) throw new Error('Subscription is not alive');\n\n var PUBNUB = this._pubnubFactory;\n\n this._pubnub = PUBNUB.init({\n ssl: true,\n subscribe_key: this._subscription.deliveryMode.subscriberKey\n });\n\n this._pubnub.ready();\n\n this._pubnub.subscribe({\n channel: this._subscription.deliveryMode.address,\n message: this._notify.bind(this),\n connect: function connect() {}\n });\n\n return this;\n };\n\n return Subscription;\n})(_coreObservable2['default']);\n\nexports['default'] = Subscription;\nmodule.exports = exports['default'];\n\n/***/ },\n/* 25 */\n/***/ function(module, exports, __webpack_require__) {\n\n'use strict';\n\nexports.__esModule = true;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _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; }\n\nvar _Subscription2 = __webpack_require__(24);\n\nvar _Subscription3 = _interopRequireDefault(_Subscription2);\n\nvar _coreQueue = __webpack_require__(13);\n\nvar _coreQueue2 = _interopRequireDefault(_coreQueue);\n\nvar CachedSubscription = (function (_Subscription) {\n _inherits(CachedSubscription, _Subscription);\n\n function CachedSubscription(pubnubFactory, platform, cache, cacheKey) {\n var _this = this;\n\n _classCallCheck(this, CachedSubscription);\n\n _Subscription.call(this, pubnubFactory, platform);\n\n this._cache = cache;\n this._cacheKey = cacheKey;\n this._renewQueue = new _coreQueue2['default'](this._cache, cacheKey + '-renew');\n this._resubscribeQueue = new _coreQueue2['default'](this._cache, cacheKey + '-resubscribe');\n\n this.events = _extends({}, this.events, {\n queuedRenewSuccess: 'queuedRenewSuccess',\n queuedRenewError: 'queuedRenewError',\n queuedResubscribeSuccess: 'queuedResubscribeSuccess',\n queuedResubscribeError: 'queuedResubscribeError'\n });\n\n this.on(this.events.renewError, function () {\n _this.resubscribe();\n });\n\n this.on([this.events.subscribeSuccess, this.events.renewSuccess], function () {\n _this._cache.setItem(_this._cacheKey, _this.subscription());\n });\n\n this.on(this.events.removeSuccess, function () {\n _this._cache.removeItem(_this._cacheKey);\n });\n }\n\n /**\n * TODO Combine with Platform.refresh and move elsewhere\n * @param actionCb\n * @param queue\n * @param successEvent\n * @param errorEvent\n * @param errorMessage\n * @return {*}\n * @private\n */\n\n CachedSubscription.prototype._queue = function _queue(actionCb, queue, successEvent, errorEvent, errorMessage) {\n var res;\n return regeneratorRuntime.async(function _queue$(context$2$0) {\n while (1) switch (context$2$0.prev = context$2$0.next) {\n case 0:\n context$2$0.prev = 0;\n\n if (!queue.isPaused()) {\n context$2$0.next = 8;\n break;\n }\n\n context$2$0.next = 4;\n return regeneratorRuntime.awrap(queue.poll());\n\n case 4:\n if (this.alive()) {\n context$2$0.next = 6;\n break;\n }\n\n throw new Error(errorMessage);\n\n case 6:\n\n this.emit(successEvent, null);\n\n return context$2$0.abrupt('return', null);\n\n case 8:\n\n queue.pause();\n\n context$2$0.next = 11;\n return regeneratorRuntime.awrap(actionCb.call(this));\n\n case 11:\n res = context$2$0.sent;\n\n queue.resume();\n\n this.emit(successEvent, res);\n\n return context$2$0.abrupt('return', res);\n\n case 17:\n context$2$0.prev = 17;\n context$2$0.t0 = context$2$0['catch'](0);\n\n this.emit(errorEvent, context$2$0.t0);\n\n throw context$2$0.t0;\n\n case 21:\n case 'end':\n return context$2$0.stop();\n }\n }, null, this, [[0, 17]]);\n };\n\n /**\n * @returns {Promise}\n */\n\n CachedSubscription.prototype.renew = function renew() {\n\n return this._queue(_Subscription.prototype.renew, this._renewQueue, this.events.queuedRenewSuccess, this.events.queuedRenewError, 'Subscription is not alive after renew timeout');\n };\n\n /**\n * @returns {Promise}\n */\n\n CachedSubscription.prototype.resubscribe = function resubscribe() {\n\n return this._queue(_Subscription.prototype.resubscribe, this._resubscribeQueue, this.events.queuedResubscribeSuccess, this.events.queuedResubscribeError, 'Subscription is not alive after resubscribe timeout');\n };\n\n /**\n * @param {string[]} events\n * @return {CachedSubscription}\n */\n\n CachedSubscription.prototype.restore = function restore(events) {\n\n var cachedSubscriptionData = this._cache.getItem(this._cacheKey);\n\n if (cachedSubscriptionData) {\n try {\n this.setSubscription(cachedSubscriptionData);\n } catch (e) {}\n } else {\n this.setEventFilters(events);\n }\n\n return this;\n };\n\n return CachedSubscription;\n})(_Subscription3['default']);\n\nexports['default'] = CachedSubscription;\nmodule.exports = exports['default'];\n\n/***/ },\n/* 26 */\n/***/ function(module, exports) {\n\n/* WEBPACK VAR INJECTION */(function(global) {/**\n * Copyright (c) 2014, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * https://raw.github.com/facebook/regenerator/master/LICENSE file. An\n * additional grant of patent rights can be found in the PATENTS file in\n * the same directory.\n */\n\n!(function(global) {\n \"use strict\";\n\n var hasOwn = Object.prototype.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var iteratorSymbol =\n typeof Symbol === \"function\" && Symbol.iterator || \"@@iterator\";\n\n var inModule = typeof module === \"object\";\n var runtime = global.regeneratorRuntime;\n if (runtime) {\n if (inModule) {\n // If regeneratorRuntime is defined globally and we're in a module,\n // make the exports object identical to regeneratorRuntime.\n module.exports = runtime;\n }\n // Don't bother evaluating the rest of this file if the runtime was\n // already defined globally.\n return;\n }\n\n // Define the runtime globally (as expected by generated code) as either\n // module.exports (if we're in a module) or a new, empty object.\n runtime = global.regeneratorRuntime = inModule ? module.exports : {};\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided, then outerFn.prototype instanceof Generator.\n var generator = Object.create((outerFn || Generator).prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n runtime.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype;\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunction.displayName = \"GeneratorFunction\";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n runtime.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n runtime.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `value instanceof AwaitArgument` to determine if the yielded value is\n // meant to be awaited. Some may consider the name of this method too\n // cutesy, but they are curmudgeons.\n runtime.awrap = function(arg) {\n return new AwaitArgument(arg);\n };\n\n function AwaitArgument(arg) {\n this.arg = arg;\n }\n\n function AsyncIterator(generator) {\n // This invoke function is written in a style that assumes some\n // calling function (or Promise) will handle exceptions.\n function invoke(method, arg) {\n var result = generator[method](arg);\n var value = result.value;\n return value instanceof AwaitArgument\n ? Promise.resolve(value.arg).then(invokeNext, invokeThrow)\n : Promise.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration. If the Promise is rejected, however, the\n // result for this iteration will be rejected with the same\n // reason. Note that rejections of yielded Promises are not\n // thrown back into the generator function, as is the case\n // when an awaited Promise is rejected. This difference in\n // behavior between yield and await is important, because it\n // allows the consumer to decide what to do with the yielded\n // rejection (swallow it and continue, manually .throw it back\n // into the generator, abandon iteration, whatever). With\n // await, by contrast, there is no opportunity to examine the\n // rejection reason outside the generator function, so the\n // only option is to throw it from the await expression, and\n // let the generator function handle the exception.\n result.value = unwrapped;\n return result;\n });\n }\n\n if (typeof process === \"object\" && process.domain) {\n invoke = process.domain.bind(invoke);\n }\n\n var invokeNext = invoke.bind(generator, \"next\");\n var invokeThrow = invoke.bind(generator, \"throw\");\n var invokeReturn = invoke.bind(generator, \"return\");\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return invoke(method, arg);\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : new Promise(function (resolve) {\n resolve(callInvokeWithMethodAndArg());\n });\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n runtime.async = function(innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList)\n );\n\n return runtime.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n if (method === \"return\" ||\n (method === \"throw\" && delegate.iterator[method] === undefined)) {\n // A return or throw (when the delegate iterator has no throw\n // method) always terminates the yield* loop.\n context.delegate = null;\n\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n var returnMethod = delegate.iterator[\"return\"];\n if (returnMethod) {\n var record = tryCatch(returnMethod, delegate.iterator, arg);\n if (record.type === \"throw\") {\n // If the return method threw an exception, let that\n // exception prevail over the original return or throw.\n method = \"throw\";\n arg = record.arg;\n continue;\n }\n }\n\n if (method === \"return\") {\n // Continue with the outer return, now that the delegate\n // iterator has been terminated.\n continue;\n }\n }\n\n var record = tryCatch(\n delegate.iterator[method],\n delegate.iterator,\n arg\n );\n\n if (record.type === \"throw\") {\n context.delegate = null;\n\n // Like returning generator.throw(uncaught), but without the\n // overhead of an extra function call.\n method = \"throw\";\n arg = record.arg;\n continue;\n }\n\n // Delegate generator ran and handled its own exceptions so\n // regardless of what the method was, we continue as if it is\n // \"next\" with an undefined arg.\n method = \"next\";\n arg = undefined;\n\n var info = record.arg;\n if (info.done) {\n context[delegate.resultName] = info.value;\n context.next = delegate.nextLoc;\n } else {\n state = GenStateSuspendedYield;\n return info;\n }\n\n context.delegate = null;\n }\n\n if (method === \"next\") {\n if (state === GenStateSuspendedYield) {\n context.sent = arg;\n } else {\n context.sent = undefined;\n }\n\n } else if (method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw arg;\n }\n\n if (context.dispatchException(arg)) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n method = \"next\";\n arg = undefined;\n }\n\n } else if (method === \"return\") {\n context.abrupt(\"return\", arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n var info = {\n value: record.arg,\n done: context.done\n };\n\n if (record.arg === ContinueSentinel) {\n if (context.delegate && method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n arg = undefined;\n }\n } else {\n return info;\n }\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(arg) call above.\n method = \"throw\";\n arg = record.arg;\n }\n }\n };\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n runtime.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n runtime.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n this.sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n return !!caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.next = finallyEntry.finallyLoc;\n } else {\n this.complete(record);\n }\n\n return ContinueSentinel;\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = record.arg;\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n return ContinueSentinel;\n }\n };\n})(\n // Among the various tricks for obtaining a reference to the global\n // object, this seems to be the most reliable technique that does not\n // use indirect eval (which violates Content Security Policy).\n typeof global === \"object\" ? global :\n typeof window === \"object\" ? window :\n typeof self === \"object\" ? self : this\n);\n\n/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))\n\n/***/ }\n/******/ ])\n});\n;\n//# sourceMappingURL=ringcentral-bundle.js.map"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/build/\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap 376cc765ad2cf3304422\n **/","import * as Utils from './core/Utils';\nimport Cache from './core/Cache';\nimport * as Externals from './core/Externals';\nimport Observable from './core/Observable';\nimport Queue from './core/Queue';\n\nimport Client from './http/Client';\nimport ApiResponse from './http/ApiResponse';\nimport * as HttpUtils from './http/Utils';\n\nimport {default as ClientMock} from './mocks/ClientMock';\nimport Mock from './mocks/Mock';\nimport Registry from './mocks/Registry';\n\nimport Platform from './platform/Platform';\nimport Auth from './platform/Auth';\n\nimport PubnubMockFactory from './pubnub/PubnubFactory';\n\nimport Subscription from './subscription/Subscription';\nimport CachedSubscription from './subscription/CachedSubscription';\n\nrequire(\"regenerator/runtime\");\n\nexport default class SDK {\n\n static version = '2.0.0';\n\n static server = {\n sandbox: 'https://platform.devtest.ringcentral.com',\n production: 'https://platform.ringcentral.com'\n };\n\n /**\n * @constructor\n * @param {object} [options]\n * @param {string} [options.server]\n * @param {string} [options.cachePrefix]\n * @param {string} [options.appSecret]\n * @param {string} [options.appKey]\n * @param {string} [options.appName]\n * @param {string} [options.appVersion]\n * @param {string} [options.pubnubFactory]\n * @param {string} [options.client]\n */\n constructor(options) {\n\n options = options || {};\n\n this._cache = new Cache(Externals.localStorage, options.cachePrefix);\n\n this._client = options.client || new Client();\n\n this._platform = new Platform(this._client, this._cache, options.server, options.appKey, options.appSecret);\n\n this._pubnubFactory = options.pubnubFactory || Externals.PUBNUB;\n\n }\n\n /**\n * @return {Platform}\n */\n platform() {\n return this._platform;\n }\n\n /**\n * @return {Subscription}\n */\n createSubscription() {\n return new Subscription(this._pubnubFactory, this._platform);\n }\n\n /**\n * @return {CachedSubscription}\n */\n createCachedSubscription(cacheKey) {\n return new CachedSubscription(this._pubnubFactory, this._platform, this._cache, cacheKey);\n }\n\n /**\n * @return {Cache}\n */\n cache() {\n return this._cache;\n }\n\n static core = {\n Cache: Cache,\n Observable: Observable,\n Utils: Utils,\n Externals: Externals,\n Queue: Queue\n };\n\n static http = {\n Client: Client,\n ApiResponse: ApiResponse,\n Utils: HttpUtils\n };\n\n static platform = {\n Auth: Auth,\n Platform: Platform\n };\n\n static subscription = {\n Subscription: Subscription\n };\n\n static mocks = {\n Client: ClientMock,\n Registry: Registry,\n Mock: Mock\n };\n\n static pubnub = {\n PubnubMockFactory: PubnubMockFactory\n };\n\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/SDK.js\n **/","import {Promise} from './Externals.js';\n\n/**\n * TODO Replace with something better\n * @see https://github.com/joyent/node/blob/master/lib/querystring.js\n * @param {object} parameters\n * @returns {string}\n */\nexport function queryStringify(parameters) {\n\n var array = [];\n\n parameters = parameters || {};\n\n Object.keys(parameters).forEach((k) => {\n\n var v = parameters[k];\n\n if (isArray(v)) {\n v.forEach((vv) => {\n array.push(encodeURIComponent(k) + '=' + encodeURIComponent(vv));\n });\n } else {\n array.push(encodeURIComponent(k) + '=' + encodeURIComponent(v));\n }\n\n });\n\n return array.join('&');\n\n}\n\n/**\n * TODO Replace with something better\n * @see https://github.com/joyent/node/blob/master/lib/querystring.js\n * @param {string} queryString\n * @returns {object}\n */\nexport function parseQueryString(queryString) {\n\n var argsParsed = {};\n\n queryString.split('&').forEach((arg) => {\n\n arg = decodeURIComponent(arg);\n\n if (arg.indexOf('=') == -1) {\n\n argsParsed[arg.trim()] = true;\n\n } else {\n\n var pair = arg.split('='),\n key = pair[0].trim(),\n value = pair[1].trim();\n\n if (key in argsParsed) {\n if (key in argsParsed && !isArray(argsParsed[key])) argsParsed[key] = [argsParsed[key]];\n argsParsed[key].push(value);\n } else {\n argsParsed[key] = value;\n }\n\n }\n\n });\n\n return argsParsed;\n\n}\n\n/**\n * @param obj\n * @return {boolean}\n */\nexport function isFunction(obj) {\n return typeof obj === \"function\";\n}\n\n/**\n * @param obj\n * @return {boolean}\n */\nexport function isArray(obj) {\n return Array.isArray ? Array.isArray(obj) : typeof obj === \"array\";\n}\n\n/**\n * @param fn\n * @param interval\n * @param timeout\n */\nexport function poll(fn, interval, timeout) { //NodeJS.Timer|number\n\n module.exports.stopPolling(timeout);\n\n interval = interval || 1000;\n\n var next = (delay) => {\n\n delay = delay || interval;\n\n interval = delay;\n\n return setTimeout(() => {\n\n fn(next, delay);\n\n }, delay);\n\n };\n\n return next();\n\n}\n\nexport function stopPolling(timeout) {\n if (timeout) clearTimeout(timeout);\n}\n\nexport function isNodeJS() {\n return (typeof process !== 'undefined');\n}\n\nexport function isBrowser() {\n return (typeof window !== 'undefined');\n}\n\nexport function delay(timeout) {\n return new Promise((resolve, reject) => {\n setTimeout(() => {\n resolve(null);\n }, timeout);\n });\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/core/Utils.js\n **/","import ES6Promise from 'es6-promise';\nimport nodeFetch from 'node-fetch';\nimport pubnub from 'pubnub';\n\nvar root = (new Function('return this'))();\n\nexport var Promise = (ES6Promise && ES6Promise.Promise) || root.Promise;\n\nexport var fetch = root.fetch || nodeFetch;\nexport var Request = root.Request || fetch.Request;\nexport var Response = root.Response || fetch.Response;\nexport var Headers = root.Headers || fetch.Headers;\n\nexport var PUBNUB = root.PUBNUB || pubnub;\n\nexport var localStorage = (typeof root.localStorage !== 'undefined') ? root.localStorage : {};\n\n\n/** WEBPACK FOOTER **\n ** ./src/core/Externals.js\n **/","/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 2.2.0\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$toString = {}.toString;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n function lib$es6$promise$asap$$asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n var lib$es6$promise$asap$$default = lib$es6$promise$asap$$asap;\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n var nextTick = process.nextTick;\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // setImmediate should be used instead instead\n var version = process.versions.node.match(/^(?:(\\d+)\\.)?(?:(\\d+)\\.)?(\\*|\\d+)$/);\n if (Array.isArray(version) && version[1] === '0' && version[2] === '10') {\n nextTick = setImmediate;\n }\n return function() {\n nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertex() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertex();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFullfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$default(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable) {\n if (maybeThenable.constructor === promise.constructor) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n var then = lib$es6$promise$$internal$$getThen(maybeThenable);\n\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFullfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$default(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$default(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$default(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n var enumerator = this;\n\n enumerator._instanceConstructor = Constructor;\n enumerator.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (enumerator._validateInput(input)) {\n enumerator._input = input;\n enumerator.length = input.length;\n enumerator._remaining = input.length;\n\n enumerator._init();\n\n if (enumerator.length === 0) {\n lib$es6$promise$$internal$$fulfill(enumerator.promise, enumerator._result);\n } else {\n enumerator.length = enumerator.length || 0;\n enumerator._enumerate();\n if (enumerator._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(enumerator.promise, enumerator._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(enumerator.promise, enumerator._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validateInput = function(input) {\n return lib$es6$promise$utils$$isArray(input);\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._init = function() {\n this._result = new Array(this.length);\n };\n\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var enumerator = this;\n\n var length = enumerator.length;\n var promise = enumerator.promise;\n var input = enumerator._input;\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n enumerator._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var enumerator = this;\n var c = enumerator._instanceConstructor;\n\n if (lib$es6$promise$utils$$isMaybeThenable(entry)) {\n if (entry.constructor === c && entry._state !== lib$es6$promise$$internal$$PENDING) {\n entry._onerror = null;\n enumerator._settledAt(entry._state, i, entry._result);\n } else {\n enumerator._willSettleAt(c.resolve(entry), i);\n }\n } else {\n enumerator._remaining--;\n enumerator._result[i] = entry;\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var enumerator = this;\n var promise = enumerator.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n enumerator._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n enumerator._result[i] = value;\n }\n }\n\n if (enumerator._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, enumerator._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise’s eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n if (!lib$es6$promise$utils$$isFunction(resolver)) {\n lib$es6$promise$promise$$needsResolver();\n }\n\n if (!(this instanceof lib$es6$promise$promise$$Promise)) {\n lib$es6$promise$promise$$needsNew();\n }\n\n lib$es6$promise$$internal$$initializePromise(this, resolver);\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$default;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: function(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$default(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n },\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./bower_components/es6-promise/promise.js\n ** module id = 4\n ** module chunks = 0\n **/","var nextTick = require('process/browser.js').nextTick;\nvar apply = Function.prototype.apply;\nvar slice = Array.prototype.slice;\nvar immediateIds = {};\nvar nextImmediateId = 0;\n\n// DOM APIs, for completeness\n\nexports.setTimeout = function() {\n return new Timeout(apply.call(setTimeout, window, arguments), clearTimeout);\n};\nexports.setInterval = function() {\n return new Timeout(apply.call(setInterval, window, arguments), clearInterval);\n};\nexports.clearTimeout =\nexports.clearInterval = function(timeout) { timeout.close(); };\n\nfunction Timeout(id, clearFn) {\n this._id = id;\n this._clearFn = clearFn;\n}\nTimeout.prototype.unref = Timeout.prototype.ref = function() {};\nTimeout.prototype.close = function() {\n this._clearFn.call(window, this._id);\n};\n\n// Does not start the time, just sets up the members needed.\nexports.enroll = function(item, msecs) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = msecs;\n};\n\nexports.unenroll = function(item) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = -1;\n};\n\nexports._unrefActive = exports.active = function(item) {\n clearTimeout(item._idleTimeoutId);\n\n var msecs = item._idleTimeout;\n if (msecs >= 0) {\n item._idleTimeoutId = setTimeout(function onTimeout() {\n if (item._onTimeout)\n item._onTimeout();\n }, msecs);\n }\n};\n\n// That's not how node.js implements it but the exposed api is the same.\nexports.setImmediate = typeof setImmediate === \"function\" ? setImmediate : function(fn) {\n var id = nextImmediateId++;\n var args = arguments.length < 2 ? false : slice.call(arguments, 1);\n\n immediateIds[id] = true;\n\n nextTick(function onNextTick() {\n if (immediateIds[id]) {\n // fn.call() is faster so we optimize for the common use-case\n // @see http://jsperf.com/call-apply-segu\n if (args) {\n fn.apply(null, args);\n } else {\n fn.call(null);\n }\n // Prevent ids from leaking\n exports.clearImmediate(id);\n }\n });\n\n return id;\n};\n\nexports.clearImmediate = typeof clearImmediate === \"function\" ? clearImmediate : function(id) {\n delete immediateIds[id];\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** (webpack)/~/node-libs-browser/~/timers-browserify/main.js\n ** module id = 5\n ** module chunks = 0\n **/","// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** (webpack)/~/node-libs-browser/~/process/browser.js\n ** module id = 6\n ** module chunks = 0\n **/","module.exports = function(module) {\r\n\tif(!module.webpackPolyfill) {\r\n\t\tmodule.deprecate = function() {};\r\n\t\tmodule.paths = [];\r\n\t\t// module.parent = undefined by default\r\n\t\tmodule.children = [];\r\n\t\tmodule.webpackPolyfill = 1;\r\n\t}\r\n\treturn module;\r\n}\r\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** (webpack)/buildin/module.js\n ** module id = 7\n ** module chunks = 0\n **/","module.exports = function() { throw new Error(\"define cannot be used indirect\"); };\r\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** (webpack)/buildin/amd-define.js\n ** module id = 8\n ** module chunks = 0\n **/","(function() {\n 'use strict';\n\n if (self.fetch) {\n return\n }\n\n function normalizeName(name) {\n if (typeof name !== 'string') {\n name = String(name)\n }\n if (/[^a-z0-9\\-#$%&'*+.\\^_`|~]/i.test(name)) {\n throw new TypeError('Invalid character in header field name')\n }\n return name.toLowerCase()\n }\n\n function normalizeValue(value) {\n if (typeof value !== 'string') {\n value = String(value)\n }\n return value\n }\n\n function Headers(headers) {\n this.map = {}\n\n if (headers instanceof Headers) {\n headers.forEach(function(value, name) {\n this.append(name, value)\n }, this)\n\n } else if (headers) {\n Object.getOwnPropertyNames(headers).forEach(function(name) {\n this.append(name, headers[name])\n }, this)\n }\n }\n\n Headers.prototype.append = function(name, value) {\n name = normalizeName(name)\n value = normalizeValue(value)\n var list = this.map[name]\n if (!list) {\n list = []\n this.map[name] = list\n }\n list.push(value)\n }\n\n Headers.prototype['delete'] = function(name) {\n delete this.map[normalizeName(name)]\n }\n\n Headers.prototype.get = function(name) {\n var values = this.map[normalizeName(name)]\n return values ? values[0] : null\n }\n\n Headers.prototype.getAll = function(name) {\n return this.map[normalizeName(name)] || []\n }\n\n Headers.prototype.has = function(name) {\n return this.map.hasOwnProperty(normalizeName(name))\n }\n\n Headers.prototype.set = function(name, value) {\n this.map[normalizeName(name)] = [normalizeValue(value)]\n }\n\n Headers.prototype.forEach = function(callback, thisArg) {\n Object.getOwnPropertyNames(this.map).forEach(function(name) {\n this.map[name].forEach(function(value) {\n callback.call(thisArg, value, name, this)\n }, this)\n }, this)\n }\n\n function consumed(body) {\n if (body.bodyUsed) {\n return Promise.reject(new TypeError('Already read'))\n }\n body.bodyUsed = true\n }\n\n function fileReaderReady(reader) {\n return new Promise(function(resolve, reject) {\n reader.onload = function() {\n resolve(reader.result)\n }\n reader.onerror = function() {\n reject(reader.error)\n }\n })\n }\n\n function readBlobAsArrayBuffer(blob) {\n var reader = new FileReader()\n reader.readAsArrayBuffer(blob)\n return fileReaderReady(reader)\n }\n\n function readBlobAsText(blob) {\n var reader = new FileReader()\n reader.readAsText(blob)\n return fileReaderReady(reader)\n }\n\n var support = {\n blob: 'FileReader' in self && 'Blob' in self && (function() {\n try {\n new Blob();\n return true\n } catch(e) {\n return false\n }\n })(),\n formData: 'FormData' in self\n }\n\n function Body() {\n this.bodyUsed = false\n\n\n this._initBody = function(body) {\n this._bodyInit = body\n if (typeof body === 'string') {\n this._bodyText = body\n } else if (support.blob && Blob.prototype.isPrototypeOf(body)) {\n this._bodyBlob = body\n } else if (support.formData && FormData.prototype.isPrototypeOf(body)) {\n this._bodyFormData = body\n } else if (!body) {\n this._bodyText = ''\n } else {\n throw new Error('unsupported BodyInit type')\n }\n }\n\n if (support.blob) {\n this.blob = function() {\n var rejected = consumed(this)\n if (rejected) {\n return rejected\n }\n\n if (this._bodyBlob) {\n return Promise.resolve(this._bodyBlob)\n } else if (this._bodyFormData) {\n throw new Error('could not read FormData body as blob')\n } else {\n return Promise.resolve(new Blob([this._bodyText]))\n }\n }\n\n this.arrayBuffer = function() {\n return this.blob().then(readBlobAsArrayBuffer)\n }\n\n this.text = function() {\n var rejected = consumed(this)\n if (rejected) {\n return rejected\n }\n\n if (this._bodyBlob) {\n return readBlobAsText(this._bodyBlob)\n } else if (this._bodyFormData) {\n throw new Error('could not read FormData body as text')\n } else {\n return Promise.resolve(this._bodyText)\n }\n }\n } else {\n this.text = function() {\n var rejected = consumed(this)\n return rejected ? rejected : Promise.resolve(this._bodyText)\n }\n }\n\n if (support.formData) {\n this.formData = function() {\n return this.text().then(decode)\n }\n }\n\n this.json = function() {\n return this.text().then(JSON.parse)\n }\n\n return this\n }\n\n // HTTP methods whose capitalization should be normalized\n var methods = ['DELETE', 'GET', 'HEAD', 'OPTIONS', 'POST', 'PUT']\n\n function normalizeMethod(method) {\n var upcased = method.toUpperCase()\n return (methods.indexOf(upcased) > -1) ? upcased : method\n }\n\n function Request(input, options) {\n options = options || {}\n var body = options.body\n if (Request.prototype.isPrototypeOf(input)) {\n if (input.bodyUsed) {\n throw new TypeError('Already read')\n }\n this.url = input.url\n this.credentials = input.credentials\n if (!options.headers) {\n this.headers = new Headers(input.headers)\n }\n this.method = input.method\n this.mode = input.mode\n if (!body) {\n body = input._bodyInit\n input.bodyUsed = true\n }\n } else {\n this.url = input\n }\n\n this.credentials = options.credentials || this.credentials || 'omit'\n if (options.headers || !this.headers) {\n this.headers = new Headers(options.headers)\n }\n this.method = normalizeMethod(options.method || this.method || 'GET')\n this.mode = options.mode || this.mode || null\n this.referrer = null\n\n if ((this.method === 'GET' || this.method === 'HEAD') && body) {\n throw new TypeError('Body not allowed for GET or HEAD requests')\n }\n this._initBody(body)\n }\n\n function decode(body) {\n var form = new FormData()\n body.trim().split('&').forEach(function(bytes) {\n if (bytes) {\n var split = bytes.split('=')\n var name = split.shift().replace(/\\+/g, ' ')\n var value = split.join('=').replace(/\\+/g, ' ')\n form.append(decodeURIComponent(name), decodeURIComponent(value))\n }\n })\n return form\n }\n\n function headers(xhr) {\n var head = new Headers()\n var pairs = xhr.getAllResponseHeaders().trim().split('\\n')\n pairs.forEach(function(header) {\n var split = header.trim().split(':')\n var key = split.shift().trim()\n var value = split.join(':').trim()\n head.append(key, value)\n })\n return head\n }\n\n Body.call(Request.prototype)\n\n function Response(bodyInit, options) {\n if (!options) {\n options = {}\n }\n\n this._initBody(bodyInit)\n this.type = 'default'\n this.url = null\n this.status = options.status\n this.ok = this.status >= 200 && this.status < 300\n this.statusText = options.statusText\n this.headers = options.headers instanceof Headers ? options.headers : new Headers(options.headers)\n this.url = options.url || ''\n }\n\n Body.call(Response.prototype)\n\n self.Headers = Headers;\n self.Request = Request;\n self.Response = Response;\n\n self.fetch = function(input, init) {\n var request\n if (Request.prototype.isPrototypeOf(input) && !init) {\n request = input\n } else {\n request = new Request(input, init)\n }\n\n return new Promise(function(resolve, reject) {\n var xhr = new XMLHttpRequest()\n\n function responseURL() {\n if ('responseURL' in xhr) {\n return xhr.responseURL\n }\n\n // Avoid security warnings on getResponseHeader when not allowed by CORS\n if (/^X-Request-URL:/m.test(xhr.getAllResponseHeaders())) {\n return xhr.getResponseHeader('X-Request-URL')\n }\n\n return;\n }\n\n xhr.onload = function() {\n var status = (xhr.status === 1223) ? 204 : xhr.status\n if (status < 100 || status > 599) {\n reject(new TypeError('Network request failed'))\n return\n }\n var options = {\n status: status,\n statusText: xhr.statusText,\n headers: headers(xhr),\n url: responseURL()\n }\n var body = 'response' in xhr ? xhr.response : xhr.responseText;\n resolve(new Response(body, options))\n }\n\n xhr.onerror = function() {\n reject(new TypeError('Network request failed'))\n }\n\n xhr.open(request.method, request.url, true)\n\n if (request.credentials === 'include') {\n xhr.withCredentials = true\n }\n\n if ('responseType' in xhr && support.blob) {\n xhr.responseType = 'blob'\n }\n\n request.headers.forEach(function(value, name) {\n xhr.setRequestHeader(name, value)\n })\n\n xhr.send(typeof request._bodyInit === 'undefined' ? null : request._bodyInit)\n })\n }\n self.fetch.polyfill = true\n})();\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./bower_components/fetch/fetch.js\n ** module id = 9\n ** module chunks = 0\n **/","// Version: 3.7.14\n/* =-====================================================================-= */\n/* =-====================================================================-= */\n/* =-========================= JSON =============================-= */\n/* =-====================================================================-= */\n/* =-====================================================================-= */\n\n(window['JSON'] && window['JSON']['stringify']) || (function () {\n window['JSON'] || (window['JSON'] = {});\n\n function toJSON(key) {\n try { return this.valueOf() }\n catch(e) { return null }\n }\n\n var cx = /[\\u0000\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g,\n escapable = /[\\\\\\\"\\x00-\\x1f\\x7f-\\x9f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g,\n gap,\n indent,\n meta = { // table of character substitutions\n '\\b': '\\\\b',\n '\\t': '\\\\t',\n '\\n': '\\\\n',\n '\\f': '\\\\f',\n '\\r': '\\\\r',\n '\"' : '\\\\\"',\n '\\\\': '\\\\\\\\'\n },\n rep;\n\n function quote(string) {\n escapable.lastIndex = 0;\n return escapable.test(string) ?\n '\"' + string.replace(escapable, function (a) {\n var c = meta[a];\n return typeof c === 'string' ? c :\n '\\\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);\n }) + '\"' :\n '\"' + string + '\"';\n }\n\n function str(key, holder) {\n var i, // The loop counter.\n k, // The member key.\n v, // The member value.\n length,\n partial,\n mind = gap,\n value = holder[key];\n\n if (value && typeof value === 'object') {\n value = toJSON.call( value, key );\n }\n\n if (typeof rep === 'function') {\n value = rep.call(holder, key, value);\n }\n\n switch (typeof value) {\n case 'string':\n return quote(value);\n\n case 'number':\n return isFinite(value) ? String(value) : 'null';\n\n case 'boolean':\n case 'null':\n return String(value);\n\n case 'object':\n\n if (!value) {\n return 'null';\n }\n\n gap += indent;\n partial = [];\n\n if (Object.prototype.toString.apply(value) === '[object Array]') {\n\n length = value.length;\n for (i = 0; i < length; i += 1) {\n partial[i] = str(i, value) || 'null';\n }\n\n v = partial.length === 0 ? '[]' :\n gap ? '[\\n' + gap +\n partial.join(',\\n' + gap) + '\\n' +\n mind + ']' :\n '[' + partial.join(',') + ']';\n gap = mind;\n return v;\n }\n if (rep && typeof rep === 'object') {\n length = rep.length;\n for (i = 0; i < length; i += 1) {\n k = rep[i];\n if (typeof k === 'string') {\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (gap ? ': ' : ':') + v);\n }\n }\n }\n } else {\n for (k in value) {\n if (Object.hasOwnProperty.call(value, k)) {\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (gap ? ': ' : ':') + v);\n }\n }\n }\n }\n\n v = partial.length === 0 ? '{}' :\n gap ? '{\\n' + gap + partial.join(',\\n' + gap) + '\\n' +\n mind + '}' : '{' + partial.join(',') + '}';\n gap = mind;\n return v;\n }\n }\n\n if (typeof JSON['stringify'] !== 'function') {\n JSON['stringify'] = function (value, replacer, space) {\n var i;\n gap = '';\n indent = '';\n\n if (typeof space === 'number') {\n for (i = 0; i < space; i += 1) {\n indent += ' ';\n }\n } else if (typeof space === 'string') {\n indent = space;\n }\n rep = replacer;\n if (replacer && typeof replacer !== 'function' &&\n (typeof replacer !== 'object' ||\n typeof replacer.length !== 'number')) {\n throw new Error('JSON.stringify');\n }\n return str('', {'': value});\n };\n }\n\n if (typeof JSON['parse'] !== 'function') {\n // JSON is parsed on the server for security.\n JSON['parse'] = function (text) {return eval('('+text+')')};\n }\n}());\nvar NOW = 1\n, READY = false\n, READY_BUFFER = []\n, PRESENCE_SUFFIX = '-pnpres'\n, DEF_WINDOWING = 10 // MILLISECONDS.\n, DEF_TIMEOUT = 10000 // MILLISECONDS.\n, DEF_SUB_TIMEOUT = 310 // SECONDS.\n, DEF_KEEPALIVE = 60 // SECONDS (FOR TIMESYNC).\n, SECOND = 1000 // A THOUSAND MILLISECONDS.\n, URLBIT = '/'\n, PARAMSBIT = '&'\n, PRESENCE_HB_THRESHOLD = 5\n, PRESENCE_HB_DEFAULT = 30\n, SDK_VER = '3.7.14'\n, REPL = /{([\\w\\-]+)}/g;\n\n/**\n * UTILITIES\n */\nfunction unique() { return'x'+ ++NOW+''+(+new Date) }\nfunction rnow() { return+new Date }\n\n/**\n * NEXTORIGIN\n * ==========\n * var next_origin = nextorigin();\n */\nvar nextorigin = (function() {\n var max = 20\n , ori = Math.floor(Math.random() * max);\n return function( origin, failover ) {\n return origin.indexOf('pubsub.') > 0\n && origin.replace(\n 'pubsub', 'ps' + (\n failover ? generate_uuid().split('-')[0] :\n (++ori < max? ori : ori=1)\n ) ) || origin;\n }\n})();\n\n\n/**\n * Build Url\n * =======\n *\n */\nfunction build_url( url_components, url_params ) {\n var url = url_components.join(URLBIT)\n , params = [];\n\n if (!url_params) return url;\n\n each( url_params, function( key, value ) {\n var value_str = (typeof value == 'object')?JSON['stringify'](value):value;\n (typeof value != 'undefined' &&\n value != null && encode(value_str).length > 0\n ) && params.push(key + \"=\" + encode(value_str));\n } );\n\n url += \"?\" + params.join(PARAMSBIT);\n return url;\n}\n\n/**\n * UPDATER\n * =======\n * var timestamp = unique();\n */\nfunction updater( fun, rate ) {\n var timeout\n , last = 0\n , runnit = function() {\n if (last + rate > rnow()) {\n clearTimeout(timeout);\n timeout = setTimeout( runnit, rate );\n }\n else {\n last = rnow();\n fun();\n }\n };\n\n return runnit;\n}\n\n/**\n * GREP\n * ====\n * var list = grep( [1,2,3], function(item) { return item % 2 } )\n */\nfunction grep( list, fun ) {\n var fin = [];\n each( list || [], function(l) { fun(l) && fin.push(l) } );\n return fin\n}\n\n/**\n * SUPPLANT\n * ========\n * var text = supplant( 'Hello {name}!', { name : 'John' } )\n */\nfunction supplant( str, values ) {\n return str.replace( REPL, function( _, match ) {\n return values[match] || _\n } );\n}\n\n/**\n * timeout\n * =======\n * timeout( function(){}, 100 );\n */\nfunction timeout( fun, wait ) {\n return setTimeout( fun, wait );\n}\n\n/**\n * uuid\n * ====\n * var my_uuid = generate_uuid();\n */\nfunction generate_uuid(callback) {\n var u = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g,\n function(c) {\n var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8);\n return v.toString(16);\n });\n if (callback) callback(u);\n return u;\n}\n\nfunction isArray(arg) {\n return !!arg && typeof arg !== 'string' && (Array.isArray && Array.isArray(arg) || typeof(arg.length) === \"number\")\n //return !!arg && (Array.isArray && Array.isArray(arg) || typeof(arg.length) === \"number\")\n}\n\n/**\n * EACH\n * ====\n * each( [1,2,3], function(item) { } )\n */\nfunction each( o, f) {\n if ( !o || !f ) return;\n\n if ( isArray(o) )\n for ( var i = 0, l = o.length; i < l; )\n f.call( o[i], o[i], i++ );\n else\n for ( var i in o )\n o.hasOwnProperty &&\n o.hasOwnProperty(i) &&\n f.call( o[i], i, o[i] );\n}\n\n/**\n * MAP\n * ===\n * var list = map( [1,2,3], function(item) { return item + 1 } )\n */\nfunction map( list, fun ) {\n var fin = [];\n each( list || [], function( k, v ) { fin.push(fun( k, v )) } );\n return fin;\n}\n\n\nfunction pam_encode(str) {\n return encodeURIComponent(str).replace(/[!'()*~]/g, function(c) {\n return '%' + c.charCodeAt(0).toString(16).toUpperCase();\n });\n}\n\n/**\n * ENCODE\n * ======\n * var encoded_data = encode('path');\n */\nfunction encode(path) { return encodeURIComponent(path) }\n\n/**\n * Generate Subscription Channel List\n * ==================================\n * generate_channel_list(channels_object);\n */\nfunction generate_channel_list(channels, nopresence) {\n var list = [];\n each( channels, function( channel, status ) {\n if (nopresence) {\n if(channel.search('-pnpres') < 0) {\n if (status.subscribed) list.push(channel);\n }\n } else {\n if (status.subscribed) list.push(channel);\n }\n });\n return list.sort();\n}\n\n/**\n * Generate Subscription Channel Groups List\n * ==================================\n * generate_channel_group_list(channels_groups object);\n */\nfunction generate_channel_group_list(channel_groups, nopresence) {\n var list = [];\n each(channel_groups, function( channel_group, status ) {\n if (nopresence) {\n if(channel_group.search('-pnpres') < 0) {\n if (status.subscribed) list.push(channel_group);\n }\n } else {\n if (status.subscribed) list.push(channel_group);\n }\n });\n return list.sort();\n}\n\n// PUBNUB READY TO CONNECT\nfunction ready() { timeout( function() {\n if (READY) return;\n READY = 1;\n each( READY_BUFFER, function(connect) { connect() } );\n}, SECOND ); }\n\nfunction PNmessage(args) {\n msg = args || {'apns' : {}},\n msg['getPubnubMessage'] = function() {\n var m = {};\n\n if (Object.keys(msg['apns']).length) {\n m['pn_apns'] = {\n 'aps' : {\n 'alert' : msg['apns']['alert'] ,\n 'badge' : msg['apns']['badge']\n }\n }\n for (var k in msg['apns']) {\n m['pn_apns'][k] = msg['apns'][k];\n }\n var exclude1 = ['badge','alert'];\n for (var k in exclude1) {\n delete m['pn_apns'][exclude1[k]];\n }\n }\n\n\n\n if (msg['gcm']) {\n m['pn_gcm'] = {\n 'data' : msg['gcm']\n }\n }\n\n for (var k in msg) {\n m[k] = msg[k];\n }\n var exclude = ['apns','gcm','publish', 'channel','callback','error'];\n for (var k in exclude) {\n delete m[exclude[k]];\n }\n\n return m;\n };\n msg['publish'] = function() {\n\n var m = msg.getPubnubMessage();\n\n if (msg['pubnub'] && msg['channel']) {\n msg['pubnub'].publish({\n 'message' : m,\n 'channel' : msg['channel'],\n 'callback' : msg['callback'],\n 'error' : msg['error']\n })\n }\n };\n return msg;\n}\n\nfunction PN_API(setup) {\n var SUB_WINDOWING = +setup['windowing'] || DEF_WINDOWING\n , SUB_TIMEOUT = (+setup['timeout'] || DEF_SUB_TIMEOUT) * SECOND\n , KEEPALIVE = (+setup['keepalive'] || DEF_KEEPALIVE) * SECOND\n , TIME_CHECK = setup['timecheck'] || 0\n , NOLEAVE = setup['noleave'] || 0\n , PUBLISH_KEY = setup['publish_key']\n , SUBSCRIBE_KEY = setup['subscribe_key']\n , AUTH_KEY = setup['auth_key'] || ''\n , SECRET_KEY = setup['secret_key'] || ''\n , hmac_SHA256 = setup['hmac_SHA256']\n , SSL = setup['ssl'] ? 's' : ''\n , ORIGIN = 'http'+SSL+'://'+(setup['origin']||'pubsub.pubnub.com')\n , STD_ORIGIN = nextorigin(ORIGIN)\n , SUB_ORIGIN = nextorigin(ORIGIN)\n , CONNECT = function(){}\n , PUB_QUEUE = []\n , CLOAK = true\n , TIME_DRIFT = 0\n , SUB_CALLBACK = 0\n , SUB_CHANNEL = 0\n , SUB_RECEIVER = 0\n , SUB_RESTORE = setup['restore'] || 0\n , SUB_BUFF_WAIT = 0\n , TIMETOKEN = 0\n , RESUMED = false\n , CHANNELS = {}\n , CHANNEL_GROUPS = {}\n , SUB_ERROR = function(){}\n , STATE = {}\n , PRESENCE_HB_TIMEOUT = null\n , PRESENCE_HB = validate_presence_heartbeat(\n setup['heartbeat'] || setup['pnexpires'] || 0, setup['error']\n )\n , PRESENCE_HB_INTERVAL = setup['heartbeat_interval'] || (PRESENCE_HB / 2) -1\n , PRESENCE_HB_RUNNING = false\n , NO_WAIT_FOR_PENDING = setup['no_wait_for_pending']\n , COMPATIBLE_35 = setup['compatible_3.5'] || false\n , xdr = setup['xdr']\n , params = setup['params'] || {}\n , error = setup['error'] || function() {}\n , _is_online = setup['_is_online'] || function() { return 1 }\n , jsonp_cb = setup['jsonp_cb'] || function() { return 0 }\n , db = setup['db'] || {'get': function(){}, 'set': function(){}}\n , CIPHER_KEY = setup['cipher_key']\n , UUID = setup['uuid'] || ( !setup['unique_uuid'] && db && db['get'](SUBSCRIBE_KEY+'uuid') || '')\n , USE_INSTANCEID = setup['instance_id'] || false\n , INSTANCEID = ''\n , shutdown = setup['shutdown']\n , use_send_beacon = (typeof setup['use_send_beacon'] != 'undefined')?setup['use_send_beacon']:true\n , sendBeacon = (use_send_beacon)?setup['sendBeacon']:null\n , _poll_timer\n , _poll_timer2;\n\n if (PRESENCE_HB === 2) PRESENCE_HB_INTERVAL = 1;\n\n var crypto_obj = setup['crypto_obj'] ||\n {\n 'encrypt' : function(a,key){ return a},\n 'decrypt' : function(b,key){return b}\n };\n\n function _get_url_params(data) {\n if (!data) data = {};\n each( params , function( key, value ) {\n if (!(key in data)) data[key] = value;\n });\n return data;\n }\n\n function _object_to_key_list(o) {\n var l = []\n each( o , function( key, value ) {\n l.push(key);\n });\n return l;\n }\n function _object_to_key_list_sorted(o) {\n return _object_to_key_list(o).sort();\n }\n\n function _get_pam_sign_input_from_params(params) {\n var si = \"\";\n var l = _object_to_key_list_sorted(params);\n\n for (var i in l) {\n var k = l[i]\n si += k + \"=\" + pam_encode(params[k]) ;\n if (i != l.length - 1) si += \"&\"\n }\n return si;\n }\n\n function validate_presence_heartbeat(heartbeat, cur_heartbeat, error) {\n var err = false;\n\n if (typeof heartbeat === 'undefined') {\n return cur_heartbeat;\n }\n\n if (typeof heartbeat === 'number') {\n if (heartbeat > PRESENCE_HB_THRESHOLD || heartbeat == 0)\n err = false;\n else\n err = true;\n } else if(typeof heartbeat === 'boolean'){\n if (!heartbeat) {\n return 0;\n } else {\n return PRESENCE_HB_DEFAULT;\n }\n } else {\n err = true;\n }\n\n if (err) {\n error && error(\"Presence Heartbeat value invalid. Valid range ( x > \" + PRESENCE_HB_THRESHOLD + \" or x = 0). Current Value : \" + (cur_heartbeat || PRESENCE_HB_THRESHOLD));\n return cur_heartbeat || PRESENCE_HB_THRESHOLD;\n } else return heartbeat;\n }\n\n function encrypt(input, key) {\n return crypto_obj['encrypt'](input, key || CIPHER_KEY) || input;\n }\n function decrypt(input, key) {\n return crypto_obj['decrypt'](input, key || CIPHER_KEY) ||\n crypto_obj['decrypt'](input, CIPHER_KEY) ||\n input;\n }\n\n function error_common(message, callback) {\n callback && callback({ 'error' : message || \"error occurred\"});\n error && error(message);\n }\n function _presence_heartbeat() {\n\n clearTimeout(PRESENCE_HB_TIMEOUT);\n\n if (!PRESENCE_HB_INTERVAL || PRESENCE_HB_INTERVAL >= 500 ||\n PRESENCE_HB_INTERVAL < 1 ||\n (!generate_channel_list(CHANNELS,true).length && !generate_channel_group_list(CHANNEL_GROUPS, true).length ) )\n {\n PRESENCE_HB_RUNNING = false;\n return;\n }\n\n PRESENCE_HB_RUNNING = true;\n SELF['presence_heartbeat']({\n 'callback' : function(r) {\n PRESENCE_HB_TIMEOUT = timeout( _presence_heartbeat, (PRESENCE_HB_INTERVAL) * SECOND );\n },\n 'error' : function(e) {\n error && error(\"Presence Heartbeat unable to reach Pubnub servers.\" + JSON.stringify(e));\n PRESENCE_HB_TIMEOUT = timeout( _presence_heartbeat, (PRESENCE_HB_INTERVAL) * SECOND );\n }\n });\n }\n\n function start_presence_heartbeat() {\n !PRESENCE_HB_RUNNING && _presence_heartbeat();\n }\n\n function publish(next) {\n\n if (NO_WAIT_FOR_PENDING) {\n if (!PUB_QUEUE.length) return;\n } else {\n if (next) PUB_QUEUE.sending = 0;\n if ( PUB_QUEUE.sending || !PUB_QUEUE.length ) return;\n PUB_QUEUE.sending = 1;\n }\n\n xdr(PUB_QUEUE.shift());\n }\n function each_channel_group(callback) {\n var count = 0;\n\n each( generate_channel_group_list(CHANNEL_GROUPS), function(channel_group) {\n var chang = CHANNEL_GROUPS[channel_group];\n\n if (!chang) return;\n\n count++;\n (callback||function(){})(chang);\n } );\n\n return count;\n }\n\n function each_channel(callback) {\n var count = 0;\n\n each( generate_channel_list(CHANNELS), function(channel) {\n var chan = CHANNELS[channel];\n\n if (!chan) return;\n\n count++;\n (callback||function(){})(chan);\n } );\n\n return count;\n }\n function _invoke_callback(response, callback, err) {\n if (typeof response == 'object') {\n if (response['error']) {\n var callback_data = {};\n\n if (response['message']) {\n callback_data['message'] = response['message'];\n }\n\n if (response['payload']) {\n callback_data['payload'] = response['payload'];\n }\n\n err && err(callback_data);\n return;\n\n }\n if (response['payload']) {\n if (response['next_page'])\n callback && callback(response['payload'], response['next_page']);\n else\n callback && callback(response['payload']);\n return;\n }\n }\n callback && callback(response);\n }\n\n function _invoke_error(response,err) {\n\n if (typeof response == 'object' && response['error']) {\n var callback_data = {};\n\n if (response['message']) {\n callback_data['message'] = response['message'];\n }\n\n if (response['payload']) {\n callback_data['payload'] = response['payload'];\n }\n \n err && err(callback_data);\n return;\n } else {\n err && err(response);\n }\n }\n function CR(args, callback, url1, data) {\n var callback = args['callback'] || callback\n , err = args['error'] || error\n , jsonp = jsonp_cb();\n\n data = data || {};\n \n if (!data['auth']) {\n data['auth'] = args['auth_key'] || AUTH_KEY;\n }\n \n var url = [\n STD_ORIGIN, 'v1', 'channel-registration',\n 'sub-key', SUBSCRIBE_KEY\n ];\n\n url.push.apply(url,url1);\n \n if (jsonp) data['callback'] = jsonp;\n \n xdr({\n callback : jsonp,\n data : _get_url_params(data),\n success : function(response) {\n _invoke_callback(response, callback, err);\n },\n fail : function(response) {\n _invoke_error(response, err);\n },\n url : url\n });\n\n }\n\n // Announce Leave Event\n var SELF = {\n 'LEAVE' : function( channel, blocking, auth_key, callback, error ) {\n\n var data = { 'uuid' : UUID, 'auth' : auth_key || AUTH_KEY }\n , origin = nextorigin(ORIGIN)\n , callback = callback || function(){}\n , err = error || function(){}\n , url\n , jsonp = jsonp_cb();\n\n\n\n // Prevent Leaving a Presence Channel\n if (channel.indexOf(PRESENCE_SUFFIX) > 0) return true;\n\n\n\n\n if (COMPATIBLE_35) {\n if (!SSL) return false;\n if (jsonp == '0') return false;\n }\n\n if (NOLEAVE) return false;\n\n if (jsonp != '0') data['callback'] = jsonp;\n\n if (USE_INSTANCEID) data['instanceid'] = INSTANCEID;\n\n url = [\n origin, 'v2', 'presence', 'sub_key',\n SUBSCRIBE_KEY, 'channel', encode(channel), 'leave'\n ];\n\n params = _get_url_params(data);\n\n\n if (sendBeacon) {\n url_string = build_url(url, params);\n if (sendBeacon(url_string)) {\n callback && callback({\"status\": 200, \"action\": \"leave\", \"message\": \"OK\", \"service\": \"Presence\"});\n return true;\n }\n }\n\n\n xdr({\n blocking : blocking || SSL,\n timeout : 2000,\n callback : jsonp,\n data : params,\n success : function(response) {\n _invoke_callback(response, callback, err);\n },\n fail : function(response) {\n _invoke_error(response, err);\n },\n url : url\n });\n return true;\n },\n 'LEAVE_GROUP' : function( channel_group, blocking, auth_key, callback, error ) {\n\n var data = { 'uuid' : UUID, 'auth' : auth_key || AUTH_KEY }\n , origin = nextorigin(ORIGIN)\n , callback = callback || function(){}\n , err = error || function(){}\n , jsonp = jsonp_cb();\n\n // Prevent Leaving a Presence Channel Group\n if (channel_group.indexOf(PRESENCE_SUFFIX) > 0) return true;\n\n if (COMPATIBLE_35) {\n if (!SSL) return false;\n if (jsonp == '0') return false;\n }\n\n if (NOLEAVE) return false;\n\n if (jsonp != '0') data['callback'] = jsonp;\n\n if (channel_group && channel_group.length > 0) data['channel-group'] = channel_group;\n\n if (USE_INSTANCEID) data['instanceid'] = INSTANCEID;\n\n xdr({\n blocking : blocking || SSL,\n timeout : 5000,\n callback : jsonp,\n data : _get_url_params(data),\n success : function(response) {\n _invoke_callback(response, callback, err);\n },\n fail : function(response) {\n _invoke_error(response, err);\n },\n url : [\n origin, 'v2', 'presence', 'sub_key',\n SUBSCRIBE_KEY, 'channel', encode(','), 'leave'\n ]\n });\n return true;\n },\n 'set_resumed' : function(resumed) {\n RESUMED = resumed;\n },\n 'get_cipher_key' : function() {\n return CIPHER_KEY;\n },\n 'set_cipher_key' : function(key) {\n CIPHER_KEY = key;\n },\n 'raw_encrypt' : function(input, key) {\n return encrypt(input, key);\n },\n 'raw_decrypt' : function(input, key) {\n return decrypt(input, key);\n },\n 'get_heartbeat' : function() {\n return PRESENCE_HB;\n },\n \n 'set_heartbeat' : function(heartbeat, heartbeat_interval) {\n PRESENCE_HB = validate_presence_heartbeat(heartbeat, PRESENCE_HB, error);\n PRESENCE_HB_INTERVAL = heartbeat_interval || (PRESENCE_HB / 2) - 1;\n if (PRESENCE_HB == 2) {\n PRESENCE_HB_INTERVAL = 1;\n }\n CONNECT();\n _presence_heartbeat();\n },\n \n 'get_heartbeat_interval' : function() {\n return PRESENCE_HB_INTERVAL;\n },\n \n 'set_heartbeat_interval' : function(heartbeat_interval) {\n PRESENCE_HB_INTERVAL = heartbeat_interval;\n _presence_heartbeat();\n },\n \n 'get_version' : function() {\n return SDK_VER;\n },\n 'getGcmMessageObject' : function(obj) {\n return {\n 'data' : obj\n }\n },\n 'getApnsMessageObject' : function(obj) {\n var x = {\n 'aps' : { 'badge' : 1, 'alert' : ''}\n }\n for (k in obj) {\n k[x] = obj[k];\n }\n return x;\n },\n 'newPnMessage' : function() {\n var x = {};\n if (gcm) x['pn_gcm'] = gcm;\n if (apns) x['pn_apns'] = apns;\n for ( k in n ) {\n x[k] = n[k];\n }\n return x;\n },\n\n '_add_param' : function(key,val) {\n params[key] = val;\n },\n\n 'channel_group' : function(args, callback) {\n var ns_ch = args['channel_group']\n , callback = callback || args['callback']\n , channels = args['channels'] || args['channel']\n , cloak = args['cloak']\n , namespace\n , channel_group\n , url = []\n , data = {}\n , mode = args['mode'] || 'add';\n\n\n if (ns_ch) {\n var ns_ch_a = ns_ch.split(':');\n\n if (ns_ch_a.length > 1) {\n namespace = (ns_ch_a[0] === '*')?null:ns_ch_a[0];\n\n channel_group = ns_ch_a[1];\n } else {\n channel_group = ns_ch_a[0];\n }\n }\n\n namespace && url.push('namespace') && url.push(encode(namespace));\n\n url.push('channel-group');\n\n if (channel_group && channel_group !== '*') {\n url.push(channel_group);\n }\n\n if (channels ) {\n if (isArray(channels)) {\n channels = channels.join(',');\n }\n data[mode] = channels;\n data['cloak'] = (CLOAK)?'true':'false';\n } else {\n if (mode === 'remove') url.push('remove');\n }\n\n if (typeof cloak != 'undefined') data['cloak'] = (cloak)?'true':'false';\n\n CR(args, callback, url, data);\n },\n\n 'channel_group_list_groups' : function(args, callback) {\n var namespace;\n\n namespace = args['namespace'] || args['ns'] || args['channel_group'] || null;\n if (namespace) {\n args[\"channel_group\"] = namespace + \":*\";\n }\n\n SELF['channel_group'](args, callback);\n },\n\n 'channel_group_list_channels' : function(args, callback) {\n if (!args['channel_group']) return error('Missing Channel Group');\n SELF['channel_group'](args, callback);\n },\n\n 'channel_group_remove_channel' : function(args, callback) {\n if (!args['channel_group']) return error('Missing Channel Group');\n if (!args['channel'] && !args['channels'] ) return error('Missing Channel');\n\n args['mode'] = 'remove';\n SELF['channel_group'](args,callback);\n },\n\n 'channel_group_remove_group' : function(args, callback) {\n if (!args['channel_group']) return error('Missing Channel Group');\n if (args['channel']) return error('Use channel_group_remove_channel if you want to remove a channel from a group.');\n\n args['mode'] = 'remove';\n SELF['channel_group'](args,callback);\n },\n\n 'channel_group_add_channel' : function(args, callback) {\n if (!args['channel_group']) return error('Missing Channel Group');\n if (!args['channel'] && !args['channels'] ) return error('Missing Channel');\n SELF['channel_group'](args,callback);\n },\n\n 'channel_group_cloak' : function(args, callback) {\n if (typeof args['cloak'] == 'undefined') {\n callback(CLOAK);\n return;\n }\n CLOAK = args['cloak'];\n SELF['channel_group'](args,callback);\n },\n\n 'channel_group_list_namespaces' : function(args, callback) {\n var url = ['namespace'];\n CR(args, callback, url);\n },\n 'channel_group_remove_namespace' : function(args, callback) {\n var url = ['namespace',args['namespace'],'remove'];\n CR(args, callback, url);\n },\n\n /*\n PUBNUB.history({\n channel : 'my_chat_channel',\n limit : 100,\n callback : function(history) { }\n });\n */\n 'history' : function( args, callback ) {\n var callback = args['callback'] || callback\n , count = args['count'] || args['limit'] || 100\n , reverse = args['reverse'] || \"false\"\n , err = args['error'] || function(){}\n , auth_key = args['auth_key'] || AUTH_KEY\n , cipher_key = args['cipher_key']\n , channel = args['channel']\n , channel_group = args['channel_group']\n , start = args['start']\n , end = args['end']\n , include_token = args['include_token']\n , string_msg_token = args['string_message_token'] || false\n , params = {}\n , jsonp = jsonp_cb();\n\n // Make sure we have a Channel\n if (!channel && !channel_group) return error('Missing Channel');\n if (!callback) return error('Missing Callback');\n if (!SUBSCRIBE_KEY) return error('Missing Subscribe Key');\n\n params['stringtoken'] = 'true';\n params['count'] = count;\n params['reverse'] = reverse;\n params['auth'] = auth_key;\n\n if (channel_group) {\n params['channel-group'] = channel_group;\n if (!channel) {\n channel = ','; \n }\n }\n if (jsonp) params['callback'] = jsonp;\n if (start) params['start'] = start;\n if (end) params['end'] = end;\n if (include_token) params['include_token'] = 'true';\n if (string_msg_token) params['string_message_token'] = 'true';\n\n // Send Message\n xdr({\n callback : jsonp,\n data : _get_url_params(params),\n success : function(response) {\n if (typeof response == 'object' && response['error']) {\n err({'message' : response['message'], 'payload' : response['payload']});\n return;\n }\n var messages = response[0];\n var decrypted_messages = [];\n for (var a = 0; a < messages.length; a++) {\n var new_message = decrypt(messages[a],cipher_key);\n try {\n decrypted_messages['push'](JSON['parse'](new_message));\n } catch (e) {\n decrypted_messages['push']((new_message));\n }\n }\n callback([decrypted_messages, response[1], response[2]]);\n },\n fail : function(response) {\n _invoke_error(response, err);\n },\n url : [\n STD_ORIGIN, 'v2', 'history', 'sub-key',\n SUBSCRIBE_KEY, 'channel', encode(channel)\n ]\n });\n },\n\n /*\n PUBNUB.replay({\n source : 'my_channel',\n destination : 'new_channel'\n });\n */\n 'replay' : function(args, callback) {\n var callback = callback || args['callback'] || function(){}\n , auth_key = args['auth_key'] || AUTH_KEY\n , source = args['source']\n , destination = args['destination']\n , stop = args['stop']\n , start = args['start']\n , end = args['end']\n , reverse = args['reverse']\n , limit = args['limit']\n , jsonp = jsonp_cb()\n , data = {}\n , url;\n\n // Check User Input\n if (!source) return error('Missing Source Channel');\n if (!destination) return error('Missing Destination Channel');\n if (!PUBLISH_KEY) return error('Missing Publish Key');\n if (!SUBSCRIBE_KEY) return error('Missing Subscribe Key');\n\n // Setup URL Params\n if (jsonp != '0') data['callback'] = jsonp;\n if (stop) data['stop'] = 'all';\n if (reverse) data['reverse'] = 'true';\n if (start) data['start'] = start;\n if (end) data['end'] = end;\n if (limit) data['count'] = limit;\n\n data['auth'] = auth_key;\n\n // Compose URL Parts\n url = [\n STD_ORIGIN, 'v1', 'replay',\n PUBLISH_KEY, SUBSCRIBE_KEY,\n source, destination\n ];\n\n // Start (or Stop) Replay!\n xdr({\n callback : jsonp,\n success : function(response) {\n _invoke_callback(response, callback, err);\n },\n fail : function() { callback([ 0, 'Disconnected' ]) },\n url : url,\n data : _get_url_params(data)\n });\n },\n\n /*\n PUBNUB.auth('AJFLKAJSDKLA');\n */\n 'auth' : function(auth) {\n AUTH_KEY = auth;\n CONNECT();\n },\n\n /*\n PUBNUB.time(function(time){ });\n */\n 'time' : function(callback) {\n var jsonp = jsonp_cb();\n\n var data = { 'uuid' : UUID, 'auth' : AUTH_KEY }\n\n if (USE_INSTANCEID) data['instanceid'] = INSTANCEID;\n\n xdr({\n callback : jsonp,\n data : _get_url_params(data),\n timeout : SECOND * 5,\n url : [STD_ORIGIN, 'time', jsonp],\n success : function(response) { callback(response[0]) },\n fail : function() { callback(0) }\n });\n },\n\n /*\n PUBNUB.publish({\n channel : 'my_chat_channel',\n message : 'hello!'\n });\n */\n 'publish' : function( args, callback ) {\n var msg = args['message'];\n if (!msg) return error('Missing Message');\n\n var callback = callback || args['callback'] || msg['callback'] || function(){}\n , channel = args['channel'] || msg['channel']\n , auth_key = args['auth_key'] || AUTH_KEY\n , cipher_key = args['cipher_key']\n , err = args['error'] || msg['error'] || function() {}\n , post = args['post'] || false\n , store = ('store_in_history' in args) ? args['store_in_history']: true\n , jsonp = jsonp_cb()\n , add_msg = 'push'\n , params\n , url;\n\n if (args['prepend']) add_msg = 'unshift'\n\n if (!channel) return error('Missing Channel');\n if (!PUBLISH_KEY) return error('Missing Publish Key');\n if (!SUBSCRIBE_KEY) return error('Missing Subscribe Key');\n\n if (msg['getPubnubMessage']) {\n msg = msg['getPubnubMessage']();\n }\n\n // If trying to send Object\n msg = JSON['stringify'](encrypt(msg, cipher_key));\n\n // Create URL\n url = [\n STD_ORIGIN, 'publish',\n PUBLISH_KEY, SUBSCRIBE_KEY,\n 0, encode(channel),\n jsonp, encode(msg)\n ];\n\n params = { 'uuid' : UUID, 'auth' : auth_key }\n\n if (!store) params['store'] =\"0\"\n\n if (USE_INSTANCEID) params['instanceid'] = INSTANCEID;\n\n // Queue Message Send\n PUB_QUEUE[add_msg]({\n callback : jsonp,\n timeout : SECOND * 5,\n url : url,\n data : _get_url_params(params),\n fail : function(response){\n _invoke_error(response, err);\n publish(1);\n },\n success : function(response) {\n _invoke_callback(response, callback, err);\n publish(1);\n },\n mode : (post)?'POST':'GET'\n });\n\n // Send Message\n publish();\n },\n\n /*\n PUBNUB.unsubscribe({ channel : 'my_chat' });\n */\n 'unsubscribe' : function(args, callback) {\n var channel = args['channel']\n , channel_group = args['channel_group']\n , auth_key = args['auth_key'] || AUTH_KEY\n , callback = callback || args['callback'] || function(){}\n , err = args['error'] || function(){};\n\n TIMETOKEN = 0;\n //SUB_RESTORE = 1; REVISIT !!!!\n\n if (channel) {\n // Prepare Channel(s)\n channel = map( (\n channel.join ? channel.join(',') : ''+channel\n ).split(','), function(channel) {\n if (!CHANNELS[channel]) return;\n return channel + ',' + channel + PRESENCE_SUFFIX;\n } ).join(',');\n\n // Iterate over Channels\n each( channel.split(','), function(ch) {\n var CB_CALLED = true;\n if (!ch) return;\n CHANNELS[ch] = 0;\n if (ch in STATE) delete STATE[ch];\n if (READY) {\n CB_CALLED = SELF['LEAVE']( ch, 0 , auth_key, callback, err);\n }\n if (!CB_CALLED) callback({action : \"leave\"});\n\n \n } );\n }\n\n if (channel_group) {\n // Prepare channel group(s)\n channel_group = map( (\n channel_group.join ? channel_group.join(',') : ''+channel_group\n ).split(','), function(channel_group) {\n if (!CHANNEL_GROUPS[channel_group]) return;\n return channel_group + ',' + channel_group + PRESENCE_SUFFIX;\n } ).join(',');\n\n // Iterate over channel groups\n each( channel_group.split(','), function(chg) {\n var CB_CALLED = true;\n if (!chg) return;\n CHANNEL_GROUPS[chg] = 0;\n if (chg in STATE) delete STATE[chg];\n if (READY) {\n CB_CALLED = SELF['LEAVE_GROUP']( chg, 0 , auth_key, callback, err);\n }\n if (!CB_CALLED) callback({action : \"leave\"});\n\n } );\n }\n\n // Reset Connection if Count Less\n CONNECT();\n },\n\n /*\n PUBNUB.subscribe({\n channel : 'my_chat'\n callback : function(message) { }\n });\n */\n 'subscribe' : function( args, callback ) {\n var channel = args['channel']\n , channel_group = args['channel_group']\n , callback = callback || args['callback']\n , callback = callback || args['message']\n , connect = args['connect'] || function(){}\n , reconnect = args['reconnect'] || function(){}\n , disconnect = args['disconnect'] || function(){}\n , SUB_ERROR = args['error'] || SUB_ERROR || function(){}\n , idlecb = args['idle'] || function(){}\n , presence = args['presence'] || 0\n , noheresync = args['noheresync'] || 0\n , backfill = args['backfill'] || 0\n , timetoken = args['timetoken'] || 0\n , sub_timeout = args['timeout'] || SUB_TIMEOUT\n , windowing = args['windowing'] || SUB_WINDOWING\n , state = args['state']\n , heartbeat = args['heartbeat'] || args['pnexpires']\n , heartbeat_interval = args['heartbeat_interval']\n , restore = args['restore'] || SUB_RESTORE;\n\n AUTH_KEY = args['auth_key'] || AUTH_KEY;\n\n // Restore Enabled?\n SUB_RESTORE = restore;\n\n // Always Reset the TT\n TIMETOKEN = timetoken;\n\n // Make sure we have a Channel\n if (!channel && !channel_group) {\n return error('Missing Channel');\n }\n\n if (!callback) return error('Missing Callback');\n if (!SUBSCRIBE_KEY) return error('Missing Subscribe Key');\n\n if (heartbeat || heartbeat === 0 || heartbeat_interval || heartbeat_interval === 0) {\n SELF['set_heartbeat'](heartbeat, heartbeat_interval);\n }\n\n // Setup Channel(s)\n if (channel) {\n each( (channel.join ? channel.join(',') : ''+channel).split(','),\n function(channel) {\n var settings = CHANNELS[channel] || {};\n\n // Store Channel State\n CHANNELS[SUB_CHANNEL = channel] = {\n name : channel,\n connected : settings.connected,\n disconnected : settings.disconnected,\n subscribed : 1,\n callback : SUB_CALLBACK = callback,\n 'cipher_key' : args['cipher_key'],\n connect : connect,\n disconnect : disconnect,\n reconnect : reconnect\n };\n\n if (state) {\n if (channel in state) {\n STATE[channel] = state[channel];\n } else {\n STATE[channel] = state;\n }\n }\n\n // Presence Enabled?\n if (!presence) return;\n\n // Subscribe Presence Channel\n SELF['subscribe']({\n 'channel' : channel + PRESENCE_SUFFIX,\n 'callback' : presence,\n 'restore' : restore\n });\n\n // Presence Subscribed?\n if (settings.subscribed) return;\n\n // See Who's Here Now?\n if (noheresync) return;\n SELF['here_now']({\n 'channel' : channel,\n 'data' : _get_url_params({ 'uuid' : UUID, 'auth' : AUTH_KEY }),\n 'callback' : function(here) {\n each( 'uuids' in here ? here['uuids'] : [],\n function(uid) { presence( {\n 'action' : 'join',\n 'uuid' : uid,\n 'timestamp' : Math.floor(rnow() / 1000),\n 'occupancy' : here['occupancy'] || 1\n }, here, channel ); } );\n }\n });\n } );\n }\n\n // Setup Channel Groups\n if (channel_group) {\n each( (channel_group.join ? channel_group.join(',') : ''+channel_group).split(','),\n function(channel_group) {\n var settings = CHANNEL_GROUPS[channel_group] || {};\n\n CHANNEL_GROUPS[channel_group] = {\n name : channel_group,\n connected : settings.connected,\n disconnected : settings.disconnected,\n subscribed : 1,\n callback : SUB_CALLBACK = callback,\n 'cipher_key' : args['cipher_key'],\n connect : connect,\n disconnect : disconnect,\n reconnect : reconnect\n };\n\n // Presence Enabled?\n if (!presence) return;\n\n // Subscribe Presence Channel\n SELF['subscribe']({\n 'channel_group' : channel_group + PRESENCE_SUFFIX,\n 'callback' : presence,\n 'restore' : restore,\n 'auth_key' : AUTH_KEY\n });\n\n // Presence Subscribed?\n if (settings.subscribed) return;\n\n // See Who's Here Now?\n if (noheresync) return;\n SELF['here_now']({\n 'channel_group' : channel_group,\n 'data' : _get_url_params({ 'uuid' : UUID, 'auth' : AUTH_KEY }),\n 'callback' : function(here) {\n each( 'uuids' in here ? here['uuids'] : [],\n function(uid) { presence( {\n 'action' : 'join',\n 'uuid' : uid,\n 'timestamp' : Math.floor(rnow() / 1000),\n 'occupancy' : here['occupancy'] || 1\n }, here, channel_group ); } );\n }\n });\n } );\n }\n\n\n // Test Network Connection\n function _test_connection(success) {\n if (success) {\n // Begin Next Socket Connection\n timeout( CONNECT, windowing);\n }\n else {\n // New Origin on Failed Connection\n STD_ORIGIN = nextorigin( ORIGIN, 1 );\n SUB_ORIGIN = nextorigin( ORIGIN, 1 );\n\n // Re-test Connection\n timeout( function() {\n SELF['time'](_test_connection);\n }, SECOND );\n }\n\n // Disconnect & Reconnect\n each_channel(function(channel){\n // Reconnect\n if (success && channel.disconnected) {\n channel.disconnected = 0;\n return channel.reconnect(channel.name);\n }\n\n // Disconnect\n if (!success && !channel.disconnected) {\n channel.disconnected = 1;\n channel.disconnect(channel.name);\n }\n });\n \n // Disconnect & Reconnect for channel groups\n each_channel_group(function(channel_group){\n // Reconnect\n if (success && channel_group.disconnected) {\n channel_group.disconnected = 0;\n return channel_group.reconnect(channel_group.name);\n }\n\n // Disconnect\n if (!success && !channel_group.disconnected) {\n channel_group.disconnected = 1;\n channel_group.disconnect(channel_group.name);\n }\n });\n }\n\n // Evented Subscribe\n function _connect() {\n var jsonp = jsonp_cb()\n , channels = generate_channel_list(CHANNELS).join(',')\n , channel_groups = generate_channel_group_list(CHANNEL_GROUPS).join(',');\n\n // Stop Connection\n if (!channels && !channel_groups) return;\n\n if (!channels) channels = ',';\n\n // Connect to PubNub Subscribe Servers\n _reset_offline();\n\n var data = _get_url_params({ 'uuid' : UUID, 'auth' : AUTH_KEY });\n\n if (channel_groups) {\n data['channel-group'] = channel_groups;\n }\n\n\n var st = JSON.stringify(STATE);\n if (st.length > 2) data['state'] = JSON.stringify(STATE);\n\n if (PRESENCE_HB) data['heartbeat'] = PRESENCE_HB;\n\n if (USE_INSTANCEID) data['instanceid'] = INSTANCEID;\n\n start_presence_heartbeat();\n SUB_RECEIVER = xdr({\n timeout : sub_timeout,\n callback : jsonp,\n fail : function(response) {\n if (response && response['error'] && response['service']) {\n _invoke_error(response, SUB_ERROR);\n _test_connection(1);\n } else {\n SELF['time'](function(success){\n !success && ( _invoke_error(response, SUB_ERROR));\n _test_connection(success);\n });\n }\n },\n data : _get_url_params(data),\n url : [\n SUB_ORIGIN, 'subscribe',\n SUBSCRIBE_KEY, encode(channels),\n jsonp, TIMETOKEN\n ],\n success : function(messages) {\n\n // Check for Errors\n if (!messages || (\n typeof messages == 'object' &&\n 'error' in messages &&\n messages['error']\n )) {\n SUB_ERROR(messages['error']);\n return timeout( CONNECT, SECOND );\n }\n\n // User Idle Callback\n idlecb(messages[1]);\n\n // Restore Previous Connection Point if Needed\n TIMETOKEN = !TIMETOKEN &&\n SUB_RESTORE &&\n db['get'](SUBSCRIBE_KEY) || messages[1];\n\n /*\n // Connect\n each_channel_registry(function(registry){\n if (registry.connected) return;\n registry.connected = 1;\n registry.connect(channel.name);\n });\n */\n\n // Connect\n each_channel(function(channel){\n if (channel.connected) return;\n channel.connected = 1;\n channel.connect(channel.name);\n });\n\n // Connect for channel groups\n each_channel_group(function(channel_group){\n if (channel_group.connected) return;\n channel_group.connected = 1;\n channel_group.connect(channel_group.name);\n });\n\n if (RESUMED && !SUB_RESTORE) {\n TIMETOKEN = 0;\n RESUMED = false;\n // Update Saved Timetoken\n db['set']( SUBSCRIBE_KEY, 0 );\n timeout( _connect, windowing );\n return;\n }\n\n // Invoke Memory Catchup and Receive Up to 100\n // Previous Messages from the Queue.\n if (backfill) {\n TIMETOKEN = 10000;\n backfill = 0;\n }\n\n // Update Saved Timetoken\n db['set']( SUBSCRIBE_KEY, messages[1] );\n\n // Route Channel <---> Callback for Message\n var next_callback = (function() {\n var channels = '';\n var channels2 = '';\n\n if (messages.length > 3) {\n channels = messages[3];\n channels2 = messages[2];\n } else if (messages.length > 2) {\n channels = messages[2];\n } else {\n channels = map(\n generate_channel_list(CHANNELS), function(chan) { return map(\n Array(messages[0].length)\n .join(',').split(','),\n function() { return chan; }\n ) }).join(',')\n }\n\n var list = channels.split(',');\n var list2 = (channels2)?channels2.split(','):[];\n\n return function() {\n var channel = list.shift()||SUB_CHANNEL;\n var channel2 = list2.shift();\n\n var chobj = {};\n\n if (channel2) {\n if (channel && channel.indexOf('-pnpres') >= 0 \n && channel2.indexOf('-pnpres') < 0) {\n channel2 += '-pnpres';\n }\n chobj = CHANNEL_GROUPS[channel2] || CHANNELS[channel2] || {'callback' : function(){}};\n } else {\n chobj = CHANNELS[channel];\n }\n\n var r = [\n chobj\n .callback||SUB_CALLBACK,\n channel.split(PRESENCE_SUFFIX)[0]\n ];\n channel2 && r.push(channel2.split(PRESENCE_SUFFIX)[0]);\n return r;\n };\n })();\n\n var latency = detect_latency(+messages[1]);\n each( messages[0], function(msg) {\n var next = next_callback();\n var decrypted_msg = decrypt(msg,\n (CHANNELS[next[1]])?CHANNELS[next[1]]['cipher_key']:null);\n next[0] && next[0]( decrypted_msg, messages, next[2] || next[1], latency, next[1]);\n });\n\n timeout( _connect, windowing );\n }\n });\n }\n\n CONNECT = function() {\n _reset_offline();\n timeout( _connect, windowing );\n };\n\n // Reduce Status Flicker\n if (!READY) return READY_BUFFER.push(CONNECT);\n\n // Connect Now\n CONNECT();\n },\n\n /*\n PUBNUB.here_now({ channel : 'my_chat', callback : fun });\n */\n 'here_now' : function( args, callback ) {\n var callback = args['callback'] || callback\n , err = args['error'] || function(){}\n , auth_key = args['auth_key'] || AUTH_KEY\n , channel = args['channel']\n , channel_group = args['channel_group']\n , jsonp = jsonp_cb()\n , uuids = ('uuids' in args) ? args['uuids'] : true\n , state = args['state']\n , data = { 'uuid' : UUID, 'auth' : auth_key };\n\n if (!uuids) data['disable_uuids'] = 1;\n if (state) data['state'] = 1;\n\n // Make sure we have a Channel\n if (!callback) return error('Missing Callback');\n if (!SUBSCRIBE_KEY) return error('Missing Subscribe Key');\n\n var url = [\n STD_ORIGIN, 'v2', 'presence',\n 'sub_key', SUBSCRIBE_KEY\n ];\n\n channel && url.push('channel') && url.push(encode(channel));\n\n if (jsonp != '0') { data['callback'] = jsonp; }\n\n if (channel_group) {\n data['channel-group'] = channel_group;\n !channel && url.push('channel') && url.push(','); \n }\n\n if (USE_INSTANCEID) data['instanceid'] = INSTANCEID;\n\n xdr({\n callback : jsonp,\n data : _get_url_params(data),\n success : function(response) {\n _invoke_callback(response, callback, err);\n },\n fail : function(response) {\n _invoke_error(response, err);\n },\n url : url\n });\n },\n\n /*\n PUBNUB.current_channels_by_uuid({ channel : 'my_chat', callback : fun });\n */\n 'where_now' : function( args, callback ) {\n var callback = args['callback'] || callback\n , err = args['error'] || function(){}\n , auth_key = args['auth_key'] || AUTH_KEY\n , jsonp = jsonp_cb()\n , uuid = args['uuid'] || UUID\n , data = { 'auth' : auth_key };\n\n // Make sure we have a Channel\n if (!callback) return error('Missing Callback');\n if (!SUBSCRIBE_KEY) return error('Missing Subscribe Key');\n\n if (jsonp != '0') { data['callback'] = jsonp; }\n\n if (USE_INSTANCEID) data['instanceid'] = INSTANCEID;\n\n xdr({\n callback : jsonp,\n data : _get_url_params(data),\n success : function(response) {\n _invoke_callback(response, callback, err);\n },\n fail : function(response) {\n _invoke_error(response, err);\n },\n url : [\n STD_ORIGIN, 'v2', 'presence',\n 'sub_key', SUBSCRIBE_KEY,\n 'uuid', encode(uuid)\n ]\n });\n },\n\n 'state' : function(args, callback) {\n var callback = args['callback'] || callback || function(r) {}\n , err = args['error'] || function(){}\n , auth_key = args['auth_key'] || AUTH_KEY\n , jsonp = jsonp_cb()\n , state = args['state']\n , uuid = args['uuid'] || UUID\n , channel = args['channel']\n , channel_group = args['channel_group']\n , url\n , data = _get_url_params({ 'auth' : auth_key });\n\n // Make sure we have a Channel\n if (!SUBSCRIBE_KEY) return error('Missing Subscribe Key');\n if (!uuid) return error('Missing UUID');\n if (!channel && !channel_group) return error('Missing Channel');\n\n if (jsonp != '0') { data['callback'] = jsonp; }\n\n if (typeof channel != 'undefined'\n && CHANNELS[channel] && CHANNELS[channel].subscribed ) {\n if (state) STATE[channel] = state;\n }\n\n if (typeof channel_group != 'undefined'\n && CHANNEL_GROUPS[channel_group]\n && CHANNEL_GROUPS[channel_group].subscribed\n ) {\n if (state) STATE[channel_group] = state;\n data['channel-group'] = channel_group;\n\n if (!channel) {\n channel = ',';\n }\n }\n\n data['state'] = JSON.stringify(state);\n\n if (USE_INSTANCEID) data['instanceid'] = INSTANCEID;\n\n if (state) {\n url = [\n STD_ORIGIN, 'v2', 'presence',\n 'sub-key', SUBSCRIBE_KEY,\n 'channel', channel,\n 'uuid', uuid, 'data'\n ]\n } else {\n url = [\n STD_ORIGIN, 'v2', 'presence',\n 'sub-key', SUBSCRIBE_KEY,\n 'channel', channel,\n 'uuid', encode(uuid)\n ]\n }\n\n xdr({\n callback : jsonp,\n data : _get_url_params(data),\n success : function(response) {\n _invoke_callback(response, callback, err);\n },\n fail : function(response) {\n _invoke_error(response, err);\n },\n url : url\n\n });\n\n },\n\n /*\n PUBNUB.grant({\n channel : 'my_chat',\n callback : fun,\n error : fun,\n ttl : 24 * 60, // Minutes\n read : true,\n write : true,\n auth_key : '3y8uiajdklytowsj'\n });\n */\n 'grant' : function( args, callback ) {\n var callback = args['callback'] || callback\n , err = args['error'] || function(){}\n , channel = args['channel'] || args['channels']\n , channel_group = args['channel_group']\n , jsonp = jsonp_cb()\n , ttl = args['ttl']\n , r = (args['read'] )?\"1\":\"0\"\n , w = (args['write'])?\"1\":\"0\"\n , m = (args['manage'])?\"1\":\"0\"\n , auth_key = args['auth_key'] || args['auth_keys'];\n\n if (!callback) return error('Missing Callback');\n if (!SUBSCRIBE_KEY) return error('Missing Subscribe Key');\n if (!PUBLISH_KEY) return error('Missing Publish Key');\n if (!SECRET_KEY) return error('Missing Secret Key');\n\n var timestamp = Math.floor(new Date().getTime() / 1000)\n , sign_input = SUBSCRIBE_KEY + \"\\n\" + PUBLISH_KEY + \"\\n\"\n + \"grant\" + \"\\n\";\n\n var data = {\n 'w' : w,\n 'r' : r,\n 'timestamp' : timestamp\n };\n if (args['manage']) {\n data['m'] = m;\n }\n if (isArray(channel)) {\n channel = channel['join'](',');\n }\n if (isArray(auth_key)) {\n auth_key = auth_key['join'](',');\n }\n if (typeof channel != 'undefined' && channel != null && channel.length > 0) data['channel'] = channel;\n if (typeof channel_group != 'undefined' && channel_group != null && channel_group.length > 0) {\n data['channel-group'] = channel_group;\n }\n if (jsonp != '0') { data['callback'] = jsonp; }\n if (ttl || ttl === 0) data['ttl'] = ttl;\n\n if (auth_key) data['auth'] = auth_key;\n\n data = _get_url_params(data)\n\n if (!auth_key) delete data['auth'];\n\n sign_input += _get_pam_sign_input_from_params(data);\n\n var signature = hmac_SHA256( sign_input, SECRET_KEY );\n\n signature = signature.replace( /\\+/g, \"-\" );\n signature = signature.replace( /\\//g, \"_\" );\n\n data['signature'] = signature;\n\n xdr({\n callback : jsonp,\n data : data,\n success : function(response) {\n _invoke_callback(response, callback, err);\n },\n fail : function(response) {\n _invoke_error(response, err);\n },\n url : [\n STD_ORIGIN, 'v1', 'auth', 'grant' ,\n 'sub-key', SUBSCRIBE_KEY\n ]\n });\n },\n\n /*\n PUBNUB.mobile_gw_provision ({\n device_id: 'A655FBA9931AB',\n op : 'add' | 'remove',\n gw_type : 'apns' | 'gcm',\n channel : 'my_chat',\n callback : fun,\n error : fun,\n });\n */\n\n 'mobile_gw_provision' : function( args ) {\n\n var callback = args['callback'] || function(){}\n , auth_key = args['auth_key'] || AUTH_KEY\n , err = args['error'] || function() {}\n , jsonp = jsonp_cb()\n , channel = args['channel']\n , op = args['op']\n , gw_type = args['gw_type']\n , device_id = args['device_id']\n , params\n , url;\n\n if (!device_id) return error('Missing Device ID (device_id)');\n if (!gw_type) return error('Missing GW Type (gw_type: gcm or apns)');\n if (!op) return error('Missing GW Operation (op: add or remove)');\n if (!channel) return error('Missing gw destination Channel (channel)');\n if (!PUBLISH_KEY) return error('Missing Publish Key');\n if (!SUBSCRIBE_KEY) return error('Missing Subscribe Key');\n\n // Create URL\n url = [\n STD_ORIGIN, 'v1/push/sub-key',\n SUBSCRIBE_KEY, 'devices', device_id\n ];\n\n params = { 'uuid' : UUID, 'auth' : auth_key, 'type': gw_type};\n\n if (op == \"add\") {\n params['add'] = channel;\n } else if (op == \"remove\") {\n params['remove'] = channel;\n }\n\n if (USE_INSTANCEID) data['instanceid'] = INSTANCEID;\n\n xdr({\n callback : jsonp,\n data : params,\n success : function(response) {\n _invoke_callback(response, callback, err);\n },\n fail : function(response) {\n _invoke_error(response, err);\n },\n url : url\n });\n\n },\n\n /*\n PUBNUB.audit({\n channel : 'my_chat',\n callback : fun,\n error : fun,\n read : true,\n write : true,\n auth_key : '3y8uiajdklytowsj'\n });\n */\n 'audit' : function( args, callback ) {\n var callback = args['callback'] || callback\n , err = args['error'] || function(){}\n , channel = args['channel']\n , channel_group = args['channel_group']\n , auth_key = args['auth_key']\n , jsonp = jsonp_cb();\n\n // Make sure we have a Channel\n if (!callback) return error('Missing Callback');\n if (!SUBSCRIBE_KEY) return error('Missing Subscribe Key');\n if (!PUBLISH_KEY) return error('Missing Publish Key');\n if (!SECRET_KEY) return error('Missing Secret Key');\n\n var timestamp = Math.floor(new Date().getTime() / 1000)\n , sign_input = SUBSCRIBE_KEY + \"\\n\"\n + PUBLISH_KEY + \"\\n\"\n + \"audit\" + \"\\n\";\n\n var data = {'timestamp' : timestamp };\n if (jsonp != '0') { data['callback'] = jsonp; }\n if (typeof channel != 'undefined' && channel != null && channel.length > 0) data['channel'] = channel;\n if (typeof channel_group != 'undefined' && channel_group != null && channel_group.length > 0) {\n data['channel-group'] = channel_group;\n }\n if (auth_key) data['auth'] = auth_key;\n\n data = _get_url_params(data);\n\n if (!auth_key) delete data['auth'];\n\n sign_input += _get_pam_sign_input_from_params(data);\n\n var signature = hmac_SHA256( sign_input, SECRET_KEY );\n\n signature = signature.replace( /\\+/g, \"-\" );\n signature = signature.replace( /\\//g, \"_\" );\n\n data['signature'] = signature;\n xdr({\n callback : jsonp,\n data : data,\n success : function(response) {\n _invoke_callback(response, callback, err);\n },\n fail : function(response) {\n _invoke_error(response, err);\n },\n url : [\n STD_ORIGIN, 'v1', 'auth', 'audit' ,\n 'sub-key', SUBSCRIBE_KEY\n ]\n });\n },\n\n /*\n PUBNUB.revoke({\n channel : 'my_chat',\n callback : fun,\n error : fun,\n auth_key : '3y8uiajdklytowsj'\n });\n */\n 'revoke' : function( args, callback ) {\n args['read'] = false;\n args['write'] = false;\n SELF['grant']( args, callback );\n },\n 'set_uuid' : function(uuid) {\n UUID = uuid;\n CONNECT();\n },\n 'get_uuid' : function() {\n return UUID;\n },\n 'isArray' : function(arg) {\n return isArray(arg);\n },\n 'get_subscibed_channels' : function() {\n return generate_channel_list(CHANNELS, true);\n },\n 'presence_heartbeat' : function(args) {\n var callback = args['callback'] || function() {}\n var err = args['error'] || function() {}\n var jsonp = jsonp_cb();\n var data = { 'uuid' : UUID, 'auth' : AUTH_KEY };\n\n var st = JSON['stringify'](STATE);\n if (st.length > 2) data['state'] = JSON['stringify'](STATE);\n\n if (PRESENCE_HB > 0 && PRESENCE_HB < 320) data['heartbeat'] = PRESENCE_HB;\n\n if (jsonp != '0') { data['callback'] = jsonp; }\n\n var channels = encode(generate_channel_list(CHANNELS, true)['join'](','));\n var channel_groups = generate_channel_group_list(CHANNEL_GROUPS, true)['join'](',');\n\n if (!channels) channels = ',';\n if (channel_groups) data['channel-group'] = channel_groups;\n\n if (USE_INSTANCEID) data['instanceid'] = INSTANCEID;\n\n xdr({\n callback : jsonp,\n data : _get_url_params(data),\n timeout : SECOND * 5,\n url : [\n STD_ORIGIN, 'v2', 'presence',\n 'sub-key', SUBSCRIBE_KEY,\n 'channel' , channels,\n 'heartbeat'\n ],\n success : function(response) {\n _invoke_callback(response, callback, err);\n },\n fail : function(response) { _invoke_error(response, err); }\n });\n },\n 'stop_timers': function () {\n clearTimeout(_poll_timer);\n clearTimeout(_poll_timer2);\n clearTimeout(PRESENCE_HB_TIMEOUT);\n },\n 'shutdown': function () {\n SELF['stop_timers']();\n shutdown && shutdown();\n },\n\n // Expose PUBNUB Functions\n 'xdr' : xdr,\n 'ready' : ready,\n 'db' : db,\n 'uuid' : generate_uuid,\n 'map' : map,\n 'each' : each,\n 'each-channel' : each_channel,\n 'grep' : grep,\n 'offline' : function(){ _reset_offline(\n 1, { \"message\" : \"Offline. Please check your network settings.\" })\n },\n 'supplant' : supplant,\n 'now' : rnow,\n 'unique' : unique,\n 'updater' : updater\n };\n\n function _poll_online() {\n _is_online() || _reset_offline( 1, {\n \"error\" : \"Offline. Please check your network settings. \"\n });\n _poll_timer && clearTimeout(_poll_timer);\n _poll_timer = timeout( _poll_online, SECOND );\n }\n\n function _poll_online2() {\n if (!TIME_CHECK) return;\n SELF['time'](function(success){\n detect_time_detla( function(){}, success );\n success || _reset_offline( 1, {\n \"error\" : \"Heartbeat failed to connect to Pubnub Servers.\" +\n \"Please check your network settings.\"\n });\n _poll_timer2 && clearTimeout(_poll_timer2);\n _poll_timer2 = timeout( _poll_online2, KEEPALIVE );\n });\n }\n\n function _reset_offline(err, msg) {\n SUB_RECEIVER && SUB_RECEIVER(err, msg);\n SUB_RECEIVER = null;\n\n clearTimeout(_poll_timer);\n clearTimeout(_poll_timer2);\n }\n \n if (!UUID) UUID = SELF['uuid']();\n if (!INSTANCEID) INSTANCEID = SELF['uuid']();\n db['set']( SUBSCRIBE_KEY + 'uuid', UUID );\n\n _poll_timer = timeout( _poll_online, SECOND );\n _poll_timer2 = timeout( _poll_online2, KEEPALIVE );\n PRESENCE_HB_TIMEOUT = timeout(\n start_presence_heartbeat,\n ( PRESENCE_HB_INTERVAL - 3 ) * SECOND\n );\n\n // Detect Age of Message\n function detect_latency(tt) {\n var adjusted_time = rnow() - TIME_DRIFT;\n return adjusted_time - tt / 10000;\n }\n\n detect_time_detla();\n function detect_time_detla( cb, time ) {\n var stime = rnow();\n\n time && calculate(time) || SELF['time'](calculate);\n\n function calculate(time) {\n if (!time) return;\n var ptime = time / 10000\n , latency = (rnow() - stime) / 2;\n TIME_DRIFT = rnow() - (ptime + latency);\n cb && cb(TIME_DRIFT);\n }\n }\n\n return SELF;\n}\nfunction crypto_obj() {\n\n function SHA256(s) {\n return CryptoJS['SHA256'](s)['toString'](CryptoJS['enc']['Hex']);\n }\n\n var iv = \"0123456789012345\";\n\n var allowedKeyEncodings = ['hex', 'utf8', 'base64', 'binary'];\n var allowedKeyLengths = [128, 256];\n var allowedModes = ['ecb', 'cbc'];\n\n var defaultOptions = {\n 'encryptKey': true,\n 'keyEncoding': 'utf8',\n 'keyLength': 256,\n 'mode': 'cbc'\n };\n\n function parse_options(options) {\n\n // Defaults\n options = options || {};\n if (!options['hasOwnProperty']('encryptKey')) options['encryptKey'] = defaultOptions['encryptKey'];\n if (!options['hasOwnProperty']('keyEncoding')) options['keyEncoding'] = defaultOptions['keyEncoding'];\n if (!options['hasOwnProperty']('keyLength')) options['keyLength'] = defaultOptions['keyLength'];\n if (!options['hasOwnProperty']('mode')) options['mode'] = defaultOptions['mode'];\n\n // Validation\n if (allowedKeyEncodings['indexOf'](options['keyEncoding']['toLowerCase']()) == -1) options['keyEncoding'] = defaultOptions['keyEncoding'];\n if (allowedKeyLengths['indexOf'](parseInt(options['keyLength'], 10)) == -1) options['keyLength'] = defaultOptions['keyLength'];\n if (allowedModes['indexOf'](options['mode']['toLowerCase']()) == -1) options['mode'] = defaultOptions['mode'];\n\n return options;\n\n }\n\n function decode_key(key, options) {\n if (options['keyEncoding'] == 'base64') {\n return CryptoJS['enc']['Base64']['parse'](key);\n } else if (options['keyEncoding'] == 'hex') {\n return CryptoJS['enc']['Hex']['parse'](key);\n } else {\n return key;\n }\n }\n\n function get_padded_key(key, options) {\n key = decode_key(key, options);\n if (options['encryptKey']) {\n return CryptoJS['enc']['Utf8']['parse'](SHA256(key)['slice'](0, 32));\n } else {\n return key;\n }\n }\n\n function get_mode(options) {\n if (options['mode'] == 'ecb') {\n return CryptoJS['mode']['ECB'];\n } else {\n return CryptoJS['mode']['CBC'];\n }\n }\n\n function get_iv(options) {\n return (options['mode'] == 'cbc') ? CryptoJS['enc']['Utf8']['parse'](iv) : null;\n }\n\n return {\n\n 'encrypt': function(data, key, options) {\n if (!key) return data;\n options = parse_options(options);\n var iv = get_iv(options);\n var mode = get_mode(options);\n var cipher_key = get_padded_key(key, options);\n var hex_message = JSON['stringify'](data);\n var encryptedHexArray = CryptoJS['AES']['encrypt'](hex_message, cipher_key, {'iv': iv, 'mode': mode})['ciphertext'];\n var base_64_encrypted = encryptedHexArray['toString'](CryptoJS['enc']['Base64']);\n return base_64_encrypted || data;\n },\n\n 'decrypt': function(data, key, options) {\n if (!key) return data;\n options = parse_options(options);\n var iv = get_iv(options);\n var mode = get_mode(options);\n var cipher_key = get_padded_key(key, options);\n try {\n var binary_enc = CryptoJS['enc']['Base64']['parse'](data);\n var json_plain = CryptoJS['AES']['decrypt']({'ciphertext': binary_enc}, cipher_key, {'iv': iv, 'mode': mode})['toString'](CryptoJS['enc']['Utf8']);\n var plaintext = JSON['parse'](json_plain);\n return plaintext;\n }\n catch (e) {\n return undefined;\n }\n }\n };\n}\n/* =-====================================================================-= */\n/* =-====================================================================-= */\n/* =-========================= UTIL =============================-= */\n/* =-====================================================================-= */\n/* =-====================================================================-= */\n\nwindow['PUBNUB'] || (function() {\n\n/**\n * UTIL LOCALS\n */\n\nvar SWF = 'https://pubnub.a.ssl.fastly.net/pubnub.swf'\n, ASYNC = 'async'\n, UA = navigator.userAgent\n, PNSDK = 'PubNub-JS-' + 'Web' + '/' + '3.7.14'\n, XORIGN = UA.indexOf('MSIE 6') == -1;\n\n/**\n * CONSOLE COMPATIBILITY\n */\nwindow.console || (window.console=window.console||{});\nconsole.log || (\n console.log =\n console.error =\n ((window.opera||{}).postError||function(){})\n);\n\n/**\n * LOCAL STORAGE OR COOKIE\n */\nvar db = (function(){\n var store = {};\n var ls = false;\n try {\n ls = window['localStorage'];\n } catch (e) { }\n var cookieGet = function(key) {\n if (document.cookie.indexOf(key) == -1) return null;\n return ((document.cookie||'').match(\n RegExp(key+'=([^;]+)')\n )||[])[1] || null;\n };\n var cookieSet = function( key, value ) {\n document.cookie = key + '=' + value +\n '; expires=Thu, 1 Aug 2030 20:00:00 UTC; path=/';\n };\n var cookieTest = (function() {\n try {\n cookieSet('pnctest', '1');\n return cookieGet('pnctest') === '1';\n } catch (e) {\n return false;\n }\n }());\n return {\n 'get' : function(key) {\n try {\n if (ls) return ls.getItem(key);\n if (cookieTest) return cookieGet(key);\n return store[key];\n } catch(e) {\n return store[key];\n }\n },\n 'set' : function( key, value ) {\n try {\n if (ls) return ls.setItem( key, value ) && 0;\n if (cookieTest) cookieSet( key, value );\n store[key] = value;\n } catch(e) {\n store[key] = value;\n }\n }\n };\n})();\n\nfunction get_hmac_SHA256(data,key) {\n var hash = CryptoJS['HmacSHA256'](data, key);\n return hash.toString(CryptoJS['enc']['Base64']);\n}\n\n/**\n * $\n * =\n * var div = $('divid');\n */\nfunction $(id) { return document.getElementById(id) }\n\n/**\n * ERROR\n * =====\n * error('message');\n */\nfunction error(message) { console['error'](message) }\n\n/**\n * SEARCH\n * ======\n * var elements = search('a div span');\n */\nfunction search( elements, start) {\n var list = [];\n each( elements.split(/\\s+/), function(el) {\n each( (start || document).getElementsByTagName(el), function(node) {\n list.push(node);\n } );\n });\n return list;\n}\n\n/**\n * BIND\n * ====\n * bind( 'keydown', search('a')[0], function(element) {\n * ...\n * } );\n */\nfunction bind( type, el, fun ) {\n each( type.split(','), function(etype) {\n var rapfun = function(e) {\n if (!e) e = window.event;\n if (!fun(e)) {\n e.cancelBubble = true;\n e.preventDefault && e.preventDefault();\n e.stopPropagation && e.stopPropagation();\n }\n };\n\n if ( el.addEventListener ) el.addEventListener( etype, rapfun, false );\n else if ( el.attachEvent ) el.attachEvent( 'on' + etype, rapfun );\n else el[ 'on' + etype ] = rapfun;\n } );\n}\n\n/**\n * UNBIND\n * ======\n * unbind( 'keydown', search('a')[0] );\n */\nfunction unbind( type, el, fun ) {\n if ( el.removeEventListener ) el.removeEventListener( type, false );\n else if ( el.detachEvent ) el.detachEvent( 'on' + type, false );\n else el[ 'on' + type ] = null;\n}\n\n/**\n * HEAD\n * ====\n * head().appendChild(elm);\n */\nfunction head() { return search('head')[0] }\n\n/**\n * ATTR\n * ====\n * var attribute = attr( node, 'attribute' );\n */\nfunction attr( node, attribute, value ) {\n if (value) node.setAttribute( attribute, value );\n else return node && node.getAttribute && node.getAttribute(attribute);\n}\n\n/**\n * CSS\n * ===\n * var obj = create('div');\n */\nfunction css( element, styles ) {\n for (var style in styles) if (styles.hasOwnProperty(style))\n try {element.style[style] = styles[style] + (\n '|width|height|top|left|'.indexOf(style) > 0 &&\n typeof styles[style] == 'number'\n ? 'px' : ''\n )}catch(e){}\n}\n\n/**\n * CREATE\n * ======\n * var obj = create('div');\n */\nfunction create(element) { return document.createElement(element) }\n\n\n/**\n * jsonp_cb\n * ========\n * var callback = jsonp_cb();\n */\nfunction jsonp_cb() { return XORIGN || FDomainRequest() ? 0 : unique() }\n\n\n\n/**\n * EVENTS\n * ======\n * PUBNUB.events.bind( 'you-stepped-on-flower', function(message) {\n * // Do Stuff with message\n * } );\n *\n * PUBNUB.events.fire( 'you-stepped-on-flower', \"message-data\" );\n * PUBNUB.events.fire( 'you-stepped-on-flower', {message:\"data\"} );\n * PUBNUB.events.fire( 'you-stepped-on-flower', [1,2,3] );\n *\n */\nvar events = {\n 'list' : {},\n 'unbind' : function( name ) { events.list[name] = [] },\n 'bind' : function( name, fun ) {\n (events.list[name] = events.list[name] || []).push(fun);\n },\n 'fire' : function( name, data ) {\n each(\n events.list[name] || [],\n function(fun) { fun(data) }\n );\n }\n};\n\n/**\n * XDR Cross Domain Request\n * ========================\n * xdr({\n * url : ['http://www.blah.com/url'],\n * success : function(response) {},\n * fail : function() {}\n * });\n */\nfunction xdr( setup ) {\n if (XORIGN || FDomainRequest()) return ajax(setup);\n\n var script = create('script')\n , callback = setup.callback\n , id = unique()\n , finished = 0\n , xhrtme = setup.timeout || DEF_TIMEOUT\n , timer = timeout( function(){done(1, {\"message\" : \"timeout\"})}, xhrtme )\n , fail = setup.fail || function(){}\n , data = setup.data || {}\n , success = setup.success || function(){}\n , append = function() { head().appendChild(script) }\n , done = function( failed, response ) {\n if (finished) return;\n finished = 1;\n\n script.onerror = null;\n clearTimeout(timer);\n\n (failed || !response) || success(response);\n\n timeout( function() {\n failed && fail();\n var s = $(id)\n , p = s && s.parentNode;\n p && p.removeChild(s);\n }, SECOND );\n };\n\n window[callback] = function(response) {\n done( 0, response );\n };\n\n if (!setup.blocking) script[ASYNC] = ASYNC;\n\n script.onerror = function() { done(1) };\n script.src = build_url( setup.url, data );\n\n attr( script, 'id', id );\n\n append();\n return done;\n}\n\n/**\n * CORS XHR Request\n * ================\n * xdr({\n * url : ['http://www.blah.com/url'],\n * success : function(response) {},\n * fail : function() {}\n * });\n */\nfunction ajax( setup ) {\n var xhr, response\n , finished = function() {\n if (loaded) return;\n loaded = 1;\n\n clearTimeout(timer);\n\n try { response = JSON['parse'](xhr.responseText); }\n catch (r) { return done(1); }\n\n complete = 1;\n success(response);\n }\n , complete = 0\n , loaded = 0\n , xhrtme = setup.timeout || DEF_TIMEOUT\n , timer = timeout( function(){done(1, {\"message\" : \"timeout\"})}, xhrtme )\n , fail = setup.fail || function(){}\n , data = setup.data || {}\n , success = setup.success || function(){}\n , async = !(setup.blocking)\n , done = function(failed,response) {\n if (complete) return;\n complete = 1;\n\n clearTimeout(timer);\n\n if (xhr) {\n xhr.onerror = xhr.onload = null;\n xhr.abort && xhr.abort();\n xhr = null;\n }\n\n failed && fail(response);\n };\n\n // Send\n try {\n xhr = FDomainRequest() ||\n window.XDomainRequest &&\n new XDomainRequest() ||\n new XMLHttpRequest();\n\n xhr.onerror = xhr.onabort = function(e){ done(\n 1, e || (xhr && xhr.responseText) || { \"error\" : \"Network Connection Error\"}\n ) };\n xhr.onload = xhr.onloadend = finished;\n xhr.onreadystatechange = function() {\n if (xhr && xhr.readyState == 4) {\n switch(xhr.status) {\n case 200:\n break;\n default:\n try {\n response = JSON['parse'](xhr.responseText);\n done(1,response);\n }\n catch (r) { return done(1, {status : xhr.status, payload : null, message : xhr.responseText}); }\n return;\n }\n }\n }\n\n var url = build_url(setup.url,data);\n\n xhr.open( 'GET', url, async );\n if (async) xhr.timeout = xhrtme;\n xhr.send();\n }\n catch(eee) {\n done(0);\n XORIGN = 0;\n return xdr(setup);\n }\n\n // Return 'done'\n return done;\n}\n\n// Test Connection State\nfunction _is_online() {\n if (!('onLine' in navigator)) return 1;\n try { return navigator['onLine'] }\n catch (e) { return true }\n}\n\n\nfunction sendBeacon(url) {\n if (!('sendBeacon' in navigator)) return false;\n\n return navigator['sendBeacon'](url);\n}\n\n/* =-====================================================================-= */\n/* =-====================================================================-= */\n/* =-========================= PUBNUB ===========================-= */\n/* =-====================================================================-= */\n/* =-====================================================================-= */\n\nvar PDIV = $('pubnub') || 0\n, CREATE_PUBNUB = function(setup) {\n\n // Force JSONP if requested from user.\n if (setup['jsonp']) XORIGN = 0;\n else XORIGN = UA.indexOf('MSIE 6') == -1;\n\n var SUBSCRIBE_KEY = setup['subscribe_key'] || ''\n , KEEPALIVE = (+setup['keepalive'] || DEF_KEEPALIVE) * SECOND\n , UUID = setup['uuid'] || db['get'](SUBSCRIBE_KEY+'uuid')||'';\n\n var leave_on_unload = setup['leave_on_unload'] || 0;\n\n setup['xdr'] = xdr;\n setup['db'] = db;\n setup['error'] = setup['error'] || error;\n setup['_is_online'] = _is_online;\n setup['jsonp_cb'] = jsonp_cb;\n setup['hmac_SHA256']= get_hmac_SHA256;\n setup['crypto_obj'] = crypto_obj();\n setup['sendBeacon'] = sendBeacon;\n setup['params'] = { 'pnsdk' : PNSDK }\n\n var SELF = function(setup) {\n return CREATE_PUBNUB(setup);\n };\n\n var PN = PN_API(setup);\n\n for (var prop in PN) {\n if (PN.hasOwnProperty(prop)) {\n SELF[prop] = PN[prop];\n }\n }\n SELF['css'] = css;\n SELF['$'] = $;\n SELF['create'] = create;\n SELF['bind'] = bind;\n SELF['head'] = head;\n SELF['search'] = search;\n SELF['attr'] = attr;\n SELF['events'] = events;\n SELF['init'] = SELF;\n SELF['secure'] = SELF;\n SELF['crypto_obj'] = crypto_obj(); // export to instance\n\n\n // Add Leave Functions\n bind( 'beforeunload', window, function() {\n if (leave_on_unload) SELF['each-channel'](function(ch){ SELF['LEAVE']( ch.name, 0 ) });\n return true;\n } );\n\n // Return without Testing\n if (setup['notest']) return SELF;\n\n bind( 'offline', window, SELF['offline'] );\n bind( 'offline', document, SELF['offline'] );\n\n // Return PUBNUB Socket Object\n return SELF;\n};\nCREATE_PUBNUB['init'] = CREATE_PUBNUB;\nCREATE_PUBNUB['secure'] = CREATE_PUBNUB;\nCREATE_PUBNUB['crypto_obj'] = crypto_obj(); // export to constructor\n\n// Bind for PUBNUB Readiness to Subscribe\nif (document.readyState === 'complete') {\n timeout( ready, 0 );\n}\nelse {\n bind( 'load', window, function(){ timeout( ready, 0 ) } );\n}\n\nvar pdiv = PDIV || {};\n\n// CREATE A PUBNUB GLOBAL OBJECT\nPUBNUB = CREATE_PUBNUB({\n 'notest' : 1,\n 'publish_key' : attr( pdiv, 'pub-key' ),\n 'subscribe_key' : attr( pdiv, 'sub-key' ),\n 'ssl' : !document.location.href.indexOf('https') ||\n attr( pdiv, 'ssl' ) == 'on',\n 'origin' : attr( pdiv, 'origin' ),\n 'uuid' : attr( pdiv, 'uuid' )\n});\n\n// jQuery Interface\nwindow['jQuery'] && (window['jQuery']['PUBNUB'] = CREATE_PUBNUB);\n\n// For Modern JS + Testling.js - http://testling.com/\ntypeof(module) !== 'undefined' && (module['exports'] = PUBNUB) && ready();\n\nvar pubnubs = $('pubnubs') || 0;\n\n// LEAVE NOW IF NO PDIV.\nif (!PDIV) return;\n\n// PUBNUB Flash Socket\ncss( PDIV, { 'position' : 'absolute', 'top' : -SECOND } );\n\nif ('opera' in window || attr( PDIV, 'flash' )) PDIV['innerHTML'] =\n '';\n\n// Create Interface for Opera Flash\nPUBNUB['rdx'] = function( id, data ) {\n if (!data) return FDomainRequest[id]['onerror']();\n FDomainRequest[id]['responseText'] = unescape(data);\n FDomainRequest[id]['onload']();\n};\n\nfunction FDomainRequest() {\n if (!pubnubs || !pubnubs['get']) return 0;\n\n var fdomainrequest = {\n 'id' : FDomainRequest['id']++,\n 'send' : function() {},\n 'abort' : function() { fdomainrequest['id'] = {} },\n 'open' : function( method, url ) {\n FDomainRequest[fdomainrequest['id']] = fdomainrequest;\n pubnubs['get']( fdomainrequest['id'], url );\n }\n };\n\n return fdomainrequest;\n}\nFDomainRequest['id'] = SECOND;\n\n})();\n(function(){\n\n// ---------------------------------------------------------------------------\n// WEBSOCKET INTERFACE\n// ---------------------------------------------------------------------------\nvar WS = PUBNUB['ws'] = function( url, protocols ) {\n if (!(this instanceof WS)) return new WS( url, protocols );\n\n var self = this\n , url = self.url = url || ''\n , protocol = self.protocol = protocols || 'Sec-WebSocket-Protocol'\n , bits = url.split('/')\n , setup = {\n 'ssl' : bits[0] === 'wss:'\n ,'origin' : bits[2]\n ,'publish_key' : bits[3]\n ,'subscribe_key' : bits[4]\n ,'channel' : bits[5]\n };\n\n // READY STATES\n self['CONNECTING'] = 0; // The connection is not yet open.\n self['OPEN'] = 1; // The connection is open and ready to communicate.\n self['CLOSING'] = 2; // The connection is in the process of closing.\n self['CLOSED'] = 3; // The connection is closed or couldn't be opened.\n\n // CLOSE STATES\n self['CLOSE_NORMAL'] = 1000; // Normal Intended Close; completed.\n self['CLOSE_GOING_AWAY'] = 1001; // Closed Unexpecttedly.\n self['CLOSE_PROTOCOL_ERROR'] = 1002; // Server: Not Supported.\n self['CLOSE_UNSUPPORTED'] = 1003; // Server: Unsupported Protocol.\n self['CLOSE_TOO_LARGE'] = 1004; // Server: Too Much Data.\n self['CLOSE_NO_STATUS'] = 1005; // Server: No reason.\n self['CLOSE_ABNORMAL'] = 1006; // Abnormal Disconnect.\n\n // Events Default\n self['onclose'] = self['onerror'] =\n self['onmessage'] = self['onopen'] =\n self['onsend'] = function(){};\n\n // Attributes\n self['binaryType'] = '';\n self['extensions'] = '';\n self['bufferedAmount'] = 0;\n self['trasnmitting'] = false;\n self['buffer'] = [];\n self['readyState'] = self['CONNECTING'];\n\n // Close if no setup.\n if (!url) {\n self['readyState'] = self['CLOSED'];\n self['onclose']({\n 'code' : self['CLOSE_ABNORMAL'],\n 'reason' : 'Missing URL',\n 'wasClean' : true\n });\n return self;\n }\n\n // PubNub WebSocket Emulation\n self.pubnub = PUBNUB['init'](setup);\n self.pubnub.setup = setup;\n self.setup = setup;\n\n self.pubnub['subscribe']({\n 'restore' : false,\n 'channel' : setup['channel'],\n 'disconnect' : self['onerror'],\n 'reconnect' : self['onopen'],\n 'error' : function() {\n self['onclose']({\n 'code' : self['CLOSE_ABNORMAL'],\n 'reason' : 'Missing URL',\n 'wasClean' : false\n });\n },\n 'callback' : function(message) {\n self['onmessage']({ 'data' : message });\n },\n 'connect' : function() {\n self['readyState'] = self['OPEN'];\n self['onopen']();\n }\n });\n};\n\n// ---------------------------------------------------------------------------\n// WEBSOCKET SEND\n// ---------------------------------------------------------------------------\nWS.prototype.send = function(data) {\n var self = this;\n self.pubnub['publish']({\n 'channel' : self.pubnub.setup['channel'],\n 'message' : data,\n 'callback' : function(response) {\n self['onsend']({ 'data' : response });\n }\n });\n};\n\n// ---------------------------------------------------------------------------\n// WEBSOCKET CLOSE\n// ---------------------------------------------------------------------------\nWS.prototype.close = function() {\n var self = this;\n self.pubnub['unsubscribe']({ 'channel' : self.pubnub.setup['channel'] });\n self['readyState'] = self['CLOSED'];\n self['onclose']({});\n};\n\n})();\n/*\nCryptoJS v3.1.2\ncode.google.com/p/crypto-js\n(c) 2009-2013 by Jeff Mott. All rights reserved.\ncode.google.com/p/crypto-js/wiki/License\n*/\nvar CryptoJS=CryptoJS||function(h,s){var f={},g=f.lib={},q=function(){},m=g.Base={extend:function(a){q.prototype=this;var c=new q;a&&c.mixIn(a);c.hasOwnProperty(\"init\")||(c.init=function(){c.$super.init.apply(this,arguments)});c.init.prototype=c;c.$super=this;return c},create:function(){var a=this.extend();a.init.apply(a,arguments);return a},init:function(){},mixIn:function(a){for(var c in a)a.hasOwnProperty(c)&&(this[c]=a[c]);a.hasOwnProperty(\"toString\")&&(this.toString=a.toString)},clone:function(){return this.init.prototype.extend(this)}},\nr=g.WordArray=m.extend({init:function(a,c){a=this.words=a||[];this.sigBytes=c!=s?c:4*a.length},toString:function(a){return(a||k).stringify(this)},concat:function(a){var c=this.words,d=a.words,b=this.sigBytes;a=a.sigBytes;this.clamp();if(b%4)for(var e=0;e>>2]|=(d[e>>>2]>>>24-8*(e%4)&255)<<24-8*((b+e)%4);else if(65535>>2]=d[e>>>2];else c.push.apply(c,d);this.sigBytes+=a;return this},clamp:function(){var a=this.words,c=this.sigBytes;a[c>>>2]&=4294967295<<\n32-8*(c%4);a.length=h.ceil(c/4)},clone:function(){var a=m.clone.call(this);a.words=this.words.slice(0);return a},random:function(a){for(var c=[],d=0;d>>2]>>>24-8*(b%4)&255;d.push((e>>>4).toString(16));d.push((e&15).toString(16))}return d.join(\"\")},parse:function(a){for(var c=a.length,d=[],b=0;b>>3]|=parseInt(a.substr(b,\n2),16)<<24-4*(b%8);return new r.init(d,c/2)}},n=l.Latin1={stringify:function(a){var c=a.words;a=a.sigBytes;for(var d=[],b=0;b>>2]>>>24-8*(b%4)&255));return d.join(\"\")},parse:function(a){for(var c=a.length,d=[],b=0;b>>2]|=(a.charCodeAt(b)&255)<<24-8*(b%4);return new r.init(d,c)}},j=l.Utf8={stringify:function(a){try{return decodeURIComponent(escape(n.stringify(a)))}catch(c){throw Error(\"Malformed UTF-8 data\");}},parse:function(a){return n.parse(unescape(encodeURIComponent(a)))}},\nu=g.BufferedBlockAlgorithm=m.extend({reset:function(){this._data=new r.init;this._nDataBytes=0},_append:function(a){\"string\"==typeof a&&(a=j.parse(a));this._data.concat(a);this._nDataBytes+=a.sigBytes},_process:function(a){var c=this._data,d=c.words,b=c.sigBytes,e=this.blockSize,f=b/(4*e),f=a?h.ceil(f):h.max((f|0)-this._minBufferSize,0);a=f*e;b=h.min(4*a,b);if(a){for(var g=0;gn;){var j;a:{j=k;for(var u=h.sqrt(j),t=2;t<=u;t++)if(!(j%t)){j=!1;break a}j=!0}j&&(8>n&&(m[n]=l(h.pow(k,0.5))),r[n]=l(h.pow(k,1/3)),n++);k++}var a=[],f=f.SHA256=q.extend({_doReset:function(){this._hash=new g.init(m.slice(0))},_doProcessBlock:function(c,d){for(var b=this._hash.words,e=b[0],f=b[1],g=b[2],j=b[3],h=b[4],m=b[5],n=b[6],q=b[7],p=0;64>p;p++){if(16>p)a[p]=\nc[d+p]|0;else{var k=a[p-15],l=a[p-2];a[p]=((k<<25|k>>>7)^(k<<14|k>>>18)^k>>>3)+a[p-7]+((l<<15|l>>>17)^(l<<13|l>>>19)^l>>>10)+a[p-16]}k=q+((h<<26|h>>>6)^(h<<21|h>>>11)^(h<<7|h>>>25))+(h&m^~h&n)+r[p]+a[p];l=((e<<30|e>>>2)^(e<<19|e>>>13)^(e<<10|e>>>22))+(e&f^e&g^f&g);q=n;n=m;m=h;h=j+k|0;j=g;g=f;f=e;e=k+l|0}b[0]=b[0]+e|0;b[1]=b[1]+f|0;b[2]=b[2]+g|0;b[3]=b[3]+j|0;b[4]=b[4]+h|0;b[5]=b[5]+m|0;b[6]=b[6]+n|0;b[7]=b[7]+q|0},_doFinalize:function(){var a=this._data,d=a.words,b=8*this._nDataBytes,e=8*a.sigBytes;\nd[e>>>5]|=128<<24-e%32;d[(e+64>>>9<<4)+14]=h.floor(b/4294967296);d[(e+64>>>9<<4)+15]=b;a.sigBytes=4*d.length;this._process();return this._hash},clone:function(){var a=q.clone.call(this);a._hash=this._hash.clone();return a}});s.SHA256=q._createHelper(f);s.HmacSHA256=q._createHmacHelper(f)})(Math);\n\n// HMAC SHA256\n(function(){var h=CryptoJS,s=h.enc.Utf8;h.algo.HMAC=h.lib.Base.extend({init:function(f,g){f=this._hasher=new f.init;\"string\"==typeof g&&(g=s.parse(g));var h=f.blockSize,m=4*h;g.sigBytes>m&&(g=f.finalize(g));g.clamp();for(var r=this._oKey=g.clone(),l=this._iKey=g.clone(),k=r.words,n=l.words,j=0;j>>2]>>>24-8*(r%4)&255)<<16|(l[r+1>>>2]>>>24-8*((r+1)%4)&255)<<8|l[r+2>>>2]>>>24-8*((r+2)%4)&255,v=0;4>v&&r+0.75*v>>6*(3-v)&63));if(l=t.charAt(64))for(;d.length%4;)d.push(l);return d.join(\"\")},parse:function(d){var l=d.length,s=this._map,t=s.charAt(64);t&&(t=d.indexOf(t),-1!=t&&(l=t));for(var t=[],r=0,w=0;w<\nl;w++)if(w%4){var v=s.indexOf(d.charAt(w-1))<<2*(w%4),b=s.indexOf(d.charAt(w))>>>6-2*(w%4);t[r>>>2]|=(v|b)<<24-8*(r%4);r++}return p.create(t,r)},_map:\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\"}})();\n\n// BlockCipher\n(function(u){function p(b,n,a,c,e,j,k){b=b+(n&a|~n&c)+e+k;return(b<>>32-j)+n}function d(b,n,a,c,e,j,k){b=b+(n&c|a&~c)+e+k;return(b<>>32-j)+n}function l(b,n,a,c,e,j,k){b=b+(n^a^c)+e+k;return(b<>>32-j)+n}function s(b,n,a,c,e,j,k){b=b+(a^(n|~c))+e+k;return(b<>>32-j)+n}for(var t=CryptoJS,r=t.lib,w=r.WordArray,v=r.Hasher,r=t.algo,b=[],x=0;64>x;x++)b[x]=4294967296*u.abs(u.sin(x+1))|0;r=r.MD5=v.extend({_doReset:function(){this._hash=new w.init([1732584193,4023233417,2562383102,271733878])},\n_doProcessBlock:function(q,n){for(var a=0;16>a;a++){var c=n+a,e=q[c];q[c]=(e<<8|e>>>24)&16711935|(e<<24|e>>>8)&4278255360}var a=this._hash.words,c=q[n+0],e=q[n+1],j=q[n+2],k=q[n+3],z=q[n+4],r=q[n+5],t=q[n+6],w=q[n+7],v=q[n+8],A=q[n+9],B=q[n+10],C=q[n+11],u=q[n+12],D=q[n+13],E=q[n+14],x=q[n+15],f=a[0],m=a[1],g=a[2],h=a[3],f=p(f,m,g,h,c,7,b[0]),h=p(h,f,m,g,e,12,b[1]),g=p(g,h,f,m,j,17,b[2]),m=p(m,g,h,f,k,22,b[3]),f=p(f,m,g,h,z,7,b[4]),h=p(h,f,m,g,r,12,b[5]),g=p(g,h,f,m,t,17,b[6]),m=p(m,g,h,f,w,22,b[7]),\nf=p(f,m,g,h,v,7,b[8]),h=p(h,f,m,g,A,12,b[9]),g=p(g,h,f,m,B,17,b[10]),m=p(m,g,h,f,C,22,b[11]),f=p(f,m,g,h,u,7,b[12]),h=p(h,f,m,g,D,12,b[13]),g=p(g,h,f,m,E,17,b[14]),m=p(m,g,h,f,x,22,b[15]),f=d(f,m,g,h,e,5,b[16]),h=d(h,f,m,g,t,9,b[17]),g=d(g,h,f,m,C,14,b[18]),m=d(m,g,h,f,c,20,b[19]),f=d(f,m,g,h,r,5,b[20]),h=d(h,f,m,g,B,9,b[21]),g=d(g,h,f,m,x,14,b[22]),m=d(m,g,h,f,z,20,b[23]),f=d(f,m,g,h,A,5,b[24]),h=d(h,f,m,g,E,9,b[25]),g=d(g,h,f,m,k,14,b[26]),m=d(m,g,h,f,v,20,b[27]),f=d(f,m,g,h,D,5,b[28]),h=d(h,f,\nm,g,j,9,b[29]),g=d(g,h,f,m,w,14,b[30]),m=d(m,g,h,f,u,20,b[31]),f=l(f,m,g,h,r,4,b[32]),h=l(h,f,m,g,v,11,b[33]),g=l(g,h,f,m,C,16,b[34]),m=l(m,g,h,f,E,23,b[35]),f=l(f,m,g,h,e,4,b[36]),h=l(h,f,m,g,z,11,b[37]),g=l(g,h,f,m,w,16,b[38]),m=l(m,g,h,f,B,23,b[39]),f=l(f,m,g,h,D,4,b[40]),h=l(h,f,m,g,c,11,b[41]),g=l(g,h,f,m,k,16,b[42]),m=l(m,g,h,f,t,23,b[43]),f=l(f,m,g,h,A,4,b[44]),h=l(h,f,m,g,u,11,b[45]),g=l(g,h,f,m,x,16,b[46]),m=l(m,g,h,f,j,23,b[47]),f=s(f,m,g,h,c,6,b[48]),h=s(h,f,m,g,w,10,b[49]),g=s(g,h,f,m,\nE,15,b[50]),m=s(m,g,h,f,r,21,b[51]),f=s(f,m,g,h,u,6,b[52]),h=s(h,f,m,g,k,10,b[53]),g=s(g,h,f,m,B,15,b[54]),m=s(m,g,h,f,e,21,b[55]),f=s(f,m,g,h,v,6,b[56]),h=s(h,f,m,g,x,10,b[57]),g=s(g,h,f,m,t,15,b[58]),m=s(m,g,h,f,D,21,b[59]),f=s(f,m,g,h,z,6,b[60]),h=s(h,f,m,g,C,10,b[61]),g=s(g,h,f,m,j,15,b[62]),m=s(m,g,h,f,A,21,b[63]);a[0]=a[0]+f|0;a[1]=a[1]+m|0;a[2]=a[2]+g|0;a[3]=a[3]+h|0},_doFinalize:function(){var b=this._data,n=b.words,a=8*this._nDataBytes,c=8*b.sigBytes;n[c>>>5]|=128<<24-c%32;var e=u.floor(a/\n4294967296);n[(c+64>>>9<<4)+15]=(e<<8|e>>>24)&16711935|(e<<24|e>>>8)&4278255360;n[(c+64>>>9<<4)+14]=(a<<8|a>>>24)&16711935|(a<<24|a>>>8)&4278255360;b.sigBytes=4*(n.length+1);this._process();b=this._hash;n=b.words;for(a=0;4>a;a++)c=n[a],n[a]=(c<<8|c>>>24)&16711935|(c<<24|c>>>8)&4278255360;return b},clone:function(){var b=v.clone.call(this);b._hash=this._hash.clone();return b}});t.MD5=v._createHelper(r);t.HmacMD5=v._createHmacHelper(r)})(Math);\n(function(){var u=CryptoJS,p=u.lib,d=p.Base,l=p.WordArray,p=u.algo,s=p.EvpKDF=d.extend({cfg:d.extend({keySize:4,hasher:p.MD5,iterations:1}),init:function(d){this.cfg=this.cfg.extend(d)},compute:function(d,r){for(var p=this.cfg,s=p.hasher.create(),b=l.create(),u=b.words,q=p.keySize,p=p.iterations;u.length>>2]&255}};d.BlockCipher=v.extend({cfg:v.cfg.extend({mode:b,padding:q}),reset:function(){v.reset.call(this);var a=this.cfg,b=a.iv,a=a.mode;if(this._xformMode==this._ENC_XFORM_MODE)var c=a.createEncryptor;else c=a.createDecryptor,this._minBufferSize=1;this._mode=c.call(a,\nthis,b&&b.words)},_doProcessBlock:function(a,b){this._mode.processBlock(a,b)},_doFinalize:function(){var a=this.cfg.padding;if(this._xformMode==this._ENC_XFORM_MODE){a.pad(this._data,this.blockSize);var b=this._process(!0)}else b=this._process(!0),a.unpad(b);return b},blockSize:4});var n=d.CipherParams=l.extend({init:function(a){this.mixIn(a)},toString:function(a){return(a||this.formatter).stringify(this)}}),b=(p.format={}).OpenSSL={stringify:function(a){var b=a.ciphertext;a=a.salt;return(a?s.create([1398893684,\n1701076831]).concat(a).concat(b):b).toString(r)},parse:function(a){a=r.parse(a);var b=a.words;if(1398893684==b[0]&&1701076831==b[1]){var c=s.create(b.slice(2,4));b.splice(0,4);a.sigBytes-=16}return n.create({ciphertext:a,salt:c})}},a=d.SerializableCipher=l.extend({cfg:l.extend({format:b}),encrypt:function(a,b,c,d){d=this.cfg.extend(d);var l=a.createEncryptor(c,d);b=l.finalize(b);l=l.cfg;return n.create({ciphertext:b,key:c,iv:l.iv,algorithm:a,mode:l.mode,padding:l.padding,blockSize:a.blockSize,formatter:d.format})},\ndecrypt:function(a,b,c,d){d=this.cfg.extend(d);b=this._parse(b,d.format);return a.createDecryptor(c,d).finalize(b.ciphertext)},_parse:function(a,b){return\"string\"==typeof a?b.parse(a,this):a}}),p=(p.kdf={}).OpenSSL={execute:function(a,b,c,d){d||(d=s.random(8));a=w.create({keySize:b+c}).compute(a,d);c=s.create(a.words.slice(b),4*c);a.sigBytes=4*b;return n.create({key:a,iv:c,salt:d})}},c=d.PasswordBasedCipher=a.extend({cfg:a.cfg.extend({kdf:p}),encrypt:function(b,c,d,l){l=this.cfg.extend(l);d=l.kdf.execute(d,\nb.keySize,b.ivSize);l.iv=d.iv;b=a.encrypt.call(this,b,c,d.key,l);b.mixIn(d);return b},decrypt:function(b,c,d,l){l=this.cfg.extend(l);c=this._parse(c,l.format);d=l.kdf.execute(d,b.keySize,b.ivSize,c.salt);l.iv=d.iv;return a.decrypt.call(this,b,c,d.key,l)}})}();\n\n// AES\n(function(){for(var u=CryptoJS,p=u.lib.BlockCipher,d=u.algo,l=[],s=[],t=[],r=[],w=[],v=[],b=[],x=[],q=[],n=[],a=[],c=0;256>c;c++)a[c]=128>c?c<<1:c<<1^283;for(var e=0,j=0,c=0;256>c;c++){var k=j^j<<1^j<<2^j<<3^j<<4,k=k>>>8^k&255^99;l[e]=k;s[k]=e;var z=a[e],F=a[z],G=a[F],y=257*a[k]^16843008*k;t[e]=y<<24|y>>>8;r[e]=y<<16|y>>>16;w[e]=y<<8|y>>>24;v[e]=y;y=16843009*G^65537*F^257*z^16843008*e;b[k]=y<<24|y>>>8;x[k]=y<<16|y>>>16;q[k]=y<<8|y>>>24;n[k]=y;e?(e=z^a[a[a[G^z]]],j^=a[a[j]]):e=j=1}var H=[0,1,2,4,8,\n16,32,64,128,27,54],d=d.AES=p.extend({_doReset:function(){for(var a=this._key,c=a.words,d=a.sigBytes/4,a=4*((this._nRounds=d+6)+1),e=this._keySchedule=[],j=0;j>>24]<<24|l[k>>>16&255]<<16|l[k>>>8&255]<<8|l[k&255]):(k=k<<8|k>>>24,k=l[k>>>24]<<24|l[k>>>16&255]<<16|l[k>>>8&255]<<8|l[k&255],k^=H[j/d|0]<<24);e[j]=e[j-d]^k}c=this._invKeySchedule=[];for(d=0;dd||4>=j?k:b[l[k>>>24]]^x[l[k>>>16&255]]^q[l[k>>>\n8&255]]^n[l[k&255]]},encryptBlock:function(a,b){this._doCryptBlock(a,b,this._keySchedule,t,r,w,v,l)},decryptBlock:function(a,c){var d=a[c+1];a[c+1]=a[c+3];a[c+3]=d;this._doCryptBlock(a,c,this._invKeySchedule,b,x,q,n,s);d=a[c+1];a[c+1]=a[c+3];a[c+3]=d},_doCryptBlock:function(a,b,c,d,e,j,l,f){for(var m=this._nRounds,g=a[b]^c[0],h=a[b+1]^c[1],k=a[b+2]^c[2],n=a[b+3]^c[3],p=4,r=1;r>>24]^e[h>>>16&255]^j[k>>>8&255]^l[n&255]^c[p++],s=d[h>>>24]^e[k>>>16&255]^j[n>>>8&255]^l[g&255]^c[p++],t=\nd[k>>>24]^e[n>>>16&255]^j[g>>>8&255]^l[h&255]^c[p++],n=d[n>>>24]^e[g>>>16&255]^j[h>>>8&255]^l[k&255]^c[p++],g=q,h=s,k=t;q=(f[g>>>24]<<24|f[h>>>16&255]<<16|f[k>>>8&255]<<8|f[n&255])^c[p++];s=(f[h>>>24]<<24|f[k>>>16&255]<<16|f[n>>>8&255]<<8|f[g&255])^c[p++];t=(f[k>>>24]<<24|f[n>>>16&255]<<16|f[g>>>8&255]<<8|f[h&255])^c[p++];n=(f[n>>>24]<<24|f[g>>>16&255]<<16|f[h>>>8&255]<<8|f[k&255])^c[p++];a[b]=q;a[b+1]=s;a[b+2]=t;a[b+3]=n},keySize:8});u.AES=p._createHelper(d)})();\n\n// Mode ECB\nCryptoJS.mode.ECB = (function () {\n var ECB = CryptoJS.lib.BlockCipherMode.extend();\n\n ECB.Encryptor = ECB.extend({\n processBlock: function (words, offset) {\n this._cipher.encryptBlock(words, offset);\n }\n });\n\n ECB.Decryptor = ECB.extend({\n processBlock: function (words, offset) {\n this._cipher.decryptBlock(words, offset);\n }\n });\n\n return ECB;\n}());// Moved to hmac-sha-256.js\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./bower_components/pubnub/web/pubnub.js\n ** module id = 10\n ** module chunks = 0\n **/","export default class Cache {\n\n static defaultPrefix = 'rc-';\n\n constructor(storage, prefix) {\n this.setPrefix(prefix);\n this._storage = storage;\n }\n\n setPrefix(prefix) {\n this._prefix = prefix || Cache.defaultPrefix;\n return this;\n }\n\n setItem(key, data) {\n this._storage[this._prefixKey(key)] = JSON.stringify(data);\n return this;\n }\n\n removeItem(key) {\n delete this._storage[this._prefixKey(key)];\n return this;\n }\n\n getItem(key) {\n var item = this._storage[this._prefixKey(key)];\n if (!item) return null;\n return JSON.parse(item);\n }\n\n clean() {\n\n for (var key in this._storage) {\n\n if (!this._storage.hasOwnProperty(key)) continue;\n\n if (key.indexOf(this._prefix) === 0) {\n delete this._storage[key];\n }\n\n }\n\n return this;\n\n }\n\n _prefixKey(key) {\n return this._prefix + key;\n }\n\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/core/Cache.js\n **/","export default class Observable {\n\n constructor() {\n this.off();\n }\n\n hasListeners(event) {\n return (event in this._listeners);\n }\n\n on(events, callback) {\n\n if (typeof events == 'string') events = [events];\n if (!events) throw new Error('No events to subscribe to');\n if (typeof callback !== 'function') throw new Error('Callback must be a function');\n\n events.forEach((event) => {\n\n if (!this.hasListeners(event)) this._listeners[event] = [];\n\n this._listeners[event].push(callback);\n\n });\n\n return this;\n\n }\n\n emit(event, ...args) {\n\n var result = null;\n\n if (!this.hasListeners(event)) return null;\n\n this._listeners[event].some((callback) => {\n\n result = callback.apply(this, args);\n return (result === false);\n\n });\n\n return result;\n\n }\n\n off(event, callback) {\n\n if (!event) {\n\n this._listeners = {};\n\n } else {\n\n if (!callback) {\n\n delete this._listeners[event];\n\n } else {\n\n if (!this.hasListeners(event)) return this;\n\n this._listeners[event].forEach((cb, i) => {\n\n if (cb === callback) delete this._listeners[event][i];\n\n });\n\n }\n\n }\n\n return this;\n\n }\n\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/core/Observable.js\n **/","import {Promise} from '../core/Externals';\nimport {poll, stopPolling} from './Utils';\n\nexport default class Queue {\n\n static _pollInterval = 250;\n static _releaseTimeout = 5000;\n\n constructor(cache, cacheId) {\n\n this._cache = cache;\n this._cacheId = cacheId;\n this._promise = null;\n\n }\n\n isPaused() {\n\n var time = this._cache.getItem(this._cacheId);\n\n return !!time && Date.now() - parseInt(time) < Queue._releaseTimeout;\n }\n\n pause() {\n this._cache.setItem(this._cacheId, Date.now());\n return this;\n }\n\n resume() {\n this._cache.removeItem(this._cacheId);\n return this;\n }\n\n poll() {\n\n if (this._promise) return this._promise;\n\n this._promise = new Promise((resolve, reject) => {\n\n poll((next) => {\n\n if (this.isPaused()) return next();\n\n this._promise = null;\n\n this.resume(); // this is actually not needed but why not\n\n resolve(null);\n\n }, Queue._pollInterval);\n\n });\n\n return this._promise;\n\n }\n\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/core/Queue.js\n **/","import {fetch, Request, Response, Headers, Promise} from '../core/Externals';\nimport {queryStringify} from '../core/Utils';\nimport {findHeaderName} from './Utils';\nimport Observable from '../core/Observable';\nimport ApiResponse from './ApiResponse';\n\nexport default class Client extends Observable {\n\n static _allowedMethods = ['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'OPTIONS', 'HEAD'];\n\n events = {\n beforeRequest: 'beforeRequest',\n requestSuccess: 'requestSuccess',\n requestError: 'requestError'\n };\n\n /**\n * @param {Request} request\n * @return {Promise}\n */\n async sendRequest(request) {\n\n var apiResponse = new ApiResponse(request);\n\n try {\n\n //TODO Stop request if listeners return false\n this.emit(this.events.beforeRequest, apiResponse);\n\n apiResponse._response = await this._loadResponse(request);\n\n if (apiResponse._isMultipart() || apiResponse._isJson()) {\n apiResponse._text = await apiResponse.response().text();\n }\n\n if (!apiResponse.ok()) throw new Error('Response has unsuccessful status');\n\n this.emit(this.events.requestSuccess, apiResponse);\n\n return apiResponse;\n\n } catch (e) {\n\n if (!e.apiResponse) e = this.makeError(e, apiResponse);\n\n this.emit(this.events.requestError, e);\n\n throw e;\n\n }\n\n }\n\n /**\n * @param {Request} request\n * @return {Promise}\n * @private\n */\n async _loadResponse(request) {\n return await fetch.call(null, request);\n }\n\n /**\n * Wraps the JS Error object with transaction information\n * @param {Error|IApiError} e\n * @param {ApiResponse} apiResponse\n * @return {IApiError}\n */\n makeError(e, apiResponse) {\n\n // Wrap only if regular error\n if (!e.hasOwnProperty('apiResponse') && !e.hasOwnProperty('originalMessage')) {\n\n e.apiResponse = apiResponse;\n e.originalMessage = e.message;\n e.message = (apiResponse && apiResponse.error(true)) || e.originalMessage;\n\n }\n\n return e;\n\n }\n\n /**\n *\n * @param {object} init\n * @param {object} [init.url]\n * @param {object} [init.body]\n * @param {string} [init.method]\n * @param {object} [init.query]\n * @param {object} [init.headers]\n * @return {Request}\n */\n createRequest(init) {\n\n init = init || {};\n init.headers = init.headers || {};\n\n // Sanity checks\n if (!init.url) throw new Error('Url is not defined');\n if (!init.method) init.method = 'GET';\n if (init.method && Client._allowedMethods.indexOf(init.method) < 0) throw new Error('Method has wrong value: ' + init.method);\n\n // Defaults\n init.credentials = init.credentials || 'include';\n init.mode = init.mode || 'cors';\n\n // Append Query String\n if (init.query) {\n init.url = init.url + (init.url.indexOf('?') > -1 ? '&' : '?') + queryStringify(init.query);\n }\n\n if (!(findHeaderName('Accept', init.headers))) {\n init.headers['Accept'] = ApiResponse._jsonContentType;\n }\n\n // Serialize body\n //TODO Check that body is a plain object\n if (typeof init.body !== 'string' || !init.body) {\n\n var contentTypeHeaderName = findHeaderName(ApiResponse._contentType, init.headers);\n\n if (!contentTypeHeaderName) {\n contentTypeHeaderName = ApiResponse._contentType;\n init.headers[contentTypeHeaderName] = ApiResponse._jsonContentType;\n }\n\n var contentType = init.headers[contentTypeHeaderName];\n\n // Assign a new encoded body\n if (contentType.indexOf(ApiResponse._jsonContentType) > -1) {\n init.body = JSON.stringify(init.body);\n } else if (contentType.indexOf(ApiResponse._urlencodedContentType) > -1) {\n init.body = queryStringify(init.body);\n }\n\n }\n\n // Create a request with encoded body\n var req = new Request(init.url, init);\n\n // Keep the original body accessible directly (for mocks)\n req.originalBody = init.body;\n\n return req;\n\n }\n\n}\n\n/**\n * @name IApiError\n * @property {string} stack\n * @property {string} originalMessage\n * @property {ApiResponse} apiResponse\n */\n\n\n/** WEBPACK FOOTER **\n ** ./src/http/Client.js\n **/","import {fetch, Request, Response, Headers, Promise} from '../core/Externals';\nimport * as utils from '../core/Utils';\n\n/**\n * Creates a response\n * @param stringBody\n * @param init\n * @return {Response}\n */\nexport function createResponse(stringBody, init) {\n\n init = init || {};\n\n var response = new Response(stringBody, init);\n\n //TODO Wait for https://github.com/bitinn/node-fetch/issues/38\n if (utils.isNodeJS()) {\n\n response._text = stringBody;\n response._decode = function() {\n return this._text;\n };\n\n }\n\n return response;\n\n}\n\nexport function findHeaderName(name, headers) {\n name = name.toLowerCase();\n return Object.keys(headers).reduce(function(res, key) {\n if (res) return res;\n if (name == key.toLowerCase()) return key;\n return res;\n }, null);\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/http/Utils.js\n **/","import {fetch, Request, Response, Headers, Promise} from '../core/Externals';\nimport * as utils from './Utils';\n\nexport default class ApiResponse {\n\n static _contentType = 'Content-Type';\n static _jsonContentType = 'application/json';\n static _multipartContentType = 'multipart/mixed';\n static _urlencodedContentType = 'application/x-www-form-urlencoded';\n static _headerSeparator = ':';\n static _bodySeparator = '\\n\\n';\n static _boundarySeparator = '--';\n\n /**\n * @param {Request} request\n * @param {Response} response\n * @param {string} responseText\n */\n constructor(request, response, responseText) {\n\n /** @type {Request} */\n this._request = request;\n\n /** @type {Response} */\n this._response = response;\n\n this._text = responseText;\n this._json = null;\n this._multipart = [];\n\n }\n\n /**\n * @return {Response}\n */\n response() {\n return this._response;\n }\n\n /**\n * @return {Request}\n */\n request() {\n return this._request;\n }\n\n /**\n * @return {boolean}\n */\n ok() {\n return this._response && this._response.ok;\n }\n\n /**\n * @return {string}\n */\n text() {\n if (!this._isJson() && !this._isMultipart()) throw new Error('Response is not text');\n return this._text;\n }\n\n /**\n * @return {object}\n */\n json() {\n if (!this._isJson()) throw new Error('Response is not JSON');\n if (!this._json) {\n this._json = this._text ? JSON.parse(this._text) : null;\n }\n return this._json;\n }\n\n /**\n * @param [skipOKCheck]\n * @return {string}\n */\n error(skipOKCheck) {\n\n if (this.ok() && !skipOKCheck) return null;\n\n var message = (this._response && this._response.status ? this._response.status + ' ' : '') +\n (this._response && this._response.statusText ? this._response.statusText : '');\n\n try {\n\n if (this.json().message) message = this.json().message;\n if (this.json().error_description) message = this.json().error_description;\n if (this.json().description) message = this.json().description;\n\n } catch (e) {}\n\n return message;\n\n }\n\n /**\n * @return {ApiResponse[]}\n */\n multipart() {\n\n if (!this._isMultipart()) throw new Error('Response is not multipart');\n\n if (!this._multipart.length) {\n\n // Step 1. Split multipart response\n\n var text = this.text();\n\n if (!text) throw new Error('No response body');\n\n var boundary = this._getContentType().match(/boundary=([^;]+)/i)[1];\n\n if (!boundary) throw new Error('Cannot find boundary');\n\n var parts = text.toString().split(ApiResponse._boundarySeparator + boundary);\n\n if (parts[0].trim() === '') parts.shift();\n if (parts[parts.length - 1].trim() == ApiResponse._boundarySeparator) parts.pop();\n\n if (parts.length < 1) throw new Error('No parts in body');\n\n // Step 2. Parse status info\n\n var statusInfo = ApiResponse.create(parts.shift(), this._response.status, this._response.statusText).json();\n\n // Step 3. Parse all other parts\n\n this._multipart = parts.map((part:string, i) => {\n\n var status = statusInfo.response[i].status;\n\n return ApiResponse.create(part, status);\n\n });\n\n }\n\n return this._multipart;\n\n }\n\n _isContentType(contentType) {\n return this._getContentType().indexOf(contentType) > -1;\n }\n\n _getContentType() {\n return this._response.headers.get(ApiResponse._contentType) || '';\n }\n\n _isMultipart() {\n return this._isContentType(ApiResponse._multipartContentType);\n }\n\n _isUrlEncoded() {\n return this._isContentType(ApiResponse._urlencodedContentType);\n }\n\n _isJson() {\n return this._isContentType(ApiResponse._jsonContentType);\n }\n\n /**\n * Method is used to create ApiResponse object from string parts of multipart/mixed response\n * @param {string} [text]\n * @param {number} [status]\n * @param {string} [statusText]\n * @return {ApiResponse}\n */\n static create(text, status, statusText) {\n\n text = text || '';\n status = status || 200;\n statusText = statusText || 'OK';\n\n text = text.replace(/\\r/g, '');\n\n var headers = new Headers(),\n headersAndBody = text.split(ApiResponse._bodySeparator),\n headersText = (headersAndBody.length > 1) ? headersAndBody.shift() : '';\n\n text = headersAndBody.join(ApiResponse._bodySeparator);\n\n (headersText || '')\n .split('\\n')\n .forEach((header:string) => {\n\n var split = header.trim().split(ApiResponse._headerSeparator),\n key = split.shift().trim(),\n value = split.join(ApiResponse._headerSeparator).trim();\n\n if (key) headers.append(key, value);\n\n });\n\n return new ApiResponse(null, utils.createResponse(text, {\n headers: headers,\n status: status,\n statusText: statusText\n }), text);\n\n }\n\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/http/ApiResponse.js\n **/","import Registry from './Registry';\nimport {default as HttpClient} from '../http/Client';\n\nexport default class Client extends HttpClient {\n\n constructor() {\n super();\n this._registry = new Registry();\n }\n\n registry() {\n return this._registry;\n }\n\n async _loadResponse(request) {\n\n var mock = this._registry.find(request);\n\n return await mock.getResponse(request);\n\n }\n\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/mocks/ClientMock.js\n **/","import Mock from './Mock';\n\nexport default class Registry {\n\n constructor() {\n this._mocks = [];\n }\n\n add(mock) {\n this._mocks.push(mock);\n return this;\n }\n\n clear() {\n this._mocks = [];\n return this;\n }\n\n find(request) {\n\n //console.log('Registry is looking for', request);\n\n var mock = this._mocks.shift();\n\n if (!mock) throw new Error('No mock in registry for request ' + request.method + ' ' + request.url);\n\n if (!mock.test(request)) throw new Error('Wrong request ' + request.method + ' ' + request.url +\n ' for expected mock ' + mock.method() + ' ' + mock.path());\n\n return mock;\n\n }\n\n apiCall(method:string, path:string, response:any, status, statusText) {\n\n this.add(new Mock(method, path, response, status, statusText));\n\n return this;\n\n }\n\n authentication() {\n\n this.apiCall('POST', '/restapi/oauth/token', {\n 'access_token': 'ACCESS_TOKEN',\n 'token_type': 'bearer',\n 'expires_in': 3600,\n 'refresh_token': 'REFRESH_TOKEN',\n 'refresh_token_expires_in': 60480,\n 'scope': 'SMS RCM Foo Boo',\n 'expireTime': new Date().getTime() + 3600000\n });\n\n return this;\n\n }\n\n logout() {\n\n this.apiCall('POST', '/restapi/oauth/revoke', {});\n\n return this;\n\n }\n\n presenceLoad(id) {\n\n this.apiCall('GET', '/restapi/v1.0/account/~/extension/' + id + '/presence', {\n \"uri\": \"https://platform.ringcentral.com/restapi/v1.0/account/123/extension/\" + id + \"/presence\",\n \"extension\": {\n \"uri\": \"https://platform.ringcentral.com/restapi/v1.0/account/123/extension/\" + id,\n \"id\": id,\n \"extensionNumber\": \"101\"\n },\n \"activeCalls\": [],\n \"presenceStatus\": \"Available\",\n \"telephonyStatus\": \"Ringing\",\n \"userStatus\": \"Available\",\n \"dndStatus\": \"TakeAllCalls\",\n \"extensionId\": id\n });\n\n return this;\n\n }\n\n subscribeGeneric(expiresIn) {\n\n expiresIn = expiresIn || 15 * 60 * 60;\n\n var date = new Date();\n\n this.apiCall('POST', '/restapi/v1.0/subscription', {\n 'eventFilters': [\n '/restapi/v1.0/account/~/extension/~/presence'\n ],\n 'expirationTime': new Date(date.getTime() + (expiresIn * 1000)).toISOString(),\n 'expiresIn': expiresIn,\n 'deliveryMode': {\n 'transportType': 'PubNub',\n 'encryption': false,\n 'address': '123_foo',\n 'subscriberKey': 'sub-c-foo',\n 'secretKey': 'sec-c-bar'\n },\n 'id': 'foo-bar-baz',\n 'creationTime': date.toISOString(),\n 'status': 'Active',\n 'uri': 'https://platform.ringcentral.com/restapi/v1.0/subscription/foo-bar-baz'\n });\n\n return this;\n\n }\n\n subscribeOnPresence(id, detailed) {\n\n id = id || '1';\n\n var date = new Date();\n\n this.apiCall('POST', '/restapi/v1.0/subscription', {\n 'eventFilters': ['/restapi/v1.0/account/~/extension/' + id + '/presence' + (detailed ? '?detailedTelephonyState=true' : '')],\n 'expirationTime': new Date(date.getTime() + (15 * 60 * 60 * 1000)).toISOString(),\n 'deliveryMode': {\n 'transportType': 'PubNub',\n 'encryption': true,\n 'address': '123_foo',\n 'subscriberKey': 'sub-c-foo',\n 'secretKey': 'sec-c-bar',\n 'encryptionAlgorithm': 'AES',\n 'encryptionKey': 'VQwb6EVNcQPBhE/JgFZ2zw=='\n },\n 'creationTime': date.toISOString(),\n 'id': 'foo-bar-baz',\n 'status': 'Active',\n 'uri': 'https://platform.ringcentral.com/restapi/v1.0/subscription/foo-bar-baz'\n });\n\n return this;\n\n }\n\n tokenRefresh(failure) {\n\n if (!failure) {\n\n this.apiCall('POST', '/restapi/oauth/token', {\n 'access_token': 'ACCESS_TOKEN_FROM_REFRESH',\n 'token_type': 'bearer',\n 'expires_in': 3600,\n 'refresh_token': 'REFRESH_TOKEN_FROM_REFRESH',\n 'refresh_token_expires_in': 60480,\n 'scope': 'SMS RCM Foo Boo'\n });\n\n } else {\n\n this.apiCall('POST', '/restapi/oauth/token', {\n 'message': 'Wrong token',\n 'error_description': 'Wrong token',\n 'description': 'Wrong token'\n }, 400);\n\n }\n\n return this;\n\n }\n\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/mocks/Registry.js\n **/","import ApiResponse from '../http/ApiResponse';\nimport {delay} from '../core/Utils';\nimport {createResponse} from '../http/Utils';\n\nexport default class Mock {\n\n constructor(method, path, json, status, statusText, delay) {\n this._method = method.toUpperCase();\n this._path = path;\n this._json = json || {};\n this._delay = delay || 10;\n this._status = status || 200;\n this._statusText = statusText || 'OK';\n }\n\n path() {\n return this._path;\n }\n\n method() {\n return this._method;\n }\n\n test(request:Request) {\n\n return request.url.indexOf(this._path) > -1 &&\n request.method.toUpperCase() == this._method;\n\n }\n\n async getResponse(request) {\n\n await delay(this._delay);\n\n return this.createResponse(this._json);\n\n }\n\n createResponse(json, init) {\n\n init = init || {};\n\n init.status = init.status || this._status;\n init.statusText = init.statusText || this._statusText;\n\n var str = JSON.stringify(json),\n res = createResponse(str, init);\n\n res.headers.set(ApiResponse._contentType, ApiResponse._jsonContentType);\n\n return res;\n\n }\n\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/mocks/Mock.js\n **/","import Observable from '../core/Observable';\nimport Queue from '../core/Queue';\nimport Auth from './Auth';\nimport {Promise} from '../core/Externals';\nimport {queryStringify, parseQueryString, delay} from '../core/Utils';\n\nexport default class Platform extends Observable {\n\n static _urlPrefix = '/restapi';\n static _apiVersion = 'v1.0';\n static _accessTokenTtl = null; // Platform server by default sets it to 60 * 60 = 1 hour\n static _refreshTokenTtl = 10 * 60 * 60; // 10 hours\n static _refreshTokenTtlRemember = 7 * 24 * 60 * 60; // 1 week\n static _tokenEndpoint = '/restapi/oauth/token';\n static _revokeEndpoint = '/restapi/oauth/revoke';\n static _authorizeEndpoint = '/restapi/oauth/authorize';\n static _refreshDelayMs = 100;\n static _cacheId = 'platform';\n static _clearCacheOnRefreshError = true;\n\n events = {\n beforeLogin: 'beforeLogin',\n loginSuccess: 'loginSuccess',\n loginError: 'loginError',\n beforeRefresh: 'beforeRefresh',\n refreshSuccess: 'refreshSuccess',\n refreshError: 'refreshError',\n beforeLogout: 'beforeLogout',\n logoutSuccess: 'logoutSuccess',\n logoutError: 'logoutError'\n };\n\n constructor(client, cache, server, appKey, appSecret) {\n\n super();\n\n this._server = server;\n this._appKey = appKey;\n this._appSecret = appSecret;\n\n /** @type {Cache} */\n this._cache = cache;\n\n /** @type {Client} */\n this._client = client;\n\n this._queue = new Queue(this._cache, Platform._cacheId + '-refresh');\n\n this._auth = new Auth(this._cache, Platform._cacheId);\n\n }\n\n /**\n * @return {Auth}\n */\n auth() {\n return this._auth;\n }\n\n /**\n * @return {Client}\n */\n client() {\n return this._client;\n }\n\n /**\n * @param {string} path\n * @param {object} [options]\n * @param {boolean} [options.addServer]\n * @param {string} [options.addMethod]\n * @param {boolean} [options.addToken]\n * @return {string}\n */\n createUrl(path, options) {\n\n path = path || '';\n options = options || {};\n\n var builtUrl = '',\n hasHttp = path.indexOf('http://') != -1 || path.indexOf('https://') != -1;\n\n if (options.addServer && !hasHttp) builtUrl += this._server;\n\n if (path.indexOf(Platform._urlPrefix) == -1 && !hasHttp) builtUrl += Platform._urlPrefix + '/' + Platform._apiVersion;\n\n builtUrl += path;\n\n if (options.addMethod || options.addToken) builtUrl += (path.indexOf('?') > -1 ? '&' : '?');\n\n if (options.addMethod) builtUrl += '_method=' + options.addMethod;\n if (options.addToken) builtUrl += (options.addMethod ? '&' : '') + 'access_token=' + this._auth.accessToken();\n\n return builtUrl;\n\n }\n\n /**\n * @param {string} options.redirectUri\n * @param {string} options.state\n * @param {string} options.brandId\n * @param {string} options.display\n * @param {string} options.prompt\n * @return {string}\n */\n authUrl(options) {\n\n options = options || {};\n\n return this.createUrl(Platform._authorizeEndpoint + '?' + queryStringify({\n 'response_type': 'code',\n 'redirect_uri': options.redirectUri || '',\n 'client_id': this._appKey,\n 'state': options.state || '',\n 'brand_id': options.brandId || '',\n 'display': options.display || '',\n 'prompt': options.prompt || ''\n }), {addServer: true})\n\n }\n\n /**\n * @param {string} url\n * @return {Object}\n */\n parseAuthRedirectUrl(url:string) {\n\n var qs = parseQueryString(url.split('?').reverse()[0]),\n error = qs.error_description || qs.error;\n\n if (error) {\n var e = new Error(error);\n e.error = qs.error;\n throw e;\n }\n\n return qs;\n\n }\n\n /**\n * @return {Promise}\n */\n async loggedIn() {\n\n try {\n await this._ensureAuthentication();\n return true;\n } catch (e) {\n return false;\n }\n\n }\n\n /**\n * @param {string} options.username\n * @param {string} options.password\n * @param {string} options.extension\n * @param {string} options.code\n * @param {string} options.redirectUri\n * @param {string} options.endpointId\n * @returns {Promise}\n */\n async login(options) {\n\n try {\n\n options = options || {};\n\n options.remember = options.remember || false;\n\n this.emit(this.events.beforeLogin);\n\n var body = {\n \"access_token_ttl\": Platform._accessTokenTtl,\n \"refresh_token_ttl\": options.remember ? Platform._refreshTokenTtlRemember : Platform._refreshTokenTtl\n };\n\n if (!options.code) {\n\n body.grant_type = 'password';\n body.username = options.username;\n body.password = options.password;\n body.extension = options.extension || '';\n\n } else if (options.code) {\n\n body.grant_type = 'authorization_code';\n body.code = options.code;\n body.redirect_uri = options.redirectUri;\n //body.client_id = this.getCredentials().key; // not needed\n\n }\n\n if (options.endpointId) body.endpoint_id = options.endpointId;\n\n var apiResponse = await this._tokenRequest(Platform._tokenEndpoint, body),\n json = apiResponse.json();\n\n this._auth\n .setData(json)\n .setRemember(options.remember);\n\n this.emit(this.events.loginSuccess, apiResponse);\n\n return apiResponse;\n\n } catch (e) {\n\n this._cache.clean();\n\n this.emit(this.events.loginError, e);\n\n throw e;\n\n }\n\n }\n\n /**\n * @returns {Promise}\n */\n async refresh() {\n\n try {\n\n this.emit(this.events.beforeRefresh);\n\n if (this._queue.isPaused()) {\n\n await this._queue.poll();\n\n if (!this._isAccessTokenValid()) {\n throw new Error('Automatic authentification timeout');\n }\n\n this.emit(this.events.refreshSuccess, null);\n\n return null;\n\n }\n\n this._queue.pause();\n\n // Make sure all existing AJAX calls had a chance to reach the server\n await delay(Platform._refreshDelayMs);\n\n // Perform sanity checks\n if (!this._auth.refreshToken()) throw new Error('Refresh token is missing');\n if (!this._auth.refreshTokenValid()) throw new Error('Refresh token has expired');\n if (!this._queue.isPaused()) throw new Error('Queue was resumed before refresh call');\n\n /** @type {ApiResponse} */\n var res = await this._tokenRequest(Platform._tokenEndpoint, {\n \"grant_type\": \"refresh_token\",\n \"refresh_token\": this._auth.refreshToken(),\n \"access_token_ttl\": Platform._accessTokenTtl,\n \"refresh_token_ttl\": this._auth.remember() ? Platform._refreshTokenTtlRemember : Platform._refreshTokenTtl\n }),\n json = res.json();\n\n if (!json.access_token) {\n throw this._client.makeError(new Error('Malformed OAuth response'), res);\n }\n\n this._auth.setData(json);\n this._queue.resume();\n\n this.emit(this.events.refreshSuccess, res);\n\n return res;\n\n } catch (e) {\n\n e = this._client.makeError(e);\n\n if (Platform._clearCacheOnRefreshError) {\n this._cache.clean();\n }\n\n this.emit(this.events.refreshError, e);\n\n throw e;\n\n }\n\n }\n\n /**\n * @returns {Promise}\n */\n async logout() {\n\n try {\n\n this.emit(this.events.beforeLogout);\n\n this._queue.pause();\n\n var res = await this._tokenRequest(Platform._revokeEndpoint, {\n token: this._auth.accessToken()\n });\n\n this._queue.resume();\n this._cache.clean();\n\n this.emit(this.events.logoutSuccess, res);\n\n return res;\n\n } catch (e) {\n\n this._queue.resume();\n\n this.emit(this.events.logoutError, e);\n\n throw e;\n\n }\n\n }\n\n /**\n * @param {Request} request\n * @param {object} [options]\n * @param {boolean} [options.skipAuthCheck]\n * @return {Promise}\n */\n async inflateRequest(request, options) {\n\n options = options || {};\n\n if (options.skipAuthCheck) return request;\n\n await this._ensureAuthentication();\n\n request.headers.set('Authorization', this._authHeader());\n //request.url = this.createUrl(request.url, {addServer: true}); //FIXME Spec prevents this...\n\n //TODO Add User-Agent here\n\n return request;\n\n }\n\n /**\n * @param {Request} request\n * @param {object} [options]\n * @param {boolean} [options.skipAuthCheck]\n * @return {Promise}\n */\n async sendRequest(request, options) {\n\n try {\n\n request = await this.inflateRequest(request, options);\n\n return (await this._client.sendRequest(request));\n\n } catch (e) {\n\n // Guard is for errors that come from polling\n if (!e.apiResponse || !e.apiResponse.response() || (e.apiResponse.response().status != 401)) throw e;\n\n this._auth.cancelAccessToken();\n\n return (await this.sendRequest(request, options));\n\n }\n\n }\n\n /**\n * General purpose function to send anything to server\n * @param {string} options.url\n * @param {object} [options.body]\n * @param {string} [options.method]\n * @param {object} [options.query]\n * @param {object} [options.headers]\n * @param {boolean} [options.skipAuthCheck]\n * @return {Promise}\n */\n async send(options = {}) {\n\n //FIXME https://github.com/bitinn/node-fetch/issues/43\n options.url = this.createUrl(options.url, {addServer: true});\n\n return await this.sendRequest(this._client.createRequest(options), options);\n\n }\n\n /**\n * @param {string} url\n * @param {object} [query]\n * @param {object} [options]\n * @param {object} [options.headers]\n * @param {boolean} [options.skipAuthCheck]\n * @return {Promise}\n */\n async get(url, query, options) {\n options = options || {};\n options.method = 'GET';\n options.url = url;\n options.query = query;\n return await this.send(options);\n }\n\n /**\n * @param {string} url\n * @param {object} body\n * @param {object} [query]\n * @param {object} [options]\n * @param {object} [options.headers]\n * @param {boolean} [options.skipAuthCheck]\n * @return {Promise}\n */\n async post(url, body, query, options) {\n options = options || {};\n options.method = 'POST';\n options.url = url;\n options.query = query;\n options.body = body;\n return await this.send(options);\n }\n\n /**\n * @param {string} url\n * @param {object} [body]\n * @param {object} [query]\n * @param {object} [options]\n * @param {object} [options.headers]\n * @param {boolean} [options.skipAuthCheck]\n * @return {Promise}\n */\n async put(url, body, query, options) {\n options = options || {};\n options.method = 'PUT';\n options.url = url;\n options.query = query;\n options.body = body;\n return await this.send(options);\n }\n\n /**\n * @param {string} url\n * @param {string} [query]\n * @param {object} [options]\n * @param {object} [options.headers]\n * @param {boolean} [options.skipAuthCheck]\n * @return {Promise}\n */\n async 'delete'(url, query, options) {\n options = options || {};\n options.method = 'DELETE';\n options.url = url;\n options.query = query;\n return await this.send(options);\n }\n\n async _tokenRequest(path, body) {\n\n return await this.send({\n url: path,\n skipAuthCheck: true,\n body: body,\n method: 'POST',\n headers: {\n 'Authorization': 'Basic ' + this._apiKey(),\n 'Content-Type': 'application/x-www-form-urlencoded'\n }\n });\n\n }\n\n async _ensureAuthentication() {\n\n if (this._isAccessTokenValid()) return null;\n return await this.refresh();\n\n }\n\n _isAccessTokenValid() {\n\n return (this._auth.accessTokenValid() && !this._queue.isPaused());\n\n }\n\n _apiKey() {\n var apiKey = this._appKey + ':' + this._appSecret;\n return (typeof btoa == 'function') ? btoa(apiKey) : new Buffer(apiKey).toString('base64');\n }\n\n _authHeader() {\n var token = this._auth.accessToken();\n return this._auth.tokenType() + (token ? ' ' + token : '');\n }\n\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/platform/Platform.js\n **/","export default class Auth {\n\n static refreshHandicapMs:number = 60 * 1000; // 1 minute\n static forcedTokenType = 'forced';\n\n constructor(cache, cacheId:string) {\n\n /** @type {Cache} */\n this._cache = cache;\n this._cacheId = cacheId;\n\n }\n\n accessToken() {\n return this.data().access_token;\n }\n\n refreshToken() {\n return this.data().refresh_token;\n }\n\n tokenType() {\n return this.data().token_type;\n }\n\n /**\n * @return {{token_type: string, access_token: string, expires_in: number, refresh_token: string, refresh_token_expires_in: number}}\n */\n data() {\n\n return this._cache.getItem(this._cacheId) || {\n token_type: '',\n access_token: '',\n expires_in: 0,\n refresh_token: '',\n refresh_token_expires_in: 0\n };\n\n }\n\n /**\n * @param {object} newData\n * @return {Auth}\n */\n setData(newData) {\n\n newData = newData || {};\n\n var data = this.data();\n\n Object.keys(newData).forEach((key) => {\n data[key] = newData[key];\n });\n\n data.expire_time = Date.now() + (data.expires_in * 1000);\n data.refresh_token_expire_time = Date.now() + (data.refresh_token_expires_in * 1000);\n\n this._cache.setItem(this._cacheId, data);\n\n return this;\n\n }\n\n /**\n * Check if there is a valid (not expired) access token\n * @return {boolean}\n */\n accessTokenValid() {\n\n var authData = this.data();\n return (authData.token_type === Auth.forcedTokenType || (authData.expire_time - Auth.refreshHandicapMs > Date.now()));\n\n }\n\n /**\n * Check if there is a valid (not expired) access token\n * @return {boolean}\n */\n refreshTokenValid() {\n\n return (this.data().refresh_token_expire_time > Date.now());\n\n }\n\n /**\n * @return {Auth}\n */\n cancelAccessToken() {\n\n return this.setData({\n access_token: '',\n expires_in: 0\n });\n\n }\n\n /**\n * This method sets a special authentication mode used in Service Web\n * @return {Auth}\n */\n forceAuthentication() {\n\n this.setData({\n token_type: Auth.forcedTokenType,\n access_token: '',\n expires_in: 0,\n refresh_token: '',\n refresh_token_expires_in: 0\n });\n\n return this;\n\n }\n\n /**\n * @param remember\n * @return {Auth}\n */\n setRemember(remember) {\n\n return this.setData({remember: remember});\n\n }\n\n /**\n * @return {boolean}\n */\n remember() {\n\n return !!this.data().remember;\n\n }\n\n}\n\n//export interface IAuthData {\n// remember?:boolean;\n// token_type?:string;\n// access_token?:string;\n// expires_in?:number; // actually it's string\n// expire_time?:number;\n// refresh_token?:string;\n// refresh_token_expires_in?:number; // actually it's string\n// refresh_token_expire_time?:number;\n// scope?:string;\n//}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/platform/Auth.js\n **/","import PubnubMock from './PubnubMock.js';\nimport {PUBNUB} from '../core/Externals';\n\nexport default class PubnubMockFactory {\n\n constructor() {\n this.crypto_obj = PUBNUB.crypto_obj;\n }\n\n init(options:PUBNUBInitOptions) {\n return new PubnubMock(options);\n }\n\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/pubnub/PubnubFactory.js\n **/","import Observable from '../core/Observable';\nimport {PUBNUB} from '../core/Externals';\n\nexport default class PubnubMock extends Observable {\n\n constructor(options) {\n super();\n this.options = options;\n this.crypto_obj = PUBNUB.crypto_obj;\n }\n\n ready() {}\n\n subscribe(options:PUBNUBSubscribeOptions) {\n this.on('message-' + options.channel, options.message);\n }\n\n unsubscribe(options:PUBNUBUnsubscribeOptions) {\n this.off('message-' + options.channel);\n }\n\n receiveMessage(msg, channel) {\n this.emit('message-' + channel, msg, 'env', channel);\n }\n\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/pubnub/PubnubMock.js\n **/","import Observable from '../core/Observable';\nimport Client from '../http/Client';\nimport {poll, stopPolling, delay} from '../core/Utils';\n\nexport default class Subscription extends Observable {\n\n static _renewHandicapMs = 2 * 60 * 1000;\n static _pollInterval = 10 * 1000;\n\n events = {\n notification: 'notification',\n removeSuccess: 'removeSuccess',\n removeError: 'removeError',\n renewSuccess: 'renewSuccess',\n renewError: 'renewError',\n subscribeSuccess: 'subscribeSuccess',\n subscribeError: 'subscribeError'\n };\n\n constructor(pubnubFactory, platform) {\n\n super();\n\n this._pubnubFactory = pubnubFactory;\n this._platform = platform;\n this._pubnub = null;\n this._timeout = null;\n this._subscription = {};\n\n }\n\n subscribed(){\n\n return !!(this._subscription.id &&\n this._subscription.deliveryMode &&\n this._subscription.deliveryMode.subscriberKey &&\n this._subscription.deliveryMode.address);\n\n }\n\n /**\n * @return {boolean}\n */\n alive() {\n\n return this.subscribed() && Date.now() < this.expirationTime();\n\n }\n\n expirationTime() {\n return new Date(this._subscription.expirationTime || 0).getTime() - Subscription._renewHandicapMs;\n }\n\n setSubscription(subscription) {\n\n subscription = subscription || {};\n\n this._clearTimeout();\n\n this._subscription = subscription;\n\n if (!this._pubnub) this._subscribeAtPubnub();\n\n this._setTimeout();\n\n return this;\n\n }\n\n subscription() {\n return this._subscription;\n }\n\n /**\n * Creates or updates subscription if there is an active one\n * @returns {Promise}\n */\n async register() {\n\n if (this.alive()) {\n return await this.renew();\n } else {\n return await this.subscribe();\n }\n\n }\n\n eventFilters() {\n return this._subscription.eventFilters || [];\n }\n\n /**\n * @param {string[]} events\n * @return {Subscription}\n */\n addEventFilters(events) {\n this.setEventFilters(this.eventFilters().concat(events));\n return this;\n }\n\n /**\n * @param {string[]} events\n * @return {Subscription}\n */\n setEventFilters(events) {\n this._subscription.eventFilters = events;\n return this;\n }\n\n /**\n * @returns {Promise}\n */\n async subscribe() {\n\n try {\n\n this._clearTimeout();\n\n if (!this.eventFilters().length) throw new Error('Events are undefined');\n\n var response = await this._platform.post('/restapi/v1.0/subscription', {\n eventFilters: this._getFullEventFilters(),\n deliveryMode: {\n transportType: 'PubNub'\n }\n }),\n json = response.json();\n\n this.setSubscription(json)\n .emit(this.events.subscribeSuccess, response);\n\n return response;\n\n\n } catch (e) {\n\n e = this._platform.client().makeError(e);\n\n this.reset()\n .emit(this.events.subscribeError, e);\n\n throw e;\n\n }\n\n }\n\n /**\n * @returns {Promise}\n */\n async renew() {\n\n try {\n\n this._clearTimeout();\n\n if (!this.alive()) throw new Error('Subscription is not alive');\n\n if (!this.eventFilters().length) throw new Error('Events are undefined');\n\n var response = await this._platform.put('/restapi/v1.0/subscription/' + this._subscription.id, {\n eventFilters: this._getFullEventFilters()\n });\n\n var json = response.json();\n\n this.setSubscription(json)\n .emit(this.events.renewSuccess, response);\n\n return response;\n\n } catch (e) {\n\n e = this._platform.client().makeError(e);\n\n this.reset()\n .emit(this.events.renewError, e);\n\n throw e;\n\n }\n\n }\n\n /**\n * @returns {Promise}\n */\n async remove() {\n\n try {\n\n if (!this.subscribed()) throw new Error('No subscription');\n\n var response = await this._platform.delete('/restapi/v1.0/subscription/' + this._subscription.id);\n\n this.reset()\n .emit(this.events.removeSuccess, response);\n\n return response;\n\n } catch (e) {\n\n e = this._platform.client().makeError(e);\n\n this.emit(this.events.removeError, e);\n\n throw e;\n\n }\n\n }\n\n /**\n * @returns {Promise}\n */\n resubscribe() {\n\n return this.reset().setEventFilters(this.eventFilters()).subscribe();\n\n }\n\n /**\n * Remove subscription and disconnect from PUBNUB\n * This method resets subscription at client side but backend is not notified\n */\n reset() {\n this._clearTimeout();\n if (this.subscribed() && this._pubnub) this._pubnub.unsubscribe({channel: this._subscription.deliveryMode.address});\n this._subscription = {};\n return this;\n }\n\n _getFullEventFilters() {\n\n return this.eventFilters().map((event) => {\n return this._platform.createUrl(event);\n });\n\n }\n\n _setTimeout() {\n\n this._clearTimeout();\n\n if (!this.alive()) throw new Error('Subscription is not alive');\n\n poll((next)=> {\n\n if (this.alive()) return next();\n\n this.renew();\n\n }, Subscription._pollInterval, this._timeout);\n\n return this;\n\n }\n\n _clearTimeout() {\n\n stopPolling(this._timeout);\n\n return this;\n\n }\n\n _decrypt(message:any) {\n\n if (!this.subscribed()) throw new Error('No subscription');\n\n if (this._subscription.deliveryMode.encryptionKey) {\n\n var PUBNUB = this._pubnubFactory;\n\n message = PUBNUB.crypto_obj.decrypt(message, this._subscription.deliveryMode.encryptionKey, {\n encryptKey: false,\n keyEncoding: 'base64',\n keyLength: 128,\n mode: 'ecb'\n });\n\n }\n\n return message;\n\n }\n\n _notify(message:any) {\n\n this.emit(this.events.notification, this._decrypt(message));\n\n return this;\n\n }\n\n _subscribeAtPubnub():Subscription {\n\n if (!this.alive()) throw new Error('Subscription is not alive');\n\n var PUBNUB = this._pubnubFactory;\n\n this._pubnub = PUBNUB.init({\n ssl: true,\n subscribe_key: this._subscription.deliveryMode.subscriberKey\n });\n\n this._pubnub.ready();\n\n this._pubnub.subscribe({\n channel: this._subscription.deliveryMode.address,\n message: this._notify.bind(this),\n connect: () => {}\n });\n\n return this;\n\n }\n\n}\n\n//export interface ISubscription {\n// id?:string;\n// uri?: string;\n// eventFilters?:string[];\n// expirationTime?:string; // 2014-03-12T19:54:35.613Z\n// expiresIn?:number;\n// deliveryMode?: {\n// transportType?:string;\n// encryption?:boolean;\n// address?:string;\n// subscriberKey?:string;\n// encryptionKey?:string;\n// secretKey?:string;\n// };\n// creationTime?:string; // 2014-03-12T19:54:35.613Z\n// status?:string; // Active\n//}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/subscription/Subscription.js\n **/","import Subscription from './Subscription';\nimport Queue from '../core/Queue';\n\nexport default class CachedSubscription extends Subscription {\n\n constructor(pubnubFactory, platform, cache, cacheKey) {\n\n super(pubnubFactory, platform);\n\n this._cache = cache;\n this._cacheKey = cacheKey;\n this._renewQueue = new Queue(this._cache, cacheKey + '-renew');\n this._resubscribeQueue = new Queue(this._cache, cacheKey + '-resubscribe');\n\n this.events = {\n ...this.events,\n queuedRenewSuccess: 'queuedRenewSuccess',\n queuedRenewError: 'queuedRenewError',\n queuedResubscribeSuccess: 'queuedResubscribeSuccess',\n queuedResubscribeError: 'queuedResubscribeError'\n };\n\n this.on(this.events.renewError, () => {\n this.resubscribe();\n });\n\n this.on([this.events.subscribeSuccess, this.events.renewSuccess], () => {\n this._cache.setItem(this._cacheKey, this.subscription());\n });\n\n this.on(this.events.removeSuccess, () => {\n this._cache.removeItem(this._cacheKey);\n });\n\n }\n\n /**\n * TODO Combine with Platform.refresh and move elsewhere\n * @param actionCb\n * @param queue\n * @param successEvent\n * @param errorEvent\n * @param errorMessage\n * @return {*}\n * @private\n */\n async _queue(actionCb, queue, successEvent, errorEvent, errorMessage) {\n\n try {\n\n if (queue.isPaused()) {\n\n await queue.poll();\n\n if (!this.alive()) {\n throw new Error(errorMessage);\n }\n\n this.emit(successEvent, null);\n\n return null;\n\n }\n\n queue.pause();\n\n var res = await actionCb.call(this);\n\n queue.resume();\n\n this.emit(successEvent, res);\n\n return res;\n\n } catch (e) {\n\n this.emit(errorEvent, e);\n\n throw e;\n\n }\n\n }\n\n /**\n * @returns {Promise}\n */\n renew() {\n\n return this._queue(\n super.renew,\n this._renewQueue,\n this.events.queuedRenewSuccess,\n this.events.queuedRenewError,\n 'Subscription is not alive after renew timeout'\n );\n\n }\n\n /**\n * @returns {Promise}\n */\n resubscribe() {\n\n return this._queue(\n super.resubscribe,\n this._resubscribeQueue,\n this.events.queuedResubscribeSuccess,\n this.events.queuedResubscribeError,\n 'Subscription is not alive after resubscribe timeout'\n );\n\n }\n\n /**\n * @param {string[]} events\n * @return {CachedSubscription}\n */\n restore(events) {\n\n var cachedSubscriptionData = this._cache.getItem(this._cacheKey);\n\n if (cachedSubscriptionData) {\n try {\n this.setSubscription(cachedSubscriptionData);\n } catch (e) {}\n } else {\n this.setEventFilters(events);\n }\n\n return this;\n\n }\n\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/subscription/CachedSubscription.js\n **/","/**\n * Copyright (c) 2014, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * https://raw.github.com/facebook/regenerator/master/LICENSE file. An\n * additional grant of patent rights can be found in the PATENTS file in\n * the same directory.\n */\n\n!(function(global) {\n \"use strict\";\n\n var hasOwn = Object.prototype.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var iteratorSymbol =\n typeof Symbol === \"function\" && Symbol.iterator || \"@@iterator\";\n\n var inModule = typeof module === \"object\";\n var runtime = global.regeneratorRuntime;\n if (runtime) {\n if (inModule) {\n // If regeneratorRuntime is defined globally and we're in a module,\n // make the exports object identical to regeneratorRuntime.\n module.exports = runtime;\n }\n // Don't bother evaluating the rest of this file if the runtime was\n // already defined globally.\n return;\n }\n\n // Define the runtime globally (as expected by generated code) as either\n // module.exports (if we're in a module) or a new, empty object.\n runtime = global.regeneratorRuntime = inModule ? module.exports : {};\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided, then outerFn.prototype instanceof Generator.\n var generator = Object.create((outerFn || Generator).prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n runtime.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype;\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunction.displayName = \"GeneratorFunction\";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n runtime.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n runtime.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `value instanceof AwaitArgument` to determine if the yielded value is\n // meant to be awaited. Some may consider the name of this method too\n // cutesy, but they are curmudgeons.\n runtime.awrap = function(arg) {\n return new AwaitArgument(arg);\n };\n\n function AwaitArgument(arg) {\n this.arg = arg;\n }\n\n function AsyncIterator(generator) {\n // This invoke function is written in a style that assumes some\n // calling function (or Promise) will handle exceptions.\n function invoke(method, arg) {\n var result = generator[method](arg);\n var value = result.value;\n return value instanceof AwaitArgument\n ? Promise.resolve(value.arg).then(invokeNext, invokeThrow)\n : Promise.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration. If the Promise is rejected, however, the\n // result for this iteration will be rejected with the same\n // reason. Note that rejections of yielded Promises are not\n // thrown back into the generator function, as is the case\n // when an awaited Promise is rejected. This difference in\n // behavior between yield and await is important, because it\n // allows the consumer to decide what to do with the yielded\n // rejection (swallow it and continue, manually .throw it back\n // into the generator, abandon iteration, whatever). With\n // await, by contrast, there is no opportunity to examine the\n // rejection reason outside the generator function, so the\n // only option is to throw it from the await expression, and\n // let the generator function handle the exception.\n result.value = unwrapped;\n return result;\n });\n }\n\n if (typeof process === \"object\" && process.domain) {\n invoke = process.domain.bind(invoke);\n }\n\n var invokeNext = invoke.bind(generator, \"next\");\n var invokeThrow = invoke.bind(generator, \"throw\");\n var invokeReturn = invoke.bind(generator, \"return\");\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return invoke(method, arg);\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : new Promise(function (resolve) {\n resolve(callInvokeWithMethodAndArg());\n });\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n runtime.async = function(innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList)\n );\n\n return runtime.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n if (method === \"return\" ||\n (method === \"throw\" && delegate.iterator[method] === undefined)) {\n // A return or throw (when the delegate iterator has no throw\n // method) always terminates the yield* loop.\n context.delegate = null;\n\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n var returnMethod = delegate.iterator[\"return\"];\n if (returnMethod) {\n var record = tryCatch(returnMethod, delegate.iterator, arg);\n if (record.type === \"throw\") {\n // If the return method threw an exception, let that\n // exception prevail over the original return or throw.\n method = \"throw\";\n arg = record.arg;\n continue;\n }\n }\n\n if (method === \"return\") {\n // Continue with the outer return, now that the delegate\n // iterator has been terminated.\n continue;\n }\n }\n\n var record = tryCatch(\n delegate.iterator[method],\n delegate.iterator,\n arg\n );\n\n if (record.type === \"throw\") {\n context.delegate = null;\n\n // Like returning generator.throw(uncaught), but without the\n // overhead of an extra function call.\n method = \"throw\";\n arg = record.arg;\n continue;\n }\n\n // Delegate generator ran and handled its own exceptions so\n // regardless of what the method was, we continue as if it is\n // \"next\" with an undefined arg.\n method = \"next\";\n arg = undefined;\n\n var info = record.arg;\n if (info.done) {\n context[delegate.resultName] = info.value;\n context.next = delegate.nextLoc;\n } else {\n state = GenStateSuspendedYield;\n return info;\n }\n\n context.delegate = null;\n }\n\n if (method === \"next\") {\n if (state === GenStateSuspendedYield) {\n context.sent = arg;\n } else {\n context.sent = undefined;\n }\n\n } else if (method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw arg;\n }\n\n if (context.dispatchException(arg)) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n method = \"next\";\n arg = undefined;\n }\n\n } else if (method === \"return\") {\n context.abrupt(\"return\", arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n var info = {\n value: record.arg,\n done: context.done\n };\n\n if (record.arg === ContinueSentinel) {\n if (context.delegate && method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n arg = undefined;\n }\n } else {\n return info;\n }\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(arg) call above.\n method = \"throw\";\n arg = record.arg;\n }\n }\n };\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n runtime.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n runtime.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n this.sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n return !!caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.next = finallyEntry.finallyLoc;\n } else {\n this.complete(record);\n }\n\n return ContinueSentinel;\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = record.arg;\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n return ContinueSentinel;\n }\n };\n})(\n // Among the various tricks for obtaining a reference to the global\n // object, this seems to be the most reliable technique that does not\n // use indirect eval (which violates Content Security Policy).\n typeof global === \"object\" ? global :\n typeof window === \"object\" ? window :\n typeof self === \"object\" ? self : this\n);\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/regenerator/runtime.js\n ** module id = 26\n ** module chunks = 0\n **/"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","ringcentral-bundle.js","webpack:/webpack/bootstrap 9c749e57da12c0713880","webpack:///src/SDK.js","webpack:///src/core/Utils.js","webpack:///src/core/Externals.js","webpack:///bower_components/es6-promise/promise.js","webpack:///~/timers-browserify/main.js","webpack:///~/process/browser.js","webpack:///(webpack)/buildin/module.js","webpack:///(webpack)/buildin/amd-define.js","webpack:///bower_components/fetch/fetch.js","webpack:///bower_components/pubnub/web/pubnub.js","webpack:///src/core/Cache.js","webpack:///src/core/Observable.js","webpack:///src/core/Queue.js","webpack:///src/http/Client.js","webpack:///src/http/Utils.js","webpack:///src/http/ApiResponse.js","webpack:///src/mocks/ClientMock.js","webpack:///src/mocks/Registry.js","webpack:///src/mocks/Mock.js","webpack:///src/platform/Platform.js","webpack:///src/platform/Auth.js","webpack:///src/pubnub/PubnubFactory.js","webpack:///src/pubnub/PubnubMock.js","webpack:///src/subscription/Subscription.js","webpack:///src/subscription/CachedSubscription.js","webpack:///~/regenerator/runtime.js"],"names":["root","factory","exports","module","define","amd","this","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","_interopRequireDefault","obj","__esModule","default","_interopRequireWildcard","newObj","key","Object","prototype","hasOwnProperty","_classCallCheck","instance","Constructor","TypeError","_createClass","defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","defineProperty","protoProps","staticProps","_coreUtils","Utils","_coreCache","_coreCache2","_coreExternals","Externals","_coreObservable","_coreObservable2","_coreQueue","_coreQueue2","_httpClient","_httpClient2","_httpApiResponse","_httpApiResponse2","_httpUtils","HttpUtils","_mocksClientMock","_mocksClientMock2","_mocksMock","_mocksMock2","_mocksRegistry","_mocksRegistry2","_platformPlatform","_platformPlatform2","_platformAuth","_platformAuth2","_pubnubPubnubFactory","_pubnubPubnubFactory2","_subscriptionSubscription","_subscriptionSubscription2","_subscriptionCachedSubscription","_subscriptionCachedSubscription2","SDK","options","_cache","localStorage","cachePrefix","_client","client","_platform","server","appKey","appSecret","_pubnubFactory","pubnubFactory","PUBNUB","value","sandbox","production","platform","createSubscription","createCachedSubscription","cacheKey","cache","Cache","Observable","Queue","Client","ApiResponse","Auth","Platform","Subscription","Registry","Mock","PubnubMockFactory","queryStringify","parameters","array","keys","forEach","k","v","isArray","vv","push","encodeURIComponent","join","parseQueryString","queryString","argsParsed","split","arg","decodeURIComponent","indexOf","trim","pair","isFunction","Array","poll","fn","interval","timeout","stopPolling","next","delay","setTimeout","clearTimeout","isNodeJS","process","isBrowser","window","_ExternalsJs","Promise","resolve","reject","_es6Promise","_es6Promise2","_nodeFetch","_nodeFetch2","_pubnub","_pubnub2","Function","fetch","Request","Response","Headers","__WEBPACK_AMD_DEFINE_RESULT__","setImmediate","global","lib$es6$promise$utils$$objectOrFunction","x","lib$es6$promise$utils$$isFunction","lib$es6$promise$utils$$isMaybeThenable","lib$es6$promise$asap$$asap","callback","lib$es6$promise$asap$$queue","lib$es6$promise$asap$$len","lib$es6$promise$asap$$customSchedulerFn","lib$es6$promise$asap$$flush","lib$es6$promise$asap$$scheduleFlush","lib$es6$promise$asap$$setScheduler","scheduleFn","lib$es6$promise$asap$$useNextTick","nextTick","version","versions","node","match","lib$es6$promise$asap$$useVertxTimer","lib$es6$promise$asap$$vertxNext","lib$es6$promise$asap$$useMutationObserver","iterations","observer","lib$es6$promise$asap$$BrowserMutationObserver","document","createTextNode","observe","characterData","data","lib$es6$promise$asap$$useMessageChannel","channel","MessageChannel","port1","onmessage","port2","postMessage","lib$es6$promise$asap$$useSetTimeout","undefined","lib$es6$promise$asap$$attemptVertex","vertx","e","Error","code","runOnLoop","runOnContext","lib$es6$promise$$internal$$noop","lib$es6$promise$$internal$$selfFullfillment","lib$es6$promise$$internal$$cannotReturnOwn","lib$es6$promise$$internal$$getThen","promise","then","error","lib$es6$promise$$internal$$GET_THEN_ERROR","lib$es6$promise$$internal$$tryThen","fulfillmentHandler","rejectionHandler","lib$es6$promise$$internal$$handleForeignThenable","thenable","lib$es6$promise$asap$$default","sealed","lib$es6$promise$$internal$$resolve","lib$es6$promise$$internal$$fulfill","reason","lib$es6$promise$$internal$$reject","_label","lib$es6$promise$$internal$$handleOwnThenable","_state","lib$es6$promise$$internal$$FULFILLED","_result","lib$es6$promise$$internal$$REJECTED","lib$es6$promise$$internal$$subscribe","lib$es6$promise$$internal$$handleMaybeThenable","maybeThenable","constructor","lib$es6$promise$$internal$$publishRejection","_onerror","lib$es6$promise$$internal$$publish","lib$es6$promise$$internal$$PENDING","_subscribers","parent","child","onFulfillment","onRejection","subscribers","settled","detail","lib$es6$promise$$internal$$invokeCallback","lib$es6$promise$$internal$$ErrorObject","lib$es6$promise$$internal$$tryCatch","lib$es6$promise$$internal$$TRY_CATCH_ERROR","succeeded","failed","hasCallback","lib$es6$promise$$internal$$initializePromise","resolver","lib$es6$promise$enumerator$$Enumerator","input","enumerator","_instanceConstructor","_validateInput","_input","_remaining","_init","_enumerate","_validationError","lib$es6$promise$promise$all$$all","entries","lib$es6$promise$enumerator$$default","lib$es6$promise$promise$race$$race","lib$es6$promise$utils$$isArray","lib$es6$promise$promise$resolve$$resolve","object","lib$es6$promise$promise$reject$$reject","lib$es6$promise$promise$$needsResolver","lib$es6$promise$promise$$needsNew","lib$es6$promise$promise$$Promise","_id","lib$es6$promise$promise$$counter","lib$es6$promise$polyfill$$polyfill","local","self","P","toString","cast","lib$es6$promise$promise$$default","lib$es6$promise$utils$$_isArray","lib$es6$promise$asap$$browserWindow","lib$es6$promise$asap$$browserGlobal","MutationObserver","WebKitMutationObserver","lib$es6$promise$asap$$isNode","lib$es6$promise$asap$$isWorker","Uint8ClampedArray","importScripts","_eachEntry","entry","_settledAt","_willSettleAt","state","lib$es6$promise$promise$all$$default","lib$es6$promise$promise$race$$default","lib$es6$promise$promise$resolve$$default","lib$es6$promise$promise$reject$$default","all","race","_setScheduler","_asap","result","arguments","catch","lib$es6$promise$polyfill$$default","lib$es6$promise$umd$$ES6Promise","polyfill","clearImmediate","Timeout","clearFn","_clearFn","apply","slice","immediateIds","nextImmediateId","setInterval","clearInterval","close","unref","ref","enroll","item","msecs","_idleTimeoutId","_idleTimeout","unenroll","_unrefActive","active","_onTimeout","args","cleanUpNextTick","draining","currentQueue","queue","concat","queueIndex","drainQueue","len","run","Item","fun","noop","title","browser","env","argv","on","addListener","once","off","removeListener","removeAllListeners","emit","binding","name","cwd","chdir","dir","umask","webpackPolyfill","deprecate","paths","children","normalizeName","String","test","toLowerCase","normalizeValue","headers","map","append","getOwnPropertyNames","consumed","body","bodyUsed","fileReaderReady","reader","onload","onerror","readBlobAsArrayBuffer","blob","FileReader","readAsArrayBuffer","readBlobAsText","readAsText","Body","_initBody","_bodyInit","_bodyText","support","Blob","isPrototypeOf","_bodyBlob","formData","FormData","_bodyFormData","rejected","arrayBuffer","text","decode","json","JSON","parse","normalizeMethod","method","upcased","toUpperCase","methods","url","credentials","mode","referrer","form","bytes","shift","replace","xhr","head","pairs","getAllResponseHeaders","header","bodyInit","type","status","ok","statusText","list","get","values","getAll","has","set","thisArg","init","request","responseURL","getResponseHeader","XMLHttpRequest","response","responseText","open","withCredentials","responseType","setRequestHeader","send","toJSON","valueOf","quote","string","escapable","lastIndex","a","meta","charCodeAt","str","holder","partial","mind","gap","rep","isFinite","indent","cx","\b","\t","\n","\f","\r","\"","\\","replacer","space","","eval","unique","NOW","Date","rnow","build_url","url_components","url_params","URLBIT","params","each","value_str","encode","PARAMSBIT","updater","rate","last","runnit","grep","fin","l","supplant","REPL","_","wait","generate_uuid","u","r","Math","random","o","f","pam_encode","path","generate_channel_list","channels","nopresence","search","subscribed","sort","generate_channel_group_list","channel_groups","channel_group","ready","READY","READY_BUFFER","connect","SECOND","PN_API","setup","_get_url_params","_object_to_key_list","_object_to_key_list_sorted","_get_pam_sign_input_from_params","si","validate_presence_heartbeat","heartbeat","cur_heartbeat","err","PRESENCE_HB_THRESHOLD","PRESENCE_HB_DEFAULT","encrypt","crypto_obj","CIPHER_KEY","decrypt","_presence_heartbeat","PRESENCE_HB_TIMEOUT","PRESENCE_HB_INTERVAL","CHANNELS","CHANNEL_GROUPS","PRESENCE_HB_RUNNING","SELF","stringify","start_presence_heartbeat","publish","NO_WAIT_FOR_PENDING","PUB_QUEUE","sending","xdr","each_channel_group","count","chang","each_channel","chan","_invoke_callback","callback_data","_invoke_error","CR","url1","jsonp","jsonp_cb","AUTH_KEY","STD_ORIGIN","SUBSCRIBE_KEY","success","fail","_poll_online","_is_online","_reset_offline","_poll_timer","_poll_online2","TIME_CHECK","detect_time_detla","_poll_timer2","KEEPALIVE","msg","SUB_RECEIVER","detect_latency","tt","adjusted_time","TIME_DRIFT","cb","time","calculate","ptime","latency","stime","SUB_WINDOWING","DEF_WINDOWING","SUB_TIMEOUT","DEF_SUB_TIMEOUT","DEF_KEEPALIVE","NOLEAVE","PUBLISH_KEY","SECRET_KEY","hmac_SHA256","SSL","ORIGIN","nextorigin","SUB_ORIGIN","CONNECT","CLOAK","SUB_CALLBACK","SUB_CHANNEL","SUB_RESTORE","TIMETOKEN","RESUMED","STATE","PRESENCE_HB","COMPATIBLE_35","db","UUID","USE_INSTANCEID","INSTANCEID","shutdown","use_send_beacon","sendBeacon","b","LEAVE","blocking","auth_key","uuid","auth","origin","PRESENCE_SUFFIX","url_string","action","message","service","LEAVE_GROUP","set_resumed","resumed","get_cipher_key","set_cipher_key","raw_encrypt","raw_decrypt","get_heartbeat","set_heartbeat","heartbeat_interval","get_heartbeat_interval","set_heartbeat_interval","get_version","SDK_VER","getGcmMessageObject","getApnsMessageObject","aps","badge","alert","newPnMessage","gcm","apns","n","_add_param","val","namespace","ns_ch","cloak","ns_ch_a","channel_group_list_groups","channel_group_list_channels","channel_group_remove_channel","channel_group_remove_group","channel_group_add_channel","channel_group_cloak","channel_group_list_namespaces","channel_group_remove_namespace","history","reverse","cipher_key","start","end","include_token","string_msg_token","payload","messages","decrypted_messages","new_message","timetoken","replay","source","destination","stop","limit","post","store","add_msg","unsubscribe","leave_c","ch","CB_CALLED","leave_gc","chg","subscribe","_test_connection","windowing","disconnected","reconnect","disconnect","_connect","st","sub_timeout","SUB_ERROR","idlecb","connected","backfill","next_callback","channels2","list2","channel2","chobj","decrypted_msg","presence","noheresync","restore","settings","here","uid","timestamp","floor","occupancy","here_now","debug","uuids","where_now","grant","ttl","w","getTime","sign_input","signature","mobile_gw_provision","op","gw_type","device_id","audit","revoke","set_uuid","get_uuid","get_subscibed_channels","presence_heartbeat","stop_timers","each-channel","offline","now","SHA256","s","CryptoJS","parse_options","defaultOptions","allowedKeyEncodings","allowedKeyLengths","parseInt","allowedModes","decode_key","get_padded_key","get_mode","get_iv","iv","encryptKey","keyEncoding","keyLength","hex_message","encryptedHexArray","base_64_encrypted","binary_enc","json_plain","ciphertext","plaintext","get_hmac_SHA256","hash","$","getElementById","console","elements","el","getElementsByTagName","bind","etype","rapfun","event","cancelBubble","preventDefault","stopPropagation","addEventListener","attachEvent","attr","attribute","setAttribute","getAttribute","css","element","styles","style","create","createElement","XORIGN","FDomainRequest","ajax","script","finished","xhrtme","DEF_TIMEOUT","timer","done","appendChild","parentNode","removeChild","ASYNC","src","complete","async","abort","XDomainRequest","onabort","onloadend","onreadystatechange","readyState","eee","navigator","pubnubs","fdomainrequest","max","ori","failover","SWF","UA","userAgent","PNSDK","log","opera","postError","ls","cookieGet","cookie","RegExp","cookieSet","cookieTest","getItem","setItem","events","unbind","fire","PDIV","CREATE_PUBNUB","leave_on_unload","pnsdk","PN","prop","pdiv","notest","publish_key","subscribe_key","ssl","location","href","position","top","unescape","WS","protocols","bits","protocol","pubnub","wasClean","h","g","lib","q","Base","extend","mixIn","$super","clone","WordArray","words","sigBytes","d","clamp","ceil","enc","Hex","substr","Latin1","fromCharCode","j","Utf8","escape","BufferedBlockAlgorithm","reset","_data","_nDataBytes","_append","_process","blockSize","_minBufferSize","min","_doProcessBlock","splice","Hasher","cfg","_doReset","update","finalize","_doFinalize","_createHelper","_createHmacHelper","t","HMAC","algo","sqrt","pow","_hash","HmacSHA256","_hasher","_oKey","_iKey","Base64","_map","charAt","abs","sin","MD5","z","A","B","C","D","E","HmacMD5","EvpKDF","keySize","hasher","compute","Cipher","createEncryptor","_ENC_XFORM_MODE","createDecryptor","_DEC_XFORM_MODE","_xformMode","_key","ivSize","StreamCipher","_iv","_prevBlock","BlockCipherMode","Encryptor","Decryptor","_cipher","processBlock","encryptBlock","decryptBlock","CBC","pad","Pkcs7","unpad","BlockCipher","padding","_mode","CipherParams","formatter","format","OpenSSL","salt","SerializableCipher","algorithm","_parse","kdf","execute","PasswordBasedCipher","F","G","y","H","AES","_nRounds","_keySchedule","_invKeySchedule","_doCryptBlock","ECB","offset","storage","prefix","setPrefix","_storage","_prefix","defaultPrefix","_prefixKey","removeItem","clean","hasListeners","_listeners","_this","_this2","_len","some","_this3","_Utils","cacheId","_cacheId","_promise","isPaused","_releaseTimeout","pause","resume","_pollInterval","_inherits","subClass","superClass","setPrototypeOf","__proto__","_ApiResponse","_ApiResponse2","_Observable","beforeRequest","requestSuccess","requestError","sendRequest","apiResponse","regeneratorRuntime","context$2$0","prev","awrap","_loadResponse","_response","sent","_isMultipart","_isJson","_text","abrupt","t0","makeError","originalMessage","createRequest","_allowedMethods","query","findHeaderName","_jsonContentType","contentTypeHeaderName","_contentType","contentType","_urlencodedContentType","req","originalBody","createResponse","stringBody","utils","_decode","reduce","res","_request","_json","_multipart","skipOKCheck","error_description","description","multipart","boundary","_getContentType","parts","_boundarySeparator","pop","statusInfo","part","_isContentType","_multipartContentType","_isUrlEncoded","headersAndBody","_bodySeparator","headersText","_headerSeparator","_Registry","_Registry2","_HttpClient","_registry","registry","mock","find","getResponse","_Mock","_Mock2","_mocks","add","clear","apiCall","authentication","access_token","token_type","expires_in","refresh_token","refresh_token_expires_in","scope","expireTime","logout","presenceLoad","uri","extension","extensionNumber","activeCalls","presenceStatus","telephonyStatus","userStatus","dndStatus","extensionId","subscribeGeneric","expiresIn","date","eventFilters","expirationTime","toISOString","deliveryMode","transportType","encryption","address","subscriberKey","secretKey","creationTime","subscribeOnPresence","detailed","encryptionAlgorithm","encryptionKey","tokenRefresh","failure","_method","_path","_delay","_status","_statusText","_Auth","_Auth2","beforeLogin","loginSuccess","loginError","beforeRefresh","refreshSuccess","refreshError","beforeLogout","logoutSuccess","logoutError","_server","_appKey","_appSecret","_queue","_auth","createUrl","builtUrl","hasHttp","addServer","_urlPrefix","_apiVersion","addMethod","addToken","accessToken","authUrl","_authorizeEndpoint","response_type","redirect_uri","redirectUri","client_id","brand_id","brandId","display","prompt","parseAuthRedirectUrl","qs","loggedIn","_ensureAuthentication","login","remember","access_token_ttl","_accessTokenTtl","refresh_token_ttl","_refreshTokenTtlRemember","_refreshTokenTtl","grant_type","username","password","endpointId","endpoint_id","_tokenRequest","_tokenEndpoint","setData","setRemember","refresh","_isAccessTokenValid","_refreshDelayMs","refreshToken","refreshTokenValid","_clearCacheOnRefreshError","_revokeEndpoint","token","inflateRequest","skipAuthCheck","_authHeader","cancelAccessToken","put","Authorization","_apiKey","Content-Type","accessTokenValid","apiKey","btoa","Buffer","tokenType","newData","expire_time","refresh_token_expire_time","authData","forcedTokenType","refreshHandicapMs","forceAuthentication","_PubnubMockJs","_PubnubMockJs2","PubnubMock","receiveMessage","notification","removeSuccess","removeError","renewSuccess","renewError","subscribeSuccess","subscribeError","_timeout","_subscription","alive","_renewHandicapMs","setSubscription","subscription","_clearTimeout","_subscribeAtPubnub","_setTimeout","register","renew","addEventFilters","setEventFilters","_getFullEventFilters","remove","resubscribe","_decrypt","_notify","_extends","assign","_Subscription2","_Subscription3","CachedSubscription","_Subscription","_cacheKey","_renewQueue","_resubscribeQueue","queuedRenewSuccess","queuedRenewError","queuedResubscribeSuccess","queuedResubscribeError","actionCb","successEvent","errorEvent","errorMessage","cachedSubscriptionData","wrap","innerFn","outerFn","tryLocsList","generator","Generator","context","Context","_invoke","makeInvokeMethod","tryCatch","GeneratorFunction","GeneratorFunctionPrototype","defineIteratorMethods","AwaitArgument","AsyncIterator","invoke","record","unwrapped","enqueue","callInvokeWithMethodAndArg","previousPromise","domain","GenStateSuspendedStart","GenStateExecuting","GenStateCompleted","doneResult","delegate","iterator","returnMethod","info","GenStateSuspendedYield","resultName","nextLoc","dispatchException","ContinueSentinel","pushTryEntry","locs","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","iterable","iteratorMethod","iteratorSymbol","isNaN","hasOwn","$Symbol","Symbol","toStringTagSymbol","toStringTag","inModule","runtime","Gp","displayName","isGeneratorFunction","genFun","ctor","mark","iter","skipTempReset","rootEntry","rootRecord","rval","exception","handle","loc","caught","hasCatch","hasFinally","finallyEntry","finish","thrown","delegateYield"],"mappings":"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","file":"ringcentral-bundle.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"SDK\"] = factory();\n\telse\n\t\troot[\"RingCentral\"] = root[\"RingCentral\"] || {}, root[\"RingCentral\"][\"SDK\"] = factory();\n})(this, function() {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/universalModuleDefinition\n **/","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"SDK\"] = factory();\n\telse\n\t\troot[\"RingCentral\"] = root[\"RingCentral\"] || {}, root[\"RingCentral\"][\"SDK\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"/build/\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ function(module, exports, __webpack_require__) {\n\nmodule.exports = __webpack_require__(1);\n\n\n/***/ },\n/* 1 */\n/***/ function(module, exports, __webpack_require__) {\n\n'use strict';\n\nexports.__esModule = true;\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nvar _coreUtils = __webpack_require__(2);\n\nvar Utils = _interopRequireWildcard(_coreUtils);\n\nvar _coreCache = __webpack_require__(11);\n\nvar _coreCache2 = _interopRequireDefault(_coreCache);\n\nvar _coreExternals = __webpack_require__(3);\n\nvar Externals = _interopRequireWildcard(_coreExternals);\n\nvar _coreObservable = __webpack_require__(12);\n\nvar _coreObservable2 = _interopRequireDefault(_coreObservable);\n\nvar _coreQueue = __webpack_require__(13);\n\nvar _coreQueue2 = _interopRequireDefault(_coreQueue);\n\nvar _httpClient = __webpack_require__(14);\n\nvar _httpClient2 = _interopRequireDefault(_httpClient);\n\nvar _httpApiResponse = __webpack_require__(16);\n\nvar _httpApiResponse2 = _interopRequireDefault(_httpApiResponse);\n\nvar _httpUtils = __webpack_require__(15);\n\nvar HttpUtils = _interopRequireWildcard(_httpUtils);\n\nvar _mocksClientMock = __webpack_require__(17);\n\nvar _mocksClientMock2 = _interopRequireDefault(_mocksClientMock);\n\nvar _mocksMock = __webpack_require__(19);\n\nvar _mocksMock2 = _interopRequireDefault(_mocksMock);\n\nvar _mocksRegistry = __webpack_require__(18);\n\nvar _mocksRegistry2 = _interopRequireDefault(_mocksRegistry);\n\nvar _platformPlatform = __webpack_require__(20);\n\nvar _platformPlatform2 = _interopRequireDefault(_platformPlatform);\n\nvar _platformAuth = __webpack_require__(21);\n\nvar _platformAuth2 = _interopRequireDefault(_platformAuth);\n\nvar _pubnubPubnubFactory = __webpack_require__(22);\n\nvar _pubnubPubnubFactory2 = _interopRequireDefault(_pubnubPubnubFactory);\n\nvar _subscriptionSubscription = __webpack_require__(24);\n\nvar _subscriptionSubscription2 = _interopRequireDefault(_subscriptionSubscription);\n\nvar _subscriptionCachedSubscription = __webpack_require__(25);\n\nvar _subscriptionCachedSubscription2 = _interopRequireDefault(_subscriptionCachedSubscription);\n\n__webpack_require__(26);\n\nvar SDK = (function () {\n _createClass(SDK, null, [{\n key: 'version',\n value: '2.0.1',\n enumerable: true\n }, {\n key: 'server',\n value: {\n sandbox: 'https://platform.devtest.ringcentral.com',\n production: 'https://platform.ringcentral.com'\n },\n\n /**\n * @constructor\n * @param {object} [options]\n * @param {string} [options.server]\n * @param {string} [options.cachePrefix]\n * @param {string} [options.appSecret]\n * @param {string} [options.appKey]\n * @param {string} [options.appName]\n * @param {string} [options.appVersion]\n * @param {string} [options.pubnubFactory]\n * @param {string} [options.client]\n */\n enumerable: true\n }]);\n\n function SDK(options) {\n _classCallCheck(this, SDK);\n\n options = options || {};\n\n this._cache = new _coreCache2['default'](Externals.localStorage, options.cachePrefix);\n\n this._client = options.client || new _httpClient2['default']();\n\n this._platform = new _platformPlatform2['default'](this._client, this._cache, options.server, options.appKey, options.appSecret);\n\n this._pubnubFactory = options.pubnubFactory || Externals.PUBNUB;\n }\n\n /**\n * @return {Platform}\n */\n\n SDK.prototype.platform = function platform() {\n return this._platform;\n };\n\n /**\n * @return {Subscription}\n */\n\n SDK.prototype.createSubscription = function createSubscription() {\n return new _subscriptionSubscription2['default'](this._pubnubFactory, this._platform);\n };\n\n /**\n * @return {CachedSubscription}\n */\n\n SDK.prototype.createCachedSubscription = function createCachedSubscription(cacheKey) {\n return new _subscriptionCachedSubscription2['default'](this._pubnubFactory, this._platform, this._cache, cacheKey);\n };\n\n /**\n * @return {Cache}\n */\n\n SDK.prototype.cache = function cache() {\n return this._cache;\n };\n\n _createClass(SDK, null, [{\n key: 'core',\n value: {\n Cache: _coreCache2['default'],\n Observable: _coreObservable2['default'],\n Utils: Utils,\n Externals: Externals,\n Queue: _coreQueue2['default']\n },\n enumerable: true\n }, {\n key: 'http',\n value: {\n Client: _httpClient2['default'],\n ApiResponse: _httpApiResponse2['default'],\n Utils: HttpUtils\n },\n enumerable: true\n }, {\n key: 'platform',\n value: {\n Auth: _platformAuth2['default'],\n Platform: _platformPlatform2['default']\n },\n enumerable: true\n }, {\n key: 'subscription',\n value: {\n Subscription: _subscriptionSubscription2['default']\n },\n enumerable: true\n }, {\n key: 'mocks',\n value: {\n Client: _mocksClientMock2['default'],\n Registry: _mocksRegistry2['default'],\n Mock: _mocksMock2['default']\n },\n enumerable: true\n }, {\n key: 'pubnub',\n value: {\n PubnubMockFactory: _pubnubPubnubFactory2['default']\n },\n enumerable: true\n }]);\n\n return SDK;\n})();\n\nexports['default'] = SDK;\nmodule.exports = exports['default'];\n\n/***/ },\n/* 2 */\n/***/ function(module, exports, __webpack_require__) {\n\n'use strict';\n\nexports.__esModule = true;\nexports.queryStringify = queryStringify;\nexports.parseQueryString = parseQueryString;\nexports.isFunction = isFunction;\nexports.isArray = isArray;\nexports.poll = poll;\nexports.stopPolling = stopPolling;\nexports.isNodeJS = isNodeJS;\nexports.isBrowser = isBrowser;\nexports.delay = delay;\n\nvar _ExternalsJs = __webpack_require__(3);\n\n/**\n * TODO Replace with something better\n * @see https://github.com/joyent/node/blob/master/lib/querystring.js\n * @param {object} parameters\n * @returns {string}\n */\n\nfunction queryStringify(parameters) {\n\n var array = [];\n\n parameters = parameters || {};\n\n Object.keys(parameters).forEach(function (k) {\n\n var v = parameters[k];\n\n if (isArray(v)) {\n v.forEach(function (vv) {\n array.push(encodeURIComponent(k) + '=' + encodeURIComponent(vv));\n });\n } else {\n array.push(encodeURIComponent(k) + '=' + encodeURIComponent(v));\n }\n });\n\n return array.join('&');\n}\n\n/**\n * TODO Replace with something better\n * @see https://github.com/joyent/node/blob/master/lib/querystring.js\n * @param {string} queryString\n * @returns {object}\n */\n\nfunction parseQueryString(queryString) {\n\n var argsParsed = {};\n\n queryString.split('&').forEach(function (arg) {\n\n arg = decodeURIComponent(arg);\n\n if (arg.indexOf('=') == -1) {\n\n argsParsed[arg.trim()] = true;\n } else {\n\n var pair = arg.split('='),\n key = pair[0].trim(),\n value = pair[1].trim();\n\n if (key in argsParsed) {\n if (key in argsParsed && !isArray(argsParsed[key])) argsParsed[key] = [argsParsed[key]];\n argsParsed[key].push(value);\n } else {\n argsParsed[key] = value;\n }\n }\n });\n\n return argsParsed;\n}\n\n/**\n * @param obj\n * @return {boolean}\n */\n\nfunction isFunction(obj) {\n return typeof obj === \"function\";\n}\n\n/**\n * @param obj\n * @return {boolean}\n */\n\nfunction isArray(obj) {\n return Array.isArray ? Array.isArray(obj) : typeof obj === \"array\";\n}\n\n/**\n * @param fn\n * @param interval\n * @param timeout\n */\n\nfunction poll(fn, interval, timeout) {\n //NodeJS.Timer|number\n\n module.exports.stopPolling(timeout);\n\n interval = interval || 1000;\n\n var next = function next(delay) {\n\n delay = delay || interval;\n\n interval = delay;\n\n return setTimeout(function () {\n\n fn(next, delay);\n }, delay);\n };\n\n return next();\n}\n\nfunction stopPolling(timeout) {\n if (timeout) clearTimeout(timeout);\n}\n\nfunction isNodeJS() {\n return typeof process !== 'undefined';\n}\n\nfunction isBrowser() {\n return typeof window !== 'undefined';\n}\n\nfunction delay(timeout) {\n return new _ExternalsJs.Promise(function (resolve, reject) {\n setTimeout(function () {\n resolve(null);\n }, timeout);\n });\n}\n\n/***/ },\n/* 3 */\n/***/ function(module, exports, __webpack_require__) {\n\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _es6Promise = __webpack_require__(4);\n\nvar _es6Promise2 = _interopRequireDefault(_es6Promise);\n\nvar _nodeFetch = __webpack_require__(9);\n\nvar _nodeFetch2 = _interopRequireDefault(_nodeFetch);\n\nvar _pubnub = __webpack_require__(10);\n\nvar _pubnub2 = _interopRequireDefault(_pubnub);\n\nvar root = new Function('return this')();\n\nvar Promise = _es6Promise2['default'] && _es6Promise2['default'].Promise || root.Promise;\n\nexports.Promise = Promise;\nvar fetch = root.fetch || _nodeFetch2['default'];\nexports.fetch = fetch;\nvar Request = root.Request || fetch.Request;\nexports.Request = Request;\nvar Response = root.Response || fetch.Response;\nexports.Response = Response;\nvar Headers = root.Headers || fetch.Headers;\n\nexports.Headers = Headers;\nvar PUBNUB = root.PUBNUB || _pubnub2['default'];\n\nexports.PUBNUB = PUBNUB;\nvar localStorage = typeof root.localStorage !== 'undefined' ? root.localStorage : {};\nexports.localStorage = localStorage;\n\n/***/ },\n/* 4 */\n/***/ function(module, exports, __webpack_require__) {\n\nvar require;var __WEBPACK_AMD_DEFINE_RESULT__;/* WEBPACK VAR INJECTION */(function(setImmediate, global, module) {/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 2.2.0\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$toString = {}.toString;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n function lib$es6$promise$asap$$asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n var lib$es6$promise$asap$$default = lib$es6$promise$asap$$asap;\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n var nextTick = process.nextTick;\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // setImmediate should be used instead instead\n var version = process.versions.node.match(/^(?:(\\d+)\\.)?(?:(\\d+)\\.)?(\\*|\\d+)$/);\n if (Array.isArray(version) && version[1] === '0' && version[2] === '10') {\n nextTick = setImmediate;\n }\n return function() {\n nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertex() {\n try {\n var r = require;\n var vertx = __webpack_require__(!(function webpackMissingModule() { var e = new Error(\"Cannot find module \\\"vertx\\\"\"); e.code = 'MODULE_NOT_FOUND'; throw e; }()));\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && \"function\" === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertex();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFullfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$default(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable) {\n if (maybeThenable.constructor === promise.constructor) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n var then = lib$es6$promise$$internal$$getThen(maybeThenable);\n\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFullfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$default(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$default(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$default(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n var enumerator = this;\n\n enumerator._instanceConstructor = Constructor;\n enumerator.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (enumerator._validateInput(input)) {\n enumerator._input = input;\n enumerator.length = input.length;\n enumerator._remaining = input.length;\n\n enumerator._init();\n\n if (enumerator.length === 0) {\n lib$es6$promise$$internal$$fulfill(enumerator.promise, enumerator._result);\n } else {\n enumerator.length = enumerator.length || 0;\n enumerator._enumerate();\n if (enumerator._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(enumerator.promise, enumerator._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(enumerator.promise, enumerator._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validateInput = function(input) {\n return lib$es6$promise$utils$$isArray(input);\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._init = function() {\n this._result = new Array(this.length);\n };\n\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var enumerator = this;\n\n var length = enumerator.length;\n var promise = enumerator.promise;\n var input = enumerator._input;\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n enumerator._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var enumerator = this;\n var c = enumerator._instanceConstructor;\n\n if (lib$es6$promise$utils$$isMaybeThenable(entry)) {\n if (entry.constructor === c && entry._state !== lib$es6$promise$$internal$$PENDING) {\n entry._onerror = null;\n enumerator._settledAt(entry._state, i, entry._result);\n } else {\n enumerator._willSettleAt(c.resolve(entry), i);\n }\n } else {\n enumerator._remaining--;\n enumerator._result[i] = entry;\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var enumerator = this;\n var promise = enumerator.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n enumerator._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n enumerator._result[i] = value;\n }\n }\n\n if (enumerator._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, enumerator._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise’s eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n if (!lib$es6$promise$utils$$isFunction(resolver)) {\n lib$es6$promise$promise$$needsResolver();\n }\n\n if (!(this instanceof lib$es6$promise$promise$$Promise)) {\n lib$es6$promise$promise$$needsNew();\n }\n\n lib$es6$promise$$internal$$initializePromise(this, resolver);\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$default;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: function(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$default(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n },\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (\"function\" === 'function' && __webpack_require__(8)['amd']) {\n !(__WEBPACK_AMD_DEFINE_RESULT__ = function() { return lib$es6$promise$umd$$ES6Promise; }.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5).setImmediate, (function() { return this; }()), __webpack_require__(7)(module)))\n\n/***/ },\n/* 5 */\n/***/ function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function(setImmediate, clearImmediate) {var nextTick = __webpack_require__(6).nextTick;\nvar apply = Function.prototype.apply;\nvar slice = Array.prototype.slice;\nvar immediateIds = {};\nvar nextImmediateId = 0;\n\n// DOM APIs, for completeness\n\nexports.setTimeout = function() {\n return new Timeout(apply.call(setTimeout, window, arguments), clearTimeout);\n};\nexports.setInterval = function() {\n return new Timeout(apply.call(setInterval, window, arguments), clearInterval);\n};\nexports.clearTimeout =\nexports.clearInterval = function(timeout) { timeout.close(); };\n\nfunction Timeout(id, clearFn) {\n this._id = id;\n this._clearFn = clearFn;\n}\nTimeout.prototype.unref = Timeout.prototype.ref = function() {};\nTimeout.prototype.close = function() {\n this._clearFn.call(window, this._id);\n};\n\n// Does not start the time, just sets up the members needed.\nexports.enroll = function(item, msecs) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = msecs;\n};\n\nexports.unenroll = function(item) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = -1;\n};\n\nexports._unrefActive = exports.active = function(item) {\n clearTimeout(item._idleTimeoutId);\n\n var msecs = item._idleTimeout;\n if (msecs >= 0) {\n item._idleTimeoutId = setTimeout(function onTimeout() {\n if (item._onTimeout)\n item._onTimeout();\n }, msecs);\n }\n};\n\n// That's not how node.js implements it but the exposed api is the same.\nexports.setImmediate = typeof setImmediate === \"function\" ? setImmediate : function(fn) {\n var id = nextImmediateId++;\n var args = arguments.length < 2 ? false : slice.call(arguments, 1);\n\n immediateIds[id] = true;\n\n nextTick(function onNextTick() {\n if (immediateIds[id]) {\n // fn.call() is faster so we optimize for the common use-case\n // @see http://jsperf.com/call-apply-segu\n if (args) {\n fn.apply(null, args);\n } else {\n fn.call(null);\n }\n // Prevent ids from leaking\n exports.clearImmediate(id);\n }\n });\n\n return id;\n};\n\nexports.clearImmediate = typeof clearImmediate === \"function\" ? clearImmediate : function(id) {\n delete immediateIds[id];\n};\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5).setImmediate, __webpack_require__(5).clearImmediate))\n\n/***/ },\n/* 6 */\n/***/ function(module, exports) {\n\n// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n\n/***/ },\n/* 7 */\n/***/ function(module, exports) {\n\nmodule.exports = function(module) {\r\n\tif(!module.webpackPolyfill) {\r\n\t\tmodule.deprecate = function() {};\r\n\t\tmodule.paths = [];\r\n\t\t// module.parent = undefined by default\r\n\t\tmodule.children = [];\r\n\t\tmodule.webpackPolyfill = 1;\r\n\t}\r\n\treturn module;\r\n}\r\n\n\n/***/ },\n/* 8 */\n/***/ function(module, exports) {\n\nmodule.exports = function() { throw new Error(\"define cannot be used indirect\"); };\r\n\n\n/***/ },\n/* 9 */\n/***/ function(module, exports) {\n\n(function() {\n 'use strict';\n\n if (self.fetch) {\n return\n }\n\n function normalizeName(name) {\n if (typeof name !== 'string') {\n name = String(name)\n }\n if (/[^a-z0-9\\-#$%&'*+.\\^_`|~]/i.test(name)) {\n throw new TypeError('Invalid character in header field name')\n }\n return name.toLowerCase()\n }\n\n function normalizeValue(value) {\n if (typeof value !== 'string') {\n value = String(value)\n }\n return value\n }\n\n function Headers(headers) {\n this.map = {}\n\n if (headers instanceof Headers) {\n headers.forEach(function(value, name) {\n this.append(name, value)\n }, this)\n\n } else if (headers) {\n Object.getOwnPropertyNames(headers).forEach(function(name) {\n this.append(name, headers[name])\n }, this)\n }\n }\n\n Headers.prototype.append = function(name, value) {\n name = normalizeName(name)\n value = normalizeValue(value)\n var list = this.map[name]\n if (!list) {\n list = []\n this.map[name] = list\n }\n list.push(value)\n }\n\n Headers.prototype['delete'] = function(name) {\n delete this.map[normalizeName(name)]\n }\n\n Headers.prototype.get = function(name) {\n var values = this.map[normalizeName(name)]\n return values ? values[0] : null\n }\n\n Headers.prototype.getAll = function(name) {\n return this.map[normalizeName(name)] || []\n }\n\n Headers.prototype.has = function(name) {\n return this.map.hasOwnProperty(normalizeName(name))\n }\n\n Headers.prototype.set = function(name, value) {\n this.map[normalizeName(name)] = [normalizeValue(value)]\n }\n\n Headers.prototype.forEach = function(callback, thisArg) {\n Object.getOwnPropertyNames(this.map).forEach(function(name) {\n this.map[name].forEach(function(value) {\n callback.call(thisArg, value, name, this)\n }, this)\n }, this)\n }\n\n function consumed(body) {\n if (body.bodyUsed) {\n return Promise.reject(new TypeError('Already read'))\n }\n body.bodyUsed = true\n }\n\n function fileReaderReady(reader) {\n return new Promise(function(resolve, reject) {\n reader.onload = function() {\n resolve(reader.result)\n }\n reader.onerror = function() {\n reject(reader.error)\n }\n })\n }\n\n function readBlobAsArrayBuffer(blob) {\n var reader = new FileReader()\n reader.readAsArrayBuffer(blob)\n return fileReaderReady(reader)\n }\n\n function readBlobAsText(blob) {\n var reader = new FileReader()\n reader.readAsText(blob)\n return fileReaderReady(reader)\n }\n\n var support = {\n blob: 'FileReader' in self && 'Blob' in self && (function() {\n try {\n new Blob();\n return true\n } catch(e) {\n return false\n }\n })(),\n formData: 'FormData' in self\n }\n\n function Body() {\n this.bodyUsed = false\n\n\n this._initBody = function(body) {\n this._bodyInit = body\n if (typeof body === 'string') {\n this._bodyText = body\n } else if (support.blob && Blob.prototype.isPrototypeOf(body)) {\n this._bodyBlob = body\n } else if (support.formData && FormData.prototype.isPrototypeOf(body)) {\n this._bodyFormData = body\n } else if (!body) {\n this._bodyText = ''\n } else {\n throw new Error('unsupported BodyInit type')\n }\n }\n\n if (support.blob) {\n this.blob = function() {\n var rejected = consumed(this)\n if (rejected) {\n return rejected\n }\n\n if (this._bodyBlob) {\n return Promise.resolve(this._bodyBlob)\n } else if (this._bodyFormData) {\n throw new Error('could not read FormData body as blob')\n } else {\n return Promise.resolve(new Blob([this._bodyText]))\n }\n }\n\n this.arrayBuffer = function() {\n return this.blob().then(readBlobAsArrayBuffer)\n }\n\n this.text = function() {\n var rejected = consumed(this)\n if (rejected) {\n return rejected\n }\n\n if (this._bodyBlob) {\n return readBlobAsText(this._bodyBlob)\n } else if (this._bodyFormData) {\n throw new Error('could not read FormData body as text')\n } else {\n return Promise.resolve(this._bodyText)\n }\n }\n } else {\n this.text = function() {\n var rejected = consumed(this)\n return rejected ? rejected : Promise.resolve(this._bodyText)\n }\n }\n\n if (support.formData) {\n this.formData = function() {\n return this.text().then(decode)\n }\n }\n\n this.json = function() {\n return this.text().then(JSON.parse)\n }\n\n return this\n }\n\n // HTTP methods whose capitalization should be normalized\n var methods = ['DELETE', 'GET', 'HEAD', 'OPTIONS', 'POST', 'PUT']\n\n function normalizeMethod(method) {\n var upcased = method.toUpperCase()\n return (methods.indexOf(upcased) > -1) ? upcased : method\n }\n\n function Request(input, options) {\n options = options || {}\n var body = options.body\n if (Request.prototype.isPrototypeOf(input)) {\n if (input.bodyUsed) {\n throw new TypeError('Already read')\n }\n this.url = input.url\n this.credentials = input.credentials\n if (!options.headers) {\n this.headers = new Headers(input.headers)\n }\n this.method = input.method\n this.mode = input.mode\n if (!body) {\n body = input._bodyInit\n input.bodyUsed = true\n }\n } else {\n this.url = input\n }\n\n this.credentials = options.credentials || this.credentials || 'omit'\n if (options.headers || !this.headers) {\n this.headers = new Headers(options.headers)\n }\n this.method = normalizeMethod(options.method || this.method || 'GET')\n this.mode = options.mode || this.mode || null\n this.referrer = null\n\n if ((this.method === 'GET' || this.method === 'HEAD') && body) {\n throw new TypeError('Body not allowed for GET or HEAD requests')\n }\n this._initBody(body)\n }\n\n function decode(body) {\n var form = new FormData()\n body.trim().split('&').forEach(function(bytes) {\n if (bytes) {\n var split = bytes.split('=')\n var name = split.shift().replace(/\\+/g, ' ')\n var value = split.join('=').replace(/\\+/g, ' ')\n form.append(decodeURIComponent(name), decodeURIComponent(value))\n }\n })\n return form\n }\n\n function headers(xhr) {\n var head = new Headers()\n var pairs = xhr.getAllResponseHeaders().trim().split('\\n')\n pairs.forEach(function(header) {\n var split = header.trim().split(':')\n var key = split.shift().trim()\n var value = split.join(':').trim()\n head.append(key, value)\n })\n return head\n }\n\n Body.call(Request.prototype)\n\n function Response(bodyInit, options) {\n if (!options) {\n options = {}\n }\n\n this._initBody(bodyInit)\n this.type = 'default'\n this.url = null\n this.status = options.status\n this.ok = this.status >= 200 && this.status < 300\n this.statusText = options.statusText\n this.headers = options.headers instanceof Headers ? options.headers : new Headers(options.headers)\n this.url = options.url || ''\n }\n\n Body.call(Response.prototype)\n\n self.Headers = Headers;\n self.Request = Request;\n self.Response = Response;\n\n self.fetch = function(input, init) {\n var request\n if (Request.prototype.isPrototypeOf(input) && !init) {\n request = input\n } else {\n request = new Request(input, init)\n }\n\n return new Promise(function(resolve, reject) {\n var xhr = new XMLHttpRequest()\n\n function responseURL() {\n if ('responseURL' in xhr) {\n return xhr.responseURL\n }\n\n // Avoid security warnings on getResponseHeader when not allowed by CORS\n if (/^X-Request-URL:/m.test(xhr.getAllResponseHeaders())) {\n return xhr.getResponseHeader('X-Request-URL')\n }\n\n return;\n }\n\n xhr.onload = function() {\n var status = (xhr.status === 1223) ? 204 : xhr.status\n if (status < 100 || status > 599) {\n reject(new TypeError('Network request failed'))\n return\n }\n var options = {\n status: status,\n statusText: xhr.statusText,\n headers: headers(xhr),\n url: responseURL()\n }\n var body = 'response' in xhr ? xhr.response : xhr.responseText;\n resolve(new Response(body, options))\n }\n\n xhr.onerror = function() {\n reject(new TypeError('Network request failed'))\n }\n\n xhr.open(request.method, request.url, true)\n\n if (request.credentials === 'include') {\n xhr.withCredentials = true\n }\n\n if ('responseType' in xhr && support.blob) {\n xhr.responseType = 'blob'\n }\n\n request.headers.forEach(function(value, name) {\n xhr.setRequestHeader(name, value)\n })\n\n xhr.send(typeof request._bodyInit === 'undefined' ? null : request._bodyInit)\n })\n }\n self.fetch.polyfill = true\n})();\n\n\n/***/ },\n/* 10 */\n/***/ function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function(module) {// Version: 3.7.16\n/* =-====================================================================-= */\n/* =-====================================================================-= */\n/* =-========================= JSON =============================-= */\n/* =-====================================================================-= */\n/* =-====================================================================-= */\n\n(window['JSON'] && window['JSON']['stringify']) || (function () {\n window['JSON'] || (window['JSON'] = {});\n\n function toJSON(key) {\n try { return this.valueOf() }\n catch(e) { return null }\n }\n\n var cx = /[\\u0000\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g,\n escapable = /[\\\\\\\"\\x00-\\x1f\\x7f-\\x9f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g,\n gap,\n indent,\n meta = { // table of character substitutions\n '\\b': '\\\\b',\n '\\t': '\\\\t',\n '\\n': '\\\\n',\n '\\f': '\\\\f',\n '\\r': '\\\\r',\n '\"' : '\\\\\"',\n '\\\\': '\\\\\\\\'\n },\n rep;\n\n function quote(string) {\n escapable.lastIndex = 0;\n return escapable.test(string) ?\n '\"' + string.replace(escapable, function (a) {\n var c = meta[a];\n return typeof c === 'string' ? c :\n '\\\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);\n }) + '\"' :\n '\"' + string + '\"';\n }\n\n function str(key, holder) {\n var i, // The loop counter.\n k, // The member key.\n v, // The member value.\n length,\n partial,\n mind = gap,\n value = holder[key];\n\n if (value && typeof value === 'object') {\n value = toJSON.call( value, key );\n }\n\n if (typeof rep === 'function') {\n value = rep.call(holder, key, value);\n }\n\n switch (typeof value) {\n case 'string':\n return quote(value);\n\n case 'number':\n return isFinite(value) ? String(value) : 'null';\n\n case 'boolean':\n case 'null':\n return String(value);\n\n case 'object':\n\n if (!value) {\n return 'null';\n }\n\n gap += indent;\n partial = [];\n\n if (Object.prototype.toString.apply(value) === '[object Array]') {\n\n length = value.length;\n for (i = 0; i < length; i += 1) {\n partial[i] = str(i, value) || 'null';\n }\n\n v = partial.length === 0 ? '[]' :\n gap ? '[\\n' + gap +\n partial.join(',\\n' + gap) + '\\n' +\n mind + ']' :\n '[' + partial.join(',') + ']';\n gap = mind;\n return v;\n }\n if (rep && typeof rep === 'object') {\n length = rep.length;\n for (i = 0; i < length; i += 1) {\n k = rep[i];\n if (typeof k === 'string') {\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (gap ? ': ' : ':') + v);\n }\n }\n }\n } else {\n for (k in value) {\n if (Object.hasOwnProperty.call(value, k)) {\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (gap ? ': ' : ':') + v);\n }\n }\n }\n }\n\n v = partial.length === 0 ? '{}' :\n gap ? '{\\n' + gap + partial.join(',\\n' + gap) + '\\n' +\n mind + '}' : '{' + partial.join(',') + '}';\n gap = mind;\n return v;\n }\n }\n\n if (typeof JSON['stringify'] !== 'function') {\n JSON['stringify'] = function (value, replacer, space) {\n var i;\n gap = '';\n indent = '';\n\n if (typeof space === 'number') {\n for (i = 0; i < space; i += 1) {\n indent += ' ';\n }\n } else if (typeof space === 'string') {\n indent = space;\n }\n rep = replacer;\n if (replacer && typeof replacer !== 'function' &&\n (typeof replacer !== 'object' ||\n typeof replacer.length !== 'number')) {\n throw new Error('JSON.stringify');\n }\n return str('', {'': value});\n };\n }\n\n if (typeof JSON['parse'] !== 'function') {\n // JSON is parsed on the server for security.\n JSON['parse'] = function (text) {return eval('('+text+')')};\n }\n}());\n/* =-====================================================================-= */\n/* =-====================================================================-= */\n/* =-========================= UTIL =============================-= */\n/* =-====================================================================-= */\n/* =-====================================================================-= */\n\nwindow['PUBNUB'] || (function() {\nvar NOW = 1\n, READY = false\n, READY_BUFFER = []\n, PRESENCE_SUFFIX = '-pnpres'\n, DEF_WINDOWING = 10 // MILLISECONDS.\n, DEF_TIMEOUT = 10000 // MILLISECONDS.\n, DEF_SUB_TIMEOUT = 310 // SECONDS.\n, DEF_KEEPALIVE = 60 // SECONDS (FOR TIMESYNC).\n, SECOND = 1000 // A THOUSAND MILLISECONDS.\n, URLBIT = '/'\n, PARAMSBIT = '&'\n, PRESENCE_HB_THRESHOLD = 5\n, PRESENCE_HB_DEFAULT = 30\n, SDK_VER = '3.7.16'\n, REPL = /{([\\w\\-]+)}/g;\n\n/**\n * UTILITIES\n */\nfunction unique() { return'x'+ ++NOW+''+(+new Date) }\nfunction rnow() { return+new Date }\n\n/**\n * NEXTORIGIN\n * ==========\n * var next_origin = nextorigin();\n */\nvar nextorigin = (function() {\n var max = 20\n , ori = Math.floor(Math.random() * max);\n return function( origin, failover ) {\n return origin.indexOf('pubsub.') > 0\n && origin.replace(\n 'pubsub', 'ps' + (\n failover ? generate_uuid().split('-')[0] :\n (++ori < max? ori : ori=1)\n ) ) || origin;\n }\n})();\n\n\n/**\n * Build Url\n * =======\n *\n */\nfunction build_url( url_components, url_params ) {\n var url = url_components.join(URLBIT)\n , params = [];\n\n if (!url_params) return url;\n\n each( url_params, function( key, value ) {\n var value_str = (typeof value == 'object')?JSON['stringify'](value):value;\n (typeof value != 'undefined' &&\n value != null && encode(value_str).length > 0\n ) && params.push(key + \"=\" + encode(value_str));\n } );\n\n url += \"?\" + params.join(PARAMSBIT);\n return url;\n}\n\n/**\n * UPDATER\n * =======\n * var timestamp = unique();\n */\nfunction updater( fun, rate ) {\n var timeout\n , last = 0\n , runnit = function() {\n if (last + rate > rnow()) {\n clearTimeout(timeout);\n timeout = setTimeout( runnit, rate );\n }\n else {\n last = rnow();\n fun();\n }\n };\n\n return runnit;\n}\n\n/**\n * GREP\n * ====\n * var list = grep( [1,2,3], function(item) { return item % 2 } )\n */\nfunction grep( list, fun ) {\n var fin = [];\n each( list || [], function(l) { fun(l) && fin.push(l) } );\n return fin\n}\n\n/**\n * SUPPLANT\n * ========\n * var text = supplant( 'Hello {name}!', { name : 'John' } )\n */\nfunction supplant( str, values ) {\n return str.replace( REPL, function( _, match ) {\n return values[match] || _\n } );\n}\n\n/**\n * timeout\n * =======\n * timeout( function(){}, 100 );\n */\nfunction timeout( fun, wait ) {\n return setTimeout( fun, wait );\n}\n\n/**\n * uuid\n * ====\n * var my_uuid = generate_uuid();\n */\nfunction generate_uuid(callback) {\n var u = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g,\n function(c) {\n var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8);\n return v.toString(16);\n });\n if (callback) callback(u);\n return u;\n}\n\nfunction isArray(arg) {\n return !!arg && typeof arg !== 'string' && (Array.isArray && Array.isArray(arg) || typeof(arg.length) === \"number\")\n //return !!arg && (Array.isArray && Array.isArray(arg) || typeof(arg.length) === \"number\")\n}\n\n/**\n * EACH\n * ====\n * each( [1,2,3], function(item) { } )\n */\nfunction each( o, f) {\n if ( !o || !f ) return;\n\n if ( isArray(o) )\n for ( var i = 0, l = o.length; i < l; )\n f.call( o[i], o[i], i++ );\n else\n for ( var i in o )\n o.hasOwnProperty &&\n o.hasOwnProperty(i) &&\n f.call( o[i], i, o[i] );\n}\n\n/**\n * MAP\n * ===\n * var list = map( [1,2,3], function(item) { return item + 1 } )\n */\nfunction map( list, fun ) {\n var fin = [];\n each( list || [], function( k, v ) { fin.push(fun( k, v )) } );\n return fin;\n}\n\n\nfunction pam_encode(str) {\n return encodeURIComponent(str).replace(/[!'()*~]/g, function(c) {\n return '%' + c.charCodeAt(0).toString(16).toUpperCase();\n });\n}\n\n/**\n * ENCODE\n * ======\n * var encoded_data = encode('path');\n */\nfunction encode(path) { return encodeURIComponent(path) }\n\n/**\n * Generate Subscription Channel List\n * ==================================\n * generate_channel_list(channels_object);\n */\nfunction generate_channel_list(channels, nopresence) {\n var list = [];\n each( channels, function( channel, status ) {\n if (nopresence) {\n if(channel.search('-pnpres') < 0) {\n if (status.subscribed) list.push(channel);\n }\n } else {\n if (status.subscribed) list.push(channel);\n }\n });\n return list.sort();\n}\n\n/**\n * Generate Subscription Channel Groups List\n * ==================================\n * generate_channel_group_list(channels_groups object);\n */\nfunction generate_channel_group_list(channel_groups, nopresence) {\n var list = [];\n each(channel_groups, function( channel_group, status ) {\n if (nopresence) {\n if(channel_group.search('-pnpres') < 0) {\n if (status.subscribed) list.push(channel_group);\n }\n } else {\n if (status.subscribed) list.push(channel_group);\n }\n });\n return list.sort();\n}\n\n// PUBNUB READY TO CONNECT\nfunction ready() { timeout( function() {\n if (READY) return;\n READY = 1;\n each( READY_BUFFER, function(connect) { connect() } );\n}, SECOND ); }\n\nfunction PNmessage(args) {\n msg = args || {'apns' : {}},\n msg['getPubnubMessage'] = function() {\n var m = {};\n\n if (Object.keys(msg['apns']).length) {\n m['pn_apns'] = {\n 'aps' : {\n 'alert' : msg['apns']['alert'] ,\n 'badge' : msg['apns']['badge']\n }\n }\n for (var k in msg['apns']) {\n m['pn_apns'][k] = msg['apns'][k];\n }\n var exclude1 = ['badge','alert'];\n for (var k in exclude1) {\n delete m['pn_apns'][exclude1[k]];\n }\n }\n\n\n\n if (msg['gcm']) {\n m['pn_gcm'] = {\n 'data' : msg['gcm']\n }\n }\n\n for (var k in msg) {\n m[k] = msg[k];\n }\n var exclude = ['apns','gcm','publish', 'channel','callback','error'];\n for (var k in exclude) {\n delete m[exclude[k]];\n }\n\n return m;\n };\n msg['publish'] = function() {\n\n var m = msg.getPubnubMessage();\n\n if (msg['pubnub'] && msg['channel']) {\n msg['pubnub'].publish({\n 'message' : m,\n 'channel' : msg['channel'],\n 'callback' : msg['callback'],\n 'error' : msg['error']\n })\n }\n };\n return msg;\n}\n\nfunction PN_API(setup) {\n var SUB_WINDOWING = +setup['windowing'] || DEF_WINDOWING\n , SUB_TIMEOUT = (+setup['timeout'] || DEF_SUB_TIMEOUT) * SECOND\n , KEEPALIVE = (+setup['keepalive'] || DEF_KEEPALIVE) * SECOND\n , TIME_CHECK = setup['timecheck'] || 0\n , NOLEAVE = setup['noleave'] || 0\n , PUBLISH_KEY = setup['publish_key']\n , SUBSCRIBE_KEY = setup['subscribe_key']\n , AUTH_KEY = setup['auth_key'] || ''\n , SECRET_KEY = setup['secret_key'] || ''\n , hmac_SHA256 = setup['hmac_SHA256']\n , SSL = setup['ssl'] ? 's' : ''\n , ORIGIN = 'http'+SSL+'://'+(setup['origin']||'pubsub.pubnub.com')\n , STD_ORIGIN = nextorigin(ORIGIN)\n , SUB_ORIGIN = nextorigin(ORIGIN)\n , CONNECT = function(){}\n , PUB_QUEUE = []\n , CLOAK = true\n , TIME_DRIFT = 0\n , SUB_CALLBACK = 0\n , SUB_CHANNEL = 0\n , SUB_RECEIVER = 0\n , SUB_RESTORE = setup['restore'] || 0\n , SUB_BUFF_WAIT = 0\n , TIMETOKEN = 0\n , RESUMED = false\n , CHANNELS = {}\n , CHANNEL_GROUPS = {}\n , SUB_ERROR = function(){}\n , STATE = {}\n , PRESENCE_HB_TIMEOUT = null\n , PRESENCE_HB = validate_presence_heartbeat(\n setup['heartbeat'] || setup['pnexpires'] || 0, setup['error']\n )\n , PRESENCE_HB_INTERVAL = setup['heartbeat_interval'] || (PRESENCE_HB / 2) -1\n , PRESENCE_HB_RUNNING = false\n , NO_WAIT_FOR_PENDING = setup['no_wait_for_pending']\n , COMPATIBLE_35 = setup['compatible_3.5'] || false\n , xdr = setup['xdr']\n , params = setup['params'] || {}\n , error = setup['error'] || function() {}\n , _is_online = setup['_is_online'] || function() { return 1 }\n , jsonp_cb = setup['jsonp_cb'] || function() { return 0 }\n , db = setup['db'] || {'get': function(){}, 'set': function(){}}\n , CIPHER_KEY = setup['cipher_key']\n , UUID = setup['uuid'] || ( !setup['unique_uuid'] && db && db['get'](SUBSCRIBE_KEY+'uuid') || '')\n , USE_INSTANCEID = setup['instance_id'] || false\n , INSTANCEID = ''\n , shutdown = setup['shutdown']\n , use_send_beacon = (typeof setup['use_send_beacon'] != 'undefined')?setup['use_send_beacon']:true\n , sendBeacon = (use_send_beacon)?setup['sendBeacon']:null\n , _poll_timer\n , _poll_timer2;\n\n if (PRESENCE_HB === 2) PRESENCE_HB_INTERVAL = 1;\n\n var crypto_obj = setup['crypto_obj'] ||\n {\n 'encrypt' : function(a,key){ return a},\n 'decrypt' : function(b,key){return b}\n };\n\n function _get_url_params(data) {\n if (!data) data = {};\n each( params , function( key, value ) {\n if (!(key in data)) data[key] = value;\n });\n return data;\n }\n\n function _object_to_key_list(o) {\n var l = []\n each( o , function( key, value ) {\n l.push(key);\n });\n return l;\n }\n function _object_to_key_list_sorted(o) {\n return _object_to_key_list(o).sort();\n }\n\n function _get_pam_sign_input_from_params(params) {\n var si = \"\";\n var l = _object_to_key_list_sorted(params);\n\n for (var i in l) {\n var k = l[i]\n si += k + \"=\" + pam_encode(params[k]) ;\n if (i != l.length - 1) si += \"&\"\n }\n return si;\n }\n\n function validate_presence_heartbeat(heartbeat, cur_heartbeat, error) {\n var err = false;\n\n if (typeof heartbeat === 'undefined') {\n return cur_heartbeat;\n }\n\n if (typeof heartbeat === 'number') {\n if (heartbeat > PRESENCE_HB_THRESHOLD || heartbeat == 0)\n err = false;\n else\n err = true;\n } else if(typeof heartbeat === 'boolean'){\n if (!heartbeat) {\n return 0;\n } else {\n return PRESENCE_HB_DEFAULT;\n }\n } else {\n err = true;\n }\n\n if (err) {\n error && error(\"Presence Heartbeat value invalid. Valid range ( x > \" + PRESENCE_HB_THRESHOLD + \" or x = 0). Current Value : \" + (cur_heartbeat || PRESENCE_HB_THRESHOLD));\n return cur_heartbeat || PRESENCE_HB_THRESHOLD;\n } else return heartbeat;\n }\n\n function encrypt(input, key) {\n return crypto_obj['encrypt'](input, key || CIPHER_KEY) || input;\n }\n function decrypt(input, key) {\n return crypto_obj['decrypt'](input, key || CIPHER_KEY) ||\n crypto_obj['decrypt'](input, CIPHER_KEY) ||\n input;\n }\n\n function error_common(message, callback) {\n callback && callback({ 'error' : message || \"error occurred\"});\n error && error(message);\n }\n function _presence_heartbeat() {\n\n clearTimeout(PRESENCE_HB_TIMEOUT);\n\n if (!PRESENCE_HB_INTERVAL || PRESENCE_HB_INTERVAL >= 500 ||\n PRESENCE_HB_INTERVAL < 1 ||\n (!generate_channel_list(CHANNELS,true).length && !generate_channel_group_list(CHANNEL_GROUPS, true).length ) )\n {\n PRESENCE_HB_RUNNING = false;\n return;\n }\n\n PRESENCE_HB_RUNNING = true;\n SELF['presence_heartbeat']({\n 'callback' : function(r) {\n PRESENCE_HB_TIMEOUT = timeout( _presence_heartbeat, (PRESENCE_HB_INTERVAL) * SECOND );\n },\n 'error' : function(e) {\n error && error(\"Presence Heartbeat unable to reach Pubnub servers.\" + JSON.stringify(e));\n PRESENCE_HB_TIMEOUT = timeout( _presence_heartbeat, (PRESENCE_HB_INTERVAL) * SECOND );\n }\n });\n }\n\n function start_presence_heartbeat() {\n !PRESENCE_HB_RUNNING && _presence_heartbeat();\n }\n\n function publish(next) {\n\n if (NO_WAIT_FOR_PENDING) {\n if (!PUB_QUEUE.length) return;\n } else {\n if (next) PUB_QUEUE.sending = 0;\n if ( PUB_QUEUE.sending || !PUB_QUEUE.length ) return;\n PUB_QUEUE.sending = 1;\n }\n\n xdr(PUB_QUEUE.shift());\n }\n function each_channel_group(callback) {\n var count = 0;\n\n each( generate_channel_group_list(CHANNEL_GROUPS), function(channel_group) {\n var chang = CHANNEL_GROUPS[channel_group];\n\n if (!chang) return;\n\n count++;\n (callback||function(){})(chang);\n } );\n\n return count;\n }\n\n function each_channel(callback) {\n var count = 0;\n\n each( generate_channel_list(CHANNELS), function(channel) {\n var chan = CHANNELS[channel];\n\n if (!chan) return;\n\n count++;\n (callback||function(){})(chan);\n } );\n\n return count;\n }\n function _invoke_callback(response, callback, err) {\n if (typeof response == 'object') {\n if (response['error']) {\n var callback_data = {};\n\n if (response['message']) {\n callback_data['message'] = response['message'];\n }\n\n if (response['payload']) {\n callback_data['payload'] = response['payload'];\n }\n\n err && err(callback_data);\n return;\n\n }\n if (response['payload']) {\n if (response['next_page'])\n callback && callback(response['payload'], response['next_page']);\n else\n callback && callback(response['payload']);\n return;\n }\n }\n callback && callback(response);\n }\n\n function _invoke_error(response,err) {\n\n if (typeof response == 'object' && response['error']) {\n var callback_data = {};\n\n if (response['message']) {\n callback_data['message'] = response['message'];\n }\n\n if (response['payload']) {\n callback_data['payload'] = response['payload'];\n }\n \n err && err(callback_data);\n return;\n } else {\n err && err(response);\n }\n }\n function CR(args, callback, url1, data) {\n var callback = args['callback'] || callback\n , err = args['error'] || error\n , jsonp = jsonp_cb();\n\n data = data || {};\n \n if (!data['auth']) {\n data['auth'] = args['auth_key'] || AUTH_KEY;\n }\n \n var url = [\n STD_ORIGIN, 'v1', 'channel-registration',\n 'sub-key', SUBSCRIBE_KEY\n ];\n\n url.push.apply(url,url1);\n \n if (jsonp) data['callback'] = jsonp;\n \n xdr({\n callback : jsonp,\n data : _get_url_params(data),\n success : function(response) {\n _invoke_callback(response, callback, err);\n },\n fail : function(response) {\n _invoke_error(response, err);\n },\n url : url\n });\n\n }\n\n // Announce Leave Event\n var SELF = {\n 'LEAVE' : function( channel, blocking, auth_key, callback, error ) {\n\n var data = { 'uuid' : UUID, 'auth' : auth_key || AUTH_KEY }\n , origin = nextorigin(ORIGIN)\n , callback = callback || function(){}\n , err = error || function(){}\n , url\n , params\n , jsonp = jsonp_cb();\n\n // Prevent Leaving a Presence Channel\n if (channel.indexOf(PRESENCE_SUFFIX) > 0) return true;\n\n\n if (COMPATIBLE_35) {\n if (!SSL) return false;\n if (jsonp == '0') return false;\n }\n\n if (NOLEAVE) return false;\n\n if (jsonp != '0') data['callback'] = jsonp;\n\n if (USE_INSTANCEID) data['instanceid'] = INSTANCEID;\n\n url = [\n origin, 'v2', 'presence', 'sub_key',\n SUBSCRIBE_KEY, 'channel', encode(channel), 'leave'\n ];\n\n params = _get_url_params(data);\n\n\n if (sendBeacon) {\n url_string = build_url(url, params);\n if (sendBeacon(url_string)) {\n callback && callback({\"status\": 200, \"action\": \"leave\", \"message\": \"OK\", \"service\": \"Presence\"});\n return true;\n }\n }\n\n\n xdr({\n blocking : blocking || SSL,\n timeout : 2000,\n callback : jsonp,\n data : params,\n success : function(response) {\n _invoke_callback(response, callback, err);\n },\n fail : function(response) {\n _invoke_error(response, err);\n },\n url : url\n });\n return true;\n },\n 'LEAVE_GROUP' : function( channel_group, blocking, auth_key, callback, error ) {\n\n var data = { 'uuid' : UUID, 'auth' : auth_key || AUTH_KEY }\n , origin = nextorigin(ORIGIN)\n , url\n , params\n , callback = callback || function(){}\n , err = error || function(){}\n , jsonp = jsonp_cb();\n\n // Prevent Leaving a Presence Channel Group\n if (channel_group.indexOf(PRESENCE_SUFFIX) > 0) return true;\n\n if (COMPATIBLE_35) {\n if (!SSL) return false;\n if (jsonp == '0') return false;\n }\n\n if (NOLEAVE) return false;\n\n if (jsonp != '0') data['callback'] = jsonp;\n\n if (channel_group && channel_group.length > 0) data['channel-group'] = channel_group;\n\n if (USE_INSTANCEID) data['instanceid'] = INSTANCEID;\n\n url = [\n origin, 'v2', 'presence', 'sub_key',\n SUBSCRIBE_KEY, 'channel', encode(','), 'leave'\n ];\n\n params = _get_url_params(data);\n\n if (sendBeacon) {\n url_string = build_url(url, params);\n if (sendBeacon(url_string)) {\n callback && callback({\"status\": 200, \"action\": \"leave\", \"message\": \"OK\", \"service\": \"Presence\"});\n return true;\n }\n }\n\n xdr({\n blocking : blocking || SSL,\n timeout : 5000,\n callback : jsonp,\n data : params,\n success : function(response) {\n _invoke_callback(response, callback, err);\n },\n fail : function(response) {\n _invoke_error(response, err);\n },\n url : url\n });\n return true;\n },\n 'set_resumed' : function(resumed) {\n RESUMED = resumed;\n },\n 'get_cipher_key' : function() {\n return CIPHER_KEY;\n },\n 'set_cipher_key' : function(key) {\n CIPHER_KEY = key;\n },\n 'raw_encrypt' : function(input, key) {\n return encrypt(input, key);\n },\n 'raw_decrypt' : function(input, key) {\n return decrypt(input, key);\n },\n 'get_heartbeat' : function() {\n return PRESENCE_HB;\n },\n \n 'set_heartbeat' : function(heartbeat, heartbeat_interval) {\n PRESENCE_HB = validate_presence_heartbeat(heartbeat, PRESENCE_HB, error);\n PRESENCE_HB_INTERVAL = heartbeat_interval || (PRESENCE_HB / 2) - 1;\n if (PRESENCE_HB == 2) {\n PRESENCE_HB_INTERVAL = 1;\n }\n CONNECT();\n _presence_heartbeat();\n },\n \n 'get_heartbeat_interval' : function() {\n return PRESENCE_HB_INTERVAL;\n },\n \n 'set_heartbeat_interval' : function(heartbeat_interval) {\n PRESENCE_HB_INTERVAL = heartbeat_interval;\n _presence_heartbeat();\n },\n \n 'get_version' : function() {\n return SDK_VER;\n },\n 'getGcmMessageObject' : function(obj) {\n return {\n 'data' : obj\n }\n },\n 'getApnsMessageObject' : function(obj) {\n var x = {\n 'aps' : { 'badge' : 1, 'alert' : ''}\n }\n for (k in obj) {\n k[x] = obj[k];\n }\n return x;\n },\n 'newPnMessage' : function() {\n var x = {};\n if (gcm) x['pn_gcm'] = gcm;\n if (apns) x['pn_apns'] = apns;\n for ( k in n ) {\n x[k] = n[k];\n }\n return x;\n },\n\n '_add_param' : function(key,val) {\n params[key] = val;\n },\n\n 'channel_group' : function(args, callback) {\n var ns_ch = args['channel_group']\n , callback = callback || args['callback']\n , channels = args['channels'] || args['channel']\n , cloak = args['cloak']\n , namespace\n , channel_group\n , url = []\n , data = {}\n , mode = args['mode'] || 'add';\n\n\n if (ns_ch) {\n var ns_ch_a = ns_ch.split(':');\n\n if (ns_ch_a.length > 1) {\n namespace = (ns_ch_a[0] === '*')?null:ns_ch_a[0];\n\n channel_group = ns_ch_a[1];\n } else {\n channel_group = ns_ch_a[0];\n }\n }\n\n namespace && url.push('namespace') && url.push(encode(namespace));\n\n url.push('channel-group');\n\n if (channel_group && channel_group !== '*') {\n url.push(channel_group);\n }\n\n if (channels ) {\n if (isArray(channels)) {\n channels = channels.join(',');\n }\n data[mode] = channels;\n data['cloak'] = (CLOAK)?'true':'false';\n } else {\n if (mode === 'remove') url.push('remove');\n }\n\n if (typeof cloak != 'undefined') data['cloak'] = (cloak)?'true':'false';\n\n CR(args, callback, url, data);\n },\n\n 'channel_group_list_groups' : function(args, callback) {\n var namespace;\n\n namespace = args['namespace'] || args['ns'] || args['channel_group'] || null;\n if (namespace) {\n args[\"channel_group\"] = namespace + \":*\";\n }\n\n SELF['channel_group'](args, callback);\n },\n\n 'channel_group_list_channels' : function(args, callback) {\n if (!args['channel_group']) return error('Missing Channel Group');\n SELF['channel_group'](args, callback);\n },\n\n 'channel_group_remove_channel' : function(args, callback) {\n if (!args['channel_group']) return error('Missing Channel Group');\n if (!args['channel'] && !args['channels'] ) return error('Missing Channel');\n\n args['mode'] = 'remove';\n SELF['channel_group'](args,callback);\n },\n\n 'channel_group_remove_group' : function(args, callback) {\n if (!args['channel_group']) return error('Missing Channel Group');\n if (args['channel']) return error('Use channel_group_remove_channel if you want to remove a channel from a group.');\n\n args['mode'] = 'remove';\n SELF['channel_group'](args,callback);\n },\n\n 'channel_group_add_channel' : function(args, callback) {\n if (!args['channel_group']) return error('Missing Channel Group');\n if (!args['channel'] && !args['channels'] ) return error('Missing Channel');\n SELF['channel_group'](args,callback);\n },\n\n 'channel_group_cloak' : function(args, callback) {\n if (typeof args['cloak'] == 'undefined') {\n callback(CLOAK);\n return;\n }\n CLOAK = args['cloak'];\n SELF['channel_group'](args,callback);\n },\n\n 'channel_group_list_namespaces' : function(args, callback) {\n var url = ['namespace'];\n CR(args, callback, url);\n },\n 'channel_group_remove_namespace' : function(args, callback) {\n var url = ['namespace',args['namespace'],'remove'];\n CR(args, callback, url);\n },\n\n /*\n PUBNUB.history({\n channel : 'my_chat_channel',\n limit : 100,\n callback : function(history) { }\n });\n */\n 'history' : function( args, callback ) {\n var callback = args['callback'] || callback\n , count = args['count'] || args['limit'] || 100\n , reverse = args['reverse'] || \"false\"\n , err = args['error'] || function(){}\n , auth_key = args['auth_key'] || AUTH_KEY\n , cipher_key = args['cipher_key']\n , channel = args['channel']\n , channel_group = args['channel_group']\n , start = args['start']\n , end = args['end']\n , include_token = args['include_token']\n , string_msg_token = args['string_message_token'] || false\n , params = {}\n , jsonp = jsonp_cb();\n\n // Make sure we have a Channel\n if (!channel && !channel_group) return error('Missing Channel');\n if (!callback) return error('Missing Callback');\n if (!SUBSCRIBE_KEY) return error('Missing Subscribe Key');\n\n params['stringtoken'] = 'true';\n params['count'] = count;\n params['reverse'] = reverse;\n params['auth'] = auth_key;\n\n if (channel_group) {\n params['channel-group'] = channel_group;\n if (!channel) {\n channel = ','; \n }\n }\n if (jsonp) params['callback'] = jsonp;\n if (start) params['start'] = start;\n if (end) params['end'] = end;\n if (include_token) params['include_token'] = 'true';\n if (string_msg_token) params['string_message_token'] = 'true';\n\n // Send Message\n xdr({\n callback : jsonp,\n data : _get_url_params(params),\n success : function(response) {\n if (typeof response == 'object' && response['error']) {\n err({'message' : response['message'], 'payload' : response['payload']});\n return;\n }\n var messages = response[0];\n var decrypted_messages = [];\n for (var a = 0; a < messages.length; a++) {\n if (include_token) {\n var new_message = decrypt(messages[a]['message'],cipher_key);\n var timetoken = messages[a]['timetoken'];\n try {\n decrypted_messages['push']({\"message\" : JSON['parse'](new_message), \"timetoken\" : timetoken});\n } catch (e) {\n decrypted_messages['push'](({\"message\" : new_message, \"timetoken\" : timetoken}));\n }\n } else {\n var new_message = decrypt(messages[a],cipher_key);\n try {\n decrypted_messages['push'](JSON['parse'](new_message));\n } catch (e) {\n decrypted_messages['push']((new_message));\n } \n }\n }\n callback([decrypted_messages, response[1], response[2]]);\n },\n fail : function(response) {\n _invoke_error(response, err);\n },\n url : [\n STD_ORIGIN, 'v2', 'history', 'sub-key',\n SUBSCRIBE_KEY, 'channel', encode(channel)\n ]\n });\n },\n\n /*\n PUBNUB.replay({\n source : 'my_channel',\n destination : 'new_channel'\n });\n */\n 'replay' : function(args, callback) {\n var callback = callback || args['callback'] || function(){}\n , auth_key = args['auth_key'] || AUTH_KEY\n , source = args['source']\n , destination = args['destination']\n , stop = args['stop']\n , start = args['start']\n , end = args['end']\n , reverse = args['reverse']\n , limit = args['limit']\n , jsonp = jsonp_cb()\n , data = {}\n , url;\n\n // Check User Input\n if (!source) return error('Missing Source Channel');\n if (!destination) return error('Missing Destination Channel');\n if (!PUBLISH_KEY) return error('Missing Publish Key');\n if (!SUBSCRIBE_KEY) return error('Missing Subscribe Key');\n\n // Setup URL Params\n if (jsonp != '0') data['callback'] = jsonp;\n if (stop) data['stop'] = 'all';\n if (reverse) data['reverse'] = 'true';\n if (start) data['start'] = start;\n if (end) data['end'] = end;\n if (limit) data['count'] = limit;\n\n data['auth'] = auth_key;\n\n // Compose URL Parts\n url = [\n STD_ORIGIN, 'v1', 'replay',\n PUBLISH_KEY, SUBSCRIBE_KEY,\n source, destination\n ];\n\n // Start (or Stop) Replay!\n xdr({\n callback : jsonp,\n success : function(response) {\n _invoke_callback(response, callback, err);\n },\n fail : function() { callback([ 0, 'Disconnected' ]) },\n url : url,\n data : _get_url_params(data)\n });\n },\n\n /*\n PUBNUB.auth('AJFLKAJSDKLA');\n */\n 'auth' : function(auth) {\n AUTH_KEY = auth;\n CONNECT();\n },\n\n /*\n PUBNUB.time(function(time){ });\n */\n 'time' : function(callback) {\n var jsonp = jsonp_cb();\n\n var data = { 'uuid' : UUID, 'auth' : AUTH_KEY }\n\n if (USE_INSTANCEID) data['instanceid'] = INSTANCEID;\n\n xdr({\n callback : jsonp,\n data : _get_url_params(data),\n timeout : SECOND * 5,\n url : [STD_ORIGIN, 'time', jsonp],\n success : function(response) { callback(response[0]) },\n fail : function() { callback(0) }\n });\n },\n\n /*\n PUBNUB.publish({\n channel : 'my_chat_channel',\n message : 'hello!'\n });\n */\n 'publish' : function( args, callback ) {\n var msg = args['message'];\n if (!msg) return error('Missing Message');\n\n var callback = callback || args['callback'] || msg['callback'] || function(){}\n , channel = args['channel'] || msg['channel']\n , auth_key = args['auth_key'] || AUTH_KEY\n , cipher_key = args['cipher_key']\n , err = args['error'] || msg['error'] || function() {}\n , post = args['post'] || false\n , store = ('store_in_history' in args) ? args['store_in_history']: true\n , jsonp = jsonp_cb()\n , add_msg = 'push'\n , params\n , url;\n\n if (args['prepend']) add_msg = 'unshift'\n\n if (!channel) return error('Missing Channel');\n if (!PUBLISH_KEY) return error('Missing Publish Key');\n if (!SUBSCRIBE_KEY) return error('Missing Subscribe Key');\n\n if (msg['getPubnubMessage']) {\n msg = msg['getPubnubMessage']();\n }\n\n // If trying to send Object\n msg = JSON['stringify'](encrypt(msg, cipher_key));\n\n // Create URL\n url = [\n STD_ORIGIN, 'publish',\n PUBLISH_KEY, SUBSCRIBE_KEY,\n 0, encode(channel),\n jsonp, encode(msg)\n ];\n\n params = { 'uuid' : UUID, 'auth' : auth_key }\n\n if (!store) params['store'] =\"0\"\n\n if (USE_INSTANCEID) params['instanceid'] = INSTANCEID;\n\n // Queue Message Send\n PUB_QUEUE[add_msg]({\n callback : jsonp,\n timeout : SECOND * 5,\n url : url,\n data : _get_url_params(params),\n fail : function(response){\n _invoke_error(response, err);\n publish(1);\n },\n success : function(response) {\n _invoke_callback(response, callback, err);\n publish(1);\n },\n mode : (post)?'POST':'GET'\n });\n\n // Send Message\n publish();\n },\n\n /*\n PUBNUB.unsubscribe({ channel : 'my_chat' });\n */\n 'unsubscribe' : function(args, callback) {\n var channel = args['channel']\n , channel_group = args['channel_group']\n , auth_key = args['auth_key'] || AUTH_KEY\n , callback = callback || args['callback'] || function(){}\n , err = args['error'] || function(){};\n\n TIMETOKEN = 0;\n SUB_RESTORE = 1; // REVISIT !!!!\n\n if (channel) {\n\n // Prepare LeaveChannel(s)\n var leave_c = map( (\n channel.join ? channel.join(',') : ''+channel\n ).split(','), function(channel) {\n if (!CHANNELS[channel]) return;\n return channel;\n } ).join(',');\n\n // Prepare Channel(s)\n channel = map( (\n channel.join ? channel.join(',') : ''+channel\n ).split(','), function(channel) {\n if (!CHANNELS[channel]) return;\n return channel + ',' + channel + PRESENCE_SUFFIX;\n } ).join(',');\n\n // Iterate over Channels\n each(channel.split(','), function(ch) {\n if (!ch) return;\n CHANNELS[ch] = 0;\n if (ch in STATE) delete STATE[ch];\n } );\n\n var CB_CALLED = true;\n if (READY) {\n CB_CALLED = SELF['LEAVE'](leave_c, 0 , auth_key, callback, err);\n }\n if (!CB_CALLED) callback({action : \"leave\"});\n }\n\n if (channel_group) {\n\n // Prepare channel group(s)\n var leave_gc = map( (\n channel_group.join ? channel_group.join(',') : ''+channel_group\n ).split(','), function(channel_group) {\n if (!CHANNEL_GROUPS[channel_group]) return;\n return channel_group;\n } ).join(',');\n\n // Prepare channel group(s)\n channel_group = map( (\n channel_group.join ? channel_group.join(',') : ''+channel_group\n ).split(','), function(channel_group) {\n if (!CHANNEL_GROUPS[channel_group]) return;\n return channel_group + ',' + channel_group + PRESENCE_SUFFIX;\n } ).join(',');\n\n // Iterate over channel groups\n each( channel_group.split(','), function(chg) {\n if (!chg) return;\n CHANNEL_GROUPS[chg] = 0;\n if (chg in STATE) delete STATE[chg];\n } );\n\n var CB_CALLED = true;\n if (READY) {\n CB_CALLED = SELF['LEAVE_GROUP'](leave_gc, 0 , auth_key, callback, err);\n }\n if (!CB_CALLED) callback({action : \"leave\"});\n }\n\n // Reset Connection if Count Less\n CONNECT();\n },\n\n /*\n PUBNUB.subscribe({\n channel : 'my_chat'\n callback : function(message) { }\n });\n */\n 'subscribe' : function( args, callback ) {\n var channel = args['channel']\n , channel_group = args['channel_group']\n , callback = callback || args['callback']\n , callback = callback || args['message']\n , connect = args['connect'] || function(){}\n , reconnect = args['reconnect'] || function(){}\n , disconnect = args['disconnect'] || function(){}\n , SUB_ERROR = args['error'] || SUB_ERROR || function(){}\n , idlecb = args['idle'] || function(){}\n , presence = args['presence'] || 0\n , noheresync = args['noheresync'] || 0\n , backfill = args['backfill'] || 0\n , timetoken = args['timetoken'] || 0\n , sub_timeout = args['timeout'] || SUB_TIMEOUT\n , windowing = args['windowing'] || SUB_WINDOWING\n , state = args['state']\n , heartbeat = args['heartbeat'] || args['pnexpires']\n , heartbeat_interval = args['heartbeat_interval']\n , restore = args['restore'] || SUB_RESTORE;\n\n AUTH_KEY = args['auth_key'] || AUTH_KEY;\n\n // Restore Enabled?\n SUB_RESTORE = restore;\n\n // Always Reset the TT\n TIMETOKEN = timetoken;\n\n // Make sure we have a Channel\n if (!channel && !channel_group) {\n return error('Missing Channel');\n }\n\n if (!callback) return error('Missing Callback');\n if (!SUBSCRIBE_KEY) return error('Missing Subscribe Key');\n\n if (heartbeat || heartbeat === 0 || heartbeat_interval || heartbeat_interval === 0) {\n SELF['set_heartbeat'](heartbeat, heartbeat_interval);\n }\n\n // Setup Channel(s)\n if (channel) {\n each( (channel.join ? channel.join(',') : ''+channel).split(','),\n function(channel) {\n var settings = CHANNELS[channel] || {};\n\n // Store Channel State\n CHANNELS[SUB_CHANNEL = channel] = {\n name : channel,\n connected : settings.connected,\n disconnected : settings.disconnected,\n subscribed : 1,\n callback : SUB_CALLBACK = callback,\n 'cipher_key' : args['cipher_key'],\n connect : connect,\n disconnect : disconnect,\n reconnect : reconnect\n };\n\n if (state) {\n if (channel in state) {\n STATE[channel] = state[channel];\n } else {\n STATE[channel] = state;\n }\n }\n\n // Presence Enabled?\n if (!presence) return;\n\n // Subscribe Presence Channel\n SELF['subscribe']({\n 'channel' : channel + PRESENCE_SUFFIX,\n 'callback' : presence,\n 'restore' : restore\n });\n\n // Presence Subscribed?\n if (settings.subscribed) return;\n\n // See Who's Here Now?\n if (noheresync) return;\n SELF['here_now']({\n 'channel' : channel,\n 'data' : _get_url_params({ 'uuid' : UUID, 'auth' : AUTH_KEY }),\n 'callback' : function(here) {\n each( 'uuids' in here ? here['uuids'] : [],\n function(uid) { presence( {\n 'action' : 'join',\n 'uuid' : uid,\n 'timestamp' : Math.floor(rnow() / 1000),\n 'occupancy' : here['occupancy'] || 1\n }, here, channel ); } );\n }\n });\n } );\n }\n\n // Setup Channel Groups\n if (channel_group) {\n each( (channel_group.join ? channel_group.join(',') : ''+channel_group).split(','),\n function(channel_group) {\n var settings = CHANNEL_GROUPS[channel_group] || {};\n\n CHANNEL_GROUPS[channel_group] = {\n name : channel_group,\n connected : settings.connected,\n disconnected : settings.disconnected,\n subscribed : 1,\n callback : SUB_CALLBACK = callback,\n 'cipher_key' : args['cipher_key'],\n connect : connect,\n disconnect : disconnect,\n reconnect : reconnect\n };\n\n // Presence Enabled?\n if (!presence) return;\n\n // Subscribe Presence Channel\n SELF['subscribe']({\n 'channel_group' : channel_group + PRESENCE_SUFFIX,\n 'callback' : presence,\n 'restore' : restore,\n 'auth_key' : AUTH_KEY\n });\n\n // Presence Subscribed?\n if (settings.subscribed) return;\n\n // See Who's Here Now?\n if (noheresync) return;\n SELF['here_now']({\n 'channel_group' : channel_group,\n 'data' : _get_url_params({ 'uuid' : UUID, 'auth' : AUTH_KEY }),\n 'callback' : function(here) {\n each( 'uuids' in here ? here['uuids'] : [],\n function(uid) { presence( {\n 'action' : 'join',\n 'uuid' : uid,\n 'timestamp' : Math.floor(rnow() / 1000),\n 'occupancy' : here['occupancy'] || 1\n }, here, channel_group ); } );\n }\n });\n } );\n }\n\n\n // Test Network Connection\n function _test_connection(success) {\n if (success) {\n // Begin Next Socket Connection\n timeout( CONNECT, windowing);\n }\n else {\n // New Origin on Failed Connection\n STD_ORIGIN = nextorigin( ORIGIN, 1 );\n SUB_ORIGIN = nextorigin( ORIGIN, 1 );\n\n // Re-test Connection\n timeout( function() {\n SELF['time'](_test_connection);\n }, SECOND );\n }\n\n // Disconnect & Reconnect\n each_channel(function(channel){\n // Reconnect\n if (success && channel.disconnected) {\n channel.disconnected = 0;\n return channel.reconnect(channel.name);\n }\n\n // Disconnect\n if (!success && !channel.disconnected) {\n channel.disconnected = 1;\n channel.disconnect(channel.name);\n }\n });\n \n // Disconnect & Reconnect for channel groups\n each_channel_group(function(channel_group){\n // Reconnect\n if (success && channel_group.disconnected) {\n channel_group.disconnected = 0;\n return channel_group.reconnect(channel_group.name);\n }\n\n // Disconnect\n if (!success && !channel_group.disconnected) {\n channel_group.disconnected = 1;\n channel_group.disconnect(channel_group.name);\n }\n });\n }\n\n // Evented Subscribe\n function _connect() {\n var jsonp = jsonp_cb()\n , channels = generate_channel_list(CHANNELS).join(',')\n , channel_groups = generate_channel_group_list(CHANNEL_GROUPS).join(',');\n\n // Stop Connection\n if (!channels && !channel_groups) return;\n\n if (!channels) channels = ',';\n\n // Connect to PubNub Subscribe Servers\n _reset_offline();\n\n var data = _get_url_params({ 'uuid' : UUID, 'auth' : AUTH_KEY });\n\n if (channel_groups) {\n data['channel-group'] = channel_groups;\n }\n\n\n var st = JSON.stringify(STATE);\n if (st.length > 2) data['state'] = JSON.stringify(STATE);\n\n if (PRESENCE_HB) data['heartbeat'] = PRESENCE_HB;\n\n if (USE_INSTANCEID) data['instanceid'] = INSTANCEID;\n\n start_presence_heartbeat();\n SUB_RECEIVER = xdr({\n timeout : sub_timeout,\n callback : jsonp,\n fail : function(response) {\n if (response && response['error'] && response['service']) {\n _invoke_error(response, SUB_ERROR);\n _test_connection(1);\n } else {\n SELF['time'](function(success){\n !success && ( _invoke_error(response, SUB_ERROR));\n _test_connection(success);\n });\n }\n },\n data : _get_url_params(data),\n url : [\n SUB_ORIGIN, 'subscribe',\n SUBSCRIBE_KEY, encode(channels),\n jsonp, TIMETOKEN\n ],\n success : function(messages) {\n\n // Check for Errors\n if (!messages || (\n typeof messages == 'object' &&\n 'error' in messages &&\n messages['error']\n )) {\n SUB_ERROR(messages['error']);\n return timeout( CONNECT, SECOND );\n }\n\n // User Idle Callback\n idlecb(messages[1]);\n\n // Restore Previous Connection Point if Needed\n TIMETOKEN = !TIMETOKEN &&\n SUB_RESTORE &&\n db['get'](SUBSCRIBE_KEY) || messages[1];\n\n /*\n // Connect\n each_channel_registry(function(registry){\n if (registry.connected) return;\n registry.connected = 1;\n registry.connect(channel.name);\n });\n */\n\n // Connect\n each_channel(function(channel){\n if (channel.connected) return;\n channel.connected = 1;\n channel.connect(channel.name);\n });\n\n // Connect for channel groups\n each_channel_group(function(channel_group){\n if (channel_group.connected) return;\n channel_group.connected = 1;\n channel_group.connect(channel_group.name);\n });\n\n if (RESUMED && !SUB_RESTORE) {\n TIMETOKEN = 0;\n RESUMED = false;\n // Update Saved Timetoken\n db['set']( SUBSCRIBE_KEY, 0 );\n timeout( _connect, windowing );\n return;\n }\n\n // Invoke Memory Catchup and Receive Up to 100\n // Previous Messages from the Queue.\n if (backfill) {\n TIMETOKEN = 10000;\n backfill = 0;\n }\n\n // Update Saved Timetoken\n db['set']( SUBSCRIBE_KEY, messages[1] );\n\n // Route Channel <---> Callback for Message\n var next_callback = (function() {\n var channels = '';\n var channels2 = '';\n\n if (messages.length > 3) {\n channels = messages[3];\n channels2 = messages[2];\n } else if (messages.length > 2) {\n channels = messages[2];\n } else {\n channels = map(\n generate_channel_list(CHANNELS), function(chan) { return map(\n Array(messages[0].length)\n .join(',').split(','),\n function() { return chan; }\n ) }).join(',')\n }\n\n var list = channels.split(',');\n var list2 = (channels2)?channels2.split(','):[];\n\n return function() {\n var channel = list.shift()||SUB_CHANNEL;\n var channel2 = list2.shift();\n\n var chobj = {};\n\n if (channel2) {\n if (channel && channel.indexOf('-pnpres') >= 0 \n && channel2.indexOf('-pnpres') < 0) {\n channel2 += '-pnpres';\n }\n chobj = CHANNEL_GROUPS[channel2] || CHANNELS[channel2] || {'callback' : function(){}};\n } else {\n chobj = CHANNELS[channel];\n }\n\n var r = [\n chobj\n .callback||SUB_CALLBACK,\n channel.split(PRESENCE_SUFFIX)[0]\n ];\n channel2 && r.push(channel2.split(PRESENCE_SUFFIX)[0]);\n return r;\n };\n })();\n\n var latency = detect_latency(+messages[1]);\n each( messages[0], function(msg) {\n var next = next_callback();\n var decrypted_msg = decrypt(msg,\n (CHANNELS[next[1]])?CHANNELS[next[1]]['cipher_key']:null);\n next[0] && next[0]( decrypted_msg, messages, next[2] || next[1], latency, next[1]);\n });\n\n timeout( _connect, windowing );\n }\n });\n }\n\n CONNECT = function() {\n _reset_offline();\n timeout( _connect, windowing );\n };\n\n // Reduce Status Flicker\n if (!READY) return READY_BUFFER.push(CONNECT);\n\n // Connect Now\n CONNECT();\n },\n\n /*\n PUBNUB.here_now({ channel : 'my_chat', callback : fun });\n */\n 'here_now' : function( args, callback ) {\n var callback = args['callback'] || callback\n , debug = args['debug']\n , err = args['error'] || function(){}\n , auth_key = args['auth_key'] || AUTH_KEY\n , channel = args['channel']\n , channel_group = args['channel_group']\n , jsonp = jsonp_cb()\n , uuids = ('uuids' in args) ? args['uuids'] : true\n , state = args['state']\n , data = { 'uuid' : UUID, 'auth' : auth_key };\n\n if (!uuids) data['disable_uuids'] = 1;\n if (state) data['state'] = 1;\n\n // Make sure we have a Channel\n if (!callback) return error('Missing Callback');\n if (!SUBSCRIBE_KEY) return error('Missing Subscribe Key');\n\n var url = [\n STD_ORIGIN, 'v2', 'presence',\n 'sub_key', SUBSCRIBE_KEY\n ];\n\n channel && url.push('channel') && url.push(encode(channel));\n\n if (jsonp != '0') { data['callback'] = jsonp; }\n\n if (channel_group) {\n data['channel-group'] = channel_group;\n !channel && url.push('channel') && url.push(','); \n }\n\n if (USE_INSTANCEID) data['instanceid'] = INSTANCEID;\n\n xdr({\n callback : jsonp,\n data : _get_url_params(data),\n success : function(response) {\n _invoke_callback(response, callback, err);\n },\n fail : function(response) {\n _invoke_error(response, err);\n },\n debug : debug,\n url : url\n });\n },\n\n /*\n PUBNUB.current_channels_by_uuid({ channel : 'my_chat', callback : fun });\n */\n 'where_now' : function( args, callback ) {\n var callback = args['callback'] || callback\n , err = args['error'] || function(){}\n , auth_key = args['auth_key'] || AUTH_KEY\n , jsonp = jsonp_cb()\n , uuid = args['uuid'] || UUID\n , data = { 'auth' : auth_key };\n\n // Make sure we have a Channel\n if (!callback) return error('Missing Callback');\n if (!SUBSCRIBE_KEY) return error('Missing Subscribe Key');\n\n if (jsonp != '0') { data['callback'] = jsonp; }\n\n if (USE_INSTANCEID) data['instanceid'] = INSTANCEID;\n\n xdr({\n callback : jsonp,\n data : _get_url_params(data),\n success : function(response) {\n _invoke_callback(response, callback, err);\n },\n fail : function(response) {\n _invoke_error(response, err);\n },\n url : [\n STD_ORIGIN, 'v2', 'presence',\n 'sub_key', SUBSCRIBE_KEY,\n 'uuid', encode(uuid)\n ]\n });\n },\n\n 'state' : function(args, callback) {\n var callback = args['callback'] || callback || function(r) {}\n , err = args['error'] || function(){}\n , auth_key = args['auth_key'] || AUTH_KEY\n , jsonp = jsonp_cb()\n , state = args['state']\n , uuid = args['uuid'] || UUID\n , channel = args['channel']\n , channel_group = args['channel_group']\n , url\n , data = _get_url_params({ 'auth' : auth_key });\n\n // Make sure we have a Channel\n if (!SUBSCRIBE_KEY) return error('Missing Subscribe Key');\n if (!uuid) return error('Missing UUID');\n if (!channel && !channel_group) return error('Missing Channel');\n\n if (jsonp != '0') { data['callback'] = jsonp; }\n\n if (typeof channel != 'undefined'\n && CHANNELS[channel] && CHANNELS[channel].subscribed ) {\n if (state) STATE[channel] = state;\n }\n\n if (typeof channel_group != 'undefined'\n && CHANNEL_GROUPS[channel_group]\n && CHANNEL_GROUPS[channel_group].subscribed\n ) {\n if (state) STATE[channel_group] = state;\n data['channel-group'] = channel_group;\n\n if (!channel) {\n channel = ',';\n }\n }\n\n data['state'] = JSON.stringify(state);\n\n if (USE_INSTANCEID) data['instanceid'] = INSTANCEID;\n\n if (state) {\n url = [\n STD_ORIGIN, 'v2', 'presence',\n 'sub-key', SUBSCRIBE_KEY,\n 'channel', channel,\n 'uuid', uuid, 'data'\n ]\n } else {\n url = [\n STD_ORIGIN, 'v2', 'presence',\n 'sub-key', SUBSCRIBE_KEY,\n 'channel', channel,\n 'uuid', encode(uuid)\n ]\n }\n\n xdr({\n callback : jsonp,\n data : _get_url_params(data),\n success : function(response) {\n _invoke_callback(response, callback, err);\n },\n fail : function(response) {\n _invoke_error(response, err);\n },\n url : url\n\n });\n\n },\n\n /*\n PUBNUB.grant({\n channel : 'my_chat',\n callback : fun,\n error : fun,\n ttl : 24 * 60, // Minutes\n read : true,\n write : true,\n auth_key : '3y8uiajdklytowsj'\n });\n */\n 'grant' : function( args, callback ) {\n var callback = args['callback'] || callback\n , err = args['error'] || function(){}\n , channel = args['channel'] || args['channels']\n , channel_group = args['channel_group']\n , jsonp = jsonp_cb()\n , ttl = args['ttl']\n , r = (args['read'] )?\"1\":\"0\"\n , w = (args['write'])?\"1\":\"0\"\n , m = (args['manage'])?\"1\":\"0\"\n , auth_key = args['auth_key'] || args['auth_keys'];\n\n if (!callback) return error('Missing Callback');\n if (!SUBSCRIBE_KEY) return error('Missing Subscribe Key');\n if (!PUBLISH_KEY) return error('Missing Publish Key');\n if (!SECRET_KEY) return error('Missing Secret Key');\n\n var timestamp = Math.floor(new Date().getTime() / 1000)\n , sign_input = SUBSCRIBE_KEY + \"\\n\" + PUBLISH_KEY + \"\\n\"\n + \"grant\" + \"\\n\";\n\n var data = {\n 'w' : w,\n 'r' : r,\n 'timestamp' : timestamp\n };\n if (args['manage']) {\n data['m'] = m;\n }\n if (isArray(channel)) {\n channel = channel['join'](',');\n }\n if (isArray(auth_key)) {\n auth_key = auth_key['join'](',');\n }\n if (typeof channel != 'undefined' && channel != null && channel.length > 0) data['channel'] = channel;\n if (typeof channel_group != 'undefined' && channel_group != null && channel_group.length > 0) {\n data['channel-group'] = channel_group;\n }\n if (jsonp != '0') { data['callback'] = jsonp; }\n if (ttl || ttl === 0) data['ttl'] = ttl;\n\n if (auth_key) data['auth'] = auth_key;\n\n data = _get_url_params(data)\n\n if (!auth_key) delete data['auth'];\n\n sign_input += _get_pam_sign_input_from_params(data);\n\n var signature = hmac_SHA256( sign_input, SECRET_KEY );\n\n signature = signature.replace( /\\+/g, \"-\" );\n signature = signature.replace( /\\//g, \"_\" );\n\n data['signature'] = signature;\n\n xdr({\n callback : jsonp,\n data : data,\n success : function(response) {\n _invoke_callback(response, callback, err);\n },\n fail : function(response) {\n _invoke_error(response, err);\n },\n url : [\n STD_ORIGIN, 'v1', 'auth', 'grant' ,\n 'sub-key', SUBSCRIBE_KEY\n ]\n });\n },\n\n /*\n PUBNUB.mobile_gw_provision ({\n device_id: 'A655FBA9931AB',\n op : 'add' | 'remove',\n gw_type : 'apns' | 'gcm',\n channel : 'my_chat',\n callback : fun,\n error : fun,\n });\n */\n\n 'mobile_gw_provision' : function( args ) {\n\n var callback = args['callback'] || function(){}\n , auth_key = args['auth_key'] || AUTH_KEY\n , err = args['error'] || function() {}\n , jsonp = jsonp_cb()\n , channel = args['channel']\n , op = args['op']\n , gw_type = args['gw_type']\n , device_id = args['device_id']\n , params\n , url;\n\n if (!device_id) return error('Missing Device ID (device_id)');\n if (!gw_type) return error('Missing GW Type (gw_type: gcm or apns)');\n if (!op) return error('Missing GW Operation (op: add or remove)');\n if (!channel) return error('Missing gw destination Channel (channel)');\n if (!PUBLISH_KEY) return error('Missing Publish Key');\n if (!SUBSCRIBE_KEY) return error('Missing Subscribe Key');\n\n // Create URL\n url = [\n STD_ORIGIN, 'v1/push/sub-key',\n SUBSCRIBE_KEY, 'devices', device_id\n ];\n\n params = { 'uuid' : UUID, 'auth' : auth_key, 'type': gw_type};\n\n if (op == \"add\") {\n params['add'] = channel;\n } else if (op == \"remove\") {\n params['remove'] = channel;\n }\n\n if (USE_INSTANCEID) data['instanceid'] = INSTANCEID;\n\n xdr({\n callback : jsonp,\n data : params,\n success : function(response) {\n _invoke_callback(response, callback, err);\n },\n fail : function(response) {\n _invoke_error(response, err);\n },\n url : url\n });\n\n },\n\n /*\n PUBNUB.audit({\n channel : 'my_chat',\n callback : fun,\n error : fun,\n read : true,\n write : true,\n auth_key : '3y8uiajdklytowsj'\n });\n */\n 'audit' : function( args, callback ) {\n var callback = args['callback'] || callback\n , err = args['error'] || function(){}\n , channel = args['channel']\n , channel_group = args['channel_group']\n , auth_key = args['auth_key']\n , jsonp = jsonp_cb();\n\n // Make sure we have a Channel\n if (!callback) return error('Missing Callback');\n if (!SUBSCRIBE_KEY) return error('Missing Subscribe Key');\n if (!PUBLISH_KEY) return error('Missing Publish Key');\n if (!SECRET_KEY) return error('Missing Secret Key');\n\n var timestamp = Math.floor(new Date().getTime() / 1000)\n , sign_input = SUBSCRIBE_KEY + \"\\n\"\n + PUBLISH_KEY + \"\\n\"\n + \"audit\" + \"\\n\";\n\n var data = {'timestamp' : timestamp };\n if (jsonp != '0') { data['callback'] = jsonp; }\n if (typeof channel != 'undefined' && channel != null && channel.length > 0) data['channel'] = channel;\n if (typeof channel_group != 'undefined' && channel_group != null && channel_group.length > 0) {\n data['channel-group'] = channel_group;\n }\n if (auth_key) data['auth'] = auth_key;\n\n data = _get_url_params(data);\n\n if (!auth_key) delete data['auth'];\n\n sign_input += _get_pam_sign_input_from_params(data);\n\n var signature = hmac_SHA256( sign_input, SECRET_KEY );\n\n signature = signature.replace( /\\+/g, \"-\" );\n signature = signature.replace( /\\//g, \"_\" );\n\n data['signature'] = signature;\n xdr({\n callback : jsonp,\n data : data,\n success : function(response) {\n _invoke_callback(response, callback, err);\n },\n fail : function(response) {\n _invoke_error(response, err);\n },\n url : [\n STD_ORIGIN, 'v1', 'auth', 'audit' ,\n 'sub-key', SUBSCRIBE_KEY\n ]\n });\n },\n\n /*\n PUBNUB.revoke({\n channel : 'my_chat',\n callback : fun,\n error : fun,\n auth_key : '3y8uiajdklytowsj'\n });\n */\n 'revoke' : function( args, callback ) {\n args['read'] = false;\n args['write'] = false;\n SELF['grant']( args, callback );\n },\n 'set_uuid' : function(uuid) {\n UUID = uuid;\n CONNECT();\n },\n 'get_uuid' : function() {\n return UUID;\n },\n 'isArray' : function(arg) {\n return isArray(arg);\n },\n 'get_subscibed_channels' : function() {\n return generate_channel_list(CHANNELS, true);\n },\n 'presence_heartbeat' : function(args) {\n var callback = args['callback'] || function() {}\n var err = args['error'] || function() {}\n var jsonp = jsonp_cb();\n var data = { 'uuid' : UUID, 'auth' : AUTH_KEY };\n\n var st = JSON['stringify'](STATE);\n if (st.length > 2) data['state'] = JSON['stringify'](STATE);\n\n if (PRESENCE_HB > 0 && PRESENCE_HB < 320) data['heartbeat'] = PRESENCE_HB;\n\n if (jsonp != '0') { data['callback'] = jsonp; }\n\n var channels = encode(generate_channel_list(CHANNELS, true)['join'](','));\n var channel_groups = generate_channel_group_list(CHANNEL_GROUPS, true)['join'](',');\n\n if (!channels) channels = ',';\n if (channel_groups) data['channel-group'] = channel_groups;\n\n if (USE_INSTANCEID) data['instanceid'] = INSTANCEID;\n\n xdr({\n callback : jsonp,\n data : _get_url_params(data),\n timeout : SECOND * 5,\n url : [\n STD_ORIGIN, 'v2', 'presence',\n 'sub-key', SUBSCRIBE_KEY,\n 'channel' , channels,\n 'heartbeat'\n ],\n success : function(response) {\n _invoke_callback(response, callback, err);\n },\n fail : function(response) { _invoke_error(response, err); }\n });\n },\n 'stop_timers': function () {\n clearTimeout(_poll_timer);\n clearTimeout(_poll_timer2);\n clearTimeout(PRESENCE_HB_TIMEOUT);\n },\n 'shutdown': function () {\n SELF['stop_timers']();\n shutdown && shutdown();\n },\n\n // Expose PUBNUB Functions\n 'xdr' : xdr,\n 'ready' : ready,\n 'db' : db,\n 'uuid' : generate_uuid,\n 'map' : map,\n 'each' : each,\n 'each-channel' : each_channel,\n 'grep' : grep,\n 'offline' : function(){ _reset_offline(\n 1, { \"message\" : \"Offline. Please check your network settings.\" })\n },\n 'supplant' : supplant,\n 'now' : rnow,\n 'unique' : unique,\n 'updater' : updater\n };\n\n function _poll_online() {\n _is_online() || _reset_offline( 1, {\n \"error\" : \"Offline. Please check your network settings. \"\n });\n _poll_timer && clearTimeout(_poll_timer);\n _poll_timer = timeout( _poll_online, SECOND );\n }\n\n function _poll_online2() {\n if (!TIME_CHECK) return;\n SELF['time'](function(success){\n detect_time_detla( function(){}, success );\n success || _reset_offline( 1, {\n \"error\" : \"Heartbeat failed to connect to Pubnub Servers.\" +\n \"Please check your network settings.\"\n });\n _poll_timer2 && clearTimeout(_poll_timer2);\n _poll_timer2 = timeout( _poll_online2, KEEPALIVE );\n });\n }\n\n function _reset_offline(err, msg) {\n SUB_RECEIVER && SUB_RECEIVER(err, msg);\n SUB_RECEIVER = null;\n\n clearTimeout(_poll_timer);\n clearTimeout(_poll_timer2);\n }\n \n if (!UUID) UUID = SELF['uuid']();\n if (!INSTANCEID) INSTANCEID = SELF['uuid']();\n db['set']( SUBSCRIBE_KEY + 'uuid', UUID );\n\n _poll_timer = timeout( _poll_online, SECOND );\n _poll_timer2 = timeout( _poll_online2, KEEPALIVE );\n PRESENCE_HB_TIMEOUT = timeout(\n start_presence_heartbeat,\n ( PRESENCE_HB_INTERVAL - 3 ) * SECOND\n );\n\n // Detect Age of Message\n function detect_latency(tt) {\n var adjusted_time = rnow() - TIME_DRIFT;\n return adjusted_time - tt / 10000;\n }\n\n detect_time_detla();\n function detect_time_detla( cb, time ) {\n var stime = rnow();\n\n time && calculate(time) || SELF['time'](calculate);\n\n function calculate(time) {\n if (!time) return;\n var ptime = time / 10000\n , latency = (rnow() - stime) / 2;\n TIME_DRIFT = rnow() - (ptime + latency);\n cb && cb(TIME_DRIFT);\n }\n }\n\n return SELF;\n}\nfunction crypto_obj() {\n\n function SHA256(s) {\n return CryptoJS['SHA256'](s)['toString'](CryptoJS['enc']['Hex']);\n }\n\n var iv = \"0123456789012345\";\n\n var allowedKeyEncodings = ['hex', 'utf8', 'base64', 'binary'];\n var allowedKeyLengths = [128, 256];\n var allowedModes = ['ecb', 'cbc'];\n\n var defaultOptions = {\n 'encryptKey': true,\n 'keyEncoding': 'utf8',\n 'keyLength': 256,\n 'mode': 'cbc'\n };\n\n function parse_options(options) {\n\n // Defaults\n options = options || {};\n if (!options['hasOwnProperty']('encryptKey')) options['encryptKey'] = defaultOptions['encryptKey'];\n if (!options['hasOwnProperty']('keyEncoding')) options['keyEncoding'] = defaultOptions['keyEncoding'];\n if (!options['hasOwnProperty']('keyLength')) options['keyLength'] = defaultOptions['keyLength'];\n if (!options['hasOwnProperty']('mode')) options['mode'] = defaultOptions['mode'];\n\n // Validation\n if (allowedKeyEncodings['indexOf'](options['keyEncoding']['toLowerCase']()) == -1) options['keyEncoding'] = defaultOptions['keyEncoding'];\n if (allowedKeyLengths['indexOf'](parseInt(options['keyLength'], 10)) == -1) options['keyLength'] = defaultOptions['keyLength'];\n if (allowedModes['indexOf'](options['mode']['toLowerCase']()) == -1) options['mode'] = defaultOptions['mode'];\n\n return options;\n\n }\n\n function decode_key(key, options) {\n if (options['keyEncoding'] == 'base64') {\n return CryptoJS['enc']['Base64']['parse'](key);\n } else if (options['keyEncoding'] == 'hex') {\n return CryptoJS['enc']['Hex']['parse'](key);\n } else {\n return key;\n }\n }\n\n function get_padded_key(key, options) {\n key = decode_key(key, options);\n if (options['encryptKey']) {\n return CryptoJS['enc']['Utf8']['parse'](SHA256(key)['slice'](0, 32));\n } else {\n return key;\n }\n }\n\n function get_mode(options) {\n if (options['mode'] == 'ecb') {\n return CryptoJS['mode']['ECB'];\n } else {\n return CryptoJS['mode']['CBC'];\n }\n }\n\n function get_iv(options) {\n return (options['mode'] == 'cbc') ? CryptoJS['enc']['Utf8']['parse'](iv) : null;\n }\n\n return {\n\n 'encrypt': function(data, key, options) {\n if (!key) return data;\n options = parse_options(options);\n var iv = get_iv(options);\n var mode = get_mode(options);\n var cipher_key = get_padded_key(key, options);\n var hex_message = JSON['stringify'](data);\n var encryptedHexArray = CryptoJS['AES']['encrypt'](hex_message, cipher_key, {'iv': iv, 'mode': mode})['ciphertext'];\n var base_64_encrypted = encryptedHexArray['toString'](CryptoJS['enc']['Base64']);\n return base_64_encrypted || data;\n },\n\n 'decrypt': function(data, key, options) {\n if (!key) return data;\n options = parse_options(options);\n var iv = get_iv(options);\n var mode = get_mode(options);\n var cipher_key = get_padded_key(key, options);\n try {\n var binary_enc = CryptoJS['enc']['Base64']['parse'](data);\n var json_plain = CryptoJS['AES']['decrypt']({'ciphertext': binary_enc}, cipher_key, {'iv': iv, 'mode': mode})['toString'](CryptoJS['enc']['Utf8']);\n var plaintext = JSON['parse'](json_plain);\n return plaintext;\n }\n catch (e) {\n return undefined;\n }\n }\n };\n}\n/**\n * UTIL LOCALS\n */\n\nvar SWF = 'https://pubnub.a.ssl.fastly.net/pubnub.swf'\n, ASYNC = 'async'\n, UA = navigator.userAgent\n, PNSDK = 'PubNub-JS-' + 'Web' + '/' + '3.7.16'\n, XORIGN = UA.indexOf('MSIE 6') == -1;\n\n/**\n * CONSOLE COMPATIBILITY\n */\nwindow.console || (window.console=window.console||{});\nconsole.log || (\n console.log =\n console.error =\n ((window.opera||{}).postError||function(){})\n);\n\n/**\n * LOCAL STORAGE OR COOKIE\n */\nvar db = (function(){\n var store = {};\n var ls = false;\n try {\n ls = window['localStorage'];\n } catch (e) { }\n var cookieGet = function(key) {\n if (document.cookie.indexOf(key) == -1) return null;\n return ((document.cookie||'').match(\n RegExp(key+'=([^;]+)')\n )||[])[1] || null;\n };\n var cookieSet = function( key, value ) {\n document.cookie = key + '=' + value +\n '; expires=Thu, 1 Aug 2030 20:00:00 UTC; path=/';\n };\n var cookieTest = (function() {\n try {\n cookieSet('pnctest', '1');\n return cookieGet('pnctest') === '1';\n } catch (e) {\n return false;\n }\n }());\n return {\n 'get' : function(key) {\n try {\n if (ls) return ls.getItem(key);\n if (cookieTest) return cookieGet(key);\n return store[key];\n } catch(e) {\n return store[key];\n }\n },\n 'set' : function( key, value ) {\n try {\n if (ls) return ls.setItem( key, value ) && 0;\n if (cookieTest) cookieSet( key, value );\n store[key] = value;\n } catch(e) {\n store[key] = value;\n }\n }\n };\n})();\n\nfunction get_hmac_SHA256(data,key) {\n var hash = CryptoJS['HmacSHA256'](data, key);\n return hash.toString(CryptoJS['enc']['Base64']);\n}\n\n/**\n * $\n * =\n * var div = $('divid');\n */\nfunction $(id) { return document.getElementById(id) }\n\n/**\n * ERROR\n * =====\n * error('message');\n */\nfunction error(message) { console['error'](message) }\n\n/**\n * SEARCH\n * ======\n * var elements = search('a div span');\n */\nfunction search( elements, start) {\n var list = [];\n each( elements.split(/\\s+/), function(el) {\n each( (start || document).getElementsByTagName(el), function(node) {\n list.push(node);\n } );\n });\n return list;\n}\n\n/**\n * BIND\n * ====\n * bind( 'keydown', search('a')[0], function(element) {\n * ...\n * } );\n */\nfunction bind( type, el, fun ) {\n each( type.split(','), function(etype) {\n var rapfun = function(e) {\n if (!e) e = window.event;\n if (!fun(e)) {\n e.cancelBubble = true;\n e.preventDefault && e.preventDefault();\n e.stopPropagation && e.stopPropagation();\n }\n };\n\n if ( el.addEventListener ) el.addEventListener( etype, rapfun, false );\n else if ( el.attachEvent ) el.attachEvent( 'on' + etype, rapfun );\n else el[ 'on' + etype ] = rapfun;\n } );\n}\n\n/**\n * UNBIND\n * ======\n * unbind( 'keydown', search('a')[0] );\n */\nfunction unbind( type, el, fun ) {\n if ( el.removeEventListener ) el.removeEventListener( type, false );\n else if ( el.detachEvent ) el.detachEvent( 'on' + type, false );\n else el[ 'on' + type ] = null;\n}\n\n/**\n * HEAD\n * ====\n * head().appendChild(elm);\n */\nfunction head() { return search('head')[0] }\n\n/**\n * ATTR\n * ====\n * var attribute = attr( node, 'attribute' );\n */\nfunction attr( node, attribute, value ) {\n if (value) node.setAttribute( attribute, value );\n else return node && node.getAttribute && node.getAttribute(attribute);\n}\n\n/**\n * CSS\n * ===\n * var obj = create('div');\n */\nfunction css( element, styles ) {\n for (var style in styles) if (styles.hasOwnProperty(style))\n try {element.style[style] = styles[style] + (\n '|width|height|top|left|'.indexOf(style) > 0 &&\n typeof styles[style] == 'number'\n ? 'px' : ''\n )}catch(e){}\n}\n\n/**\n * CREATE\n * ======\n * var obj = create('div');\n */\nfunction create(element) { return document.createElement(element) }\n\n\n/**\n * jsonp_cb\n * ========\n * var callback = jsonp_cb();\n */\nfunction jsonp_cb() { return XORIGN || FDomainRequest() ? 0 : unique() }\n\n\n\n/**\n * EVENTS\n * ======\n * PUBNUB.events.bind( 'you-stepped-on-flower', function(message) {\n * // Do Stuff with message\n * } );\n *\n * PUBNUB.events.fire( 'you-stepped-on-flower', \"message-data\" );\n * PUBNUB.events.fire( 'you-stepped-on-flower', {message:\"data\"} );\n * PUBNUB.events.fire( 'you-stepped-on-flower', [1,2,3] );\n *\n */\nvar events = {\n 'list' : {},\n 'unbind' : function( name ) { events.list[name] = [] },\n 'bind' : function( name, fun ) {\n (events.list[name] = events.list[name] || []).push(fun);\n },\n 'fire' : function( name, data ) {\n each(\n events.list[name] || [],\n function(fun) { fun(data) }\n );\n }\n};\n\n/**\n * XDR Cross Domain Request\n * ========================\n * xdr({\n * url : ['http://www.blah.com/url'],\n * success : function(response) {},\n * fail : function() {}\n * });\n */\nfunction xdr( setup ) {\n if (XORIGN || FDomainRequest()) return ajax(setup);\n\n var script = create('script')\n , callback = setup.callback\n , id = unique()\n , finished = 0\n , xhrtme = setup.timeout || DEF_TIMEOUT\n , timer = timeout( function(){done(1, {\"message\" : \"timeout\"})}, xhrtme )\n , fail = setup.fail || function(){}\n , data = setup.data || {}\n , success = setup.success || function(){}\n , append = function() { head().appendChild(script) }\n , done = function( failed, response ) {\n if (finished) return;\n finished = 1;\n\n script.onerror = null;\n clearTimeout(timer);\n\n (failed || !response) || success(response);\n\n timeout( function() {\n failed && fail();\n var s = $(id)\n , p = s && s.parentNode;\n p && p.removeChild(s);\n }, SECOND );\n };\n\n window[callback] = function(response) {\n done( 0, response );\n };\n\n if (!setup.blocking) script[ASYNC] = ASYNC;\n\n script.onerror = function() { done(1) };\n script.src = build_url( setup.url, data );\n\n attr( script, 'id', id );\n\n append();\n return done;\n}\n\n/**\n * CORS XHR Request\n * ================\n * xdr({\n * url : ['http://www.blah.com/url'],\n * success : function(response) {},\n * fail : function() {}\n * });\n */\nfunction ajax( setup ) {\n var xhr, response\n , finished = function() {\n if (loaded) return;\n loaded = 1;\n\n clearTimeout(timer);\n\n try { response = JSON['parse'](xhr.responseText); }\n catch (r) { return done(1); }\n\n complete = 1;\n success(response);\n }\n , complete = 0\n , loaded = 0\n , xhrtme = setup.timeout || DEF_TIMEOUT\n , timer = timeout( function(){done(1, {\"message\" : \"timeout\"})}, xhrtme )\n , fail = setup.fail || function(){}\n , data = setup.data || {}\n , success = setup.success || function(){}\n , async = !(setup.blocking)\n , done = function(failed,response) {\n if (complete) return;\n complete = 1;\n\n clearTimeout(timer);\n\n if (xhr) {\n xhr.onerror = xhr.onload = null;\n xhr.abort && xhr.abort();\n xhr = null;\n }\n\n failed && fail(response);\n };\n\n // Send\n try {\n xhr = FDomainRequest() ||\n window.XDomainRequest &&\n new XDomainRequest() ||\n new XMLHttpRequest();\n\n xhr.onerror = xhr.onabort = function(e){ done(\n 1, e || (xhr && xhr.responseText) || { \"error\" : \"Network Connection Error\"}\n ) };\n xhr.onload = xhr.onloadend = finished;\n xhr.onreadystatechange = function() {\n if (xhr && xhr.readyState == 4) {\n switch(xhr.status) {\n case 200:\n break;\n default:\n try {\n response = JSON['parse'](xhr.responseText);\n done(1,response);\n }\n catch (r) { return done(1, {status : xhr.status, payload : null, message : xhr.responseText}); }\n return;\n }\n }\n }\n\n var url = build_url(setup.url,data);\n\n xhr.open( 'GET', url, async );\n if (async) xhr.timeout = xhrtme;\n xhr.send();\n }\n catch(eee) {\n done(0);\n XORIGN = 0;\n return xdr(setup);\n }\n\n // Return 'done'\n return done;\n}\n\n// Test Connection State\nfunction _is_online() {\n if (!('onLine' in navigator)) return 1;\n try { return navigator['onLine'] }\n catch (e) { return true }\n}\n\n\nfunction sendBeacon(url) {\n if (!('sendBeacon' in navigator)) return false;\n\n return navigator['sendBeacon'](url);\n}\n\n/* =-====================================================================-= */\n/* =-====================================================================-= */\n/* =-========================= PUBNUB ===========================-= */\n/* =-====================================================================-= */\n/* =-====================================================================-= */\n\nvar PDIV = $('pubnub') || 0\n, CREATE_PUBNUB = function(setup) {\n\n // Force JSONP if requested from user.\n if (setup['jsonp']) XORIGN = 0;\n else XORIGN = UA.indexOf('MSIE 6') == -1;\n\n var SUBSCRIBE_KEY = setup['subscribe_key'] || ''\n , KEEPALIVE = (+setup['keepalive'] || DEF_KEEPALIVE) * SECOND\n , UUID = setup['uuid'] || db['get'](SUBSCRIBE_KEY+'uuid')||'';\n\n var leave_on_unload = setup['leave_on_unload'] || 0;\n\n setup['xdr'] = xdr;\n setup['db'] = db;\n setup['error'] = setup['error'] || error;\n setup['_is_online'] = _is_online;\n setup['jsonp_cb'] = jsonp_cb;\n setup['hmac_SHA256']= get_hmac_SHA256;\n setup['crypto_obj'] = crypto_obj();\n setup['sendBeacon'] = sendBeacon;\n setup['params'] = { 'pnsdk' : PNSDK }\n\n var SELF = function(setup) {\n return CREATE_PUBNUB(setup);\n };\n\n var PN = PN_API(setup);\n\n for (var prop in PN) {\n if (PN.hasOwnProperty(prop)) {\n SELF[prop] = PN[prop];\n }\n }\n SELF['css'] = css;\n SELF['$'] = $;\n SELF['create'] = create;\n SELF['bind'] = bind;\n SELF['head'] = head;\n SELF['search'] = search;\n SELF['attr'] = attr;\n SELF['events'] = events;\n SELF['init'] = SELF;\n SELF['secure'] = SELF;\n SELF['crypto_obj'] = crypto_obj(); // export to instance\n\n\n // Add Leave Functions\n bind( 'beforeunload', window, function() {\n if (leave_on_unload) SELF['each-channel'](function(ch){ SELF['LEAVE']( ch.name, 0 ) });\n return true;\n } );\n\n // Return without Testing\n if (setup['notest']) return SELF;\n\n bind( 'offline', window, SELF['offline'] );\n bind( 'offline', document, SELF['offline'] );\n\n // Return PUBNUB Socket Object\n return SELF;\n};\nCREATE_PUBNUB['init'] = CREATE_PUBNUB;\nCREATE_PUBNUB['secure'] = CREATE_PUBNUB;\nCREATE_PUBNUB['crypto_obj'] = crypto_obj(); // export to constructor\n\n// Bind for PUBNUB Readiness to Subscribe\nif (document.readyState === 'complete') {\n timeout( ready, 0 );\n}\nelse {\n bind( 'load', window, function(){ timeout( ready, 0 ) } );\n}\n\nvar pdiv = PDIV || {};\n\n// CREATE A PUBNUB GLOBAL OBJECT\nPUBNUB = CREATE_PUBNUB({\n 'notest' : 1,\n 'publish_key' : attr( pdiv, 'pub-key' ),\n 'subscribe_key' : attr( pdiv, 'sub-key' ),\n 'ssl' : !document.location.href.indexOf('https') ||\n attr( pdiv, 'ssl' ) == 'on',\n 'origin' : attr( pdiv, 'origin' ),\n 'uuid' : attr( pdiv, 'uuid' )\n});\n\n// jQuery Interface\nwindow['jQuery'] && (window['jQuery']['PUBNUB'] = CREATE_PUBNUB);\n\n// For Modern JS + Testling.js - http://testling.com/\ntypeof(module) !== 'undefined' && (module['exports'] = PUBNUB) && ready();\n\nvar pubnubs = $('pubnubs') || 0;\n\n// LEAVE NOW IF NO PDIV.\nif (!PDIV) return;\n\n// PUBNUB Flash Socket\ncss( PDIV, { 'position' : 'absolute', 'top' : -SECOND } );\n\nif ('opera' in window || attr( PDIV, 'flash' )) PDIV['innerHTML'] =\n '';\n\n// Create Interface for Opera Flash\nPUBNUB['rdx'] = function( id, data ) {\n if (!data) return FDomainRequest[id]['onerror']();\n FDomainRequest[id]['responseText'] = unescape(data);\n FDomainRequest[id]['onload']();\n};\n\nfunction FDomainRequest() {\n if (!pubnubs || !pubnubs['get']) return 0;\n\n var fdomainrequest = {\n 'id' : FDomainRequest['id']++,\n 'send' : function() {},\n 'abort' : function() { fdomainrequest['id'] = {} },\n 'open' : function( method, url ) {\n FDomainRequest[fdomainrequest['id']] = fdomainrequest;\n pubnubs['get']( fdomainrequest['id'], url );\n }\n };\n\n return fdomainrequest;\n}\nFDomainRequest['id'] = SECOND;\n\n})();\n(function(){\n\n// ---------------------------------------------------------------------------\n// WEBSOCKET INTERFACE\n// ---------------------------------------------------------------------------\nvar WS = PUBNUB['ws'] = function( url, protocols ) {\n if (!(this instanceof WS)) return new WS( url, protocols );\n\n var self = this\n , url = self.url = url || ''\n , protocol = self.protocol = protocols || 'Sec-WebSocket-Protocol'\n , bits = url.split('/')\n , setup = {\n 'ssl' : bits[0] === 'wss:'\n ,'origin' : bits[2]\n ,'publish_key' : bits[3]\n ,'subscribe_key' : bits[4]\n ,'channel' : bits[5]\n };\n\n // READY STATES\n self['CONNECTING'] = 0; // The connection is not yet open.\n self['OPEN'] = 1; // The connection is open and ready to communicate.\n self['CLOSING'] = 2; // The connection is in the process of closing.\n self['CLOSED'] = 3; // The connection is closed or couldn't be opened.\n\n // CLOSE STATES\n self['CLOSE_NORMAL'] = 1000; // Normal Intended Close; completed.\n self['CLOSE_GOING_AWAY'] = 1001; // Closed Unexpecttedly.\n self['CLOSE_PROTOCOL_ERROR'] = 1002; // Server: Not Supported.\n self['CLOSE_UNSUPPORTED'] = 1003; // Server: Unsupported Protocol.\n self['CLOSE_TOO_LARGE'] = 1004; // Server: Too Much Data.\n self['CLOSE_NO_STATUS'] = 1005; // Server: No reason.\n self['CLOSE_ABNORMAL'] = 1006; // Abnormal Disconnect.\n\n // Events Default\n self['onclose'] = self['onerror'] =\n self['onmessage'] = self['onopen'] =\n self['onsend'] = function(){};\n\n // Attributes\n self['binaryType'] = '';\n self['extensions'] = '';\n self['bufferedAmount'] = 0;\n self['trasnmitting'] = false;\n self['buffer'] = [];\n self['readyState'] = self['CONNECTING'];\n\n // Close if no setup.\n if (!url) {\n self['readyState'] = self['CLOSED'];\n self['onclose']({\n 'code' : self['CLOSE_ABNORMAL'],\n 'reason' : 'Missing URL',\n 'wasClean' : true\n });\n return self;\n }\n\n // PubNub WebSocket Emulation\n self.pubnub = PUBNUB['init'](setup);\n self.pubnub.setup = setup;\n self.setup = setup;\n\n self.pubnub['subscribe']({\n 'restore' : false,\n 'channel' : setup['channel'],\n 'disconnect' : self['onerror'],\n 'reconnect' : self['onopen'],\n 'error' : function() {\n self['onclose']({\n 'code' : self['CLOSE_ABNORMAL'],\n 'reason' : 'Missing URL',\n 'wasClean' : false\n });\n },\n 'callback' : function(message) {\n self['onmessage']({ 'data' : message });\n },\n 'connect' : function() {\n self['readyState'] = self['OPEN'];\n self['onopen']();\n }\n });\n};\n\n// ---------------------------------------------------------------------------\n// WEBSOCKET SEND\n// ---------------------------------------------------------------------------\nWS.prototype.send = function(data) {\n var self = this;\n self.pubnub['publish']({\n 'channel' : self.pubnub.setup['channel'],\n 'message' : data,\n 'callback' : function(response) {\n self['onsend']({ 'data' : response });\n }\n });\n};\n\n// ---------------------------------------------------------------------------\n// WEBSOCKET CLOSE\n// ---------------------------------------------------------------------------\nWS.prototype.close = function() {\n var self = this;\n self.pubnub['unsubscribe']({ 'channel' : self.pubnub.setup['channel'] });\n self['readyState'] = self['CLOSED'];\n self['onclose']({});\n};\n\n})();\n/*\nCryptoJS v3.1.2\ncode.google.com/p/crypto-js\n(c) 2009-2013 by Jeff Mott. All rights reserved.\ncode.google.com/p/crypto-js/wiki/License\n*/\nvar CryptoJS=CryptoJS||function(h,s){var f={},g=f.lib={},q=function(){},m=g.Base={extend:function(a){q.prototype=this;var c=new q;a&&c.mixIn(a);c.hasOwnProperty(\"init\")||(c.init=function(){c.$super.init.apply(this,arguments)});c.init.prototype=c;c.$super=this;return c},create:function(){var a=this.extend();a.init.apply(a,arguments);return a},init:function(){},mixIn:function(a){for(var c in a)a.hasOwnProperty(c)&&(this[c]=a[c]);a.hasOwnProperty(\"toString\")&&(this.toString=a.toString)},clone:function(){return this.init.prototype.extend(this)}},\nr=g.WordArray=m.extend({init:function(a,c){a=this.words=a||[];this.sigBytes=c!=s?c:4*a.length},toString:function(a){return(a||k).stringify(this)},concat:function(a){var c=this.words,d=a.words,b=this.sigBytes;a=a.sigBytes;this.clamp();if(b%4)for(var e=0;e>>2]|=(d[e>>>2]>>>24-8*(e%4)&255)<<24-8*((b+e)%4);else if(65535>>2]=d[e>>>2];else c.push.apply(c,d);this.sigBytes+=a;return this},clamp:function(){var a=this.words,c=this.sigBytes;a[c>>>2]&=4294967295<<\n32-8*(c%4);a.length=h.ceil(c/4)},clone:function(){var a=m.clone.call(this);a.words=this.words.slice(0);return a},random:function(a){for(var c=[],d=0;d>>2]>>>24-8*(b%4)&255;d.push((e>>>4).toString(16));d.push((e&15).toString(16))}return d.join(\"\")},parse:function(a){for(var c=a.length,d=[],b=0;b>>3]|=parseInt(a.substr(b,\n2),16)<<24-4*(b%8);return new r.init(d,c/2)}},n=l.Latin1={stringify:function(a){var c=a.words;a=a.sigBytes;for(var d=[],b=0;b>>2]>>>24-8*(b%4)&255));return d.join(\"\")},parse:function(a){for(var c=a.length,d=[],b=0;b>>2]|=(a.charCodeAt(b)&255)<<24-8*(b%4);return new r.init(d,c)}},j=l.Utf8={stringify:function(a){try{return decodeURIComponent(escape(n.stringify(a)))}catch(c){throw Error(\"Malformed UTF-8 data\");}},parse:function(a){return n.parse(unescape(encodeURIComponent(a)))}},\nu=g.BufferedBlockAlgorithm=m.extend({reset:function(){this._data=new r.init;this._nDataBytes=0},_append:function(a){\"string\"==typeof a&&(a=j.parse(a));this._data.concat(a);this._nDataBytes+=a.sigBytes},_process:function(a){var c=this._data,d=c.words,b=c.sigBytes,e=this.blockSize,f=b/(4*e),f=a?h.ceil(f):h.max((f|0)-this._minBufferSize,0);a=f*e;b=h.min(4*a,b);if(a){for(var g=0;gn;){var j;a:{j=k;for(var u=h.sqrt(j),t=2;t<=u;t++)if(!(j%t)){j=!1;break a}j=!0}j&&(8>n&&(m[n]=l(h.pow(k,0.5))),r[n]=l(h.pow(k,1/3)),n++);k++}var a=[],f=f.SHA256=q.extend({_doReset:function(){this._hash=new g.init(m.slice(0))},_doProcessBlock:function(c,d){for(var b=this._hash.words,e=b[0],f=b[1],g=b[2],j=b[3],h=b[4],m=b[5],n=b[6],q=b[7],p=0;64>p;p++){if(16>p)a[p]=\nc[d+p]|0;else{var k=a[p-15],l=a[p-2];a[p]=((k<<25|k>>>7)^(k<<14|k>>>18)^k>>>3)+a[p-7]+((l<<15|l>>>17)^(l<<13|l>>>19)^l>>>10)+a[p-16]}k=q+((h<<26|h>>>6)^(h<<21|h>>>11)^(h<<7|h>>>25))+(h&m^~h&n)+r[p]+a[p];l=((e<<30|e>>>2)^(e<<19|e>>>13)^(e<<10|e>>>22))+(e&f^e&g^f&g);q=n;n=m;m=h;h=j+k|0;j=g;g=f;f=e;e=k+l|0}b[0]=b[0]+e|0;b[1]=b[1]+f|0;b[2]=b[2]+g|0;b[3]=b[3]+j|0;b[4]=b[4]+h|0;b[5]=b[5]+m|0;b[6]=b[6]+n|0;b[7]=b[7]+q|0},_doFinalize:function(){var a=this._data,d=a.words,b=8*this._nDataBytes,e=8*a.sigBytes;\nd[e>>>5]|=128<<24-e%32;d[(e+64>>>9<<4)+14]=h.floor(b/4294967296);d[(e+64>>>9<<4)+15]=b;a.sigBytes=4*d.length;this._process();return this._hash},clone:function(){var a=q.clone.call(this);a._hash=this._hash.clone();return a}});s.SHA256=q._createHelper(f);s.HmacSHA256=q._createHmacHelper(f)})(Math);\n\n// HMAC SHA256\n(function(){var h=CryptoJS,s=h.enc.Utf8;h.algo.HMAC=h.lib.Base.extend({init:function(f,g){f=this._hasher=new f.init;\"string\"==typeof g&&(g=s.parse(g));var h=f.blockSize,m=4*h;g.sigBytes>m&&(g=f.finalize(g));g.clamp();for(var r=this._oKey=g.clone(),l=this._iKey=g.clone(),k=r.words,n=l.words,j=0;j>>2]>>>24-8*(r%4)&255)<<16|(l[r+1>>>2]>>>24-8*((r+1)%4)&255)<<8|l[r+2>>>2]>>>24-8*((r+2)%4)&255,v=0;4>v&&r+0.75*v>>6*(3-v)&63));if(l=t.charAt(64))for(;d.length%4;)d.push(l);return d.join(\"\")},parse:function(d){var l=d.length,s=this._map,t=s.charAt(64);t&&(t=d.indexOf(t),-1!=t&&(l=t));for(var t=[],r=0,w=0;w<\nl;w++)if(w%4){var v=s.indexOf(d.charAt(w-1))<<2*(w%4),b=s.indexOf(d.charAt(w))>>>6-2*(w%4);t[r>>>2]|=(v|b)<<24-8*(r%4);r++}return p.create(t,r)},_map:\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\"}})();\n\n// BlockCipher\n(function(u){function p(b,n,a,c,e,j,k){b=b+(n&a|~n&c)+e+k;return(b<>>32-j)+n}function d(b,n,a,c,e,j,k){b=b+(n&c|a&~c)+e+k;return(b<>>32-j)+n}function l(b,n,a,c,e,j,k){b=b+(n^a^c)+e+k;return(b<>>32-j)+n}function s(b,n,a,c,e,j,k){b=b+(a^(n|~c))+e+k;return(b<>>32-j)+n}for(var t=CryptoJS,r=t.lib,w=r.WordArray,v=r.Hasher,r=t.algo,b=[],x=0;64>x;x++)b[x]=4294967296*u.abs(u.sin(x+1))|0;r=r.MD5=v.extend({_doReset:function(){this._hash=new w.init([1732584193,4023233417,2562383102,271733878])},\n_doProcessBlock:function(q,n){for(var a=0;16>a;a++){var c=n+a,e=q[c];q[c]=(e<<8|e>>>24)&16711935|(e<<24|e>>>8)&4278255360}var a=this._hash.words,c=q[n+0],e=q[n+1],j=q[n+2],k=q[n+3],z=q[n+4],r=q[n+5],t=q[n+6],w=q[n+7],v=q[n+8],A=q[n+9],B=q[n+10],C=q[n+11],u=q[n+12],D=q[n+13],E=q[n+14],x=q[n+15],f=a[0],m=a[1],g=a[2],h=a[3],f=p(f,m,g,h,c,7,b[0]),h=p(h,f,m,g,e,12,b[1]),g=p(g,h,f,m,j,17,b[2]),m=p(m,g,h,f,k,22,b[3]),f=p(f,m,g,h,z,7,b[4]),h=p(h,f,m,g,r,12,b[5]),g=p(g,h,f,m,t,17,b[6]),m=p(m,g,h,f,w,22,b[7]),\nf=p(f,m,g,h,v,7,b[8]),h=p(h,f,m,g,A,12,b[9]),g=p(g,h,f,m,B,17,b[10]),m=p(m,g,h,f,C,22,b[11]),f=p(f,m,g,h,u,7,b[12]),h=p(h,f,m,g,D,12,b[13]),g=p(g,h,f,m,E,17,b[14]),m=p(m,g,h,f,x,22,b[15]),f=d(f,m,g,h,e,5,b[16]),h=d(h,f,m,g,t,9,b[17]),g=d(g,h,f,m,C,14,b[18]),m=d(m,g,h,f,c,20,b[19]),f=d(f,m,g,h,r,5,b[20]),h=d(h,f,m,g,B,9,b[21]),g=d(g,h,f,m,x,14,b[22]),m=d(m,g,h,f,z,20,b[23]),f=d(f,m,g,h,A,5,b[24]),h=d(h,f,m,g,E,9,b[25]),g=d(g,h,f,m,k,14,b[26]),m=d(m,g,h,f,v,20,b[27]),f=d(f,m,g,h,D,5,b[28]),h=d(h,f,\nm,g,j,9,b[29]),g=d(g,h,f,m,w,14,b[30]),m=d(m,g,h,f,u,20,b[31]),f=l(f,m,g,h,r,4,b[32]),h=l(h,f,m,g,v,11,b[33]),g=l(g,h,f,m,C,16,b[34]),m=l(m,g,h,f,E,23,b[35]),f=l(f,m,g,h,e,4,b[36]),h=l(h,f,m,g,z,11,b[37]),g=l(g,h,f,m,w,16,b[38]),m=l(m,g,h,f,B,23,b[39]),f=l(f,m,g,h,D,4,b[40]),h=l(h,f,m,g,c,11,b[41]),g=l(g,h,f,m,k,16,b[42]),m=l(m,g,h,f,t,23,b[43]),f=l(f,m,g,h,A,4,b[44]),h=l(h,f,m,g,u,11,b[45]),g=l(g,h,f,m,x,16,b[46]),m=l(m,g,h,f,j,23,b[47]),f=s(f,m,g,h,c,6,b[48]),h=s(h,f,m,g,w,10,b[49]),g=s(g,h,f,m,\nE,15,b[50]),m=s(m,g,h,f,r,21,b[51]),f=s(f,m,g,h,u,6,b[52]),h=s(h,f,m,g,k,10,b[53]),g=s(g,h,f,m,B,15,b[54]),m=s(m,g,h,f,e,21,b[55]),f=s(f,m,g,h,v,6,b[56]),h=s(h,f,m,g,x,10,b[57]),g=s(g,h,f,m,t,15,b[58]),m=s(m,g,h,f,D,21,b[59]),f=s(f,m,g,h,z,6,b[60]),h=s(h,f,m,g,C,10,b[61]),g=s(g,h,f,m,j,15,b[62]),m=s(m,g,h,f,A,21,b[63]);a[0]=a[0]+f|0;a[1]=a[1]+m|0;a[2]=a[2]+g|0;a[3]=a[3]+h|0},_doFinalize:function(){var b=this._data,n=b.words,a=8*this._nDataBytes,c=8*b.sigBytes;n[c>>>5]|=128<<24-c%32;var e=u.floor(a/\n4294967296);n[(c+64>>>9<<4)+15]=(e<<8|e>>>24)&16711935|(e<<24|e>>>8)&4278255360;n[(c+64>>>9<<4)+14]=(a<<8|a>>>24)&16711935|(a<<24|a>>>8)&4278255360;b.sigBytes=4*(n.length+1);this._process();b=this._hash;n=b.words;for(a=0;4>a;a++)c=n[a],n[a]=(c<<8|c>>>24)&16711935|(c<<24|c>>>8)&4278255360;return b},clone:function(){var b=v.clone.call(this);b._hash=this._hash.clone();return b}});t.MD5=v._createHelper(r);t.HmacMD5=v._createHmacHelper(r)})(Math);\n(function(){var u=CryptoJS,p=u.lib,d=p.Base,l=p.WordArray,p=u.algo,s=p.EvpKDF=d.extend({cfg:d.extend({keySize:4,hasher:p.MD5,iterations:1}),init:function(d){this.cfg=this.cfg.extend(d)},compute:function(d,r){for(var p=this.cfg,s=p.hasher.create(),b=l.create(),u=b.words,q=p.keySize,p=p.iterations;u.length>>2]&255}};d.BlockCipher=v.extend({cfg:v.cfg.extend({mode:b,padding:q}),reset:function(){v.reset.call(this);var a=this.cfg,b=a.iv,a=a.mode;if(this._xformMode==this._ENC_XFORM_MODE)var c=a.createEncryptor;else c=a.createDecryptor,this._minBufferSize=1;this._mode=c.call(a,\nthis,b&&b.words)},_doProcessBlock:function(a,b){this._mode.processBlock(a,b)},_doFinalize:function(){var a=this.cfg.padding;if(this._xformMode==this._ENC_XFORM_MODE){a.pad(this._data,this.blockSize);var b=this._process(!0)}else b=this._process(!0),a.unpad(b);return b},blockSize:4});var n=d.CipherParams=l.extend({init:function(a){this.mixIn(a)},toString:function(a){return(a||this.formatter).stringify(this)}}),b=(p.format={}).OpenSSL={stringify:function(a){var b=a.ciphertext;a=a.salt;return(a?s.create([1398893684,\n1701076831]).concat(a).concat(b):b).toString(r)},parse:function(a){a=r.parse(a);var b=a.words;if(1398893684==b[0]&&1701076831==b[1]){var c=s.create(b.slice(2,4));b.splice(0,4);a.sigBytes-=16}return n.create({ciphertext:a,salt:c})}},a=d.SerializableCipher=l.extend({cfg:l.extend({format:b}),encrypt:function(a,b,c,d){d=this.cfg.extend(d);var l=a.createEncryptor(c,d);b=l.finalize(b);l=l.cfg;return n.create({ciphertext:b,key:c,iv:l.iv,algorithm:a,mode:l.mode,padding:l.padding,blockSize:a.blockSize,formatter:d.format})},\ndecrypt:function(a,b,c,d){d=this.cfg.extend(d);b=this._parse(b,d.format);return a.createDecryptor(c,d).finalize(b.ciphertext)},_parse:function(a,b){return\"string\"==typeof a?b.parse(a,this):a}}),p=(p.kdf={}).OpenSSL={execute:function(a,b,c,d){d||(d=s.random(8));a=w.create({keySize:b+c}).compute(a,d);c=s.create(a.words.slice(b),4*c);a.sigBytes=4*b;return n.create({key:a,iv:c,salt:d})}},c=d.PasswordBasedCipher=a.extend({cfg:a.cfg.extend({kdf:p}),encrypt:function(b,c,d,l){l=this.cfg.extend(l);d=l.kdf.execute(d,\nb.keySize,b.ivSize);l.iv=d.iv;b=a.encrypt.call(this,b,c,d.key,l);b.mixIn(d);return b},decrypt:function(b,c,d,l){l=this.cfg.extend(l);c=this._parse(c,l.format);d=l.kdf.execute(d,b.keySize,b.ivSize,c.salt);l.iv=d.iv;return a.decrypt.call(this,b,c,d.key,l)}})}();\n\n// AES\n(function(){for(var u=CryptoJS,p=u.lib.BlockCipher,d=u.algo,l=[],s=[],t=[],r=[],w=[],v=[],b=[],x=[],q=[],n=[],a=[],c=0;256>c;c++)a[c]=128>c?c<<1:c<<1^283;for(var e=0,j=0,c=0;256>c;c++){var k=j^j<<1^j<<2^j<<3^j<<4,k=k>>>8^k&255^99;l[e]=k;s[k]=e;var z=a[e],F=a[z],G=a[F],y=257*a[k]^16843008*k;t[e]=y<<24|y>>>8;r[e]=y<<16|y>>>16;w[e]=y<<8|y>>>24;v[e]=y;y=16843009*G^65537*F^257*z^16843008*e;b[k]=y<<24|y>>>8;x[k]=y<<16|y>>>16;q[k]=y<<8|y>>>24;n[k]=y;e?(e=z^a[a[a[G^z]]],j^=a[a[j]]):e=j=1}var H=[0,1,2,4,8,\n16,32,64,128,27,54],d=d.AES=p.extend({_doReset:function(){for(var a=this._key,c=a.words,d=a.sigBytes/4,a=4*((this._nRounds=d+6)+1),e=this._keySchedule=[],j=0;j>>24]<<24|l[k>>>16&255]<<16|l[k>>>8&255]<<8|l[k&255]):(k=k<<8|k>>>24,k=l[k>>>24]<<24|l[k>>>16&255]<<16|l[k>>>8&255]<<8|l[k&255],k^=H[j/d|0]<<24);e[j]=e[j-d]^k}c=this._invKeySchedule=[];for(d=0;dd||4>=j?k:b[l[k>>>24]]^x[l[k>>>16&255]]^q[l[k>>>\n8&255]]^n[l[k&255]]},encryptBlock:function(a,b){this._doCryptBlock(a,b,this._keySchedule,t,r,w,v,l)},decryptBlock:function(a,c){var d=a[c+1];a[c+1]=a[c+3];a[c+3]=d;this._doCryptBlock(a,c,this._invKeySchedule,b,x,q,n,s);d=a[c+1];a[c+1]=a[c+3];a[c+3]=d},_doCryptBlock:function(a,b,c,d,e,j,l,f){for(var m=this._nRounds,g=a[b]^c[0],h=a[b+1]^c[1],k=a[b+2]^c[2],n=a[b+3]^c[3],p=4,r=1;r>>24]^e[h>>>16&255]^j[k>>>8&255]^l[n&255]^c[p++],s=d[h>>>24]^e[k>>>16&255]^j[n>>>8&255]^l[g&255]^c[p++],t=\nd[k>>>24]^e[n>>>16&255]^j[g>>>8&255]^l[h&255]^c[p++],n=d[n>>>24]^e[g>>>16&255]^j[h>>>8&255]^l[k&255]^c[p++],g=q,h=s,k=t;q=(f[g>>>24]<<24|f[h>>>16&255]<<16|f[k>>>8&255]<<8|f[n&255])^c[p++];s=(f[h>>>24]<<24|f[k>>>16&255]<<16|f[n>>>8&255]<<8|f[g&255])^c[p++];t=(f[k>>>24]<<24|f[n>>>16&255]<<16|f[g>>>8&255]<<8|f[h&255])^c[p++];n=(f[n>>>24]<<24|f[g>>>16&255]<<16|f[h>>>8&255]<<8|f[k&255])^c[p++];a[b]=q;a[b+1]=s;a[b+2]=t;a[b+3]=n},keySize:8});u.AES=p._createHelper(d)})();\n\n// Mode ECB\nCryptoJS.mode.ECB = (function () {\n var ECB = CryptoJS.lib.BlockCipherMode.extend();\n\n ECB.Encryptor = ECB.extend({\n processBlock: function (words, offset) {\n this._cipher.encryptBlock(words, offset);\n }\n });\n\n ECB.Decryptor = ECB.extend({\n processBlock: function (words, offset) {\n this._cipher.decryptBlock(words, offset);\n }\n });\n\n return ECB;\n}());// Moved to hmac-sha-256.js\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(7)(module)))\n\n/***/ },\n/* 11 */\n/***/ function(module, exports) {\n\n'use strict';\n\nexports.__esModule = true;\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nvar Cache = (function () {\n _createClass(Cache, null, [{\n key: 'defaultPrefix',\n value: 'rc-',\n enumerable: true\n }]);\n\n function Cache(storage, prefix) {\n _classCallCheck(this, Cache);\n\n this.setPrefix(prefix);\n this._storage = storage;\n }\n\n Cache.prototype.setPrefix = function setPrefix(prefix) {\n this._prefix = prefix || Cache.defaultPrefix;\n return this;\n };\n\n Cache.prototype.setItem = function setItem(key, data) {\n this._storage[this._prefixKey(key)] = JSON.stringify(data);\n return this;\n };\n\n Cache.prototype.removeItem = function removeItem(key) {\n delete this._storage[this._prefixKey(key)];\n return this;\n };\n\n Cache.prototype.getItem = function getItem(key) {\n var item = this._storage[this._prefixKey(key)];\n if (!item) return null;\n return JSON.parse(item);\n };\n\n Cache.prototype.clean = function clean() {\n\n for (var key in this._storage) {\n\n if (!this._storage.hasOwnProperty(key)) continue;\n\n if (key.indexOf(this._prefix) === 0) {\n delete this._storage[key];\n }\n }\n\n return this;\n };\n\n Cache.prototype._prefixKey = function _prefixKey(key) {\n return this._prefix + key;\n };\n\n return Cache;\n})();\n\nexports['default'] = Cache;\nmodule.exports = exports['default'];\n\n/***/ },\n/* 12 */\n/***/ function(module, exports) {\n\n'use strict';\n\nexports.__esModule = true;\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nvar Observable = (function () {\n function Observable() {\n _classCallCheck(this, Observable);\n\n this.off();\n }\n\n Observable.prototype.hasListeners = function hasListeners(event) {\n return event in this._listeners;\n };\n\n Observable.prototype.on = function on(events, callback) {\n var _this = this;\n\n if (typeof events == 'string') events = [events];\n if (!events) throw new Error('No events to subscribe to');\n if (typeof callback !== 'function') throw new Error('Callback must be a function');\n\n events.forEach(function (event) {\n\n if (!_this.hasListeners(event)) _this._listeners[event] = [];\n\n _this._listeners[event].push(callback);\n });\n\n return this;\n };\n\n Observable.prototype.emit = function emit(event) {\n var _this2 = this;\n\n for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n var result = null;\n\n if (!this.hasListeners(event)) return null;\n\n this._listeners[event].some(function (callback) {\n\n result = callback.apply(_this2, args);\n return result === false;\n });\n\n return result;\n };\n\n Observable.prototype.off = function off(event, callback) {\n var _this3 = this;\n\n if (!event) {\n\n this._listeners = {};\n } else {\n\n if (!callback) {\n\n delete this._listeners[event];\n } else {\n\n if (!this.hasListeners(event)) return this;\n\n this._listeners[event].forEach(function (cb, i) {\n\n if (cb === callback) delete _this3._listeners[event][i];\n });\n }\n }\n\n return this;\n };\n\n return Observable;\n})();\n\nexports['default'] = Observable;\nmodule.exports = exports['default'];\n\n/***/ },\n/* 13 */\n/***/ function(module, exports, __webpack_require__) {\n\n'use strict';\n\nexports.__esModule = true;\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nvar _coreExternals = __webpack_require__(3);\n\nvar _Utils = __webpack_require__(2);\n\nvar Queue = (function () {\n _createClass(Queue, null, [{\n key: '_pollInterval',\n value: 250,\n enumerable: true\n }, {\n key: '_releaseTimeout',\n value: 5000,\n enumerable: true\n }]);\n\n function Queue(cache, cacheId) {\n _classCallCheck(this, Queue);\n\n this._cache = cache;\n this._cacheId = cacheId;\n this._promise = null;\n }\n\n Queue.prototype.isPaused = function isPaused() {\n\n var time = this._cache.getItem(this._cacheId);\n\n return !!time && Date.now() - parseInt(time) < Queue._releaseTimeout;\n };\n\n Queue.prototype.pause = function pause() {\n this._cache.setItem(this._cacheId, Date.now());\n return this;\n };\n\n Queue.prototype.resume = function resume() {\n this._cache.removeItem(this._cacheId);\n return this;\n };\n\n Queue.prototype.poll = function poll() {\n var _this = this;\n\n if (this._promise) return this._promise;\n\n this._promise = new _coreExternals.Promise(function (resolve, reject) {\n\n _Utils.poll(function (next) {\n\n if (_this.isPaused()) return next();\n\n _this._promise = null;\n\n _this.resume(); // this is actually not needed but why not\n\n resolve(null);\n }, Queue._pollInterval);\n });\n\n return this._promise;\n };\n\n return Queue;\n})();\n\nexports['default'] = Queue;\nmodule.exports = exports['default'];\n\n/***/ },\n/* 14 */\n/***/ function(module, exports, __webpack_require__) {\n\n'use strict';\n\nexports.__esModule = true;\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _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; }\n\nvar _coreExternals = __webpack_require__(3);\n\nvar _coreUtils = __webpack_require__(2);\n\nvar _Utils = __webpack_require__(15);\n\nvar _coreObservable = __webpack_require__(12);\n\nvar _coreObservable2 = _interopRequireDefault(_coreObservable);\n\nvar _ApiResponse = __webpack_require__(16);\n\nvar _ApiResponse2 = _interopRequireDefault(_ApiResponse);\n\nvar Client = (function (_Observable) {\n _inherits(Client, _Observable);\n\n function Client() {\n _classCallCheck(this, Client);\n\n _Observable.apply(this, arguments);\n\n this.events = {\n beforeRequest: 'beforeRequest',\n requestSuccess: 'requestSuccess',\n requestError: 'requestError'\n };\n }\n\n /**\n * @name IApiError\n * @property {string} stack\n * @property {string} originalMessage\n * @property {ApiResponse} apiResponse\n */\n\n /**\n * @param {Request} request\n * @return {Promise}\n */\n\n Client.prototype.sendRequest = function sendRequest(request) {\n var apiResponse;\n return regeneratorRuntime.async(function sendRequest$(context$2$0) {\n while (1) switch (context$2$0.prev = context$2$0.next) {\n case 0:\n apiResponse = new _ApiResponse2['default'](request);\n context$2$0.prev = 1;\n\n //TODO Stop request if listeners return false\n this.emit(this.events.beforeRequest, apiResponse);\n\n context$2$0.next = 5;\n return regeneratorRuntime.awrap(this._loadResponse(request));\n\n case 5:\n apiResponse._response = context$2$0.sent;\n\n if (!(apiResponse._isMultipart() || apiResponse._isJson())) {\n context$2$0.next = 10;\n break;\n }\n\n context$2$0.next = 9;\n return regeneratorRuntime.awrap(apiResponse.response().text());\n\n case 9:\n apiResponse._text = context$2$0.sent;\n\n case 10:\n if (apiResponse.ok()) {\n context$2$0.next = 12;\n break;\n }\n\n throw new Error('Response has unsuccessful status');\n\n case 12:\n\n this.emit(this.events.requestSuccess, apiResponse);\n\n return context$2$0.abrupt('return', apiResponse);\n\n case 16:\n context$2$0.prev = 16;\n context$2$0.t0 = context$2$0['catch'](1);\n\n if (!context$2$0.t0.apiResponse) context$2$0.t0 = this.makeError(context$2$0.t0, apiResponse);\n\n this.emit(this.events.requestError, context$2$0.t0);\n\n throw context$2$0.t0;\n\n case 21:\n case 'end':\n return context$2$0.stop();\n }\n }, null, this, [[1, 16]]);\n };\n\n /**\n * @param {Request} request\n * @return {Promise}\n * @private\n */\n\n Client.prototype._loadResponse = function _loadResponse(request) {\n return regeneratorRuntime.async(function _loadResponse$(context$2$0) {\n while (1) switch (context$2$0.prev = context$2$0.next) {\n case 0:\n context$2$0.next = 2;\n return regeneratorRuntime.awrap(_coreExternals.fetch.call(null, request));\n\n case 2:\n return context$2$0.abrupt('return', context$2$0.sent);\n\n case 3:\n case 'end':\n return context$2$0.stop();\n }\n }, null, this);\n };\n\n /**\n * Wraps the JS Error object with transaction information\n * @param {Error|IApiError} e\n * @param {ApiResponse} apiResponse\n * @return {IApiError}\n */\n\n Client.prototype.makeError = function makeError(e, apiResponse) {\n\n // Wrap only if regular error\n if (!e.hasOwnProperty('apiResponse') && !e.hasOwnProperty('originalMessage')) {\n\n e.apiResponse = apiResponse;\n e.originalMessage = e.message;\n e.message = apiResponse && apiResponse.error(true) || e.originalMessage;\n }\n\n return e;\n };\n\n /**\n *\n * @param {object} init\n * @param {object} [init.url]\n * @param {object} [init.body]\n * @param {string} [init.method]\n * @param {object} [init.query]\n * @param {object} [init.headers]\n * @return {Request}\n */\n\n Client.prototype.createRequest = function createRequest(init) {\n\n init = init || {};\n init.headers = init.headers || {};\n\n // Sanity checks\n if (!init.url) throw new Error('Url is not defined');\n if (!init.method) init.method = 'GET';\n if (init.method && Client._allowedMethods.indexOf(init.method) < 0) throw new Error('Method has wrong value: ' + init.method);\n\n // Defaults\n init.credentials = init.credentials || 'include';\n init.mode = init.mode || 'cors';\n\n // Append Query String\n if (init.query) {\n init.url = init.url + (init.url.indexOf('?') > -1 ? '&' : '?') + _coreUtils.queryStringify(init.query);\n }\n\n if (!_Utils.findHeaderName('Accept', init.headers)) {\n init.headers['Accept'] = _ApiResponse2['default']._jsonContentType;\n }\n\n // Serialize body\n //TODO Check that body is a plain object\n if (typeof init.body !== 'string' || !init.body) {\n\n var contentTypeHeaderName = _Utils.findHeaderName(_ApiResponse2['default']._contentType, init.headers);\n\n if (!contentTypeHeaderName) {\n contentTypeHeaderName = _ApiResponse2['default']._contentType;\n init.headers[contentTypeHeaderName] = _ApiResponse2['default']._jsonContentType;\n }\n\n var contentType = init.headers[contentTypeHeaderName];\n\n // Assign a new encoded body\n if (contentType.indexOf(_ApiResponse2['default']._jsonContentType) > -1) {\n init.body = JSON.stringify(init.body);\n } else if (contentType.indexOf(_ApiResponse2['default']._urlencodedContentType) > -1) {\n init.body = _coreUtils.queryStringify(init.body);\n }\n }\n\n // Create a request with encoded body\n var req = new _coreExternals.Request(init.url, init);\n\n // Keep the original body accessible directly (for mocks)\n req.originalBody = init.body;\n\n return req;\n };\n\n _createClass(Client, null, [{\n key: '_allowedMethods',\n value: ['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'OPTIONS', 'HEAD'],\n enumerable: true\n }]);\n\n return Client;\n})(_coreObservable2['default']);\n\nexports['default'] = Client;\nmodule.exports = exports['default'];\n\n/***/ },\n/* 15 */\n/***/ function(module, exports, __webpack_require__) {\n\n'use strict';\n\nexports.__esModule = true;\nexports.createResponse = createResponse;\nexports.findHeaderName = findHeaderName;\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nvar _coreExternals = __webpack_require__(3);\n\nvar _coreUtils = __webpack_require__(2);\n\nvar utils = _interopRequireWildcard(_coreUtils);\n\n/**\n * Creates a response\n * @param stringBody\n * @param init\n * @return {Response}\n */\n\nfunction createResponse(stringBody, init) {\n\n init = init || {};\n\n var response = new _coreExternals.Response(stringBody, init);\n\n //TODO Wait for https://github.com/bitinn/node-fetch/issues/38\n if (utils.isNodeJS()) {\n\n response._text = stringBody;\n response._decode = function () {\n return this._text;\n };\n }\n\n return response;\n}\n\nfunction findHeaderName(name, headers) {\n name = name.toLowerCase();\n return Object.keys(headers).reduce(function (res, key) {\n if (res) return res;\n if (name == key.toLowerCase()) return key;\n return res;\n }, null);\n}\n\n/***/ },\n/* 16 */\n/***/ function(module, exports, __webpack_require__) {\n\n'use strict';\n\nexports.__esModule = true;\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nvar _coreExternals = __webpack_require__(3);\n\nvar _Utils = __webpack_require__(15);\n\nvar utils = _interopRequireWildcard(_Utils);\n\nvar ApiResponse = (function () {\n _createClass(ApiResponse, null, [{\n key: '_contentType',\n value: 'Content-Type',\n enumerable: true\n }, {\n key: '_jsonContentType',\n value: 'application/json',\n enumerable: true\n }, {\n key: '_multipartContentType',\n value: 'multipart/mixed',\n enumerable: true\n }, {\n key: '_urlencodedContentType',\n value: 'application/x-www-form-urlencoded',\n enumerable: true\n }, {\n key: '_headerSeparator',\n value: ':',\n enumerable: true\n }, {\n key: '_bodySeparator',\n value: '\\n\\n',\n enumerable: true\n }, {\n key: '_boundarySeparator',\n value: '--',\n\n /**\n * @param {Request} request\n * @param {Response} response\n * @param {string} responseText\n */\n enumerable: true\n }]);\n\n function ApiResponse(request, response, responseText) {\n _classCallCheck(this, ApiResponse);\n\n /** @type {Request} */\n this._request = request;\n\n /** @type {Response} */\n this._response = response;\n\n this._text = responseText;\n this._json = null;\n this._multipart = [];\n }\n\n /**\n * @return {Response}\n */\n\n ApiResponse.prototype.response = function response() {\n return this._response;\n };\n\n /**\n * @return {Request}\n */\n\n ApiResponse.prototype.request = function request() {\n return this._request;\n };\n\n /**\n * @return {boolean}\n */\n\n ApiResponse.prototype.ok = function ok() {\n return this._response && this._response.ok;\n };\n\n /**\n * @return {string}\n */\n\n ApiResponse.prototype.text = function text() {\n if (!this._isJson() && !this._isMultipart()) throw new Error('Response is not text');\n return this._text;\n };\n\n /**\n * @return {object}\n */\n\n ApiResponse.prototype.json = function json() {\n if (!this._isJson()) throw new Error('Response is not JSON');\n if (!this._json) {\n this._json = this._text ? JSON.parse(this._text) : null;\n }\n return this._json;\n };\n\n /**\n * @param [skipOKCheck]\n * @return {string}\n */\n\n ApiResponse.prototype.error = function error(skipOKCheck) {\n\n if (this.ok() && !skipOKCheck) return null;\n\n var message = (this._response && this._response.status ? this._response.status + ' ' : '') + (this._response && this._response.statusText ? this._response.statusText : '');\n\n try {\n\n if (this.json().message) message = this.json().message;\n if (this.json().error_description) message = this.json().error_description;\n if (this.json().description) message = this.json().description;\n } catch (e) {}\n\n return message;\n };\n\n /**\n * @return {ApiResponse[]}\n */\n\n ApiResponse.prototype.multipart = function multipart() {\n\n if (!this._isMultipart()) throw new Error('Response is not multipart');\n\n if (!this._multipart.length) {\n\n // Step 1. Split multipart response\n\n var text = this.text();\n\n if (!text) throw new Error('No response body');\n\n var boundary = this._getContentType().match(/boundary=([^;]+)/i)[1];\n\n if (!boundary) throw new Error('Cannot find boundary');\n\n var parts = text.toString().split(ApiResponse._boundarySeparator + boundary);\n\n if (parts[0].trim() === '') parts.shift();\n if (parts[parts.length - 1].trim() == ApiResponse._boundarySeparator) parts.pop();\n\n if (parts.length < 1) throw new Error('No parts in body');\n\n // Step 2. Parse status info\n\n var statusInfo = ApiResponse.create(parts.shift(), this._response.status, this._response.statusText).json();\n\n // Step 3. Parse all other parts\n\n this._multipart = parts.map(function (part, i) {\n\n var status = statusInfo.response[i].status;\n\n return ApiResponse.create(part, status);\n });\n }\n\n return this._multipart;\n };\n\n ApiResponse.prototype._isContentType = function _isContentType(contentType) {\n return this._getContentType().indexOf(contentType) > -1;\n };\n\n ApiResponse.prototype._getContentType = function _getContentType() {\n return this._response.headers.get(ApiResponse._contentType) || '';\n };\n\n ApiResponse.prototype._isMultipart = function _isMultipart() {\n return this._isContentType(ApiResponse._multipartContentType);\n };\n\n ApiResponse.prototype._isUrlEncoded = function _isUrlEncoded() {\n return this._isContentType(ApiResponse._urlencodedContentType);\n };\n\n ApiResponse.prototype._isJson = function _isJson() {\n return this._isContentType(ApiResponse._jsonContentType);\n };\n\n /**\n * Method is used to create ApiResponse object from string parts of multipart/mixed response\n * @param {string} [text]\n * @param {number} [status]\n * @param {string} [statusText]\n * @return {ApiResponse}\n */\n\n ApiResponse.create = function create(text, status, statusText) {\n\n text = text || '';\n status = status || 200;\n statusText = statusText || 'OK';\n\n text = text.replace(/\\r/g, '');\n\n var headers = new _coreExternals.Headers(),\n headersAndBody = text.split(ApiResponse._bodySeparator),\n headersText = headersAndBody.length > 1 ? headersAndBody.shift() : '';\n\n text = headersAndBody.join(ApiResponse._bodySeparator);\n\n (headersText || '').split('\\n').forEach(function (header) {\n\n var split = header.trim().split(ApiResponse._headerSeparator),\n key = split.shift().trim(),\n value = split.join(ApiResponse._headerSeparator).trim();\n\n if (key) headers.append(key, value);\n });\n\n return new ApiResponse(null, utils.createResponse(text, {\n headers: headers,\n status: status,\n statusText: statusText\n }), text);\n };\n\n return ApiResponse;\n})();\n\nexports['default'] = ApiResponse;\nmodule.exports = exports['default'];\n\n/***/ },\n/* 17 */\n/***/ function(module, exports, __webpack_require__) {\n\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _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; }\n\nvar _Registry = __webpack_require__(18);\n\nvar _Registry2 = _interopRequireDefault(_Registry);\n\nvar _httpClient = __webpack_require__(14);\n\nvar _httpClient2 = _interopRequireDefault(_httpClient);\n\nvar Client = (function (_HttpClient) {\n _inherits(Client, _HttpClient);\n\n function Client() {\n _classCallCheck(this, Client);\n\n _HttpClient.call(this);\n this._registry = new _Registry2['default']();\n }\n\n Client.prototype.registry = function registry() {\n return this._registry;\n };\n\n Client.prototype._loadResponse = function _loadResponse(request) {\n var mock;\n return regeneratorRuntime.async(function _loadResponse$(context$2$0) {\n while (1) switch (context$2$0.prev = context$2$0.next) {\n case 0:\n mock = this._registry.find(request);\n context$2$0.next = 3;\n return regeneratorRuntime.awrap(mock.getResponse(request));\n\n case 3:\n return context$2$0.abrupt('return', context$2$0.sent);\n\n case 4:\n case 'end':\n return context$2$0.stop();\n }\n }, null, this);\n };\n\n return Client;\n})(_httpClient2['default']);\n\nexports['default'] = Client;\nmodule.exports = exports['default'];\n\n/***/ },\n/* 18 */\n/***/ function(module, exports, __webpack_require__) {\n\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nvar _Mock = __webpack_require__(19);\n\nvar _Mock2 = _interopRequireDefault(_Mock);\n\nvar Registry = (function () {\n function Registry() {\n _classCallCheck(this, Registry);\n\n this._mocks = [];\n }\n\n Registry.prototype.add = function add(mock) {\n this._mocks.push(mock);\n return this;\n };\n\n Registry.prototype.clear = function clear() {\n this._mocks = [];\n return this;\n };\n\n Registry.prototype.find = function find(request) {\n\n //console.log('Registry is looking for', request);\n\n var mock = this._mocks.shift();\n\n if (!mock) throw new Error('No mock in registry for request ' + request.method + ' ' + request.url);\n\n if (!mock.test(request)) throw new Error('Wrong request ' + request.method + ' ' + request.url + ' for expected mock ' + mock.method() + ' ' + mock.path());\n\n return mock;\n };\n\n Registry.prototype.apiCall = function apiCall(method, path, response, status, statusText) {\n\n this.add(new _Mock2['default'](method, path, response, status, statusText));\n\n return this;\n };\n\n Registry.prototype.authentication = function authentication() {\n\n this.apiCall('POST', '/restapi/oauth/token', {\n 'access_token': 'ACCESS_TOKEN',\n 'token_type': 'bearer',\n 'expires_in': 3600,\n 'refresh_token': 'REFRESH_TOKEN',\n 'refresh_token_expires_in': 60480,\n 'scope': 'SMS RCM Foo Boo',\n 'expireTime': new Date().getTime() + 3600000\n });\n\n return this;\n };\n\n Registry.prototype.logout = function logout() {\n\n this.apiCall('POST', '/restapi/oauth/revoke', {});\n\n return this;\n };\n\n Registry.prototype.presenceLoad = function presenceLoad(id) {\n\n this.apiCall('GET', '/restapi/v1.0/account/~/extension/' + id + '/presence', {\n \"uri\": \"https://platform.ringcentral.com/restapi/v1.0/account/123/extension/\" + id + \"/presence\",\n \"extension\": {\n \"uri\": \"https://platform.ringcentral.com/restapi/v1.0/account/123/extension/\" + id,\n \"id\": id,\n \"extensionNumber\": \"101\"\n },\n \"activeCalls\": [],\n \"presenceStatus\": \"Available\",\n \"telephonyStatus\": \"Ringing\",\n \"userStatus\": \"Available\",\n \"dndStatus\": \"TakeAllCalls\",\n \"extensionId\": id\n });\n\n return this;\n };\n\n Registry.prototype.subscribeGeneric = function subscribeGeneric(expiresIn) {\n\n expiresIn = expiresIn || 15 * 60 * 60;\n\n var date = new Date();\n\n this.apiCall('POST', '/restapi/v1.0/subscription', {\n 'eventFilters': ['/restapi/v1.0/account/~/extension/~/presence'],\n 'expirationTime': new Date(date.getTime() + expiresIn * 1000).toISOString(),\n 'expiresIn': expiresIn,\n 'deliveryMode': {\n 'transportType': 'PubNub',\n 'encryption': false,\n 'address': '123_foo',\n 'subscriberKey': 'sub-c-foo',\n 'secretKey': 'sec-c-bar'\n },\n 'id': 'foo-bar-baz',\n 'creationTime': date.toISOString(),\n 'status': 'Active',\n 'uri': 'https://platform.ringcentral.com/restapi/v1.0/subscription/foo-bar-baz'\n });\n\n return this;\n };\n\n Registry.prototype.subscribeOnPresence = function subscribeOnPresence(id, detailed) {\n\n id = id || '1';\n\n var date = new Date();\n\n this.apiCall('POST', '/restapi/v1.0/subscription', {\n 'eventFilters': ['/restapi/v1.0/account/~/extension/' + id + '/presence' + (detailed ? '?detailedTelephonyState=true' : '')],\n 'expirationTime': new Date(date.getTime() + 15 * 60 * 60 * 1000).toISOString(),\n 'deliveryMode': {\n 'transportType': 'PubNub',\n 'encryption': true,\n 'address': '123_foo',\n 'subscriberKey': 'sub-c-foo',\n 'secretKey': 'sec-c-bar',\n 'encryptionAlgorithm': 'AES',\n 'encryptionKey': 'VQwb6EVNcQPBhE/JgFZ2zw=='\n },\n 'creationTime': date.toISOString(),\n 'id': 'foo-bar-baz',\n 'status': 'Active',\n 'uri': 'https://platform.ringcentral.com/restapi/v1.0/subscription/foo-bar-baz'\n });\n\n return this;\n };\n\n Registry.prototype.tokenRefresh = function tokenRefresh(failure) {\n\n if (!failure) {\n\n this.apiCall('POST', '/restapi/oauth/token', {\n 'access_token': 'ACCESS_TOKEN_FROM_REFRESH',\n 'token_type': 'bearer',\n 'expires_in': 3600,\n 'refresh_token': 'REFRESH_TOKEN_FROM_REFRESH',\n 'refresh_token_expires_in': 60480,\n 'scope': 'SMS RCM Foo Boo'\n });\n } else {\n\n this.apiCall('POST', '/restapi/oauth/token', {\n 'message': 'Wrong token',\n 'error_description': 'Wrong token',\n 'description': 'Wrong token'\n }, 400);\n }\n\n return this;\n };\n\n return Registry;\n})();\n\nexports['default'] = Registry;\nmodule.exports = exports['default'];\n\n/***/ },\n/* 19 */\n/***/ function(module, exports, __webpack_require__) {\n\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nvar _httpApiResponse = __webpack_require__(16);\n\nvar _httpApiResponse2 = _interopRequireDefault(_httpApiResponse);\n\nvar _coreUtils = __webpack_require__(2);\n\nvar _httpUtils = __webpack_require__(15);\n\nvar Mock = (function () {\n function Mock(method, path, json, status, statusText, delay) {\n _classCallCheck(this, Mock);\n\n this._method = method.toUpperCase();\n this._path = path;\n this._json = json || {};\n this._delay = delay || 10;\n this._status = status || 200;\n this._statusText = statusText || 'OK';\n }\n\n Mock.prototype.path = function path() {\n return this._path;\n };\n\n Mock.prototype.method = function method() {\n return this._method;\n };\n\n Mock.prototype.test = function test(request) {\n\n return request.url.indexOf(this._path) > -1 && request.method.toUpperCase() == this._method;\n };\n\n Mock.prototype.getResponse = function getResponse(request) {\n return regeneratorRuntime.async(function getResponse$(context$2$0) {\n while (1) switch (context$2$0.prev = context$2$0.next) {\n case 0:\n context$2$0.next = 2;\n return regeneratorRuntime.awrap(_coreUtils.delay(this._delay));\n\n case 2:\n return context$2$0.abrupt('return', this.createResponse(this._json));\n\n case 3:\n case 'end':\n return context$2$0.stop();\n }\n }, null, this);\n };\n\n Mock.prototype.createResponse = function createResponse(json, init) {\n\n init = init || {};\n\n init.status = init.status || this._status;\n init.statusText = init.statusText || this._statusText;\n\n var str = JSON.stringify(json),\n res = _httpUtils.createResponse(str, init);\n\n res.headers.set(_httpApiResponse2['default']._contentType, _httpApiResponse2['default']._jsonContentType);\n\n return res;\n };\n\n return Mock;\n})();\n\nexports['default'] = Mock;\nmodule.exports = exports['default'];\n\n/***/ },\n/* 20 */\n/***/ function(module, exports, __webpack_require__) {\n\n'use strict';\n\nexports.__esModule = true;\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _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; }\n\nvar _coreObservable = __webpack_require__(12);\n\nvar _coreObservable2 = _interopRequireDefault(_coreObservable);\n\nvar _coreQueue = __webpack_require__(13);\n\nvar _coreQueue2 = _interopRequireDefault(_coreQueue);\n\nvar _Auth = __webpack_require__(21);\n\nvar _Auth2 = _interopRequireDefault(_Auth);\n\nvar _coreExternals = __webpack_require__(3);\n\nvar _coreUtils = __webpack_require__(2);\n\nvar Platform = (function (_Observable) {\n _inherits(Platform, _Observable);\n\n _createClass(Platform, null, [{\n key: '_urlPrefix',\n value: '/restapi',\n enumerable: true\n }, {\n key: '_apiVersion',\n value: 'v1.0',\n enumerable: true\n }, {\n key: '_accessTokenTtl',\n value: null,\n // Platform server by default sets it to 60 * 60 = 1 hour\n enumerable: true\n }, {\n key: '_refreshTokenTtl',\n value: 10 * 60 * 60,\n // 10 hours\n enumerable: true\n }, {\n key: '_refreshTokenTtlRemember',\n value: 7 * 24 * 60 * 60,\n // 1 week\n enumerable: true\n }, {\n key: '_tokenEndpoint',\n value: '/restapi/oauth/token',\n enumerable: true\n }, {\n key: '_revokeEndpoint',\n value: '/restapi/oauth/revoke',\n enumerable: true\n }, {\n key: '_authorizeEndpoint',\n value: '/restapi/oauth/authorize',\n enumerable: true\n }, {\n key: '_refreshDelayMs',\n value: 100,\n enumerable: true\n }, {\n key: '_cacheId',\n value: 'platform',\n enumerable: true\n }, {\n key: '_clearCacheOnRefreshError',\n value: true,\n enumerable: true\n }]);\n\n function Platform(client, cache, server, appKey, appSecret) {\n _classCallCheck(this, Platform);\n\n _Observable.call(this);\n\n this.events = {\n beforeLogin: 'beforeLogin',\n loginSuccess: 'loginSuccess',\n loginError: 'loginError',\n beforeRefresh: 'beforeRefresh',\n refreshSuccess: 'refreshSuccess',\n refreshError: 'refreshError',\n beforeLogout: 'beforeLogout',\n logoutSuccess: 'logoutSuccess',\n logoutError: 'logoutError'\n };\n this._server = server;\n this._appKey = appKey;\n this._appSecret = appSecret;\n\n /** @type {Cache} */\n this._cache = cache;\n\n /** @type {Client} */\n this._client = client;\n\n this._queue = new _coreQueue2['default'](this._cache, Platform._cacheId + '-refresh');\n\n this._auth = new _Auth2['default'](this._cache, Platform._cacheId);\n }\n\n /**\n * @return {Auth}\n */\n\n Platform.prototype.auth = function auth() {\n return this._auth;\n };\n\n /**\n * @return {Client}\n */\n\n Platform.prototype.client = function client() {\n return this._client;\n };\n\n /**\n * @param {string} path\n * @param {object} [options]\n * @param {boolean} [options.addServer]\n * @param {string} [options.addMethod]\n * @param {boolean} [options.addToken]\n * @return {string}\n */\n\n Platform.prototype.createUrl = function createUrl(path, options) {\n\n path = path || '';\n options = options || {};\n\n var builtUrl = '',\n hasHttp = path.indexOf('http://') != -1 || path.indexOf('https://') != -1;\n\n if (options.addServer && !hasHttp) builtUrl += this._server;\n\n if (path.indexOf(Platform._urlPrefix) == -1 && !hasHttp) builtUrl += Platform._urlPrefix + '/' + Platform._apiVersion;\n\n builtUrl += path;\n\n if (options.addMethod || options.addToken) builtUrl += path.indexOf('?') > -1 ? '&' : '?';\n\n if (options.addMethod) builtUrl += '_method=' + options.addMethod;\n if (options.addToken) builtUrl += (options.addMethod ? '&' : '') + 'access_token=' + this._auth.accessToken();\n\n return builtUrl;\n };\n\n /**\n * @param {string} options.redirectUri\n * @param {string} options.state\n * @param {string} options.brandId\n * @param {string} options.display\n * @param {string} options.prompt\n * @return {string}\n */\n\n Platform.prototype.authUrl = function authUrl(options) {\n\n options = options || {};\n\n return this.createUrl(Platform._authorizeEndpoint + '?' + _coreUtils.queryStringify({\n 'response_type': 'code',\n 'redirect_uri': options.redirectUri || '',\n 'client_id': this._appKey,\n 'state': options.state || '',\n 'brand_id': options.brandId || '',\n 'display': options.display || '',\n 'prompt': options.prompt || ''\n }), { addServer: true });\n };\n\n /**\n * @param {string} url\n * @return {Object}\n */\n\n Platform.prototype.parseAuthRedirectUrl = function parseAuthRedirectUrl(url) {\n\n var qs = _coreUtils.parseQueryString(url.split('?').reverse()[0]),\n error = qs.error_description || qs.error;\n\n if (error) {\n var e = new Error(error);\n e.error = qs.error;\n throw e;\n }\n\n return qs;\n };\n\n /**\n * @return {Promise}\n */\n\n Platform.prototype.loggedIn = function loggedIn() {\n return regeneratorRuntime.async(function loggedIn$(context$2$0) {\n while (1) switch (context$2$0.prev = context$2$0.next) {\n case 0:\n context$2$0.prev = 0;\n context$2$0.next = 3;\n return regeneratorRuntime.awrap(this._ensureAuthentication());\n\n case 3:\n return context$2$0.abrupt('return', true);\n\n case 6:\n context$2$0.prev = 6;\n context$2$0.t0 = context$2$0['catch'](0);\n return context$2$0.abrupt('return', false);\n\n case 9:\n case 'end':\n return context$2$0.stop();\n }\n }, null, this, [[0, 6]]);\n };\n\n /**\n * @param {string} options.username\n * @param {string} options.password\n * @param {string} options.extension\n * @param {string} options.code\n * @param {string} options.redirectUri\n * @param {string} options.endpointId\n * @returns {Promise}\n */\n\n Platform.prototype.login = function login(options) {\n var body, apiResponse, json;\n return regeneratorRuntime.async(function login$(context$2$0) {\n while (1) switch (context$2$0.prev = context$2$0.next) {\n case 0:\n context$2$0.prev = 0;\n\n options = options || {};\n\n options.remember = options.remember || false;\n\n this.emit(this.events.beforeLogin);\n\n body = {\n \"access_token_ttl\": Platform._accessTokenTtl,\n \"refresh_token_ttl\": options.remember ? Platform._refreshTokenTtlRemember : Platform._refreshTokenTtl\n };\n\n if (!options.code) {\n\n body.grant_type = 'password';\n body.username = options.username;\n body.password = options.password;\n body.extension = options.extension || '';\n } else if (options.code) {\n\n body.grant_type = 'authorization_code';\n body.code = options.code;\n body.redirect_uri = options.redirectUri;\n //body.client_id = this.getCredentials().key; // not needed\n }\n\n if (options.endpointId) body.endpoint_id = options.endpointId;\n\n context$2$0.next = 9;\n return regeneratorRuntime.awrap(this._tokenRequest(Platform._tokenEndpoint, body));\n\n case 9:\n apiResponse = context$2$0.sent;\n json = apiResponse.json();\n\n this._auth.setData(json).setRemember(options.remember);\n\n this.emit(this.events.loginSuccess, apiResponse);\n\n return context$2$0.abrupt('return', apiResponse);\n\n case 16:\n context$2$0.prev = 16;\n context$2$0.t0 = context$2$0['catch'](0);\n\n this._cache.clean();\n\n this.emit(this.events.loginError, context$2$0.t0);\n\n throw context$2$0.t0;\n\n case 21:\n case 'end':\n return context$2$0.stop();\n }\n }, null, this, [[0, 16]]);\n };\n\n /**\n * @returns {Promise}\n */\n\n Platform.prototype.refresh = function refresh() {\n var res, json;\n return regeneratorRuntime.async(function refresh$(context$2$0) {\n while (1) switch (context$2$0.prev = context$2$0.next) {\n case 0:\n context$2$0.prev = 0;\n\n this.emit(this.events.beforeRefresh);\n\n if (!this._queue.isPaused()) {\n context$2$0.next = 9;\n break;\n }\n\n context$2$0.next = 5;\n return regeneratorRuntime.awrap(this._queue.poll());\n\n case 5:\n if (this._isAccessTokenValid()) {\n context$2$0.next = 7;\n break;\n }\n\n throw new Error('Automatic authentification timeout');\n\n case 7:\n\n this.emit(this.events.refreshSuccess, null);\n\n return context$2$0.abrupt('return', null);\n\n case 9:\n\n this._queue.pause();\n\n // Make sure all existing AJAX calls had a chance to reach the server\n context$2$0.next = 12;\n return regeneratorRuntime.awrap(_coreUtils.delay(Platform._refreshDelayMs));\n\n case 12:\n if (this._auth.refreshToken()) {\n context$2$0.next = 14;\n break;\n }\n\n throw new Error('Refresh token is missing');\n\n case 14:\n if (this._auth.refreshTokenValid()) {\n context$2$0.next = 16;\n break;\n }\n\n throw new Error('Refresh token has expired');\n\n case 16:\n if (this._queue.isPaused()) {\n context$2$0.next = 18;\n break;\n }\n\n throw new Error('Queue was resumed before refresh call');\n\n case 18:\n context$2$0.next = 20;\n return regeneratorRuntime.awrap(this._tokenRequest(Platform._tokenEndpoint, {\n \"grant_type\": \"refresh_token\",\n \"refresh_token\": this._auth.refreshToken(),\n \"access_token_ttl\": Platform._accessTokenTtl,\n \"refresh_token_ttl\": this._auth.remember() ? Platform._refreshTokenTtlRemember : Platform._refreshTokenTtl\n }));\n\n case 20:\n res = context$2$0.sent;\n json = res.json();\n\n if (json.access_token) {\n context$2$0.next = 24;\n break;\n }\n\n throw this._client.makeError(new Error('Malformed OAuth response'), res);\n\n case 24:\n\n this._auth.setData(json);\n this._queue.resume();\n\n this.emit(this.events.refreshSuccess, res);\n\n return context$2$0.abrupt('return', res);\n\n case 30:\n context$2$0.prev = 30;\n context$2$0.t0 = context$2$0['catch'](0);\n\n context$2$0.t0 = this._client.makeError(context$2$0.t0);\n\n if (Platform._clearCacheOnRefreshError) {\n this._cache.clean();\n }\n\n this.emit(this.events.refreshError, context$2$0.t0);\n\n throw context$2$0.t0;\n\n case 36:\n case 'end':\n return context$2$0.stop();\n }\n }, null, this, [[0, 30]]);\n };\n\n /**\n * @returns {Promise}\n */\n\n Platform.prototype.logout = function logout() {\n var res;\n return regeneratorRuntime.async(function logout$(context$2$0) {\n while (1) switch (context$2$0.prev = context$2$0.next) {\n case 0:\n context$2$0.prev = 0;\n\n this.emit(this.events.beforeLogout);\n\n this._queue.pause();\n\n context$2$0.next = 5;\n return regeneratorRuntime.awrap(this._tokenRequest(Platform._revokeEndpoint, {\n token: this._auth.accessToken()\n }));\n\n case 5:\n res = context$2$0.sent;\n\n this._queue.resume();\n this._cache.clean();\n\n this.emit(this.events.logoutSuccess, res);\n\n return context$2$0.abrupt('return', res);\n\n case 12:\n context$2$0.prev = 12;\n context$2$0.t0 = context$2$0['catch'](0);\n\n this._queue.resume();\n\n this.emit(this.events.logoutError, context$2$0.t0);\n\n throw context$2$0.t0;\n\n case 17:\n case 'end':\n return context$2$0.stop();\n }\n }, null, this, [[0, 12]]);\n };\n\n /**\n * @param {Request} request\n * @param {object} [options]\n * @param {boolean} [options.skipAuthCheck]\n * @return {Promise}\n */\n\n Platform.prototype.inflateRequest = function inflateRequest(request, options) {\n return regeneratorRuntime.async(function inflateRequest$(context$2$0) {\n while (1) switch (context$2$0.prev = context$2$0.next) {\n case 0:\n\n options = options || {};\n\n if (!options.skipAuthCheck) {\n context$2$0.next = 3;\n break;\n }\n\n return context$2$0.abrupt('return', request);\n\n case 3:\n context$2$0.next = 5;\n return regeneratorRuntime.awrap(this._ensureAuthentication());\n\n case 5:\n\n request.headers.set('Authorization', this._authHeader());\n //request.url = this.createUrl(request.url, {addServer: true}); //FIXME Spec prevents this...\n\n //TODO Add User-Agent here\n\n return context$2$0.abrupt('return', request);\n\n case 7:\n case 'end':\n return context$2$0.stop();\n }\n }, null, this);\n };\n\n /**\n * @param {Request} request\n * @param {object} [options]\n * @param {boolean} [options.skipAuthCheck]\n * @return {Promise}\n */\n\n Platform.prototype.sendRequest = function sendRequest(request, options) {\n return regeneratorRuntime.async(function sendRequest$(context$2$0) {\n while (1) switch (context$2$0.prev = context$2$0.next) {\n case 0:\n context$2$0.prev = 0;\n context$2$0.next = 3;\n return regeneratorRuntime.awrap(this.inflateRequest(request, options));\n\n case 3:\n request = context$2$0.sent;\n context$2$0.next = 6;\n return regeneratorRuntime.awrap(this._client.sendRequest(request));\n\n case 6:\n return context$2$0.abrupt('return', context$2$0.sent);\n\n case 9:\n context$2$0.prev = 9;\n context$2$0.t0 = context$2$0['catch'](0);\n\n if (!(!context$2$0.t0.apiResponse || !context$2$0.t0.apiResponse.response() || context$2$0.t0.apiResponse.response().status != 401)) {\n context$2$0.next = 13;\n break;\n }\n\n throw context$2$0.t0;\n\n case 13:\n\n this._auth.cancelAccessToken();\n\n context$2$0.next = 16;\n return regeneratorRuntime.awrap(this.sendRequest(request, options));\n\n case 16:\n return context$2$0.abrupt('return', context$2$0.sent);\n\n case 17:\n case 'end':\n return context$2$0.stop();\n }\n }, null, this, [[0, 9]]);\n };\n\n /**\n * General purpose function to send anything to server\n * @param {string} options.url\n * @param {object} [options.body]\n * @param {string} [options.method]\n * @param {object} [options.query]\n * @param {object} [options.headers]\n * @param {boolean} [options.skipAuthCheck]\n * @return {Promise}\n */\n\n Platform.prototype.send = function send() {\n var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];\n return regeneratorRuntime.async(function send$(context$2$0) {\n while (1) switch (context$2$0.prev = context$2$0.next) {\n case 0:\n\n //FIXME https://github.com/bitinn/node-fetch/issues/43\n options.url = this.createUrl(options.url, { addServer: true });\n\n context$2$0.next = 3;\n return regeneratorRuntime.awrap(this.sendRequest(this._client.createRequest(options), options));\n\n case 3:\n return context$2$0.abrupt('return', context$2$0.sent);\n\n case 4:\n case 'end':\n return context$2$0.stop();\n }\n }, null, this);\n };\n\n /**\n * @param {string} url\n * @param {object} [query]\n * @param {object} [options]\n * @param {object} [options.headers]\n * @param {boolean} [options.skipAuthCheck]\n * @return {Promise}\n */\n\n Platform.prototype.get = function get(url, query, options) {\n return regeneratorRuntime.async(function get$(context$2$0) {\n while (1) switch (context$2$0.prev = context$2$0.next) {\n case 0:\n options = options || {};\n options.method = 'GET';\n options.url = url;\n options.query = query;\n context$2$0.next = 6;\n return regeneratorRuntime.awrap(this.send(options));\n\n case 6:\n return context$2$0.abrupt('return', context$2$0.sent);\n\n case 7:\n case 'end':\n return context$2$0.stop();\n }\n }, null, this);\n };\n\n /**\n * @param {string} url\n * @param {object} body\n * @param {object} [query]\n * @param {object} [options]\n * @param {object} [options.headers]\n * @param {boolean} [options.skipAuthCheck]\n * @return {Promise}\n */\n\n Platform.prototype.post = function post(url, body, query, options) {\n return regeneratorRuntime.async(function post$(context$2$0) {\n while (1) switch (context$2$0.prev = context$2$0.next) {\n case 0:\n options = options || {};\n options.method = 'POST';\n options.url = url;\n options.query = query;\n options.body = body;\n context$2$0.next = 7;\n return regeneratorRuntime.awrap(this.send(options));\n\n case 7:\n return context$2$0.abrupt('return', context$2$0.sent);\n\n case 8:\n case 'end':\n return context$2$0.stop();\n }\n }, null, this);\n };\n\n /**\n * @param {string} url\n * @param {object} [body]\n * @param {object} [query]\n * @param {object} [options]\n * @param {object} [options.headers]\n * @param {boolean} [options.skipAuthCheck]\n * @return {Promise}\n */\n\n Platform.prototype.put = function put(url, body, query, options) {\n return regeneratorRuntime.async(function put$(context$2$0) {\n while (1) switch (context$2$0.prev = context$2$0.next) {\n case 0:\n options = options || {};\n options.method = 'PUT';\n options.url = url;\n options.query = query;\n options.body = body;\n context$2$0.next = 7;\n return regeneratorRuntime.awrap(this.send(options));\n\n case 7:\n return context$2$0.abrupt('return', context$2$0.sent);\n\n case 8:\n case 'end':\n return context$2$0.stop();\n }\n }, null, this);\n };\n\n /**\n * @param {string} url\n * @param {string} [query]\n * @param {object} [options]\n * @param {object} [options.headers]\n * @param {boolean} [options.skipAuthCheck]\n * @return {Promise}\n */\n\n Platform.prototype['delete'] = function _delete(url, query, options) {\n return regeneratorRuntime.async(function _delete$(context$2$0) {\n while (1) switch (context$2$0.prev = context$2$0.next) {\n case 0:\n options = options || {};\n options.method = 'DELETE';\n options.url = url;\n options.query = query;\n context$2$0.next = 6;\n return regeneratorRuntime.awrap(this.send(options));\n\n case 6:\n return context$2$0.abrupt('return', context$2$0.sent);\n\n case 7:\n case 'end':\n return context$2$0.stop();\n }\n }, null, this);\n };\n\n Platform.prototype._tokenRequest = function _tokenRequest(path, body) {\n return regeneratorRuntime.async(function _tokenRequest$(context$2$0) {\n while (1) switch (context$2$0.prev = context$2$0.next) {\n case 0:\n context$2$0.next = 2;\n return regeneratorRuntime.awrap(this.send({\n url: path,\n skipAuthCheck: true,\n body: body,\n method: 'POST',\n headers: {\n 'Authorization': 'Basic ' + this._apiKey(),\n 'Content-Type': 'application/x-www-form-urlencoded'\n }\n }));\n\n case 2:\n return context$2$0.abrupt('return', context$2$0.sent);\n\n case 3:\n case 'end':\n return context$2$0.stop();\n }\n }, null, this);\n };\n\n Platform.prototype._ensureAuthentication = function _ensureAuthentication() {\n return regeneratorRuntime.async(function _ensureAuthentication$(context$2$0) {\n while (1) switch (context$2$0.prev = context$2$0.next) {\n case 0:\n if (!this._isAccessTokenValid()) {\n context$2$0.next = 2;\n break;\n }\n\n return context$2$0.abrupt('return', null);\n\n case 2:\n context$2$0.next = 4;\n return regeneratorRuntime.awrap(this.refresh());\n\n case 4:\n return context$2$0.abrupt('return', context$2$0.sent);\n\n case 5:\n case 'end':\n return context$2$0.stop();\n }\n }, null, this);\n };\n\n Platform.prototype._isAccessTokenValid = function _isAccessTokenValid() {\n\n return this._auth.accessTokenValid() && !this._queue.isPaused();\n };\n\n Platform.prototype._apiKey = function _apiKey() {\n var apiKey = this._appKey + ':' + this._appSecret;\n return typeof btoa == 'function' ? btoa(apiKey) : new Buffer(apiKey).toString('base64');\n };\n\n Platform.prototype._authHeader = function _authHeader() {\n var token = this._auth.accessToken();\n return this._auth.tokenType() + (token ? ' ' + token : '');\n };\n\n return Platform;\n})(_coreObservable2['default']);\n\nexports['default'] = Platform;\nmodule.exports = exports['default'];\n\n// Perform sanity checks\n\n/** @type {ApiResponse} */\n\n// Guard is for errors that come from polling\n\n/***/ },\n/* 21 */\n/***/ function(module, exports) {\n\n'use strict';\n\nexports.__esModule = true;\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nvar Auth = (function () {\n _createClass(Auth, null, [{\n key: 'refreshHandicapMs',\n value: 60 * 1000,\n // 1 minute\n enumerable: true\n }, {\n key: 'forcedTokenType',\n value: 'forced',\n enumerable: true\n }]);\n\n function Auth(cache, cacheId) {\n _classCallCheck(this, Auth);\n\n /** @type {Cache} */\n this._cache = cache;\n this._cacheId = cacheId;\n }\n\n //export interface IAuthData {\n // remember?:boolean;\n // token_type?:string;\n // access_token?:string;\n // expires_in?:number; // actually it's string\n // expire_time?:number;\n // refresh_token?:string;\n // refresh_token_expires_in?:number; // actually it's string\n // refresh_token_expire_time?:number;\n // scope?:string;\n //}\n\n Auth.prototype.accessToken = function accessToken() {\n return this.data().access_token;\n };\n\n Auth.prototype.refreshToken = function refreshToken() {\n return this.data().refresh_token;\n };\n\n Auth.prototype.tokenType = function tokenType() {\n return this.data().token_type;\n };\n\n /**\n * @return {{token_type: string, access_token: string, expires_in: number, refresh_token: string, refresh_token_expires_in: number}}\n */\n\n Auth.prototype.data = function data() {\n\n return this._cache.getItem(this._cacheId) || {\n token_type: '',\n access_token: '',\n expires_in: 0,\n refresh_token: '',\n refresh_token_expires_in: 0\n };\n };\n\n /**\n * @param {object} newData\n * @return {Auth}\n */\n\n Auth.prototype.setData = function setData(newData) {\n\n newData = newData || {};\n\n var data = this.data();\n\n Object.keys(newData).forEach(function (key) {\n data[key] = newData[key];\n });\n\n data.expire_time = Date.now() + data.expires_in * 1000;\n data.refresh_token_expire_time = Date.now() + data.refresh_token_expires_in * 1000;\n\n this._cache.setItem(this._cacheId, data);\n\n return this;\n };\n\n /**\n * Check if there is a valid (not expired) access token\n * @return {boolean}\n */\n\n Auth.prototype.accessTokenValid = function accessTokenValid() {\n\n var authData = this.data();\n return authData.token_type === Auth.forcedTokenType || authData.expire_time - Auth.refreshHandicapMs > Date.now();\n };\n\n /**\n * Check if there is a valid (not expired) access token\n * @return {boolean}\n */\n\n Auth.prototype.refreshTokenValid = function refreshTokenValid() {\n\n return this.data().refresh_token_expire_time > Date.now();\n };\n\n /**\n * @return {Auth}\n */\n\n Auth.prototype.cancelAccessToken = function cancelAccessToken() {\n\n return this.setData({\n access_token: '',\n expires_in: 0\n });\n };\n\n /**\n * This method sets a special authentication mode used in Service Web\n * @return {Auth}\n */\n\n Auth.prototype.forceAuthentication = function forceAuthentication() {\n\n this.setData({\n token_type: Auth.forcedTokenType,\n access_token: '',\n expires_in: 0,\n refresh_token: '',\n refresh_token_expires_in: 0\n });\n\n return this;\n };\n\n /**\n * @param remember\n * @return {Auth}\n */\n\n Auth.prototype.setRemember = function setRemember(remember) {\n\n return this.setData({ remember: remember });\n };\n\n /**\n * @return {boolean}\n */\n\n Auth.prototype.remember = function remember() {\n\n return !!this.data().remember;\n };\n\n return Auth;\n})();\n\nexports['default'] = Auth;\nmodule.exports = exports['default'];\n\n/***/ },\n/* 22 */\n/***/ function(module, exports, __webpack_require__) {\n\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nvar _PubnubMockJs = __webpack_require__(23);\n\nvar _PubnubMockJs2 = _interopRequireDefault(_PubnubMockJs);\n\nvar _coreExternals = __webpack_require__(3);\n\nvar PubnubMockFactory = (function () {\n function PubnubMockFactory() {\n _classCallCheck(this, PubnubMockFactory);\n\n this.crypto_obj = _coreExternals.PUBNUB.crypto_obj;\n }\n\n PubnubMockFactory.prototype.init = function init(options) {\n return new _PubnubMockJs2['default'](options);\n };\n\n return PubnubMockFactory;\n})();\n\nexports['default'] = PubnubMockFactory;\nmodule.exports = exports['default'];\n\n/***/ },\n/* 23 */\n/***/ function(module, exports, __webpack_require__) {\n\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _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; }\n\nvar _coreObservable = __webpack_require__(12);\n\nvar _coreObservable2 = _interopRequireDefault(_coreObservable);\n\nvar _coreExternals = __webpack_require__(3);\n\nvar PubnubMock = (function (_Observable) {\n _inherits(PubnubMock, _Observable);\n\n function PubnubMock(options) {\n _classCallCheck(this, PubnubMock);\n\n _Observable.call(this);\n this.options = options;\n this.crypto_obj = _coreExternals.PUBNUB.crypto_obj;\n }\n\n PubnubMock.prototype.ready = function ready() {};\n\n PubnubMock.prototype.subscribe = function subscribe(options) {\n this.on('message-' + options.channel, options.message);\n };\n\n PubnubMock.prototype.unsubscribe = function unsubscribe(options) {\n this.off('message-' + options.channel);\n };\n\n PubnubMock.prototype.receiveMessage = function receiveMessage(msg, channel) {\n this.emit('message-' + channel, msg, 'env', channel);\n };\n\n return PubnubMock;\n})(_coreObservable2['default']);\n\nexports['default'] = PubnubMock;\nmodule.exports = exports['default'];\n\n/***/ },\n/* 24 */\n/***/ function(module, exports, __webpack_require__) {\n\n'use strict';\n\nexports.__esModule = true;\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _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; }\n\nvar _coreObservable = __webpack_require__(12);\n\nvar _coreObservable2 = _interopRequireDefault(_coreObservable);\n\nvar _httpClient = __webpack_require__(14);\n\nvar _httpClient2 = _interopRequireDefault(_httpClient);\n\nvar _coreUtils = __webpack_require__(2);\n\nvar Subscription = (function (_Observable) {\n _inherits(Subscription, _Observable);\n\n _createClass(Subscription, null, [{\n key: '_renewHandicapMs',\n value: 2 * 60 * 1000,\n enumerable: true\n }, {\n key: '_pollInterval',\n value: 10 * 1000,\n enumerable: true\n }]);\n\n function Subscription(pubnubFactory, platform) {\n _classCallCheck(this, Subscription);\n\n _Observable.call(this);\n\n this.events = {\n notification: 'notification',\n removeSuccess: 'removeSuccess',\n removeError: 'removeError',\n renewSuccess: 'renewSuccess',\n renewError: 'renewError',\n subscribeSuccess: 'subscribeSuccess',\n subscribeError: 'subscribeError'\n };\n this._pubnubFactory = pubnubFactory;\n this._platform = platform;\n this._pubnub = null;\n this._timeout = null;\n this._subscription = {};\n }\n\n //export interface ISubscription {\n // id?:string;\n // uri?: string;\n // eventFilters?:string[];\n // expirationTime?:string; // 2014-03-12T19:54:35.613Z\n // expiresIn?:number;\n // deliveryMode?: {\n // transportType?:string;\n // encryption?:boolean;\n // address?:string;\n // subscriberKey?:string;\n // encryptionKey?:string;\n // secretKey?:string;\n // };\n // creationTime?:string; // 2014-03-12T19:54:35.613Z\n // status?:string; // Active\n //}\n\n Subscription.prototype.subscribed = function subscribed() {\n\n return !!(this._subscription.id && this._subscription.deliveryMode && this._subscription.deliveryMode.subscriberKey && this._subscription.deliveryMode.address);\n };\n\n /**\n * @return {boolean}\n */\n\n Subscription.prototype.alive = function alive() {\n\n return this.subscribed() && Date.now() < this.expirationTime();\n };\n\n Subscription.prototype.expirationTime = function expirationTime() {\n return new Date(this._subscription.expirationTime || 0).getTime() - Subscription._renewHandicapMs;\n };\n\n Subscription.prototype.setSubscription = function setSubscription(subscription) {\n\n subscription = subscription || {};\n\n this._clearTimeout();\n\n this._subscription = subscription;\n\n if (!this._pubnub) this._subscribeAtPubnub();\n\n this._setTimeout();\n\n return this;\n };\n\n Subscription.prototype.subscription = function subscription() {\n return this._subscription;\n };\n\n /**\n * Creates or updates subscription if there is an active one\n * @returns {Promise}\n */\n\n Subscription.prototype.register = function register() {\n return regeneratorRuntime.async(function register$(context$2$0) {\n while (1) switch (context$2$0.prev = context$2$0.next) {\n case 0:\n if (!this.alive()) {\n context$2$0.next = 6;\n break;\n }\n\n context$2$0.next = 3;\n return regeneratorRuntime.awrap(this.renew());\n\n case 3:\n return context$2$0.abrupt('return', context$2$0.sent);\n\n case 6:\n context$2$0.next = 8;\n return regeneratorRuntime.awrap(this.subscribe());\n\n case 8:\n return context$2$0.abrupt('return', context$2$0.sent);\n\n case 9:\n case 'end':\n return context$2$0.stop();\n }\n }, null, this);\n };\n\n Subscription.prototype.eventFilters = function eventFilters() {\n return this._subscription.eventFilters || [];\n };\n\n /**\n * @param {string[]} events\n * @return {Subscription}\n */\n\n Subscription.prototype.addEventFilters = function addEventFilters(events) {\n this.setEventFilters(this.eventFilters().concat(events));\n return this;\n };\n\n /**\n * @param {string[]} events\n * @return {Subscription}\n */\n\n Subscription.prototype.setEventFilters = function setEventFilters(events) {\n this._subscription.eventFilters = events;\n return this;\n };\n\n /**\n * @returns {Promise}\n */\n\n Subscription.prototype.subscribe = function subscribe() {\n var response, json;\n return regeneratorRuntime.async(function subscribe$(context$2$0) {\n while (1) switch (context$2$0.prev = context$2$0.next) {\n case 0:\n context$2$0.prev = 0;\n\n this._clearTimeout();\n\n if (this.eventFilters().length) {\n context$2$0.next = 4;\n break;\n }\n\n throw new Error('Events are undefined');\n\n case 4:\n context$2$0.next = 6;\n return regeneratorRuntime.awrap(this._platform.post('/restapi/v1.0/subscription', {\n eventFilters: this._getFullEventFilters(),\n deliveryMode: {\n transportType: 'PubNub'\n }\n }));\n\n case 6:\n response = context$2$0.sent;\n json = response.json();\n\n this.setSubscription(json).emit(this.events.subscribeSuccess, response);\n\n return context$2$0.abrupt('return', response);\n\n case 12:\n context$2$0.prev = 12;\n context$2$0.t0 = context$2$0['catch'](0);\n\n context$2$0.t0 = this._platform.client().makeError(context$2$0.t0);\n\n this.reset().emit(this.events.subscribeError, context$2$0.t0);\n\n throw context$2$0.t0;\n\n case 17:\n case 'end':\n return context$2$0.stop();\n }\n }, null, this, [[0, 12]]);\n };\n\n /**\n * @returns {Promise}\n */\n\n Subscription.prototype.renew = function renew() {\n var response, json;\n return regeneratorRuntime.async(function renew$(context$2$0) {\n while (1) switch (context$2$0.prev = context$2$0.next) {\n case 0:\n context$2$0.prev = 0;\n\n this._clearTimeout();\n\n if (this.alive()) {\n context$2$0.next = 4;\n break;\n }\n\n throw new Error('Subscription is not alive');\n\n case 4:\n if (this.eventFilters().length) {\n context$2$0.next = 6;\n break;\n }\n\n throw new Error('Events are undefined');\n\n case 6:\n context$2$0.next = 8;\n return regeneratorRuntime.awrap(this._platform.put('/restapi/v1.0/subscription/' + this._subscription.id, {\n eventFilters: this._getFullEventFilters()\n }));\n\n case 8:\n response = context$2$0.sent;\n json = response.json();\n\n this.setSubscription(json).emit(this.events.renewSuccess, response);\n\n return context$2$0.abrupt('return', response);\n\n case 14:\n context$2$0.prev = 14;\n context$2$0.t0 = context$2$0['catch'](0);\n\n context$2$0.t0 = this._platform.client().makeError(context$2$0.t0);\n\n this.reset().emit(this.events.renewError, context$2$0.t0);\n\n throw context$2$0.t0;\n\n case 19:\n case 'end':\n return context$2$0.stop();\n }\n }, null, this, [[0, 14]]);\n };\n\n /**\n * @returns {Promise}\n */\n\n Subscription.prototype.remove = function remove() {\n var response;\n return regeneratorRuntime.async(function remove$(context$2$0) {\n while (1) switch (context$2$0.prev = context$2$0.next) {\n case 0:\n context$2$0.prev = 0;\n\n if (this.subscribed()) {\n context$2$0.next = 3;\n break;\n }\n\n throw new Error('No subscription');\n\n case 3:\n context$2$0.next = 5;\n return regeneratorRuntime.awrap(this._platform['delete']('/restapi/v1.0/subscription/' + this._subscription.id));\n\n case 5:\n response = context$2$0.sent;\n\n this.reset().emit(this.events.removeSuccess, response);\n\n return context$2$0.abrupt('return', response);\n\n case 10:\n context$2$0.prev = 10;\n context$2$0.t0 = context$2$0['catch'](0);\n\n context$2$0.t0 = this._platform.client().makeError(context$2$0.t0);\n\n this.emit(this.events.removeError, context$2$0.t0);\n\n throw context$2$0.t0;\n\n case 15:\n case 'end':\n return context$2$0.stop();\n }\n }, null, this, [[0, 10]]);\n };\n\n /**\n * @returns {Promise}\n */\n\n Subscription.prototype.resubscribe = function resubscribe() {\n\n return this.reset().setEventFilters(this.eventFilters()).subscribe();\n };\n\n /**\n * Remove subscription and disconnect from PUBNUB\n * This method resets subscription at client side but backend is not notified\n */\n\n Subscription.prototype.reset = function reset() {\n this._clearTimeout();\n if (this.subscribed() && this._pubnub) this._pubnub.unsubscribe({ channel: this._subscription.deliveryMode.address });\n this._subscription = {};\n return this;\n };\n\n Subscription.prototype._getFullEventFilters = function _getFullEventFilters() {\n var _this = this;\n\n return this.eventFilters().map(function (event) {\n return _this._platform.createUrl(event);\n });\n };\n\n Subscription.prototype._setTimeout = function _setTimeout() {\n var _this2 = this;\n\n this._clearTimeout();\n\n if (!this.alive()) throw new Error('Subscription is not alive');\n\n _coreUtils.poll(function (next) {\n\n if (_this2.alive()) return next();\n\n _this2.renew();\n }, Subscription._pollInterval, this._timeout);\n\n return this;\n };\n\n Subscription.prototype._clearTimeout = function _clearTimeout() {\n\n _coreUtils.stopPolling(this._timeout);\n\n return this;\n };\n\n Subscription.prototype._decrypt = function _decrypt(message) {\n\n if (!this.subscribed()) throw new Error('No subscription');\n\n if (this._subscription.deliveryMode.encryptionKey) {\n\n var PUBNUB = this._pubnubFactory;\n\n message = PUBNUB.crypto_obj.decrypt(message, this._subscription.deliveryMode.encryptionKey, {\n encryptKey: false,\n keyEncoding: 'base64',\n keyLength: 128,\n mode: 'ecb'\n });\n }\n\n return message;\n };\n\n Subscription.prototype._notify = function _notify(message) {\n\n this.emit(this.events.notification, this._decrypt(message));\n\n return this;\n };\n\n Subscription.prototype._subscribeAtPubnub = function _subscribeAtPubnub() {\n\n if (!this.alive()) throw new Error('Subscription is not alive');\n\n var PUBNUB = this._pubnubFactory;\n\n this._pubnub = PUBNUB.init({\n ssl: true,\n subscribe_key: this._subscription.deliveryMode.subscriberKey\n });\n\n this._pubnub.ready();\n\n this._pubnub.subscribe({\n channel: this._subscription.deliveryMode.address,\n message: this._notify.bind(this),\n connect: function connect() {}\n });\n\n return this;\n };\n\n return Subscription;\n})(_coreObservable2['default']);\n\nexports['default'] = Subscription;\nmodule.exports = exports['default'];\n\n/***/ },\n/* 25 */\n/***/ function(module, exports, __webpack_require__) {\n\n'use strict';\n\nexports.__esModule = true;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _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; }\n\nvar _Subscription2 = __webpack_require__(24);\n\nvar _Subscription3 = _interopRequireDefault(_Subscription2);\n\nvar _coreQueue = __webpack_require__(13);\n\nvar _coreQueue2 = _interopRequireDefault(_coreQueue);\n\nvar CachedSubscription = (function (_Subscription) {\n _inherits(CachedSubscription, _Subscription);\n\n function CachedSubscription(pubnubFactory, platform, cache, cacheKey) {\n var _this = this;\n\n _classCallCheck(this, CachedSubscription);\n\n _Subscription.call(this, pubnubFactory, platform);\n\n this._cache = cache;\n this._cacheKey = cacheKey;\n this._renewQueue = new _coreQueue2['default'](this._cache, cacheKey + '-renew');\n this._resubscribeQueue = new _coreQueue2['default'](this._cache, cacheKey + '-resubscribe');\n\n this.events = _extends({}, this.events, {\n queuedRenewSuccess: 'queuedRenewSuccess',\n queuedRenewError: 'queuedRenewError',\n queuedResubscribeSuccess: 'queuedResubscribeSuccess',\n queuedResubscribeError: 'queuedResubscribeError'\n });\n\n this.on(this.events.renewError, function () {\n _this.resubscribe();\n });\n\n this.on([this.events.subscribeSuccess, this.events.renewSuccess], function () {\n _this._cache.setItem(_this._cacheKey, _this.subscription());\n });\n\n this.on(this.events.removeSuccess, function () {\n _this._cache.removeItem(_this._cacheKey);\n });\n }\n\n /**\n * TODO Combine with Platform.refresh and move elsewhere\n * @param actionCb\n * @param queue\n * @param successEvent\n * @param errorEvent\n * @param errorMessage\n * @return {*}\n * @private\n */\n\n CachedSubscription.prototype._queue = function _queue(actionCb, queue, successEvent, errorEvent, errorMessage) {\n var res;\n return regeneratorRuntime.async(function _queue$(context$2$0) {\n while (1) switch (context$2$0.prev = context$2$0.next) {\n case 0:\n context$2$0.prev = 0;\n\n if (!queue.isPaused()) {\n context$2$0.next = 8;\n break;\n }\n\n context$2$0.next = 4;\n return regeneratorRuntime.awrap(queue.poll());\n\n case 4:\n if (this.alive()) {\n context$2$0.next = 6;\n break;\n }\n\n throw new Error(errorMessage);\n\n case 6:\n\n this.emit(successEvent, null);\n\n return context$2$0.abrupt('return', null);\n\n case 8:\n\n queue.pause();\n\n context$2$0.next = 11;\n return regeneratorRuntime.awrap(actionCb.call(this));\n\n case 11:\n res = context$2$0.sent;\n\n queue.resume();\n\n this.emit(successEvent, res);\n\n return context$2$0.abrupt('return', res);\n\n case 17:\n context$2$0.prev = 17;\n context$2$0.t0 = context$2$0['catch'](0);\n\n this.emit(errorEvent, context$2$0.t0);\n\n throw context$2$0.t0;\n\n case 21:\n case 'end':\n return context$2$0.stop();\n }\n }, null, this, [[0, 17]]);\n };\n\n /**\n * @returns {Promise}\n */\n\n CachedSubscription.prototype.renew = function renew() {\n\n return this._queue(_Subscription.prototype.renew, this._renewQueue, this.events.queuedRenewSuccess, this.events.queuedRenewError, 'Subscription is not alive after renew timeout');\n };\n\n /**\n * @returns {Promise}\n */\n\n CachedSubscription.prototype.resubscribe = function resubscribe() {\n\n return this._queue(_Subscription.prototype.resubscribe, this._resubscribeQueue, this.events.queuedResubscribeSuccess, this.events.queuedResubscribeError, 'Subscription is not alive after resubscribe timeout');\n };\n\n /**\n * @param {string[]} events\n * @return {CachedSubscription}\n */\n\n CachedSubscription.prototype.restore = function restore(events) {\n\n var cachedSubscriptionData = this._cache.getItem(this._cacheKey);\n\n if (cachedSubscriptionData) {\n try {\n this.setSubscription(cachedSubscriptionData);\n } catch (e) {}\n } else {\n this.setEventFilters(events);\n }\n\n return this;\n };\n\n return CachedSubscription;\n})(_Subscription3['default']);\n\nexports['default'] = CachedSubscription;\nmodule.exports = exports['default'];\n\n/***/ },\n/* 26 */\n/***/ function(module, exports) {\n\n/* WEBPACK VAR INJECTION */(function(global) {/**\n * Copyright (c) 2014, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * https://raw.github.com/facebook/regenerator/master/LICENSE file. An\n * additional grant of patent rights can be found in the PATENTS file in\n * the same directory.\n */\n\n!(function(global) {\n \"use strict\";\n\n var hasOwn = Object.prototype.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n var inModule = typeof module === \"object\";\n var runtime = global.regeneratorRuntime;\n if (runtime) {\n if (inModule) {\n // If regeneratorRuntime is defined globally and we're in a module,\n // make the exports object identical to regeneratorRuntime.\n module.exports = runtime;\n }\n // Don't bother evaluating the rest of this file if the runtime was\n // already defined globally.\n return;\n }\n\n // Define the runtime globally (as expected by generated code) as either\n // module.exports (if we're in a module) or a new, empty object.\n runtime = global.regeneratorRuntime = inModule ? module.exports : {};\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided, then outerFn.prototype instanceof Generator.\n var generator = Object.create((outerFn || Generator).prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n runtime.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype;\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] = GeneratorFunction.displayName = \"GeneratorFunction\";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n runtime.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n runtime.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = \"GeneratorFunction\";\n }\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `value instanceof AwaitArgument` to determine if the yielded value is\n // meant to be awaited. Some may consider the name of this method too\n // cutesy, but they are curmudgeons.\n runtime.awrap = function(arg) {\n return new AwaitArgument(arg);\n };\n\n function AwaitArgument(arg) {\n this.arg = arg;\n }\n\n function AsyncIterator(generator) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value instanceof AwaitArgument) {\n return Promise.resolve(value.arg).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return Promise.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration. If the Promise is rejected, however, the\n // result for this iteration will be rejected with the same\n // reason. Note that rejections of yielded Promises are not\n // thrown back into the generator function, as is the case\n // when an awaited Promise is rejected. This difference in\n // behavior between yield and await is important, because it\n // allows the consumer to decide what to do with the yielded\n // rejection (swallow it and continue, manually .throw it back\n // into the generator, abandon iteration, whatever). With\n // await, by contrast, there is no opportunity to examine the\n // rejection reason outside the generator function, so the\n // only option is to throw it from the await expression, and\n // let the generator function handle the exception.\n result.value = unwrapped;\n resolve(result);\n }, reject);\n }\n }\n\n if (typeof process === \"object\" && process.domain) {\n invoke = process.domain.bind(invoke);\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new Promise(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n runtime.async = function(innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList)\n );\n\n return runtime.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n if (method === \"return\" ||\n (method === \"throw\" && delegate.iterator[method] === undefined)) {\n // A return or throw (when the delegate iterator has no throw\n // method) always terminates the yield* loop.\n context.delegate = null;\n\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n var returnMethod = delegate.iterator[\"return\"];\n if (returnMethod) {\n var record = tryCatch(returnMethod, delegate.iterator, arg);\n if (record.type === \"throw\") {\n // If the return method threw an exception, let that\n // exception prevail over the original return or throw.\n method = \"throw\";\n arg = record.arg;\n continue;\n }\n }\n\n if (method === \"return\") {\n // Continue with the outer return, now that the delegate\n // iterator has been terminated.\n continue;\n }\n }\n\n var record = tryCatch(\n delegate.iterator[method],\n delegate.iterator,\n arg\n );\n\n if (record.type === \"throw\") {\n context.delegate = null;\n\n // Like returning generator.throw(uncaught), but without the\n // overhead of an extra function call.\n method = \"throw\";\n arg = record.arg;\n continue;\n }\n\n // Delegate generator ran and handled its own exceptions so\n // regardless of what the method was, we continue as if it is\n // \"next\" with an undefined arg.\n method = \"next\";\n arg = undefined;\n\n var info = record.arg;\n if (info.done) {\n context[delegate.resultName] = info.value;\n context.next = delegate.nextLoc;\n } else {\n state = GenStateSuspendedYield;\n return info;\n }\n\n context.delegate = null;\n }\n\n if (method === \"next\") {\n if (state === GenStateSuspendedYield) {\n context.sent = arg;\n } else {\n context.sent = undefined;\n }\n\n } else if (method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw arg;\n }\n\n if (context.dispatchException(arg)) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n method = \"next\";\n arg = undefined;\n }\n\n } else if (method === \"return\") {\n context.abrupt(\"return\", arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n var info = {\n value: record.arg,\n done: context.done\n };\n\n if (record.arg === ContinueSentinel) {\n if (context.delegate && method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n arg = undefined;\n }\n } else {\n return info;\n }\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(arg) call above.\n method = \"throw\";\n arg = record.arg;\n }\n }\n };\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp[toStringTagSymbol] = \"Generator\";\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n runtime.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n runtime.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n this.sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n return !!caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.next = finallyEntry.finallyLoc;\n } else {\n this.complete(record);\n }\n\n return ContinueSentinel;\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = record.arg;\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n return ContinueSentinel;\n }\n };\n})(\n // Among the various tricks for obtaining a reference to the global\n // object, this seems to be the most reliable technique that does not\n // use indirect eval (which violates Content Security Policy).\n typeof global === \"object\" ? global :\n typeof window === \"object\" ? window :\n typeof self === \"object\" ? self : this\n);\n\n/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))\n\n/***/ }\n/******/ ])\n});\n;\n"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/build/\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap 9c749e57da12c0713880\n **/","import * as Utils from './core/Utils';\nimport Cache from './core/Cache';\nimport * as Externals from './core/Externals';\nimport Observable from './core/Observable';\nimport Queue from './core/Queue';\n\nimport Client from './http/Client';\nimport ApiResponse from './http/ApiResponse';\nimport * as HttpUtils from './http/Utils';\n\nimport {default as ClientMock} from './mocks/ClientMock';\nimport Mock from './mocks/Mock';\nimport Registry from './mocks/Registry';\n\nimport Platform from './platform/Platform';\nimport Auth from './platform/Auth';\n\nimport PubnubMockFactory from './pubnub/PubnubFactory';\n\nimport Subscription from './subscription/Subscription';\nimport CachedSubscription from './subscription/CachedSubscription';\n\nrequire(\"regenerator/runtime\");\n\nexport default class SDK {\n\n static version = '2.0.1';\n\n static server = {\n sandbox: 'https://platform.devtest.ringcentral.com',\n production: 'https://platform.ringcentral.com'\n };\n\n /**\n * @constructor\n * @param {object} [options]\n * @param {string} [options.server]\n * @param {string} [options.cachePrefix]\n * @param {string} [options.appSecret]\n * @param {string} [options.appKey]\n * @param {string} [options.appName]\n * @param {string} [options.appVersion]\n * @param {string} [options.pubnubFactory]\n * @param {string} [options.client]\n */\n constructor(options) {\n\n options = options || {};\n\n this._cache = new Cache(Externals.localStorage, options.cachePrefix);\n\n this._client = options.client || new Client();\n\n this._platform = new Platform(this._client, this._cache, options.server, options.appKey, options.appSecret);\n\n this._pubnubFactory = options.pubnubFactory || Externals.PUBNUB;\n\n }\n\n /**\n * @return {Platform}\n */\n platform() {\n return this._platform;\n }\n\n /**\n * @return {Subscription}\n */\n createSubscription() {\n return new Subscription(this._pubnubFactory, this._platform);\n }\n\n /**\n * @return {CachedSubscription}\n */\n createCachedSubscription(cacheKey) {\n return new CachedSubscription(this._pubnubFactory, this._platform, this._cache, cacheKey);\n }\n\n /**\n * @return {Cache}\n */\n cache() {\n return this._cache;\n }\n\n static core = {\n Cache: Cache,\n Observable: Observable,\n Utils: Utils,\n Externals: Externals,\n Queue: Queue\n };\n\n static http = {\n Client: Client,\n ApiResponse: ApiResponse,\n Utils: HttpUtils\n };\n\n static platform = {\n Auth: Auth,\n Platform: Platform\n };\n\n static subscription = {\n Subscription: Subscription\n };\n\n static mocks = {\n Client: ClientMock,\n Registry: Registry,\n Mock: Mock\n };\n\n static pubnub = {\n PubnubMockFactory: PubnubMockFactory\n };\n\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/SDK.js\n **/","import {Promise} from './Externals.js';\n\n/**\n * TODO Replace with something better\n * @see https://github.com/joyent/node/blob/master/lib/querystring.js\n * @param {object} parameters\n * @returns {string}\n */\nexport function queryStringify(parameters) {\n\n var array = [];\n\n parameters = parameters || {};\n\n Object.keys(parameters).forEach((k) => {\n\n var v = parameters[k];\n\n if (isArray(v)) {\n v.forEach((vv) => {\n array.push(encodeURIComponent(k) + '=' + encodeURIComponent(vv));\n });\n } else {\n array.push(encodeURIComponent(k) + '=' + encodeURIComponent(v));\n }\n\n });\n\n return array.join('&');\n\n}\n\n/**\n * TODO Replace with something better\n * @see https://github.com/joyent/node/blob/master/lib/querystring.js\n * @param {string} queryString\n * @returns {object}\n */\nexport function parseQueryString(queryString) {\n\n var argsParsed = {};\n\n queryString.split('&').forEach((arg) => {\n\n arg = decodeURIComponent(arg);\n\n if (arg.indexOf('=') == -1) {\n\n argsParsed[arg.trim()] = true;\n\n } else {\n\n var pair = arg.split('='),\n key = pair[0].trim(),\n value = pair[1].trim();\n\n if (key in argsParsed) {\n if (key in argsParsed && !isArray(argsParsed[key])) argsParsed[key] = [argsParsed[key]];\n argsParsed[key].push(value);\n } else {\n argsParsed[key] = value;\n }\n\n }\n\n });\n\n return argsParsed;\n\n}\n\n/**\n * @param obj\n * @return {boolean}\n */\nexport function isFunction(obj) {\n return typeof obj === \"function\";\n}\n\n/**\n * @param obj\n * @return {boolean}\n */\nexport function isArray(obj) {\n return Array.isArray ? Array.isArray(obj) : typeof obj === \"array\";\n}\n\n/**\n * @param fn\n * @param interval\n * @param timeout\n */\nexport function poll(fn, interval, timeout) { //NodeJS.Timer|number\n\n module.exports.stopPolling(timeout);\n\n interval = interval || 1000;\n\n var next = (delay) => {\n\n delay = delay || interval;\n\n interval = delay;\n\n return setTimeout(() => {\n\n fn(next, delay);\n\n }, delay);\n\n };\n\n return next();\n\n}\n\nexport function stopPolling(timeout) {\n if (timeout) clearTimeout(timeout);\n}\n\nexport function isNodeJS() {\n return (typeof process !== 'undefined');\n}\n\nexport function isBrowser() {\n return (typeof window !== 'undefined');\n}\n\nexport function delay(timeout) {\n return new Promise((resolve, reject) => {\n setTimeout(() => {\n resolve(null);\n }, timeout);\n });\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/core/Utils.js\n **/","import ES6Promise from 'es6-promise';\nimport nodeFetch from 'node-fetch';\nimport pubnub from 'pubnub';\n\nvar root = (new Function('return this'))();\n\nexport var Promise = (ES6Promise && ES6Promise.Promise) || root.Promise;\n\nexport var fetch = root.fetch || nodeFetch;\nexport var Request = root.Request || fetch.Request;\nexport var Response = root.Response || fetch.Response;\nexport var Headers = root.Headers || fetch.Headers;\n\nexport var PUBNUB = root.PUBNUB || pubnub;\n\nexport var localStorage = (typeof root.localStorage !== 'undefined') ? root.localStorage : {};\n\n\n/** WEBPACK FOOTER **\n ** ./src/core/Externals.js\n **/","/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version 2.2.0\n */\n\n(function() {\n \"use strict\";\n function lib$es6$promise$utils$$objectOrFunction(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null);\n }\n\n function lib$es6$promise$utils$$isFunction(x) {\n return typeof x === 'function';\n }\n\n function lib$es6$promise$utils$$isMaybeThenable(x) {\n return typeof x === 'object' && x !== null;\n }\n\n var lib$es6$promise$utils$$_isArray;\n if (!Array.isArray) {\n lib$es6$promise$utils$$_isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n } else {\n lib$es6$promise$utils$$_isArray = Array.isArray;\n }\n\n var lib$es6$promise$utils$$isArray = lib$es6$promise$utils$$_isArray;\n var lib$es6$promise$asap$$len = 0;\n var lib$es6$promise$asap$$toString = {}.toString;\n var lib$es6$promise$asap$$vertxNext;\n var lib$es6$promise$asap$$customSchedulerFn;\n\n function lib$es6$promise$asap$$asap(callback, arg) {\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len] = callback;\n lib$es6$promise$asap$$queue[lib$es6$promise$asap$$len + 1] = arg;\n lib$es6$promise$asap$$len += 2;\n if (lib$es6$promise$asap$$len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (lib$es6$promise$asap$$customSchedulerFn) {\n lib$es6$promise$asap$$customSchedulerFn(lib$es6$promise$asap$$flush);\n } else {\n lib$es6$promise$asap$$scheduleFlush();\n }\n }\n }\n\n var lib$es6$promise$asap$$default = lib$es6$promise$asap$$asap;\n function lib$es6$promise$asap$$setScheduler(scheduleFn) {\n lib$es6$promise$asap$$customSchedulerFn = scheduleFn;\n }\n\n var lib$es6$promise$asap$$browserWindow = (typeof window !== 'undefined') ? window : undefined;\n var lib$es6$promise$asap$$browserGlobal = lib$es6$promise$asap$$browserWindow || {};\n var lib$es6$promise$asap$$BrowserMutationObserver = lib$es6$promise$asap$$browserGlobal.MutationObserver || lib$es6$promise$asap$$browserGlobal.WebKitMutationObserver;\n var lib$es6$promise$asap$$isNode = typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n // test for web worker but not in IE10\n var lib$es6$promise$asap$$isWorker = typeof Uint8ClampedArray !== 'undefined' &&\n typeof importScripts !== 'undefined' &&\n typeof MessageChannel !== 'undefined';\n\n // node\n function lib$es6$promise$asap$$useNextTick() {\n var nextTick = process.nextTick;\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // setImmediate should be used instead instead\n var version = process.versions.node.match(/^(?:(\\d+)\\.)?(?:(\\d+)\\.)?(\\*|\\d+)$/);\n if (Array.isArray(version) && version[1] === '0' && version[2] === '10') {\n nextTick = setImmediate;\n }\n return function() {\n nextTick(lib$es6$promise$asap$$flush);\n };\n }\n\n // vertx\n function lib$es6$promise$asap$$useVertxTimer() {\n return function() {\n lib$es6$promise$asap$$vertxNext(lib$es6$promise$asap$$flush);\n };\n }\n\n function lib$es6$promise$asap$$useMutationObserver() {\n var iterations = 0;\n var observer = new lib$es6$promise$asap$$BrowserMutationObserver(lib$es6$promise$asap$$flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function() {\n node.data = (iterations = ++iterations % 2);\n };\n }\n\n // web worker\n function lib$es6$promise$asap$$useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = lib$es6$promise$asap$$flush;\n return function () {\n channel.port2.postMessage(0);\n };\n }\n\n function lib$es6$promise$asap$$useSetTimeout() {\n return function() {\n setTimeout(lib$es6$promise$asap$$flush, 1);\n };\n }\n\n var lib$es6$promise$asap$$queue = new Array(1000);\n function lib$es6$promise$asap$$flush() {\n for (var i = 0; i < lib$es6$promise$asap$$len; i+=2) {\n var callback = lib$es6$promise$asap$$queue[i];\n var arg = lib$es6$promise$asap$$queue[i+1];\n\n callback(arg);\n\n lib$es6$promise$asap$$queue[i] = undefined;\n lib$es6$promise$asap$$queue[i+1] = undefined;\n }\n\n lib$es6$promise$asap$$len = 0;\n }\n\n function lib$es6$promise$asap$$attemptVertex() {\n try {\n var r = require;\n var vertx = r('vertx');\n lib$es6$promise$asap$$vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return lib$es6$promise$asap$$useVertxTimer();\n } catch(e) {\n return lib$es6$promise$asap$$useSetTimeout();\n }\n }\n\n var lib$es6$promise$asap$$scheduleFlush;\n // Decide what async method to use to triggering processing of queued callbacks:\n if (lib$es6$promise$asap$$isNode) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useNextTick();\n } else if (lib$es6$promise$asap$$BrowserMutationObserver) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMutationObserver();\n } else if (lib$es6$promise$asap$$isWorker) {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useMessageChannel();\n } else if (lib$es6$promise$asap$$browserWindow === undefined && typeof require === 'function') {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$attemptVertex();\n } else {\n lib$es6$promise$asap$$scheduleFlush = lib$es6$promise$asap$$useSetTimeout();\n }\n\n function lib$es6$promise$$internal$$noop() {}\n\n var lib$es6$promise$$internal$$PENDING = void 0;\n var lib$es6$promise$$internal$$FULFILLED = 1;\n var lib$es6$promise$$internal$$REJECTED = 2;\n\n var lib$es6$promise$$internal$$GET_THEN_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$selfFullfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n }\n\n function lib$es6$promise$$internal$$cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n }\n\n function lib$es6$promise$$internal$$getThen(promise) {\n try {\n return promise.then;\n } catch(error) {\n lib$es6$promise$$internal$$GET_THEN_ERROR.error = error;\n return lib$es6$promise$$internal$$GET_THEN_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch(e) {\n return e;\n }\n }\n\n function lib$es6$promise$$internal$$handleForeignThenable(promise, thenable, then) {\n lib$es6$promise$asap$$default(function(promise) {\n var sealed = false;\n var error = lib$es6$promise$$internal$$tryThen(then, thenable, function(value) {\n if (sealed) { return; }\n sealed = true;\n if (thenable !== value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }, function(reason) {\n if (sealed) { return; }\n sealed = true;\n\n lib$es6$promise$$internal$$reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n lib$es6$promise$$internal$$reject(promise, error);\n }\n }, promise);\n }\n\n function lib$es6$promise$$internal$$handleOwnThenable(promise, thenable) {\n if (thenable._state === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, thenable._result);\n } else if (thenable._state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, thenable._result);\n } else {\n lib$es6$promise$$internal$$subscribe(thenable, undefined, function(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n }\n }\n\n function lib$es6$promise$$internal$$handleMaybeThenable(promise, maybeThenable) {\n if (maybeThenable.constructor === promise.constructor) {\n lib$es6$promise$$internal$$handleOwnThenable(promise, maybeThenable);\n } else {\n var then = lib$es6$promise$$internal$$getThen(maybeThenable);\n\n if (then === lib$es6$promise$$internal$$GET_THEN_ERROR) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$GET_THEN_ERROR.error);\n } else if (then === undefined) {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n } else if (lib$es6$promise$utils$$isFunction(then)) {\n lib$es6$promise$$internal$$handleForeignThenable(promise, maybeThenable, then);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, maybeThenable);\n }\n }\n }\n\n function lib$es6$promise$$internal$$resolve(promise, value) {\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$selfFullfillment());\n } else if (lib$es6$promise$utils$$objectOrFunction(value)) {\n lib$es6$promise$$internal$$handleMaybeThenable(promise, value);\n } else {\n lib$es6$promise$$internal$$fulfill(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n lib$es6$promise$$internal$$publish(promise);\n }\n\n function lib$es6$promise$$internal$$fulfill(promise, value) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n\n promise._result = value;\n promise._state = lib$es6$promise$$internal$$FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n lib$es6$promise$asap$$default(lib$es6$promise$$internal$$publish, promise);\n }\n }\n\n function lib$es6$promise$$internal$$reject(promise, reason) {\n if (promise._state !== lib$es6$promise$$internal$$PENDING) { return; }\n promise._state = lib$es6$promise$$internal$$REJECTED;\n promise._result = reason;\n\n lib$es6$promise$asap$$default(lib$es6$promise$$internal$$publishRejection, promise);\n }\n\n function lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection) {\n var subscribers = parent._subscribers;\n var length = subscribers.length;\n\n parent._onerror = null;\n\n subscribers[length] = child;\n subscribers[length + lib$es6$promise$$internal$$FULFILLED] = onFulfillment;\n subscribers[length + lib$es6$promise$$internal$$REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n lib$es6$promise$asap$$default(lib$es6$promise$$internal$$publish, parent);\n }\n }\n\n function lib$es6$promise$$internal$$publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) { return; }\n\n var child, callback, detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n lib$es6$promise$$internal$$invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n }\n\n function lib$es6$promise$$internal$$ErrorObject() {\n this.error = null;\n }\n\n var lib$es6$promise$$internal$$TRY_CATCH_ERROR = new lib$es6$promise$$internal$$ErrorObject();\n\n function lib$es6$promise$$internal$$tryCatch(callback, detail) {\n try {\n return callback(detail);\n } catch(e) {\n lib$es6$promise$$internal$$TRY_CATCH_ERROR.error = e;\n return lib$es6$promise$$internal$$TRY_CATCH_ERROR;\n }\n }\n\n function lib$es6$promise$$internal$$invokeCallback(settled, promise, callback, detail) {\n var hasCallback = lib$es6$promise$utils$$isFunction(callback),\n value, error, succeeded, failed;\n\n if (hasCallback) {\n value = lib$es6$promise$$internal$$tryCatch(callback, detail);\n\n if (value === lib$es6$promise$$internal$$TRY_CATCH_ERROR) {\n failed = true;\n error = value.error;\n value = null;\n } else {\n succeeded = true;\n }\n\n if (promise === value) {\n lib$es6$promise$$internal$$reject(promise, lib$es6$promise$$internal$$cannotReturnOwn());\n return;\n }\n\n } else {\n value = detail;\n succeeded = true;\n }\n\n if (promise._state !== lib$es6$promise$$internal$$PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n lib$es6$promise$$internal$$resolve(promise, value);\n } else if (failed) {\n lib$es6$promise$$internal$$reject(promise, error);\n } else if (settled === lib$es6$promise$$internal$$FULFILLED) {\n lib$es6$promise$$internal$$fulfill(promise, value);\n } else if (settled === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n }\n }\n\n function lib$es6$promise$$internal$$initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value){\n lib$es6$promise$$internal$$resolve(promise, value);\n }, function rejectPromise(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n });\n } catch(e) {\n lib$es6$promise$$internal$$reject(promise, e);\n }\n }\n\n function lib$es6$promise$enumerator$$Enumerator(Constructor, input) {\n var enumerator = this;\n\n enumerator._instanceConstructor = Constructor;\n enumerator.promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (enumerator._validateInput(input)) {\n enumerator._input = input;\n enumerator.length = input.length;\n enumerator._remaining = input.length;\n\n enumerator._init();\n\n if (enumerator.length === 0) {\n lib$es6$promise$$internal$$fulfill(enumerator.promise, enumerator._result);\n } else {\n enumerator.length = enumerator.length || 0;\n enumerator._enumerate();\n if (enumerator._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(enumerator.promise, enumerator._result);\n }\n }\n } else {\n lib$es6$promise$$internal$$reject(enumerator.promise, enumerator._validationError());\n }\n }\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validateInput = function(input) {\n return lib$es6$promise$utils$$isArray(input);\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._validationError = function() {\n return new Error('Array Methods must be provided an Array');\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._init = function() {\n this._result = new Array(this.length);\n };\n\n var lib$es6$promise$enumerator$$default = lib$es6$promise$enumerator$$Enumerator;\n\n lib$es6$promise$enumerator$$Enumerator.prototype._enumerate = function() {\n var enumerator = this;\n\n var length = enumerator.length;\n var promise = enumerator.promise;\n var input = enumerator._input;\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n enumerator._eachEntry(input[i], i);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._eachEntry = function(entry, i) {\n var enumerator = this;\n var c = enumerator._instanceConstructor;\n\n if (lib$es6$promise$utils$$isMaybeThenable(entry)) {\n if (entry.constructor === c && entry._state !== lib$es6$promise$$internal$$PENDING) {\n entry._onerror = null;\n enumerator._settledAt(entry._state, i, entry._result);\n } else {\n enumerator._willSettleAt(c.resolve(entry), i);\n }\n } else {\n enumerator._remaining--;\n enumerator._result[i] = entry;\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._settledAt = function(state, i, value) {\n var enumerator = this;\n var promise = enumerator.promise;\n\n if (promise._state === lib$es6$promise$$internal$$PENDING) {\n enumerator._remaining--;\n\n if (state === lib$es6$promise$$internal$$REJECTED) {\n lib$es6$promise$$internal$$reject(promise, value);\n } else {\n enumerator._result[i] = value;\n }\n }\n\n if (enumerator._remaining === 0) {\n lib$es6$promise$$internal$$fulfill(promise, enumerator._result);\n }\n };\n\n lib$es6$promise$enumerator$$Enumerator.prototype._willSettleAt = function(promise, i) {\n var enumerator = this;\n\n lib$es6$promise$$internal$$subscribe(promise, undefined, function(value) {\n enumerator._settledAt(lib$es6$promise$$internal$$FULFILLED, i, value);\n }, function(reason) {\n enumerator._settledAt(lib$es6$promise$$internal$$REJECTED, i, reason);\n });\n };\n function lib$es6$promise$promise$all$$all(entries) {\n return new lib$es6$promise$enumerator$$default(this, entries).promise;\n }\n var lib$es6$promise$promise$all$$default = lib$es6$promise$promise$all$$all;\n function lib$es6$promise$promise$race$$race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n\n if (!lib$es6$promise$utils$$isArray(entries)) {\n lib$es6$promise$$internal$$reject(promise, new TypeError('You must pass an array to race.'));\n return promise;\n }\n\n var length = entries.length;\n\n function onFulfillment(value) {\n lib$es6$promise$$internal$$resolve(promise, value);\n }\n\n function onRejection(reason) {\n lib$es6$promise$$internal$$reject(promise, reason);\n }\n\n for (var i = 0; promise._state === lib$es6$promise$$internal$$PENDING && i < length; i++) {\n lib$es6$promise$$internal$$subscribe(Constructor.resolve(entries[i]), undefined, onFulfillment, onRejection);\n }\n\n return promise;\n }\n var lib$es6$promise$promise$race$$default = lib$es6$promise$promise$race$$race;\n function lib$es6$promise$promise$resolve$$resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$resolve(promise, object);\n return promise;\n }\n var lib$es6$promise$promise$resolve$$default = lib$es6$promise$promise$resolve$$resolve;\n function lib$es6$promise$promise$reject$$reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(lib$es6$promise$$internal$$noop);\n lib$es6$promise$$internal$$reject(promise, reason);\n return promise;\n }\n var lib$es6$promise$promise$reject$$default = lib$es6$promise$promise$reject$$reject;\n\n var lib$es6$promise$promise$$counter = 0;\n\n function lib$es6$promise$promise$$needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n }\n\n function lib$es6$promise$promise$$needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n }\n\n var lib$es6$promise$promise$$default = lib$es6$promise$promise$$Promise;\n /**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise’s eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n var promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n var xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {function} resolver\n Useful for tooling.\n @constructor\n */\n function lib$es6$promise$promise$$Promise(resolver) {\n this._id = lib$es6$promise$promise$$counter++;\n this._state = undefined;\n this._result = undefined;\n this._subscribers = [];\n\n if (lib$es6$promise$$internal$$noop !== resolver) {\n if (!lib$es6$promise$utils$$isFunction(resolver)) {\n lib$es6$promise$promise$$needsResolver();\n }\n\n if (!(this instanceof lib$es6$promise$promise$$Promise)) {\n lib$es6$promise$promise$$needsNew();\n }\n\n lib$es6$promise$$internal$$initializePromise(this, resolver);\n }\n }\n\n lib$es6$promise$promise$$Promise.all = lib$es6$promise$promise$all$$default;\n lib$es6$promise$promise$$Promise.race = lib$es6$promise$promise$race$$default;\n lib$es6$promise$promise$$Promise.resolve = lib$es6$promise$promise$resolve$$default;\n lib$es6$promise$promise$$Promise.reject = lib$es6$promise$promise$reject$$default;\n lib$es6$promise$promise$$Promise._setScheduler = lib$es6$promise$asap$$setScheduler;\n lib$es6$promise$promise$$Promise._asap = lib$es6$promise$asap$$default;\n\n lib$es6$promise$promise$$Promise.prototype = {\n constructor: lib$es6$promise$promise$$Promise,\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n\n Chaining\n --------\n\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n\n Assimilation\n ------------\n\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n\n If the assimliated promise rejects, then the downstream promise will also reject.\n\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n\n Simple Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var result;\n\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n\n Advanced Example\n --------------\n\n Synchronous Example\n\n ```javascript\n var author, books;\n\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n\n Errback Example\n\n ```js\n\n function foundBooks(books) {\n\n }\n\n function failure(reason) {\n\n }\n\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n\n Promise Example;\n\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n then: function(onFulfillment, onRejection) {\n var parent = this;\n var state = parent._state;\n\n if (state === lib$es6$promise$$internal$$FULFILLED && !onFulfillment || state === lib$es6$promise$$internal$$REJECTED && !onRejection) {\n return this;\n }\n\n var child = new this.constructor(lib$es6$promise$$internal$$noop);\n var result = parent._result;\n\n if (state) {\n var callback = arguments[state - 1];\n lib$es6$promise$asap$$default(function(){\n lib$es6$promise$$internal$$invokeCallback(state, child, callback, result);\n });\n } else {\n lib$es6$promise$$internal$$subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n },\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n 'catch': function(onRejection) {\n return this.then(null, onRejection);\n }\n };\n function lib$es6$promise$polyfill$$polyfill() {\n var local;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P && Object.prototype.toString.call(P.resolve()) === '[object Promise]' && !P.cast) {\n return;\n }\n\n local.Promise = lib$es6$promise$promise$$default;\n }\n var lib$es6$promise$polyfill$$default = lib$es6$promise$polyfill$$polyfill;\n\n var lib$es6$promise$umd$$ES6Promise = {\n 'Promise': lib$es6$promise$promise$$default,\n 'polyfill': lib$es6$promise$polyfill$$default\n };\n\n /* global define:true module:true window: true */\n if (typeof define === 'function' && define['amd']) {\n define(function() { return lib$es6$promise$umd$$ES6Promise; });\n } else if (typeof module !== 'undefined' && module['exports']) {\n module['exports'] = lib$es6$promise$umd$$ES6Promise;\n } else if (typeof this !== 'undefined') {\n this['ES6Promise'] = lib$es6$promise$umd$$ES6Promise;\n }\n\n lib$es6$promise$polyfill$$default();\n}).call(this);\n\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./bower_components/es6-promise/promise.js\n ** module id = 4\n ** module chunks = 0\n **/","var nextTick = require('process/browser.js').nextTick;\nvar apply = Function.prototype.apply;\nvar slice = Array.prototype.slice;\nvar immediateIds = {};\nvar nextImmediateId = 0;\n\n// DOM APIs, for completeness\n\nexports.setTimeout = function() {\n return new Timeout(apply.call(setTimeout, window, arguments), clearTimeout);\n};\nexports.setInterval = function() {\n return new Timeout(apply.call(setInterval, window, arguments), clearInterval);\n};\nexports.clearTimeout =\nexports.clearInterval = function(timeout) { timeout.close(); };\n\nfunction Timeout(id, clearFn) {\n this._id = id;\n this._clearFn = clearFn;\n}\nTimeout.prototype.unref = Timeout.prototype.ref = function() {};\nTimeout.prototype.close = function() {\n this._clearFn.call(window, this._id);\n};\n\n// Does not start the time, just sets up the members needed.\nexports.enroll = function(item, msecs) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = msecs;\n};\n\nexports.unenroll = function(item) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = -1;\n};\n\nexports._unrefActive = exports.active = function(item) {\n clearTimeout(item._idleTimeoutId);\n\n var msecs = item._idleTimeout;\n if (msecs >= 0) {\n item._idleTimeoutId = setTimeout(function onTimeout() {\n if (item._onTimeout)\n item._onTimeout();\n }, msecs);\n }\n};\n\n// That's not how node.js implements it but the exposed api is the same.\nexports.setImmediate = typeof setImmediate === \"function\" ? setImmediate : function(fn) {\n var id = nextImmediateId++;\n var args = arguments.length < 2 ? false : slice.call(arguments, 1);\n\n immediateIds[id] = true;\n\n nextTick(function onNextTick() {\n if (immediateIds[id]) {\n // fn.call() is faster so we optimize for the common use-case\n // @see http://jsperf.com/call-apply-segu\n if (args) {\n fn.apply(null, args);\n } else {\n fn.call(null);\n }\n // Prevent ids from leaking\n exports.clearImmediate(id);\n }\n });\n\n return id;\n};\n\nexports.clearImmediate = typeof clearImmediate === \"function\" ? clearImmediate : function(id) {\n delete immediateIds[id];\n};\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/timers-browserify/main.js\n ** module id = 5\n ** module chunks = 0\n **/","// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = setTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n setTimeout(drainQueue, 0);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/process/browser.js\n ** module id = 6\n ** module chunks = 0\n **/","module.exports = function(module) {\r\n\tif(!module.webpackPolyfill) {\r\n\t\tmodule.deprecate = function() {};\r\n\t\tmodule.paths = [];\r\n\t\t// module.parent = undefined by default\r\n\t\tmodule.children = [];\r\n\t\tmodule.webpackPolyfill = 1;\r\n\t}\r\n\treturn module;\r\n}\r\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** (webpack)/buildin/module.js\n ** module id = 7\n ** module chunks = 0\n **/","module.exports = function() { throw new Error(\"define cannot be used indirect\"); };\r\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** (webpack)/buildin/amd-define.js\n ** module id = 8\n ** module chunks = 0\n **/","(function() {\n 'use strict';\n\n if (self.fetch) {\n return\n }\n\n function normalizeName(name) {\n if (typeof name !== 'string') {\n name = String(name)\n }\n if (/[^a-z0-9\\-#$%&'*+.\\^_`|~]/i.test(name)) {\n throw new TypeError('Invalid character in header field name')\n }\n return name.toLowerCase()\n }\n\n function normalizeValue(value) {\n if (typeof value !== 'string') {\n value = String(value)\n }\n return value\n }\n\n function Headers(headers) {\n this.map = {}\n\n if (headers instanceof Headers) {\n headers.forEach(function(value, name) {\n this.append(name, value)\n }, this)\n\n } else if (headers) {\n Object.getOwnPropertyNames(headers).forEach(function(name) {\n this.append(name, headers[name])\n }, this)\n }\n }\n\n Headers.prototype.append = function(name, value) {\n name = normalizeName(name)\n value = normalizeValue(value)\n var list = this.map[name]\n if (!list) {\n list = []\n this.map[name] = list\n }\n list.push(value)\n }\n\n Headers.prototype['delete'] = function(name) {\n delete this.map[normalizeName(name)]\n }\n\n Headers.prototype.get = function(name) {\n var values = this.map[normalizeName(name)]\n return values ? values[0] : null\n }\n\n Headers.prototype.getAll = function(name) {\n return this.map[normalizeName(name)] || []\n }\n\n Headers.prototype.has = function(name) {\n return this.map.hasOwnProperty(normalizeName(name))\n }\n\n Headers.prototype.set = function(name, value) {\n this.map[normalizeName(name)] = [normalizeValue(value)]\n }\n\n Headers.prototype.forEach = function(callback, thisArg) {\n Object.getOwnPropertyNames(this.map).forEach(function(name) {\n this.map[name].forEach(function(value) {\n callback.call(thisArg, value, name, this)\n }, this)\n }, this)\n }\n\n function consumed(body) {\n if (body.bodyUsed) {\n return Promise.reject(new TypeError('Already read'))\n }\n body.bodyUsed = true\n }\n\n function fileReaderReady(reader) {\n return new Promise(function(resolve, reject) {\n reader.onload = function() {\n resolve(reader.result)\n }\n reader.onerror = function() {\n reject(reader.error)\n }\n })\n }\n\n function readBlobAsArrayBuffer(blob) {\n var reader = new FileReader()\n reader.readAsArrayBuffer(blob)\n return fileReaderReady(reader)\n }\n\n function readBlobAsText(blob) {\n var reader = new FileReader()\n reader.readAsText(blob)\n return fileReaderReady(reader)\n }\n\n var support = {\n blob: 'FileReader' in self && 'Blob' in self && (function() {\n try {\n new Blob();\n return true\n } catch(e) {\n return false\n }\n })(),\n formData: 'FormData' in self\n }\n\n function Body() {\n this.bodyUsed = false\n\n\n this._initBody = function(body) {\n this._bodyInit = body\n if (typeof body === 'string') {\n this._bodyText = body\n } else if (support.blob && Blob.prototype.isPrototypeOf(body)) {\n this._bodyBlob = body\n } else if (support.formData && FormData.prototype.isPrototypeOf(body)) {\n this._bodyFormData = body\n } else if (!body) {\n this._bodyText = ''\n } else {\n throw new Error('unsupported BodyInit type')\n }\n }\n\n if (support.blob) {\n this.blob = function() {\n var rejected = consumed(this)\n if (rejected) {\n return rejected\n }\n\n if (this._bodyBlob) {\n return Promise.resolve(this._bodyBlob)\n } else if (this._bodyFormData) {\n throw new Error('could not read FormData body as blob')\n } else {\n return Promise.resolve(new Blob([this._bodyText]))\n }\n }\n\n this.arrayBuffer = function() {\n return this.blob().then(readBlobAsArrayBuffer)\n }\n\n this.text = function() {\n var rejected = consumed(this)\n if (rejected) {\n return rejected\n }\n\n if (this._bodyBlob) {\n return readBlobAsText(this._bodyBlob)\n } else if (this._bodyFormData) {\n throw new Error('could not read FormData body as text')\n } else {\n return Promise.resolve(this._bodyText)\n }\n }\n } else {\n this.text = function() {\n var rejected = consumed(this)\n return rejected ? rejected : Promise.resolve(this._bodyText)\n }\n }\n\n if (support.formData) {\n this.formData = function() {\n return this.text().then(decode)\n }\n }\n\n this.json = function() {\n return this.text().then(JSON.parse)\n }\n\n return this\n }\n\n // HTTP methods whose capitalization should be normalized\n var methods = ['DELETE', 'GET', 'HEAD', 'OPTIONS', 'POST', 'PUT']\n\n function normalizeMethod(method) {\n var upcased = method.toUpperCase()\n return (methods.indexOf(upcased) > -1) ? upcased : method\n }\n\n function Request(input, options) {\n options = options || {}\n var body = options.body\n if (Request.prototype.isPrototypeOf(input)) {\n if (input.bodyUsed) {\n throw new TypeError('Already read')\n }\n this.url = input.url\n this.credentials = input.credentials\n if (!options.headers) {\n this.headers = new Headers(input.headers)\n }\n this.method = input.method\n this.mode = input.mode\n if (!body) {\n body = input._bodyInit\n input.bodyUsed = true\n }\n } else {\n this.url = input\n }\n\n this.credentials = options.credentials || this.credentials || 'omit'\n if (options.headers || !this.headers) {\n this.headers = new Headers(options.headers)\n }\n this.method = normalizeMethod(options.method || this.method || 'GET')\n this.mode = options.mode || this.mode || null\n this.referrer = null\n\n if ((this.method === 'GET' || this.method === 'HEAD') && body) {\n throw new TypeError('Body not allowed for GET or HEAD requests')\n }\n this._initBody(body)\n }\n\n function decode(body) {\n var form = new FormData()\n body.trim().split('&').forEach(function(bytes) {\n if (bytes) {\n var split = bytes.split('=')\n var name = split.shift().replace(/\\+/g, ' ')\n var value = split.join('=').replace(/\\+/g, ' ')\n form.append(decodeURIComponent(name), decodeURIComponent(value))\n }\n })\n return form\n }\n\n function headers(xhr) {\n var head = new Headers()\n var pairs = xhr.getAllResponseHeaders().trim().split('\\n')\n pairs.forEach(function(header) {\n var split = header.trim().split(':')\n var key = split.shift().trim()\n var value = split.join(':').trim()\n head.append(key, value)\n })\n return head\n }\n\n Body.call(Request.prototype)\n\n function Response(bodyInit, options) {\n if (!options) {\n options = {}\n }\n\n this._initBody(bodyInit)\n this.type = 'default'\n this.url = null\n this.status = options.status\n this.ok = this.status >= 200 && this.status < 300\n this.statusText = options.statusText\n this.headers = options.headers instanceof Headers ? options.headers : new Headers(options.headers)\n this.url = options.url || ''\n }\n\n Body.call(Response.prototype)\n\n self.Headers = Headers;\n self.Request = Request;\n self.Response = Response;\n\n self.fetch = function(input, init) {\n var request\n if (Request.prototype.isPrototypeOf(input) && !init) {\n request = input\n } else {\n request = new Request(input, init)\n }\n\n return new Promise(function(resolve, reject) {\n var xhr = new XMLHttpRequest()\n\n function responseURL() {\n if ('responseURL' in xhr) {\n return xhr.responseURL\n }\n\n // Avoid security warnings on getResponseHeader when not allowed by CORS\n if (/^X-Request-URL:/m.test(xhr.getAllResponseHeaders())) {\n return xhr.getResponseHeader('X-Request-URL')\n }\n\n return;\n }\n\n xhr.onload = function() {\n var status = (xhr.status === 1223) ? 204 : xhr.status\n if (status < 100 || status > 599) {\n reject(new TypeError('Network request failed'))\n return\n }\n var options = {\n status: status,\n statusText: xhr.statusText,\n headers: headers(xhr),\n url: responseURL()\n }\n var body = 'response' in xhr ? xhr.response : xhr.responseText;\n resolve(new Response(body, options))\n }\n\n xhr.onerror = function() {\n reject(new TypeError('Network request failed'))\n }\n\n xhr.open(request.method, request.url, true)\n\n if (request.credentials === 'include') {\n xhr.withCredentials = true\n }\n\n if ('responseType' in xhr && support.blob) {\n xhr.responseType = 'blob'\n }\n\n request.headers.forEach(function(value, name) {\n xhr.setRequestHeader(name, value)\n })\n\n xhr.send(typeof request._bodyInit === 'undefined' ? null : request._bodyInit)\n })\n }\n self.fetch.polyfill = true\n})();\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./bower_components/fetch/fetch.js\n ** module id = 9\n ** module chunks = 0\n **/","// Version: 3.7.16\n/* =-====================================================================-= */\n/* =-====================================================================-= */\n/* =-========================= JSON =============================-= */\n/* =-====================================================================-= */\n/* =-====================================================================-= */\n\n(window['JSON'] && window['JSON']['stringify']) || (function () {\n window['JSON'] || (window['JSON'] = {});\n\n function toJSON(key) {\n try { return this.valueOf() }\n catch(e) { return null }\n }\n\n var cx = /[\\u0000\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g,\n escapable = /[\\\\\\\"\\x00-\\x1f\\x7f-\\x9f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g,\n gap,\n indent,\n meta = { // table of character substitutions\n '\\b': '\\\\b',\n '\\t': '\\\\t',\n '\\n': '\\\\n',\n '\\f': '\\\\f',\n '\\r': '\\\\r',\n '\"' : '\\\\\"',\n '\\\\': '\\\\\\\\'\n },\n rep;\n\n function quote(string) {\n escapable.lastIndex = 0;\n return escapable.test(string) ?\n '\"' + string.replace(escapable, function (a) {\n var c = meta[a];\n return typeof c === 'string' ? c :\n '\\\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);\n }) + '\"' :\n '\"' + string + '\"';\n }\n\n function str(key, holder) {\n var i, // The loop counter.\n k, // The member key.\n v, // The member value.\n length,\n partial,\n mind = gap,\n value = holder[key];\n\n if (value && typeof value === 'object') {\n value = toJSON.call( value, key );\n }\n\n if (typeof rep === 'function') {\n value = rep.call(holder, key, value);\n }\n\n switch (typeof value) {\n case 'string':\n return quote(value);\n\n case 'number':\n return isFinite(value) ? String(value) : 'null';\n\n case 'boolean':\n case 'null':\n return String(value);\n\n case 'object':\n\n if (!value) {\n return 'null';\n }\n\n gap += indent;\n partial = [];\n\n if (Object.prototype.toString.apply(value) === '[object Array]') {\n\n length = value.length;\n for (i = 0; i < length; i += 1) {\n partial[i] = str(i, value) || 'null';\n }\n\n v = partial.length === 0 ? '[]' :\n gap ? '[\\n' + gap +\n partial.join(',\\n' + gap) + '\\n' +\n mind + ']' :\n '[' + partial.join(',') + ']';\n gap = mind;\n return v;\n }\n if (rep && typeof rep === 'object') {\n length = rep.length;\n for (i = 0; i < length; i += 1) {\n k = rep[i];\n if (typeof k === 'string') {\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (gap ? ': ' : ':') + v);\n }\n }\n }\n } else {\n for (k in value) {\n if (Object.hasOwnProperty.call(value, k)) {\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (gap ? ': ' : ':') + v);\n }\n }\n }\n }\n\n v = partial.length === 0 ? '{}' :\n gap ? '{\\n' + gap + partial.join(',\\n' + gap) + '\\n' +\n mind + '}' : '{' + partial.join(',') + '}';\n gap = mind;\n return v;\n }\n }\n\n if (typeof JSON['stringify'] !== 'function') {\n JSON['stringify'] = function (value, replacer, space) {\n var i;\n gap = '';\n indent = '';\n\n if (typeof space === 'number') {\n for (i = 0; i < space; i += 1) {\n indent += ' ';\n }\n } else if (typeof space === 'string') {\n indent = space;\n }\n rep = replacer;\n if (replacer && typeof replacer !== 'function' &&\n (typeof replacer !== 'object' ||\n typeof replacer.length !== 'number')) {\n throw new Error('JSON.stringify');\n }\n return str('', {'': value});\n };\n }\n\n if (typeof JSON['parse'] !== 'function') {\n // JSON is parsed on the server for security.\n JSON['parse'] = function (text) {return eval('('+text+')')};\n }\n}());\n/* =-====================================================================-= */\n/* =-====================================================================-= */\n/* =-========================= UTIL =============================-= */\n/* =-====================================================================-= */\n/* =-====================================================================-= */\n\nwindow['PUBNUB'] || (function() {\nvar NOW = 1\n, READY = false\n, READY_BUFFER = []\n, PRESENCE_SUFFIX = '-pnpres'\n, DEF_WINDOWING = 10 // MILLISECONDS.\n, DEF_TIMEOUT = 10000 // MILLISECONDS.\n, DEF_SUB_TIMEOUT = 310 // SECONDS.\n, DEF_KEEPALIVE = 60 // SECONDS (FOR TIMESYNC).\n, SECOND = 1000 // A THOUSAND MILLISECONDS.\n, URLBIT = '/'\n, PARAMSBIT = '&'\n, PRESENCE_HB_THRESHOLD = 5\n, PRESENCE_HB_DEFAULT = 30\n, SDK_VER = '3.7.16'\n, REPL = /{([\\w\\-]+)}/g;\n\n/**\n * UTILITIES\n */\nfunction unique() { return'x'+ ++NOW+''+(+new Date) }\nfunction rnow() { return+new Date }\n\n/**\n * NEXTORIGIN\n * ==========\n * var next_origin = nextorigin();\n */\nvar nextorigin = (function() {\n var max = 20\n , ori = Math.floor(Math.random() * max);\n return function( origin, failover ) {\n return origin.indexOf('pubsub.') > 0\n && origin.replace(\n 'pubsub', 'ps' + (\n failover ? generate_uuid().split('-')[0] :\n (++ori < max? ori : ori=1)\n ) ) || origin;\n }\n})();\n\n\n/**\n * Build Url\n * =======\n *\n */\nfunction build_url( url_components, url_params ) {\n var url = url_components.join(URLBIT)\n , params = [];\n\n if (!url_params) return url;\n\n each( url_params, function( key, value ) {\n var value_str = (typeof value == 'object')?JSON['stringify'](value):value;\n (typeof value != 'undefined' &&\n value != null && encode(value_str).length > 0\n ) && params.push(key + \"=\" + encode(value_str));\n } );\n\n url += \"?\" + params.join(PARAMSBIT);\n return url;\n}\n\n/**\n * UPDATER\n * =======\n * var timestamp = unique();\n */\nfunction updater( fun, rate ) {\n var timeout\n , last = 0\n , runnit = function() {\n if (last + rate > rnow()) {\n clearTimeout(timeout);\n timeout = setTimeout( runnit, rate );\n }\n else {\n last = rnow();\n fun();\n }\n };\n\n return runnit;\n}\n\n/**\n * GREP\n * ====\n * var list = grep( [1,2,3], function(item) { return item % 2 } )\n */\nfunction grep( list, fun ) {\n var fin = [];\n each( list || [], function(l) { fun(l) && fin.push(l) } );\n return fin\n}\n\n/**\n * SUPPLANT\n * ========\n * var text = supplant( 'Hello {name}!', { name : 'John' } )\n */\nfunction supplant( str, values ) {\n return str.replace( REPL, function( _, match ) {\n return values[match] || _\n } );\n}\n\n/**\n * timeout\n * =======\n * timeout( function(){}, 100 );\n */\nfunction timeout( fun, wait ) {\n return setTimeout( fun, wait );\n}\n\n/**\n * uuid\n * ====\n * var my_uuid = generate_uuid();\n */\nfunction generate_uuid(callback) {\n var u = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g,\n function(c) {\n var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8);\n return v.toString(16);\n });\n if (callback) callback(u);\n return u;\n}\n\nfunction isArray(arg) {\n return !!arg && typeof arg !== 'string' && (Array.isArray && Array.isArray(arg) || typeof(arg.length) === \"number\")\n //return !!arg && (Array.isArray && Array.isArray(arg) || typeof(arg.length) === \"number\")\n}\n\n/**\n * EACH\n * ====\n * each( [1,2,3], function(item) { } )\n */\nfunction each( o, f) {\n if ( !o || !f ) return;\n\n if ( isArray(o) )\n for ( var i = 0, l = o.length; i < l; )\n f.call( o[i], o[i], i++ );\n else\n for ( var i in o )\n o.hasOwnProperty &&\n o.hasOwnProperty(i) &&\n f.call( o[i], i, o[i] );\n}\n\n/**\n * MAP\n * ===\n * var list = map( [1,2,3], function(item) { return item + 1 } )\n */\nfunction map( list, fun ) {\n var fin = [];\n each( list || [], function( k, v ) { fin.push(fun( k, v )) } );\n return fin;\n}\n\n\nfunction pam_encode(str) {\n return encodeURIComponent(str).replace(/[!'()*~]/g, function(c) {\n return '%' + c.charCodeAt(0).toString(16).toUpperCase();\n });\n}\n\n/**\n * ENCODE\n * ======\n * var encoded_data = encode('path');\n */\nfunction encode(path) { return encodeURIComponent(path) }\n\n/**\n * Generate Subscription Channel List\n * ==================================\n * generate_channel_list(channels_object);\n */\nfunction generate_channel_list(channels, nopresence) {\n var list = [];\n each( channels, function( channel, status ) {\n if (nopresence) {\n if(channel.search('-pnpres') < 0) {\n if (status.subscribed) list.push(channel);\n }\n } else {\n if (status.subscribed) list.push(channel);\n }\n });\n return list.sort();\n}\n\n/**\n * Generate Subscription Channel Groups List\n * ==================================\n * generate_channel_group_list(channels_groups object);\n */\nfunction generate_channel_group_list(channel_groups, nopresence) {\n var list = [];\n each(channel_groups, function( channel_group, status ) {\n if (nopresence) {\n if(channel_group.search('-pnpres') < 0) {\n if (status.subscribed) list.push(channel_group);\n }\n } else {\n if (status.subscribed) list.push(channel_group);\n }\n });\n return list.sort();\n}\n\n// PUBNUB READY TO CONNECT\nfunction ready() { timeout( function() {\n if (READY) return;\n READY = 1;\n each( READY_BUFFER, function(connect) { connect() } );\n}, SECOND ); }\n\nfunction PNmessage(args) {\n msg = args || {'apns' : {}},\n msg['getPubnubMessage'] = function() {\n var m = {};\n\n if (Object.keys(msg['apns']).length) {\n m['pn_apns'] = {\n 'aps' : {\n 'alert' : msg['apns']['alert'] ,\n 'badge' : msg['apns']['badge']\n }\n }\n for (var k in msg['apns']) {\n m['pn_apns'][k] = msg['apns'][k];\n }\n var exclude1 = ['badge','alert'];\n for (var k in exclude1) {\n delete m['pn_apns'][exclude1[k]];\n }\n }\n\n\n\n if (msg['gcm']) {\n m['pn_gcm'] = {\n 'data' : msg['gcm']\n }\n }\n\n for (var k in msg) {\n m[k] = msg[k];\n }\n var exclude = ['apns','gcm','publish', 'channel','callback','error'];\n for (var k in exclude) {\n delete m[exclude[k]];\n }\n\n return m;\n };\n msg['publish'] = function() {\n\n var m = msg.getPubnubMessage();\n\n if (msg['pubnub'] && msg['channel']) {\n msg['pubnub'].publish({\n 'message' : m,\n 'channel' : msg['channel'],\n 'callback' : msg['callback'],\n 'error' : msg['error']\n })\n }\n };\n return msg;\n}\n\nfunction PN_API(setup) {\n var SUB_WINDOWING = +setup['windowing'] || DEF_WINDOWING\n , SUB_TIMEOUT = (+setup['timeout'] || DEF_SUB_TIMEOUT) * SECOND\n , KEEPALIVE = (+setup['keepalive'] || DEF_KEEPALIVE) * SECOND\n , TIME_CHECK = setup['timecheck'] || 0\n , NOLEAVE = setup['noleave'] || 0\n , PUBLISH_KEY = setup['publish_key']\n , SUBSCRIBE_KEY = setup['subscribe_key']\n , AUTH_KEY = setup['auth_key'] || ''\n , SECRET_KEY = setup['secret_key'] || ''\n , hmac_SHA256 = setup['hmac_SHA256']\n , SSL = setup['ssl'] ? 's' : ''\n , ORIGIN = 'http'+SSL+'://'+(setup['origin']||'pubsub.pubnub.com')\n , STD_ORIGIN = nextorigin(ORIGIN)\n , SUB_ORIGIN = nextorigin(ORIGIN)\n , CONNECT = function(){}\n , PUB_QUEUE = []\n , CLOAK = true\n , TIME_DRIFT = 0\n , SUB_CALLBACK = 0\n , SUB_CHANNEL = 0\n , SUB_RECEIVER = 0\n , SUB_RESTORE = setup['restore'] || 0\n , SUB_BUFF_WAIT = 0\n , TIMETOKEN = 0\n , RESUMED = false\n , CHANNELS = {}\n , CHANNEL_GROUPS = {}\n , SUB_ERROR = function(){}\n , STATE = {}\n , PRESENCE_HB_TIMEOUT = null\n , PRESENCE_HB = validate_presence_heartbeat(\n setup['heartbeat'] || setup['pnexpires'] || 0, setup['error']\n )\n , PRESENCE_HB_INTERVAL = setup['heartbeat_interval'] || (PRESENCE_HB / 2) -1\n , PRESENCE_HB_RUNNING = false\n , NO_WAIT_FOR_PENDING = setup['no_wait_for_pending']\n , COMPATIBLE_35 = setup['compatible_3.5'] || false\n , xdr = setup['xdr']\n , params = setup['params'] || {}\n , error = setup['error'] || function() {}\n , _is_online = setup['_is_online'] || function() { return 1 }\n , jsonp_cb = setup['jsonp_cb'] || function() { return 0 }\n , db = setup['db'] || {'get': function(){}, 'set': function(){}}\n , CIPHER_KEY = setup['cipher_key']\n , UUID = setup['uuid'] || ( !setup['unique_uuid'] && db && db['get'](SUBSCRIBE_KEY+'uuid') || '')\n , USE_INSTANCEID = setup['instance_id'] || false\n , INSTANCEID = ''\n , shutdown = setup['shutdown']\n , use_send_beacon = (typeof setup['use_send_beacon'] != 'undefined')?setup['use_send_beacon']:true\n , sendBeacon = (use_send_beacon)?setup['sendBeacon']:null\n , _poll_timer\n , _poll_timer2;\n\n if (PRESENCE_HB === 2) PRESENCE_HB_INTERVAL = 1;\n\n var crypto_obj = setup['crypto_obj'] ||\n {\n 'encrypt' : function(a,key){ return a},\n 'decrypt' : function(b,key){return b}\n };\n\n function _get_url_params(data) {\n if (!data) data = {};\n each( params , function( key, value ) {\n if (!(key in data)) data[key] = value;\n });\n return data;\n }\n\n function _object_to_key_list(o) {\n var l = []\n each( o , function( key, value ) {\n l.push(key);\n });\n return l;\n }\n function _object_to_key_list_sorted(o) {\n return _object_to_key_list(o).sort();\n }\n\n function _get_pam_sign_input_from_params(params) {\n var si = \"\";\n var l = _object_to_key_list_sorted(params);\n\n for (var i in l) {\n var k = l[i]\n si += k + \"=\" + pam_encode(params[k]) ;\n if (i != l.length - 1) si += \"&\"\n }\n return si;\n }\n\n function validate_presence_heartbeat(heartbeat, cur_heartbeat, error) {\n var err = false;\n\n if (typeof heartbeat === 'undefined') {\n return cur_heartbeat;\n }\n\n if (typeof heartbeat === 'number') {\n if (heartbeat > PRESENCE_HB_THRESHOLD || heartbeat == 0)\n err = false;\n else\n err = true;\n } else if(typeof heartbeat === 'boolean'){\n if (!heartbeat) {\n return 0;\n } else {\n return PRESENCE_HB_DEFAULT;\n }\n } else {\n err = true;\n }\n\n if (err) {\n error && error(\"Presence Heartbeat value invalid. Valid range ( x > \" + PRESENCE_HB_THRESHOLD + \" or x = 0). Current Value : \" + (cur_heartbeat || PRESENCE_HB_THRESHOLD));\n return cur_heartbeat || PRESENCE_HB_THRESHOLD;\n } else return heartbeat;\n }\n\n function encrypt(input, key) {\n return crypto_obj['encrypt'](input, key || CIPHER_KEY) || input;\n }\n function decrypt(input, key) {\n return crypto_obj['decrypt'](input, key || CIPHER_KEY) ||\n crypto_obj['decrypt'](input, CIPHER_KEY) ||\n input;\n }\n\n function error_common(message, callback) {\n callback && callback({ 'error' : message || \"error occurred\"});\n error && error(message);\n }\n function _presence_heartbeat() {\n\n clearTimeout(PRESENCE_HB_TIMEOUT);\n\n if (!PRESENCE_HB_INTERVAL || PRESENCE_HB_INTERVAL >= 500 ||\n PRESENCE_HB_INTERVAL < 1 ||\n (!generate_channel_list(CHANNELS,true).length && !generate_channel_group_list(CHANNEL_GROUPS, true).length ) )\n {\n PRESENCE_HB_RUNNING = false;\n return;\n }\n\n PRESENCE_HB_RUNNING = true;\n SELF['presence_heartbeat']({\n 'callback' : function(r) {\n PRESENCE_HB_TIMEOUT = timeout( _presence_heartbeat, (PRESENCE_HB_INTERVAL) * SECOND );\n },\n 'error' : function(e) {\n error && error(\"Presence Heartbeat unable to reach Pubnub servers.\" + JSON.stringify(e));\n PRESENCE_HB_TIMEOUT = timeout( _presence_heartbeat, (PRESENCE_HB_INTERVAL) * SECOND );\n }\n });\n }\n\n function start_presence_heartbeat() {\n !PRESENCE_HB_RUNNING && _presence_heartbeat();\n }\n\n function publish(next) {\n\n if (NO_WAIT_FOR_PENDING) {\n if (!PUB_QUEUE.length) return;\n } else {\n if (next) PUB_QUEUE.sending = 0;\n if ( PUB_QUEUE.sending || !PUB_QUEUE.length ) return;\n PUB_QUEUE.sending = 1;\n }\n\n xdr(PUB_QUEUE.shift());\n }\n function each_channel_group(callback) {\n var count = 0;\n\n each( generate_channel_group_list(CHANNEL_GROUPS), function(channel_group) {\n var chang = CHANNEL_GROUPS[channel_group];\n\n if (!chang) return;\n\n count++;\n (callback||function(){})(chang);\n } );\n\n return count;\n }\n\n function each_channel(callback) {\n var count = 0;\n\n each( generate_channel_list(CHANNELS), function(channel) {\n var chan = CHANNELS[channel];\n\n if (!chan) return;\n\n count++;\n (callback||function(){})(chan);\n } );\n\n return count;\n }\n function _invoke_callback(response, callback, err) {\n if (typeof response == 'object') {\n if (response['error']) {\n var callback_data = {};\n\n if (response['message']) {\n callback_data['message'] = response['message'];\n }\n\n if (response['payload']) {\n callback_data['payload'] = response['payload'];\n }\n\n err && err(callback_data);\n return;\n\n }\n if (response['payload']) {\n if (response['next_page'])\n callback && callback(response['payload'], response['next_page']);\n else\n callback && callback(response['payload']);\n return;\n }\n }\n callback && callback(response);\n }\n\n function _invoke_error(response,err) {\n\n if (typeof response == 'object' && response['error']) {\n var callback_data = {};\n\n if (response['message']) {\n callback_data['message'] = response['message'];\n }\n\n if (response['payload']) {\n callback_data['payload'] = response['payload'];\n }\n \n err && err(callback_data);\n return;\n } else {\n err && err(response);\n }\n }\n function CR(args, callback, url1, data) {\n var callback = args['callback'] || callback\n , err = args['error'] || error\n , jsonp = jsonp_cb();\n\n data = data || {};\n \n if (!data['auth']) {\n data['auth'] = args['auth_key'] || AUTH_KEY;\n }\n \n var url = [\n STD_ORIGIN, 'v1', 'channel-registration',\n 'sub-key', SUBSCRIBE_KEY\n ];\n\n url.push.apply(url,url1);\n \n if (jsonp) data['callback'] = jsonp;\n \n xdr({\n callback : jsonp,\n data : _get_url_params(data),\n success : function(response) {\n _invoke_callback(response, callback, err);\n },\n fail : function(response) {\n _invoke_error(response, err);\n },\n url : url\n });\n\n }\n\n // Announce Leave Event\n var SELF = {\n 'LEAVE' : function( channel, blocking, auth_key, callback, error ) {\n\n var data = { 'uuid' : UUID, 'auth' : auth_key || AUTH_KEY }\n , origin = nextorigin(ORIGIN)\n , callback = callback || function(){}\n , err = error || function(){}\n , url\n , params\n , jsonp = jsonp_cb();\n\n // Prevent Leaving a Presence Channel\n if (channel.indexOf(PRESENCE_SUFFIX) > 0) return true;\n\n\n if (COMPATIBLE_35) {\n if (!SSL) return false;\n if (jsonp == '0') return false;\n }\n\n if (NOLEAVE) return false;\n\n if (jsonp != '0') data['callback'] = jsonp;\n\n if (USE_INSTANCEID) data['instanceid'] = INSTANCEID;\n\n url = [\n origin, 'v2', 'presence', 'sub_key',\n SUBSCRIBE_KEY, 'channel', encode(channel), 'leave'\n ];\n\n params = _get_url_params(data);\n\n\n if (sendBeacon) {\n url_string = build_url(url, params);\n if (sendBeacon(url_string)) {\n callback && callback({\"status\": 200, \"action\": \"leave\", \"message\": \"OK\", \"service\": \"Presence\"});\n return true;\n }\n }\n\n\n xdr({\n blocking : blocking || SSL,\n timeout : 2000,\n callback : jsonp,\n data : params,\n success : function(response) {\n _invoke_callback(response, callback, err);\n },\n fail : function(response) {\n _invoke_error(response, err);\n },\n url : url\n });\n return true;\n },\n 'LEAVE_GROUP' : function( channel_group, blocking, auth_key, callback, error ) {\n\n var data = { 'uuid' : UUID, 'auth' : auth_key || AUTH_KEY }\n , origin = nextorigin(ORIGIN)\n , url\n , params\n , callback = callback || function(){}\n , err = error || function(){}\n , jsonp = jsonp_cb();\n\n // Prevent Leaving a Presence Channel Group\n if (channel_group.indexOf(PRESENCE_SUFFIX) > 0) return true;\n\n if (COMPATIBLE_35) {\n if (!SSL) return false;\n if (jsonp == '0') return false;\n }\n\n if (NOLEAVE) return false;\n\n if (jsonp != '0') data['callback'] = jsonp;\n\n if (channel_group && channel_group.length > 0) data['channel-group'] = channel_group;\n\n if (USE_INSTANCEID) data['instanceid'] = INSTANCEID;\n\n url = [\n origin, 'v2', 'presence', 'sub_key',\n SUBSCRIBE_KEY, 'channel', encode(','), 'leave'\n ];\n\n params = _get_url_params(data);\n\n if (sendBeacon) {\n url_string = build_url(url, params);\n if (sendBeacon(url_string)) {\n callback && callback({\"status\": 200, \"action\": \"leave\", \"message\": \"OK\", \"service\": \"Presence\"});\n return true;\n }\n }\n\n xdr({\n blocking : blocking || SSL,\n timeout : 5000,\n callback : jsonp,\n data : params,\n success : function(response) {\n _invoke_callback(response, callback, err);\n },\n fail : function(response) {\n _invoke_error(response, err);\n },\n url : url\n });\n return true;\n },\n 'set_resumed' : function(resumed) {\n RESUMED = resumed;\n },\n 'get_cipher_key' : function() {\n return CIPHER_KEY;\n },\n 'set_cipher_key' : function(key) {\n CIPHER_KEY = key;\n },\n 'raw_encrypt' : function(input, key) {\n return encrypt(input, key);\n },\n 'raw_decrypt' : function(input, key) {\n return decrypt(input, key);\n },\n 'get_heartbeat' : function() {\n return PRESENCE_HB;\n },\n \n 'set_heartbeat' : function(heartbeat, heartbeat_interval) {\n PRESENCE_HB = validate_presence_heartbeat(heartbeat, PRESENCE_HB, error);\n PRESENCE_HB_INTERVAL = heartbeat_interval || (PRESENCE_HB / 2) - 1;\n if (PRESENCE_HB == 2) {\n PRESENCE_HB_INTERVAL = 1;\n }\n CONNECT();\n _presence_heartbeat();\n },\n \n 'get_heartbeat_interval' : function() {\n return PRESENCE_HB_INTERVAL;\n },\n \n 'set_heartbeat_interval' : function(heartbeat_interval) {\n PRESENCE_HB_INTERVAL = heartbeat_interval;\n _presence_heartbeat();\n },\n \n 'get_version' : function() {\n return SDK_VER;\n },\n 'getGcmMessageObject' : function(obj) {\n return {\n 'data' : obj\n }\n },\n 'getApnsMessageObject' : function(obj) {\n var x = {\n 'aps' : { 'badge' : 1, 'alert' : ''}\n }\n for (k in obj) {\n k[x] = obj[k];\n }\n return x;\n },\n 'newPnMessage' : function() {\n var x = {};\n if (gcm) x['pn_gcm'] = gcm;\n if (apns) x['pn_apns'] = apns;\n for ( k in n ) {\n x[k] = n[k];\n }\n return x;\n },\n\n '_add_param' : function(key,val) {\n params[key] = val;\n },\n\n 'channel_group' : function(args, callback) {\n var ns_ch = args['channel_group']\n , callback = callback || args['callback']\n , channels = args['channels'] || args['channel']\n , cloak = args['cloak']\n , namespace\n , channel_group\n , url = []\n , data = {}\n , mode = args['mode'] || 'add';\n\n\n if (ns_ch) {\n var ns_ch_a = ns_ch.split(':');\n\n if (ns_ch_a.length > 1) {\n namespace = (ns_ch_a[0] === '*')?null:ns_ch_a[0];\n\n channel_group = ns_ch_a[1];\n } else {\n channel_group = ns_ch_a[0];\n }\n }\n\n namespace && url.push('namespace') && url.push(encode(namespace));\n\n url.push('channel-group');\n\n if (channel_group && channel_group !== '*') {\n url.push(channel_group);\n }\n\n if (channels ) {\n if (isArray(channels)) {\n channels = channels.join(',');\n }\n data[mode] = channels;\n data['cloak'] = (CLOAK)?'true':'false';\n } else {\n if (mode === 'remove') url.push('remove');\n }\n\n if (typeof cloak != 'undefined') data['cloak'] = (cloak)?'true':'false';\n\n CR(args, callback, url, data);\n },\n\n 'channel_group_list_groups' : function(args, callback) {\n var namespace;\n\n namespace = args['namespace'] || args['ns'] || args['channel_group'] || null;\n if (namespace) {\n args[\"channel_group\"] = namespace + \":*\";\n }\n\n SELF['channel_group'](args, callback);\n },\n\n 'channel_group_list_channels' : function(args, callback) {\n if (!args['channel_group']) return error('Missing Channel Group');\n SELF['channel_group'](args, callback);\n },\n\n 'channel_group_remove_channel' : function(args, callback) {\n if (!args['channel_group']) return error('Missing Channel Group');\n if (!args['channel'] && !args['channels'] ) return error('Missing Channel');\n\n args['mode'] = 'remove';\n SELF['channel_group'](args,callback);\n },\n\n 'channel_group_remove_group' : function(args, callback) {\n if (!args['channel_group']) return error('Missing Channel Group');\n if (args['channel']) return error('Use channel_group_remove_channel if you want to remove a channel from a group.');\n\n args['mode'] = 'remove';\n SELF['channel_group'](args,callback);\n },\n\n 'channel_group_add_channel' : function(args, callback) {\n if (!args['channel_group']) return error('Missing Channel Group');\n if (!args['channel'] && !args['channels'] ) return error('Missing Channel');\n SELF['channel_group'](args,callback);\n },\n\n 'channel_group_cloak' : function(args, callback) {\n if (typeof args['cloak'] == 'undefined') {\n callback(CLOAK);\n return;\n }\n CLOAK = args['cloak'];\n SELF['channel_group'](args,callback);\n },\n\n 'channel_group_list_namespaces' : function(args, callback) {\n var url = ['namespace'];\n CR(args, callback, url);\n },\n 'channel_group_remove_namespace' : function(args, callback) {\n var url = ['namespace',args['namespace'],'remove'];\n CR(args, callback, url);\n },\n\n /*\n PUBNUB.history({\n channel : 'my_chat_channel',\n limit : 100,\n callback : function(history) { }\n });\n */\n 'history' : function( args, callback ) {\n var callback = args['callback'] || callback\n , count = args['count'] || args['limit'] || 100\n , reverse = args['reverse'] || \"false\"\n , err = args['error'] || function(){}\n , auth_key = args['auth_key'] || AUTH_KEY\n , cipher_key = args['cipher_key']\n , channel = args['channel']\n , channel_group = args['channel_group']\n , start = args['start']\n , end = args['end']\n , include_token = args['include_token']\n , string_msg_token = args['string_message_token'] || false\n , params = {}\n , jsonp = jsonp_cb();\n\n // Make sure we have a Channel\n if (!channel && !channel_group) return error('Missing Channel');\n if (!callback) return error('Missing Callback');\n if (!SUBSCRIBE_KEY) return error('Missing Subscribe Key');\n\n params['stringtoken'] = 'true';\n params['count'] = count;\n params['reverse'] = reverse;\n params['auth'] = auth_key;\n\n if (channel_group) {\n params['channel-group'] = channel_group;\n if (!channel) {\n channel = ','; \n }\n }\n if (jsonp) params['callback'] = jsonp;\n if (start) params['start'] = start;\n if (end) params['end'] = end;\n if (include_token) params['include_token'] = 'true';\n if (string_msg_token) params['string_message_token'] = 'true';\n\n // Send Message\n xdr({\n callback : jsonp,\n data : _get_url_params(params),\n success : function(response) {\n if (typeof response == 'object' && response['error']) {\n err({'message' : response['message'], 'payload' : response['payload']});\n return;\n }\n var messages = response[0];\n var decrypted_messages = [];\n for (var a = 0; a < messages.length; a++) {\n if (include_token) {\n var new_message = decrypt(messages[a]['message'],cipher_key);\n var timetoken = messages[a]['timetoken'];\n try {\n decrypted_messages['push']({\"message\" : JSON['parse'](new_message), \"timetoken\" : timetoken});\n } catch (e) {\n decrypted_messages['push'](({\"message\" : new_message, \"timetoken\" : timetoken}));\n }\n } else {\n var new_message = decrypt(messages[a],cipher_key);\n try {\n decrypted_messages['push'](JSON['parse'](new_message));\n } catch (e) {\n decrypted_messages['push']((new_message));\n } \n }\n }\n callback([decrypted_messages, response[1], response[2]]);\n },\n fail : function(response) {\n _invoke_error(response, err);\n },\n url : [\n STD_ORIGIN, 'v2', 'history', 'sub-key',\n SUBSCRIBE_KEY, 'channel', encode(channel)\n ]\n });\n },\n\n /*\n PUBNUB.replay({\n source : 'my_channel',\n destination : 'new_channel'\n });\n */\n 'replay' : function(args, callback) {\n var callback = callback || args['callback'] || function(){}\n , auth_key = args['auth_key'] || AUTH_KEY\n , source = args['source']\n , destination = args['destination']\n , stop = args['stop']\n , start = args['start']\n , end = args['end']\n , reverse = args['reverse']\n , limit = args['limit']\n , jsonp = jsonp_cb()\n , data = {}\n , url;\n\n // Check User Input\n if (!source) return error('Missing Source Channel');\n if (!destination) return error('Missing Destination Channel');\n if (!PUBLISH_KEY) return error('Missing Publish Key');\n if (!SUBSCRIBE_KEY) return error('Missing Subscribe Key');\n\n // Setup URL Params\n if (jsonp != '0') data['callback'] = jsonp;\n if (stop) data['stop'] = 'all';\n if (reverse) data['reverse'] = 'true';\n if (start) data['start'] = start;\n if (end) data['end'] = end;\n if (limit) data['count'] = limit;\n\n data['auth'] = auth_key;\n\n // Compose URL Parts\n url = [\n STD_ORIGIN, 'v1', 'replay',\n PUBLISH_KEY, SUBSCRIBE_KEY,\n source, destination\n ];\n\n // Start (or Stop) Replay!\n xdr({\n callback : jsonp,\n success : function(response) {\n _invoke_callback(response, callback, err);\n },\n fail : function() { callback([ 0, 'Disconnected' ]) },\n url : url,\n data : _get_url_params(data)\n });\n },\n\n /*\n PUBNUB.auth('AJFLKAJSDKLA');\n */\n 'auth' : function(auth) {\n AUTH_KEY = auth;\n CONNECT();\n },\n\n /*\n PUBNUB.time(function(time){ });\n */\n 'time' : function(callback) {\n var jsonp = jsonp_cb();\n\n var data = { 'uuid' : UUID, 'auth' : AUTH_KEY }\n\n if (USE_INSTANCEID) data['instanceid'] = INSTANCEID;\n\n xdr({\n callback : jsonp,\n data : _get_url_params(data),\n timeout : SECOND * 5,\n url : [STD_ORIGIN, 'time', jsonp],\n success : function(response) { callback(response[0]) },\n fail : function() { callback(0) }\n });\n },\n\n /*\n PUBNUB.publish({\n channel : 'my_chat_channel',\n message : 'hello!'\n });\n */\n 'publish' : function( args, callback ) {\n var msg = args['message'];\n if (!msg) return error('Missing Message');\n\n var callback = callback || args['callback'] || msg['callback'] || function(){}\n , channel = args['channel'] || msg['channel']\n , auth_key = args['auth_key'] || AUTH_KEY\n , cipher_key = args['cipher_key']\n , err = args['error'] || msg['error'] || function() {}\n , post = args['post'] || false\n , store = ('store_in_history' in args) ? args['store_in_history']: true\n , jsonp = jsonp_cb()\n , add_msg = 'push'\n , params\n , url;\n\n if (args['prepend']) add_msg = 'unshift'\n\n if (!channel) return error('Missing Channel');\n if (!PUBLISH_KEY) return error('Missing Publish Key');\n if (!SUBSCRIBE_KEY) return error('Missing Subscribe Key');\n\n if (msg['getPubnubMessage']) {\n msg = msg['getPubnubMessage']();\n }\n\n // If trying to send Object\n msg = JSON['stringify'](encrypt(msg, cipher_key));\n\n // Create URL\n url = [\n STD_ORIGIN, 'publish',\n PUBLISH_KEY, SUBSCRIBE_KEY,\n 0, encode(channel),\n jsonp, encode(msg)\n ];\n\n params = { 'uuid' : UUID, 'auth' : auth_key }\n\n if (!store) params['store'] =\"0\"\n\n if (USE_INSTANCEID) params['instanceid'] = INSTANCEID;\n\n // Queue Message Send\n PUB_QUEUE[add_msg]({\n callback : jsonp,\n timeout : SECOND * 5,\n url : url,\n data : _get_url_params(params),\n fail : function(response){\n _invoke_error(response, err);\n publish(1);\n },\n success : function(response) {\n _invoke_callback(response, callback, err);\n publish(1);\n },\n mode : (post)?'POST':'GET'\n });\n\n // Send Message\n publish();\n },\n\n /*\n PUBNUB.unsubscribe({ channel : 'my_chat' });\n */\n 'unsubscribe' : function(args, callback) {\n var channel = args['channel']\n , channel_group = args['channel_group']\n , auth_key = args['auth_key'] || AUTH_KEY\n , callback = callback || args['callback'] || function(){}\n , err = args['error'] || function(){};\n\n TIMETOKEN = 0;\n SUB_RESTORE = 1; // REVISIT !!!!\n\n if (channel) {\n\n // Prepare LeaveChannel(s)\n var leave_c = map( (\n channel.join ? channel.join(',') : ''+channel\n ).split(','), function(channel) {\n if (!CHANNELS[channel]) return;\n return channel;\n } ).join(',');\n\n // Prepare Channel(s)\n channel = map( (\n channel.join ? channel.join(',') : ''+channel\n ).split(','), function(channel) {\n if (!CHANNELS[channel]) return;\n return channel + ',' + channel + PRESENCE_SUFFIX;\n } ).join(',');\n\n // Iterate over Channels\n each(channel.split(','), function(ch) {\n if (!ch) return;\n CHANNELS[ch] = 0;\n if (ch in STATE) delete STATE[ch];\n } );\n\n var CB_CALLED = true;\n if (READY) {\n CB_CALLED = SELF['LEAVE'](leave_c, 0 , auth_key, callback, err);\n }\n if (!CB_CALLED) callback({action : \"leave\"});\n }\n\n if (channel_group) {\n\n // Prepare channel group(s)\n var leave_gc = map( (\n channel_group.join ? channel_group.join(',') : ''+channel_group\n ).split(','), function(channel_group) {\n if (!CHANNEL_GROUPS[channel_group]) return;\n return channel_group;\n } ).join(',');\n\n // Prepare channel group(s)\n channel_group = map( (\n channel_group.join ? channel_group.join(',') : ''+channel_group\n ).split(','), function(channel_group) {\n if (!CHANNEL_GROUPS[channel_group]) return;\n return channel_group + ',' + channel_group + PRESENCE_SUFFIX;\n } ).join(',');\n\n // Iterate over channel groups\n each( channel_group.split(','), function(chg) {\n if (!chg) return;\n CHANNEL_GROUPS[chg] = 0;\n if (chg in STATE) delete STATE[chg];\n } );\n\n var CB_CALLED = true;\n if (READY) {\n CB_CALLED = SELF['LEAVE_GROUP'](leave_gc, 0 , auth_key, callback, err);\n }\n if (!CB_CALLED) callback({action : \"leave\"});\n }\n\n // Reset Connection if Count Less\n CONNECT();\n },\n\n /*\n PUBNUB.subscribe({\n channel : 'my_chat'\n callback : function(message) { }\n });\n */\n 'subscribe' : function( args, callback ) {\n var channel = args['channel']\n , channel_group = args['channel_group']\n , callback = callback || args['callback']\n , callback = callback || args['message']\n , connect = args['connect'] || function(){}\n , reconnect = args['reconnect'] || function(){}\n , disconnect = args['disconnect'] || function(){}\n , SUB_ERROR = args['error'] || SUB_ERROR || function(){}\n , idlecb = args['idle'] || function(){}\n , presence = args['presence'] || 0\n , noheresync = args['noheresync'] || 0\n , backfill = args['backfill'] || 0\n , timetoken = args['timetoken'] || 0\n , sub_timeout = args['timeout'] || SUB_TIMEOUT\n , windowing = args['windowing'] || SUB_WINDOWING\n , state = args['state']\n , heartbeat = args['heartbeat'] || args['pnexpires']\n , heartbeat_interval = args['heartbeat_interval']\n , restore = args['restore'] || SUB_RESTORE;\n\n AUTH_KEY = args['auth_key'] || AUTH_KEY;\n\n // Restore Enabled?\n SUB_RESTORE = restore;\n\n // Always Reset the TT\n TIMETOKEN = timetoken;\n\n // Make sure we have a Channel\n if (!channel && !channel_group) {\n return error('Missing Channel');\n }\n\n if (!callback) return error('Missing Callback');\n if (!SUBSCRIBE_KEY) return error('Missing Subscribe Key');\n\n if (heartbeat || heartbeat === 0 || heartbeat_interval || heartbeat_interval === 0) {\n SELF['set_heartbeat'](heartbeat, heartbeat_interval);\n }\n\n // Setup Channel(s)\n if (channel) {\n each( (channel.join ? channel.join(',') : ''+channel).split(','),\n function(channel) {\n var settings = CHANNELS[channel] || {};\n\n // Store Channel State\n CHANNELS[SUB_CHANNEL = channel] = {\n name : channel,\n connected : settings.connected,\n disconnected : settings.disconnected,\n subscribed : 1,\n callback : SUB_CALLBACK = callback,\n 'cipher_key' : args['cipher_key'],\n connect : connect,\n disconnect : disconnect,\n reconnect : reconnect\n };\n\n if (state) {\n if (channel in state) {\n STATE[channel] = state[channel];\n } else {\n STATE[channel] = state;\n }\n }\n\n // Presence Enabled?\n if (!presence) return;\n\n // Subscribe Presence Channel\n SELF['subscribe']({\n 'channel' : channel + PRESENCE_SUFFIX,\n 'callback' : presence,\n 'restore' : restore\n });\n\n // Presence Subscribed?\n if (settings.subscribed) return;\n\n // See Who's Here Now?\n if (noheresync) return;\n SELF['here_now']({\n 'channel' : channel,\n 'data' : _get_url_params({ 'uuid' : UUID, 'auth' : AUTH_KEY }),\n 'callback' : function(here) {\n each( 'uuids' in here ? here['uuids'] : [],\n function(uid) { presence( {\n 'action' : 'join',\n 'uuid' : uid,\n 'timestamp' : Math.floor(rnow() / 1000),\n 'occupancy' : here['occupancy'] || 1\n }, here, channel ); } );\n }\n });\n } );\n }\n\n // Setup Channel Groups\n if (channel_group) {\n each( (channel_group.join ? channel_group.join(',') : ''+channel_group).split(','),\n function(channel_group) {\n var settings = CHANNEL_GROUPS[channel_group] || {};\n\n CHANNEL_GROUPS[channel_group] = {\n name : channel_group,\n connected : settings.connected,\n disconnected : settings.disconnected,\n subscribed : 1,\n callback : SUB_CALLBACK = callback,\n 'cipher_key' : args['cipher_key'],\n connect : connect,\n disconnect : disconnect,\n reconnect : reconnect\n };\n\n // Presence Enabled?\n if (!presence) return;\n\n // Subscribe Presence Channel\n SELF['subscribe']({\n 'channel_group' : channel_group + PRESENCE_SUFFIX,\n 'callback' : presence,\n 'restore' : restore,\n 'auth_key' : AUTH_KEY\n });\n\n // Presence Subscribed?\n if (settings.subscribed) return;\n\n // See Who's Here Now?\n if (noheresync) return;\n SELF['here_now']({\n 'channel_group' : channel_group,\n 'data' : _get_url_params({ 'uuid' : UUID, 'auth' : AUTH_KEY }),\n 'callback' : function(here) {\n each( 'uuids' in here ? here['uuids'] : [],\n function(uid) { presence( {\n 'action' : 'join',\n 'uuid' : uid,\n 'timestamp' : Math.floor(rnow() / 1000),\n 'occupancy' : here['occupancy'] || 1\n }, here, channel_group ); } );\n }\n });\n } );\n }\n\n\n // Test Network Connection\n function _test_connection(success) {\n if (success) {\n // Begin Next Socket Connection\n timeout( CONNECT, windowing);\n }\n else {\n // New Origin on Failed Connection\n STD_ORIGIN = nextorigin( ORIGIN, 1 );\n SUB_ORIGIN = nextorigin( ORIGIN, 1 );\n\n // Re-test Connection\n timeout( function() {\n SELF['time'](_test_connection);\n }, SECOND );\n }\n\n // Disconnect & Reconnect\n each_channel(function(channel){\n // Reconnect\n if (success && channel.disconnected) {\n channel.disconnected = 0;\n return channel.reconnect(channel.name);\n }\n\n // Disconnect\n if (!success && !channel.disconnected) {\n channel.disconnected = 1;\n channel.disconnect(channel.name);\n }\n });\n \n // Disconnect & Reconnect for channel groups\n each_channel_group(function(channel_group){\n // Reconnect\n if (success && channel_group.disconnected) {\n channel_group.disconnected = 0;\n return channel_group.reconnect(channel_group.name);\n }\n\n // Disconnect\n if (!success && !channel_group.disconnected) {\n channel_group.disconnected = 1;\n channel_group.disconnect(channel_group.name);\n }\n });\n }\n\n // Evented Subscribe\n function _connect() {\n var jsonp = jsonp_cb()\n , channels = generate_channel_list(CHANNELS).join(',')\n , channel_groups = generate_channel_group_list(CHANNEL_GROUPS).join(',');\n\n // Stop Connection\n if (!channels && !channel_groups) return;\n\n if (!channels) channels = ',';\n\n // Connect to PubNub Subscribe Servers\n _reset_offline();\n\n var data = _get_url_params({ 'uuid' : UUID, 'auth' : AUTH_KEY });\n\n if (channel_groups) {\n data['channel-group'] = channel_groups;\n }\n\n\n var st = JSON.stringify(STATE);\n if (st.length > 2) data['state'] = JSON.stringify(STATE);\n\n if (PRESENCE_HB) data['heartbeat'] = PRESENCE_HB;\n\n if (USE_INSTANCEID) data['instanceid'] = INSTANCEID;\n\n start_presence_heartbeat();\n SUB_RECEIVER = xdr({\n timeout : sub_timeout,\n callback : jsonp,\n fail : function(response) {\n if (response && response['error'] && response['service']) {\n _invoke_error(response, SUB_ERROR);\n _test_connection(1);\n } else {\n SELF['time'](function(success){\n !success && ( _invoke_error(response, SUB_ERROR));\n _test_connection(success);\n });\n }\n },\n data : _get_url_params(data),\n url : [\n SUB_ORIGIN, 'subscribe',\n SUBSCRIBE_KEY, encode(channels),\n jsonp, TIMETOKEN\n ],\n success : function(messages) {\n\n // Check for Errors\n if (!messages || (\n typeof messages == 'object' &&\n 'error' in messages &&\n messages['error']\n )) {\n SUB_ERROR(messages['error']);\n return timeout( CONNECT, SECOND );\n }\n\n // User Idle Callback\n idlecb(messages[1]);\n\n // Restore Previous Connection Point if Needed\n TIMETOKEN = !TIMETOKEN &&\n SUB_RESTORE &&\n db['get'](SUBSCRIBE_KEY) || messages[1];\n\n /*\n // Connect\n each_channel_registry(function(registry){\n if (registry.connected) return;\n registry.connected = 1;\n registry.connect(channel.name);\n });\n */\n\n // Connect\n each_channel(function(channel){\n if (channel.connected) return;\n channel.connected = 1;\n channel.connect(channel.name);\n });\n\n // Connect for channel groups\n each_channel_group(function(channel_group){\n if (channel_group.connected) return;\n channel_group.connected = 1;\n channel_group.connect(channel_group.name);\n });\n\n if (RESUMED && !SUB_RESTORE) {\n TIMETOKEN = 0;\n RESUMED = false;\n // Update Saved Timetoken\n db['set']( SUBSCRIBE_KEY, 0 );\n timeout( _connect, windowing );\n return;\n }\n\n // Invoke Memory Catchup and Receive Up to 100\n // Previous Messages from the Queue.\n if (backfill) {\n TIMETOKEN = 10000;\n backfill = 0;\n }\n\n // Update Saved Timetoken\n db['set']( SUBSCRIBE_KEY, messages[1] );\n\n // Route Channel <---> Callback for Message\n var next_callback = (function() {\n var channels = '';\n var channels2 = '';\n\n if (messages.length > 3) {\n channels = messages[3];\n channels2 = messages[2];\n } else if (messages.length > 2) {\n channels = messages[2];\n } else {\n channels = map(\n generate_channel_list(CHANNELS), function(chan) { return map(\n Array(messages[0].length)\n .join(',').split(','),\n function() { return chan; }\n ) }).join(',')\n }\n\n var list = channels.split(',');\n var list2 = (channels2)?channels2.split(','):[];\n\n return function() {\n var channel = list.shift()||SUB_CHANNEL;\n var channel2 = list2.shift();\n\n var chobj = {};\n\n if (channel2) {\n if (channel && channel.indexOf('-pnpres') >= 0 \n && channel2.indexOf('-pnpres') < 0) {\n channel2 += '-pnpres';\n }\n chobj = CHANNEL_GROUPS[channel2] || CHANNELS[channel2] || {'callback' : function(){}};\n } else {\n chobj = CHANNELS[channel];\n }\n\n var r = [\n chobj\n .callback||SUB_CALLBACK,\n channel.split(PRESENCE_SUFFIX)[0]\n ];\n channel2 && r.push(channel2.split(PRESENCE_SUFFIX)[0]);\n return r;\n };\n })();\n\n var latency = detect_latency(+messages[1]);\n each( messages[0], function(msg) {\n var next = next_callback();\n var decrypted_msg = decrypt(msg,\n (CHANNELS[next[1]])?CHANNELS[next[1]]['cipher_key']:null);\n next[0] && next[0]( decrypted_msg, messages, next[2] || next[1], latency, next[1]);\n });\n\n timeout( _connect, windowing );\n }\n });\n }\n\n CONNECT = function() {\n _reset_offline();\n timeout( _connect, windowing );\n };\n\n // Reduce Status Flicker\n if (!READY) return READY_BUFFER.push(CONNECT);\n\n // Connect Now\n CONNECT();\n },\n\n /*\n PUBNUB.here_now({ channel : 'my_chat', callback : fun });\n */\n 'here_now' : function( args, callback ) {\n var callback = args['callback'] || callback\n , debug = args['debug']\n , err = args['error'] || function(){}\n , auth_key = args['auth_key'] || AUTH_KEY\n , channel = args['channel']\n , channel_group = args['channel_group']\n , jsonp = jsonp_cb()\n , uuids = ('uuids' in args) ? args['uuids'] : true\n , state = args['state']\n , data = { 'uuid' : UUID, 'auth' : auth_key };\n\n if (!uuids) data['disable_uuids'] = 1;\n if (state) data['state'] = 1;\n\n // Make sure we have a Channel\n if (!callback) return error('Missing Callback');\n if (!SUBSCRIBE_KEY) return error('Missing Subscribe Key');\n\n var url = [\n STD_ORIGIN, 'v2', 'presence',\n 'sub_key', SUBSCRIBE_KEY\n ];\n\n channel && url.push('channel') && url.push(encode(channel));\n\n if (jsonp != '0') { data['callback'] = jsonp; }\n\n if (channel_group) {\n data['channel-group'] = channel_group;\n !channel && url.push('channel') && url.push(','); \n }\n\n if (USE_INSTANCEID) data['instanceid'] = INSTANCEID;\n\n xdr({\n callback : jsonp,\n data : _get_url_params(data),\n success : function(response) {\n _invoke_callback(response, callback, err);\n },\n fail : function(response) {\n _invoke_error(response, err);\n },\n debug : debug,\n url : url\n });\n },\n\n /*\n PUBNUB.current_channels_by_uuid({ channel : 'my_chat', callback : fun });\n */\n 'where_now' : function( args, callback ) {\n var callback = args['callback'] || callback\n , err = args['error'] || function(){}\n , auth_key = args['auth_key'] || AUTH_KEY\n , jsonp = jsonp_cb()\n , uuid = args['uuid'] || UUID\n , data = { 'auth' : auth_key };\n\n // Make sure we have a Channel\n if (!callback) return error('Missing Callback');\n if (!SUBSCRIBE_KEY) return error('Missing Subscribe Key');\n\n if (jsonp != '0') { data['callback'] = jsonp; }\n\n if (USE_INSTANCEID) data['instanceid'] = INSTANCEID;\n\n xdr({\n callback : jsonp,\n data : _get_url_params(data),\n success : function(response) {\n _invoke_callback(response, callback, err);\n },\n fail : function(response) {\n _invoke_error(response, err);\n },\n url : [\n STD_ORIGIN, 'v2', 'presence',\n 'sub_key', SUBSCRIBE_KEY,\n 'uuid', encode(uuid)\n ]\n });\n },\n\n 'state' : function(args, callback) {\n var callback = args['callback'] || callback || function(r) {}\n , err = args['error'] || function(){}\n , auth_key = args['auth_key'] || AUTH_KEY\n , jsonp = jsonp_cb()\n , state = args['state']\n , uuid = args['uuid'] || UUID\n , channel = args['channel']\n , channel_group = args['channel_group']\n , url\n , data = _get_url_params({ 'auth' : auth_key });\n\n // Make sure we have a Channel\n if (!SUBSCRIBE_KEY) return error('Missing Subscribe Key');\n if (!uuid) return error('Missing UUID');\n if (!channel && !channel_group) return error('Missing Channel');\n\n if (jsonp != '0') { data['callback'] = jsonp; }\n\n if (typeof channel != 'undefined'\n && CHANNELS[channel] && CHANNELS[channel].subscribed ) {\n if (state) STATE[channel] = state;\n }\n\n if (typeof channel_group != 'undefined'\n && CHANNEL_GROUPS[channel_group]\n && CHANNEL_GROUPS[channel_group].subscribed\n ) {\n if (state) STATE[channel_group] = state;\n data['channel-group'] = channel_group;\n\n if (!channel) {\n channel = ',';\n }\n }\n\n data['state'] = JSON.stringify(state);\n\n if (USE_INSTANCEID) data['instanceid'] = INSTANCEID;\n\n if (state) {\n url = [\n STD_ORIGIN, 'v2', 'presence',\n 'sub-key', SUBSCRIBE_KEY,\n 'channel', channel,\n 'uuid', uuid, 'data'\n ]\n } else {\n url = [\n STD_ORIGIN, 'v2', 'presence',\n 'sub-key', SUBSCRIBE_KEY,\n 'channel', channel,\n 'uuid', encode(uuid)\n ]\n }\n\n xdr({\n callback : jsonp,\n data : _get_url_params(data),\n success : function(response) {\n _invoke_callback(response, callback, err);\n },\n fail : function(response) {\n _invoke_error(response, err);\n },\n url : url\n\n });\n\n },\n\n /*\n PUBNUB.grant({\n channel : 'my_chat',\n callback : fun,\n error : fun,\n ttl : 24 * 60, // Minutes\n read : true,\n write : true,\n auth_key : '3y8uiajdklytowsj'\n });\n */\n 'grant' : function( args, callback ) {\n var callback = args['callback'] || callback\n , err = args['error'] || function(){}\n , channel = args['channel'] || args['channels']\n , channel_group = args['channel_group']\n , jsonp = jsonp_cb()\n , ttl = args['ttl']\n , r = (args['read'] )?\"1\":\"0\"\n , w = (args['write'])?\"1\":\"0\"\n , m = (args['manage'])?\"1\":\"0\"\n , auth_key = args['auth_key'] || args['auth_keys'];\n\n if (!callback) return error('Missing Callback');\n if (!SUBSCRIBE_KEY) return error('Missing Subscribe Key');\n if (!PUBLISH_KEY) return error('Missing Publish Key');\n if (!SECRET_KEY) return error('Missing Secret Key');\n\n var timestamp = Math.floor(new Date().getTime() / 1000)\n , sign_input = SUBSCRIBE_KEY + \"\\n\" + PUBLISH_KEY + \"\\n\"\n + \"grant\" + \"\\n\";\n\n var data = {\n 'w' : w,\n 'r' : r,\n 'timestamp' : timestamp\n };\n if (args['manage']) {\n data['m'] = m;\n }\n if (isArray(channel)) {\n channel = channel['join'](',');\n }\n if (isArray(auth_key)) {\n auth_key = auth_key['join'](',');\n }\n if (typeof channel != 'undefined' && channel != null && channel.length > 0) data['channel'] = channel;\n if (typeof channel_group != 'undefined' && channel_group != null && channel_group.length > 0) {\n data['channel-group'] = channel_group;\n }\n if (jsonp != '0') { data['callback'] = jsonp; }\n if (ttl || ttl === 0) data['ttl'] = ttl;\n\n if (auth_key) data['auth'] = auth_key;\n\n data = _get_url_params(data)\n\n if (!auth_key) delete data['auth'];\n\n sign_input += _get_pam_sign_input_from_params(data);\n\n var signature = hmac_SHA256( sign_input, SECRET_KEY );\n\n signature = signature.replace( /\\+/g, \"-\" );\n signature = signature.replace( /\\//g, \"_\" );\n\n data['signature'] = signature;\n\n xdr({\n callback : jsonp,\n data : data,\n success : function(response) {\n _invoke_callback(response, callback, err);\n },\n fail : function(response) {\n _invoke_error(response, err);\n },\n url : [\n STD_ORIGIN, 'v1', 'auth', 'grant' ,\n 'sub-key', SUBSCRIBE_KEY\n ]\n });\n },\n\n /*\n PUBNUB.mobile_gw_provision ({\n device_id: 'A655FBA9931AB',\n op : 'add' | 'remove',\n gw_type : 'apns' | 'gcm',\n channel : 'my_chat',\n callback : fun,\n error : fun,\n });\n */\n\n 'mobile_gw_provision' : function( args ) {\n\n var callback = args['callback'] || function(){}\n , auth_key = args['auth_key'] || AUTH_KEY\n , err = args['error'] || function() {}\n , jsonp = jsonp_cb()\n , channel = args['channel']\n , op = args['op']\n , gw_type = args['gw_type']\n , device_id = args['device_id']\n , params\n , url;\n\n if (!device_id) return error('Missing Device ID (device_id)');\n if (!gw_type) return error('Missing GW Type (gw_type: gcm or apns)');\n if (!op) return error('Missing GW Operation (op: add or remove)');\n if (!channel) return error('Missing gw destination Channel (channel)');\n if (!PUBLISH_KEY) return error('Missing Publish Key');\n if (!SUBSCRIBE_KEY) return error('Missing Subscribe Key');\n\n // Create URL\n url = [\n STD_ORIGIN, 'v1/push/sub-key',\n SUBSCRIBE_KEY, 'devices', device_id\n ];\n\n params = { 'uuid' : UUID, 'auth' : auth_key, 'type': gw_type};\n\n if (op == \"add\") {\n params['add'] = channel;\n } else if (op == \"remove\") {\n params['remove'] = channel;\n }\n\n if (USE_INSTANCEID) data['instanceid'] = INSTANCEID;\n\n xdr({\n callback : jsonp,\n data : params,\n success : function(response) {\n _invoke_callback(response, callback, err);\n },\n fail : function(response) {\n _invoke_error(response, err);\n },\n url : url\n });\n\n },\n\n /*\n PUBNUB.audit({\n channel : 'my_chat',\n callback : fun,\n error : fun,\n read : true,\n write : true,\n auth_key : '3y8uiajdklytowsj'\n });\n */\n 'audit' : function( args, callback ) {\n var callback = args['callback'] || callback\n , err = args['error'] || function(){}\n , channel = args['channel']\n , channel_group = args['channel_group']\n , auth_key = args['auth_key']\n , jsonp = jsonp_cb();\n\n // Make sure we have a Channel\n if (!callback) return error('Missing Callback');\n if (!SUBSCRIBE_KEY) return error('Missing Subscribe Key');\n if (!PUBLISH_KEY) return error('Missing Publish Key');\n if (!SECRET_KEY) return error('Missing Secret Key');\n\n var timestamp = Math.floor(new Date().getTime() / 1000)\n , sign_input = SUBSCRIBE_KEY + \"\\n\"\n + PUBLISH_KEY + \"\\n\"\n + \"audit\" + \"\\n\";\n\n var data = {'timestamp' : timestamp };\n if (jsonp != '0') { data['callback'] = jsonp; }\n if (typeof channel != 'undefined' && channel != null && channel.length > 0) data['channel'] = channel;\n if (typeof channel_group != 'undefined' && channel_group != null && channel_group.length > 0) {\n data['channel-group'] = channel_group;\n }\n if (auth_key) data['auth'] = auth_key;\n\n data = _get_url_params(data);\n\n if (!auth_key) delete data['auth'];\n\n sign_input += _get_pam_sign_input_from_params(data);\n\n var signature = hmac_SHA256( sign_input, SECRET_KEY );\n\n signature = signature.replace( /\\+/g, \"-\" );\n signature = signature.replace( /\\//g, \"_\" );\n\n data['signature'] = signature;\n xdr({\n callback : jsonp,\n data : data,\n success : function(response) {\n _invoke_callback(response, callback, err);\n },\n fail : function(response) {\n _invoke_error(response, err);\n },\n url : [\n STD_ORIGIN, 'v1', 'auth', 'audit' ,\n 'sub-key', SUBSCRIBE_KEY\n ]\n });\n },\n\n /*\n PUBNUB.revoke({\n channel : 'my_chat',\n callback : fun,\n error : fun,\n auth_key : '3y8uiajdklytowsj'\n });\n */\n 'revoke' : function( args, callback ) {\n args['read'] = false;\n args['write'] = false;\n SELF['grant']( args, callback );\n },\n 'set_uuid' : function(uuid) {\n UUID = uuid;\n CONNECT();\n },\n 'get_uuid' : function() {\n return UUID;\n },\n 'isArray' : function(arg) {\n return isArray(arg);\n },\n 'get_subscibed_channels' : function() {\n return generate_channel_list(CHANNELS, true);\n },\n 'presence_heartbeat' : function(args) {\n var callback = args['callback'] || function() {}\n var err = args['error'] || function() {}\n var jsonp = jsonp_cb();\n var data = { 'uuid' : UUID, 'auth' : AUTH_KEY };\n\n var st = JSON['stringify'](STATE);\n if (st.length > 2) data['state'] = JSON['stringify'](STATE);\n\n if (PRESENCE_HB > 0 && PRESENCE_HB < 320) data['heartbeat'] = PRESENCE_HB;\n\n if (jsonp != '0') { data['callback'] = jsonp; }\n\n var channels = encode(generate_channel_list(CHANNELS, true)['join'](','));\n var channel_groups = generate_channel_group_list(CHANNEL_GROUPS, true)['join'](',');\n\n if (!channels) channels = ',';\n if (channel_groups) data['channel-group'] = channel_groups;\n\n if (USE_INSTANCEID) data['instanceid'] = INSTANCEID;\n\n xdr({\n callback : jsonp,\n data : _get_url_params(data),\n timeout : SECOND * 5,\n url : [\n STD_ORIGIN, 'v2', 'presence',\n 'sub-key', SUBSCRIBE_KEY,\n 'channel' , channels,\n 'heartbeat'\n ],\n success : function(response) {\n _invoke_callback(response, callback, err);\n },\n fail : function(response) { _invoke_error(response, err); }\n });\n },\n 'stop_timers': function () {\n clearTimeout(_poll_timer);\n clearTimeout(_poll_timer2);\n clearTimeout(PRESENCE_HB_TIMEOUT);\n },\n 'shutdown': function () {\n SELF['stop_timers']();\n shutdown && shutdown();\n },\n\n // Expose PUBNUB Functions\n 'xdr' : xdr,\n 'ready' : ready,\n 'db' : db,\n 'uuid' : generate_uuid,\n 'map' : map,\n 'each' : each,\n 'each-channel' : each_channel,\n 'grep' : grep,\n 'offline' : function(){ _reset_offline(\n 1, { \"message\" : \"Offline. Please check your network settings.\" })\n },\n 'supplant' : supplant,\n 'now' : rnow,\n 'unique' : unique,\n 'updater' : updater\n };\n\n function _poll_online() {\n _is_online() || _reset_offline( 1, {\n \"error\" : \"Offline. Please check your network settings. \"\n });\n _poll_timer && clearTimeout(_poll_timer);\n _poll_timer = timeout( _poll_online, SECOND );\n }\n\n function _poll_online2() {\n if (!TIME_CHECK) return;\n SELF['time'](function(success){\n detect_time_detla( function(){}, success );\n success || _reset_offline( 1, {\n \"error\" : \"Heartbeat failed to connect to Pubnub Servers.\" +\n \"Please check your network settings.\"\n });\n _poll_timer2 && clearTimeout(_poll_timer2);\n _poll_timer2 = timeout( _poll_online2, KEEPALIVE );\n });\n }\n\n function _reset_offline(err, msg) {\n SUB_RECEIVER && SUB_RECEIVER(err, msg);\n SUB_RECEIVER = null;\n\n clearTimeout(_poll_timer);\n clearTimeout(_poll_timer2);\n }\n \n if (!UUID) UUID = SELF['uuid']();\n if (!INSTANCEID) INSTANCEID = SELF['uuid']();\n db['set']( SUBSCRIBE_KEY + 'uuid', UUID );\n\n _poll_timer = timeout( _poll_online, SECOND );\n _poll_timer2 = timeout( _poll_online2, KEEPALIVE );\n PRESENCE_HB_TIMEOUT = timeout(\n start_presence_heartbeat,\n ( PRESENCE_HB_INTERVAL - 3 ) * SECOND\n );\n\n // Detect Age of Message\n function detect_latency(tt) {\n var adjusted_time = rnow() - TIME_DRIFT;\n return adjusted_time - tt / 10000;\n }\n\n detect_time_detla();\n function detect_time_detla( cb, time ) {\n var stime = rnow();\n\n time && calculate(time) || SELF['time'](calculate);\n\n function calculate(time) {\n if (!time) return;\n var ptime = time / 10000\n , latency = (rnow() - stime) / 2;\n TIME_DRIFT = rnow() - (ptime + latency);\n cb && cb(TIME_DRIFT);\n }\n }\n\n return SELF;\n}\nfunction crypto_obj() {\n\n function SHA256(s) {\n return CryptoJS['SHA256'](s)['toString'](CryptoJS['enc']['Hex']);\n }\n\n var iv = \"0123456789012345\";\n\n var allowedKeyEncodings = ['hex', 'utf8', 'base64', 'binary'];\n var allowedKeyLengths = [128, 256];\n var allowedModes = ['ecb', 'cbc'];\n\n var defaultOptions = {\n 'encryptKey': true,\n 'keyEncoding': 'utf8',\n 'keyLength': 256,\n 'mode': 'cbc'\n };\n\n function parse_options(options) {\n\n // Defaults\n options = options || {};\n if (!options['hasOwnProperty']('encryptKey')) options['encryptKey'] = defaultOptions['encryptKey'];\n if (!options['hasOwnProperty']('keyEncoding')) options['keyEncoding'] = defaultOptions['keyEncoding'];\n if (!options['hasOwnProperty']('keyLength')) options['keyLength'] = defaultOptions['keyLength'];\n if (!options['hasOwnProperty']('mode')) options['mode'] = defaultOptions['mode'];\n\n // Validation\n if (allowedKeyEncodings['indexOf'](options['keyEncoding']['toLowerCase']()) == -1) options['keyEncoding'] = defaultOptions['keyEncoding'];\n if (allowedKeyLengths['indexOf'](parseInt(options['keyLength'], 10)) == -1) options['keyLength'] = defaultOptions['keyLength'];\n if (allowedModes['indexOf'](options['mode']['toLowerCase']()) == -1) options['mode'] = defaultOptions['mode'];\n\n return options;\n\n }\n\n function decode_key(key, options) {\n if (options['keyEncoding'] == 'base64') {\n return CryptoJS['enc']['Base64']['parse'](key);\n } else if (options['keyEncoding'] == 'hex') {\n return CryptoJS['enc']['Hex']['parse'](key);\n } else {\n return key;\n }\n }\n\n function get_padded_key(key, options) {\n key = decode_key(key, options);\n if (options['encryptKey']) {\n return CryptoJS['enc']['Utf8']['parse'](SHA256(key)['slice'](0, 32));\n } else {\n return key;\n }\n }\n\n function get_mode(options) {\n if (options['mode'] == 'ecb') {\n return CryptoJS['mode']['ECB'];\n } else {\n return CryptoJS['mode']['CBC'];\n }\n }\n\n function get_iv(options) {\n return (options['mode'] == 'cbc') ? CryptoJS['enc']['Utf8']['parse'](iv) : null;\n }\n\n return {\n\n 'encrypt': function(data, key, options) {\n if (!key) return data;\n options = parse_options(options);\n var iv = get_iv(options);\n var mode = get_mode(options);\n var cipher_key = get_padded_key(key, options);\n var hex_message = JSON['stringify'](data);\n var encryptedHexArray = CryptoJS['AES']['encrypt'](hex_message, cipher_key, {'iv': iv, 'mode': mode})['ciphertext'];\n var base_64_encrypted = encryptedHexArray['toString'](CryptoJS['enc']['Base64']);\n return base_64_encrypted || data;\n },\n\n 'decrypt': function(data, key, options) {\n if (!key) return data;\n options = parse_options(options);\n var iv = get_iv(options);\n var mode = get_mode(options);\n var cipher_key = get_padded_key(key, options);\n try {\n var binary_enc = CryptoJS['enc']['Base64']['parse'](data);\n var json_plain = CryptoJS['AES']['decrypt']({'ciphertext': binary_enc}, cipher_key, {'iv': iv, 'mode': mode})['toString'](CryptoJS['enc']['Utf8']);\n var plaintext = JSON['parse'](json_plain);\n return plaintext;\n }\n catch (e) {\n return undefined;\n }\n }\n };\n}\n/**\n * UTIL LOCALS\n */\n\nvar SWF = 'https://pubnub.a.ssl.fastly.net/pubnub.swf'\n, ASYNC = 'async'\n, UA = navigator.userAgent\n, PNSDK = 'PubNub-JS-' + 'Web' + '/' + '3.7.16'\n, XORIGN = UA.indexOf('MSIE 6') == -1;\n\n/**\n * CONSOLE COMPATIBILITY\n */\nwindow.console || (window.console=window.console||{});\nconsole.log || (\n console.log =\n console.error =\n ((window.opera||{}).postError||function(){})\n);\n\n/**\n * LOCAL STORAGE OR COOKIE\n */\nvar db = (function(){\n var store = {};\n var ls = false;\n try {\n ls = window['localStorage'];\n } catch (e) { }\n var cookieGet = function(key) {\n if (document.cookie.indexOf(key) == -1) return null;\n return ((document.cookie||'').match(\n RegExp(key+'=([^;]+)')\n )||[])[1] || null;\n };\n var cookieSet = function( key, value ) {\n document.cookie = key + '=' + value +\n '; expires=Thu, 1 Aug 2030 20:00:00 UTC; path=/';\n };\n var cookieTest = (function() {\n try {\n cookieSet('pnctest', '1');\n return cookieGet('pnctest') === '1';\n } catch (e) {\n return false;\n }\n }());\n return {\n 'get' : function(key) {\n try {\n if (ls) return ls.getItem(key);\n if (cookieTest) return cookieGet(key);\n return store[key];\n } catch(e) {\n return store[key];\n }\n },\n 'set' : function( key, value ) {\n try {\n if (ls) return ls.setItem( key, value ) && 0;\n if (cookieTest) cookieSet( key, value );\n store[key] = value;\n } catch(e) {\n store[key] = value;\n }\n }\n };\n})();\n\nfunction get_hmac_SHA256(data,key) {\n var hash = CryptoJS['HmacSHA256'](data, key);\n return hash.toString(CryptoJS['enc']['Base64']);\n}\n\n/**\n * $\n * =\n * var div = $('divid');\n */\nfunction $(id) { return document.getElementById(id) }\n\n/**\n * ERROR\n * =====\n * error('message');\n */\nfunction error(message) { console['error'](message) }\n\n/**\n * SEARCH\n * ======\n * var elements = search('a div span');\n */\nfunction search( elements, start) {\n var list = [];\n each( elements.split(/\\s+/), function(el) {\n each( (start || document).getElementsByTagName(el), function(node) {\n list.push(node);\n } );\n });\n return list;\n}\n\n/**\n * BIND\n * ====\n * bind( 'keydown', search('a')[0], function(element) {\n * ...\n * } );\n */\nfunction bind( type, el, fun ) {\n each( type.split(','), function(etype) {\n var rapfun = function(e) {\n if (!e) e = window.event;\n if (!fun(e)) {\n e.cancelBubble = true;\n e.preventDefault && e.preventDefault();\n e.stopPropagation && e.stopPropagation();\n }\n };\n\n if ( el.addEventListener ) el.addEventListener( etype, rapfun, false );\n else if ( el.attachEvent ) el.attachEvent( 'on' + etype, rapfun );\n else el[ 'on' + etype ] = rapfun;\n } );\n}\n\n/**\n * UNBIND\n * ======\n * unbind( 'keydown', search('a')[0] );\n */\nfunction unbind( type, el, fun ) {\n if ( el.removeEventListener ) el.removeEventListener( type, false );\n else if ( el.detachEvent ) el.detachEvent( 'on' + type, false );\n else el[ 'on' + type ] = null;\n}\n\n/**\n * HEAD\n * ====\n * head().appendChild(elm);\n */\nfunction head() { return search('head')[0] }\n\n/**\n * ATTR\n * ====\n * var attribute = attr( node, 'attribute' );\n */\nfunction attr( node, attribute, value ) {\n if (value) node.setAttribute( attribute, value );\n else return node && node.getAttribute && node.getAttribute(attribute);\n}\n\n/**\n * CSS\n * ===\n * var obj = create('div');\n */\nfunction css( element, styles ) {\n for (var style in styles) if (styles.hasOwnProperty(style))\n try {element.style[style] = styles[style] + (\n '|width|height|top|left|'.indexOf(style) > 0 &&\n typeof styles[style] == 'number'\n ? 'px' : ''\n )}catch(e){}\n}\n\n/**\n * CREATE\n * ======\n * var obj = create('div');\n */\nfunction create(element) { return document.createElement(element) }\n\n\n/**\n * jsonp_cb\n * ========\n * var callback = jsonp_cb();\n */\nfunction jsonp_cb() { return XORIGN || FDomainRequest() ? 0 : unique() }\n\n\n\n/**\n * EVENTS\n * ======\n * PUBNUB.events.bind( 'you-stepped-on-flower', function(message) {\n * // Do Stuff with message\n * } );\n *\n * PUBNUB.events.fire( 'you-stepped-on-flower', \"message-data\" );\n * PUBNUB.events.fire( 'you-stepped-on-flower', {message:\"data\"} );\n * PUBNUB.events.fire( 'you-stepped-on-flower', [1,2,3] );\n *\n */\nvar events = {\n 'list' : {},\n 'unbind' : function( name ) { events.list[name] = [] },\n 'bind' : function( name, fun ) {\n (events.list[name] = events.list[name] || []).push(fun);\n },\n 'fire' : function( name, data ) {\n each(\n events.list[name] || [],\n function(fun) { fun(data) }\n );\n }\n};\n\n/**\n * XDR Cross Domain Request\n * ========================\n * xdr({\n * url : ['http://www.blah.com/url'],\n * success : function(response) {},\n * fail : function() {}\n * });\n */\nfunction xdr( setup ) {\n if (XORIGN || FDomainRequest()) return ajax(setup);\n\n var script = create('script')\n , callback = setup.callback\n , id = unique()\n , finished = 0\n , xhrtme = setup.timeout || DEF_TIMEOUT\n , timer = timeout( function(){done(1, {\"message\" : \"timeout\"})}, xhrtme )\n , fail = setup.fail || function(){}\n , data = setup.data || {}\n , success = setup.success || function(){}\n , append = function() { head().appendChild(script) }\n , done = function( failed, response ) {\n if (finished) return;\n finished = 1;\n\n script.onerror = null;\n clearTimeout(timer);\n\n (failed || !response) || success(response);\n\n timeout( function() {\n failed && fail();\n var s = $(id)\n , p = s && s.parentNode;\n p && p.removeChild(s);\n }, SECOND );\n };\n\n window[callback] = function(response) {\n done( 0, response );\n };\n\n if (!setup.blocking) script[ASYNC] = ASYNC;\n\n script.onerror = function() { done(1) };\n script.src = build_url( setup.url, data );\n\n attr( script, 'id', id );\n\n append();\n return done;\n}\n\n/**\n * CORS XHR Request\n * ================\n * xdr({\n * url : ['http://www.blah.com/url'],\n * success : function(response) {},\n * fail : function() {}\n * });\n */\nfunction ajax( setup ) {\n var xhr, response\n , finished = function() {\n if (loaded) return;\n loaded = 1;\n\n clearTimeout(timer);\n\n try { response = JSON['parse'](xhr.responseText); }\n catch (r) { return done(1); }\n\n complete = 1;\n success(response);\n }\n , complete = 0\n , loaded = 0\n , xhrtme = setup.timeout || DEF_TIMEOUT\n , timer = timeout( function(){done(1, {\"message\" : \"timeout\"})}, xhrtme )\n , fail = setup.fail || function(){}\n , data = setup.data || {}\n , success = setup.success || function(){}\n , async = !(setup.blocking)\n , done = function(failed,response) {\n if (complete) return;\n complete = 1;\n\n clearTimeout(timer);\n\n if (xhr) {\n xhr.onerror = xhr.onload = null;\n xhr.abort && xhr.abort();\n xhr = null;\n }\n\n failed && fail(response);\n };\n\n // Send\n try {\n xhr = FDomainRequest() ||\n window.XDomainRequest &&\n new XDomainRequest() ||\n new XMLHttpRequest();\n\n xhr.onerror = xhr.onabort = function(e){ done(\n 1, e || (xhr && xhr.responseText) || { \"error\" : \"Network Connection Error\"}\n ) };\n xhr.onload = xhr.onloadend = finished;\n xhr.onreadystatechange = function() {\n if (xhr && xhr.readyState == 4) {\n switch(xhr.status) {\n case 200:\n break;\n default:\n try {\n response = JSON['parse'](xhr.responseText);\n done(1,response);\n }\n catch (r) { return done(1, {status : xhr.status, payload : null, message : xhr.responseText}); }\n return;\n }\n }\n }\n\n var url = build_url(setup.url,data);\n\n xhr.open( 'GET', url, async );\n if (async) xhr.timeout = xhrtme;\n xhr.send();\n }\n catch(eee) {\n done(0);\n XORIGN = 0;\n return xdr(setup);\n }\n\n // Return 'done'\n return done;\n}\n\n// Test Connection State\nfunction _is_online() {\n if (!('onLine' in navigator)) return 1;\n try { return navigator['onLine'] }\n catch (e) { return true }\n}\n\n\nfunction sendBeacon(url) {\n if (!('sendBeacon' in navigator)) return false;\n\n return navigator['sendBeacon'](url);\n}\n\n/* =-====================================================================-= */\n/* =-====================================================================-= */\n/* =-========================= PUBNUB ===========================-= */\n/* =-====================================================================-= */\n/* =-====================================================================-= */\n\nvar PDIV = $('pubnub') || 0\n, CREATE_PUBNUB = function(setup) {\n\n // Force JSONP if requested from user.\n if (setup['jsonp']) XORIGN = 0;\n else XORIGN = UA.indexOf('MSIE 6') == -1;\n\n var SUBSCRIBE_KEY = setup['subscribe_key'] || ''\n , KEEPALIVE = (+setup['keepalive'] || DEF_KEEPALIVE) * SECOND\n , UUID = setup['uuid'] || db['get'](SUBSCRIBE_KEY+'uuid')||'';\n\n var leave_on_unload = setup['leave_on_unload'] || 0;\n\n setup['xdr'] = xdr;\n setup['db'] = db;\n setup['error'] = setup['error'] || error;\n setup['_is_online'] = _is_online;\n setup['jsonp_cb'] = jsonp_cb;\n setup['hmac_SHA256']= get_hmac_SHA256;\n setup['crypto_obj'] = crypto_obj();\n setup['sendBeacon'] = sendBeacon;\n setup['params'] = { 'pnsdk' : PNSDK }\n\n var SELF = function(setup) {\n return CREATE_PUBNUB(setup);\n };\n\n var PN = PN_API(setup);\n\n for (var prop in PN) {\n if (PN.hasOwnProperty(prop)) {\n SELF[prop] = PN[prop];\n }\n }\n SELF['css'] = css;\n SELF['$'] = $;\n SELF['create'] = create;\n SELF['bind'] = bind;\n SELF['head'] = head;\n SELF['search'] = search;\n SELF['attr'] = attr;\n SELF['events'] = events;\n SELF['init'] = SELF;\n SELF['secure'] = SELF;\n SELF['crypto_obj'] = crypto_obj(); // export to instance\n\n\n // Add Leave Functions\n bind( 'beforeunload', window, function() {\n if (leave_on_unload) SELF['each-channel'](function(ch){ SELF['LEAVE']( ch.name, 0 ) });\n return true;\n } );\n\n // Return without Testing\n if (setup['notest']) return SELF;\n\n bind( 'offline', window, SELF['offline'] );\n bind( 'offline', document, SELF['offline'] );\n\n // Return PUBNUB Socket Object\n return SELF;\n};\nCREATE_PUBNUB['init'] = CREATE_PUBNUB;\nCREATE_PUBNUB['secure'] = CREATE_PUBNUB;\nCREATE_PUBNUB['crypto_obj'] = crypto_obj(); // export to constructor\n\n// Bind for PUBNUB Readiness to Subscribe\nif (document.readyState === 'complete') {\n timeout( ready, 0 );\n}\nelse {\n bind( 'load', window, function(){ timeout( ready, 0 ) } );\n}\n\nvar pdiv = PDIV || {};\n\n// CREATE A PUBNUB GLOBAL OBJECT\nPUBNUB = CREATE_PUBNUB({\n 'notest' : 1,\n 'publish_key' : attr( pdiv, 'pub-key' ),\n 'subscribe_key' : attr( pdiv, 'sub-key' ),\n 'ssl' : !document.location.href.indexOf('https') ||\n attr( pdiv, 'ssl' ) == 'on',\n 'origin' : attr( pdiv, 'origin' ),\n 'uuid' : attr( pdiv, 'uuid' )\n});\n\n// jQuery Interface\nwindow['jQuery'] && (window['jQuery']['PUBNUB'] = CREATE_PUBNUB);\n\n// For Modern JS + Testling.js - http://testling.com/\ntypeof(module) !== 'undefined' && (module['exports'] = PUBNUB) && ready();\n\nvar pubnubs = $('pubnubs') || 0;\n\n// LEAVE NOW IF NO PDIV.\nif (!PDIV) return;\n\n// PUBNUB Flash Socket\ncss( PDIV, { 'position' : 'absolute', 'top' : -SECOND } );\n\nif ('opera' in window || attr( PDIV, 'flash' )) PDIV['innerHTML'] =\n '';\n\n// Create Interface for Opera Flash\nPUBNUB['rdx'] = function( id, data ) {\n if (!data) return FDomainRequest[id]['onerror']();\n FDomainRequest[id]['responseText'] = unescape(data);\n FDomainRequest[id]['onload']();\n};\n\nfunction FDomainRequest() {\n if (!pubnubs || !pubnubs['get']) return 0;\n\n var fdomainrequest = {\n 'id' : FDomainRequest['id']++,\n 'send' : function() {},\n 'abort' : function() { fdomainrequest['id'] = {} },\n 'open' : function( method, url ) {\n FDomainRequest[fdomainrequest['id']] = fdomainrequest;\n pubnubs['get']( fdomainrequest['id'], url );\n }\n };\n\n return fdomainrequest;\n}\nFDomainRequest['id'] = SECOND;\n\n})();\n(function(){\n\n// ---------------------------------------------------------------------------\n// WEBSOCKET INTERFACE\n// ---------------------------------------------------------------------------\nvar WS = PUBNUB['ws'] = function( url, protocols ) {\n if (!(this instanceof WS)) return new WS( url, protocols );\n\n var self = this\n , url = self.url = url || ''\n , protocol = self.protocol = protocols || 'Sec-WebSocket-Protocol'\n , bits = url.split('/')\n , setup = {\n 'ssl' : bits[0] === 'wss:'\n ,'origin' : bits[2]\n ,'publish_key' : bits[3]\n ,'subscribe_key' : bits[4]\n ,'channel' : bits[5]\n };\n\n // READY STATES\n self['CONNECTING'] = 0; // The connection is not yet open.\n self['OPEN'] = 1; // The connection is open and ready to communicate.\n self['CLOSING'] = 2; // The connection is in the process of closing.\n self['CLOSED'] = 3; // The connection is closed or couldn't be opened.\n\n // CLOSE STATES\n self['CLOSE_NORMAL'] = 1000; // Normal Intended Close; completed.\n self['CLOSE_GOING_AWAY'] = 1001; // Closed Unexpecttedly.\n self['CLOSE_PROTOCOL_ERROR'] = 1002; // Server: Not Supported.\n self['CLOSE_UNSUPPORTED'] = 1003; // Server: Unsupported Protocol.\n self['CLOSE_TOO_LARGE'] = 1004; // Server: Too Much Data.\n self['CLOSE_NO_STATUS'] = 1005; // Server: No reason.\n self['CLOSE_ABNORMAL'] = 1006; // Abnormal Disconnect.\n\n // Events Default\n self['onclose'] = self['onerror'] =\n self['onmessage'] = self['onopen'] =\n self['onsend'] = function(){};\n\n // Attributes\n self['binaryType'] = '';\n self['extensions'] = '';\n self['bufferedAmount'] = 0;\n self['trasnmitting'] = false;\n self['buffer'] = [];\n self['readyState'] = self['CONNECTING'];\n\n // Close if no setup.\n if (!url) {\n self['readyState'] = self['CLOSED'];\n self['onclose']({\n 'code' : self['CLOSE_ABNORMAL'],\n 'reason' : 'Missing URL',\n 'wasClean' : true\n });\n return self;\n }\n\n // PubNub WebSocket Emulation\n self.pubnub = PUBNUB['init'](setup);\n self.pubnub.setup = setup;\n self.setup = setup;\n\n self.pubnub['subscribe']({\n 'restore' : false,\n 'channel' : setup['channel'],\n 'disconnect' : self['onerror'],\n 'reconnect' : self['onopen'],\n 'error' : function() {\n self['onclose']({\n 'code' : self['CLOSE_ABNORMAL'],\n 'reason' : 'Missing URL',\n 'wasClean' : false\n });\n },\n 'callback' : function(message) {\n self['onmessage']({ 'data' : message });\n },\n 'connect' : function() {\n self['readyState'] = self['OPEN'];\n self['onopen']();\n }\n });\n};\n\n// ---------------------------------------------------------------------------\n// WEBSOCKET SEND\n// ---------------------------------------------------------------------------\nWS.prototype.send = function(data) {\n var self = this;\n self.pubnub['publish']({\n 'channel' : self.pubnub.setup['channel'],\n 'message' : data,\n 'callback' : function(response) {\n self['onsend']({ 'data' : response });\n }\n });\n};\n\n// ---------------------------------------------------------------------------\n// WEBSOCKET CLOSE\n// ---------------------------------------------------------------------------\nWS.prototype.close = function() {\n var self = this;\n self.pubnub['unsubscribe']({ 'channel' : self.pubnub.setup['channel'] });\n self['readyState'] = self['CLOSED'];\n self['onclose']({});\n};\n\n})();\n/*\nCryptoJS v3.1.2\ncode.google.com/p/crypto-js\n(c) 2009-2013 by Jeff Mott. All rights reserved.\ncode.google.com/p/crypto-js/wiki/License\n*/\nvar CryptoJS=CryptoJS||function(h,s){var f={},g=f.lib={},q=function(){},m=g.Base={extend:function(a){q.prototype=this;var c=new q;a&&c.mixIn(a);c.hasOwnProperty(\"init\")||(c.init=function(){c.$super.init.apply(this,arguments)});c.init.prototype=c;c.$super=this;return c},create:function(){var a=this.extend();a.init.apply(a,arguments);return a},init:function(){},mixIn:function(a){for(var c in a)a.hasOwnProperty(c)&&(this[c]=a[c]);a.hasOwnProperty(\"toString\")&&(this.toString=a.toString)},clone:function(){return this.init.prototype.extend(this)}},\nr=g.WordArray=m.extend({init:function(a,c){a=this.words=a||[];this.sigBytes=c!=s?c:4*a.length},toString:function(a){return(a||k).stringify(this)},concat:function(a){var c=this.words,d=a.words,b=this.sigBytes;a=a.sigBytes;this.clamp();if(b%4)for(var e=0;e>>2]|=(d[e>>>2]>>>24-8*(e%4)&255)<<24-8*((b+e)%4);else if(65535>>2]=d[e>>>2];else c.push.apply(c,d);this.sigBytes+=a;return this},clamp:function(){var a=this.words,c=this.sigBytes;a[c>>>2]&=4294967295<<\n32-8*(c%4);a.length=h.ceil(c/4)},clone:function(){var a=m.clone.call(this);a.words=this.words.slice(0);return a},random:function(a){for(var c=[],d=0;d>>2]>>>24-8*(b%4)&255;d.push((e>>>4).toString(16));d.push((e&15).toString(16))}return d.join(\"\")},parse:function(a){for(var c=a.length,d=[],b=0;b>>3]|=parseInt(a.substr(b,\n2),16)<<24-4*(b%8);return new r.init(d,c/2)}},n=l.Latin1={stringify:function(a){var c=a.words;a=a.sigBytes;for(var d=[],b=0;b>>2]>>>24-8*(b%4)&255));return d.join(\"\")},parse:function(a){for(var c=a.length,d=[],b=0;b>>2]|=(a.charCodeAt(b)&255)<<24-8*(b%4);return new r.init(d,c)}},j=l.Utf8={stringify:function(a){try{return decodeURIComponent(escape(n.stringify(a)))}catch(c){throw Error(\"Malformed UTF-8 data\");}},parse:function(a){return n.parse(unescape(encodeURIComponent(a)))}},\nu=g.BufferedBlockAlgorithm=m.extend({reset:function(){this._data=new r.init;this._nDataBytes=0},_append:function(a){\"string\"==typeof a&&(a=j.parse(a));this._data.concat(a);this._nDataBytes+=a.sigBytes},_process:function(a){var c=this._data,d=c.words,b=c.sigBytes,e=this.blockSize,f=b/(4*e),f=a?h.ceil(f):h.max((f|0)-this._minBufferSize,0);a=f*e;b=h.min(4*a,b);if(a){for(var g=0;gn;){var j;a:{j=k;for(var u=h.sqrt(j),t=2;t<=u;t++)if(!(j%t)){j=!1;break a}j=!0}j&&(8>n&&(m[n]=l(h.pow(k,0.5))),r[n]=l(h.pow(k,1/3)),n++);k++}var a=[],f=f.SHA256=q.extend({_doReset:function(){this._hash=new g.init(m.slice(0))},_doProcessBlock:function(c,d){for(var b=this._hash.words,e=b[0],f=b[1],g=b[2],j=b[3],h=b[4],m=b[5],n=b[6],q=b[7],p=0;64>p;p++){if(16>p)a[p]=\nc[d+p]|0;else{var k=a[p-15],l=a[p-2];a[p]=((k<<25|k>>>7)^(k<<14|k>>>18)^k>>>3)+a[p-7]+((l<<15|l>>>17)^(l<<13|l>>>19)^l>>>10)+a[p-16]}k=q+((h<<26|h>>>6)^(h<<21|h>>>11)^(h<<7|h>>>25))+(h&m^~h&n)+r[p]+a[p];l=((e<<30|e>>>2)^(e<<19|e>>>13)^(e<<10|e>>>22))+(e&f^e&g^f&g);q=n;n=m;m=h;h=j+k|0;j=g;g=f;f=e;e=k+l|0}b[0]=b[0]+e|0;b[1]=b[1]+f|0;b[2]=b[2]+g|0;b[3]=b[3]+j|0;b[4]=b[4]+h|0;b[5]=b[5]+m|0;b[6]=b[6]+n|0;b[7]=b[7]+q|0},_doFinalize:function(){var a=this._data,d=a.words,b=8*this._nDataBytes,e=8*a.sigBytes;\nd[e>>>5]|=128<<24-e%32;d[(e+64>>>9<<4)+14]=h.floor(b/4294967296);d[(e+64>>>9<<4)+15]=b;a.sigBytes=4*d.length;this._process();return this._hash},clone:function(){var a=q.clone.call(this);a._hash=this._hash.clone();return a}});s.SHA256=q._createHelper(f);s.HmacSHA256=q._createHmacHelper(f)})(Math);\n\n// HMAC SHA256\n(function(){var h=CryptoJS,s=h.enc.Utf8;h.algo.HMAC=h.lib.Base.extend({init:function(f,g){f=this._hasher=new f.init;\"string\"==typeof g&&(g=s.parse(g));var h=f.blockSize,m=4*h;g.sigBytes>m&&(g=f.finalize(g));g.clamp();for(var r=this._oKey=g.clone(),l=this._iKey=g.clone(),k=r.words,n=l.words,j=0;j>>2]>>>24-8*(r%4)&255)<<16|(l[r+1>>>2]>>>24-8*((r+1)%4)&255)<<8|l[r+2>>>2]>>>24-8*((r+2)%4)&255,v=0;4>v&&r+0.75*v>>6*(3-v)&63));if(l=t.charAt(64))for(;d.length%4;)d.push(l);return d.join(\"\")},parse:function(d){var l=d.length,s=this._map,t=s.charAt(64);t&&(t=d.indexOf(t),-1!=t&&(l=t));for(var t=[],r=0,w=0;w<\nl;w++)if(w%4){var v=s.indexOf(d.charAt(w-1))<<2*(w%4),b=s.indexOf(d.charAt(w))>>>6-2*(w%4);t[r>>>2]|=(v|b)<<24-8*(r%4);r++}return p.create(t,r)},_map:\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\"}})();\n\n// BlockCipher\n(function(u){function p(b,n,a,c,e,j,k){b=b+(n&a|~n&c)+e+k;return(b<>>32-j)+n}function d(b,n,a,c,e,j,k){b=b+(n&c|a&~c)+e+k;return(b<>>32-j)+n}function l(b,n,a,c,e,j,k){b=b+(n^a^c)+e+k;return(b<>>32-j)+n}function s(b,n,a,c,e,j,k){b=b+(a^(n|~c))+e+k;return(b<>>32-j)+n}for(var t=CryptoJS,r=t.lib,w=r.WordArray,v=r.Hasher,r=t.algo,b=[],x=0;64>x;x++)b[x]=4294967296*u.abs(u.sin(x+1))|0;r=r.MD5=v.extend({_doReset:function(){this._hash=new w.init([1732584193,4023233417,2562383102,271733878])},\n_doProcessBlock:function(q,n){for(var a=0;16>a;a++){var c=n+a,e=q[c];q[c]=(e<<8|e>>>24)&16711935|(e<<24|e>>>8)&4278255360}var a=this._hash.words,c=q[n+0],e=q[n+1],j=q[n+2],k=q[n+3],z=q[n+4],r=q[n+5],t=q[n+6],w=q[n+7],v=q[n+8],A=q[n+9],B=q[n+10],C=q[n+11],u=q[n+12],D=q[n+13],E=q[n+14],x=q[n+15],f=a[0],m=a[1],g=a[2],h=a[3],f=p(f,m,g,h,c,7,b[0]),h=p(h,f,m,g,e,12,b[1]),g=p(g,h,f,m,j,17,b[2]),m=p(m,g,h,f,k,22,b[3]),f=p(f,m,g,h,z,7,b[4]),h=p(h,f,m,g,r,12,b[5]),g=p(g,h,f,m,t,17,b[6]),m=p(m,g,h,f,w,22,b[7]),\nf=p(f,m,g,h,v,7,b[8]),h=p(h,f,m,g,A,12,b[9]),g=p(g,h,f,m,B,17,b[10]),m=p(m,g,h,f,C,22,b[11]),f=p(f,m,g,h,u,7,b[12]),h=p(h,f,m,g,D,12,b[13]),g=p(g,h,f,m,E,17,b[14]),m=p(m,g,h,f,x,22,b[15]),f=d(f,m,g,h,e,5,b[16]),h=d(h,f,m,g,t,9,b[17]),g=d(g,h,f,m,C,14,b[18]),m=d(m,g,h,f,c,20,b[19]),f=d(f,m,g,h,r,5,b[20]),h=d(h,f,m,g,B,9,b[21]),g=d(g,h,f,m,x,14,b[22]),m=d(m,g,h,f,z,20,b[23]),f=d(f,m,g,h,A,5,b[24]),h=d(h,f,m,g,E,9,b[25]),g=d(g,h,f,m,k,14,b[26]),m=d(m,g,h,f,v,20,b[27]),f=d(f,m,g,h,D,5,b[28]),h=d(h,f,\nm,g,j,9,b[29]),g=d(g,h,f,m,w,14,b[30]),m=d(m,g,h,f,u,20,b[31]),f=l(f,m,g,h,r,4,b[32]),h=l(h,f,m,g,v,11,b[33]),g=l(g,h,f,m,C,16,b[34]),m=l(m,g,h,f,E,23,b[35]),f=l(f,m,g,h,e,4,b[36]),h=l(h,f,m,g,z,11,b[37]),g=l(g,h,f,m,w,16,b[38]),m=l(m,g,h,f,B,23,b[39]),f=l(f,m,g,h,D,4,b[40]),h=l(h,f,m,g,c,11,b[41]),g=l(g,h,f,m,k,16,b[42]),m=l(m,g,h,f,t,23,b[43]),f=l(f,m,g,h,A,4,b[44]),h=l(h,f,m,g,u,11,b[45]),g=l(g,h,f,m,x,16,b[46]),m=l(m,g,h,f,j,23,b[47]),f=s(f,m,g,h,c,6,b[48]),h=s(h,f,m,g,w,10,b[49]),g=s(g,h,f,m,\nE,15,b[50]),m=s(m,g,h,f,r,21,b[51]),f=s(f,m,g,h,u,6,b[52]),h=s(h,f,m,g,k,10,b[53]),g=s(g,h,f,m,B,15,b[54]),m=s(m,g,h,f,e,21,b[55]),f=s(f,m,g,h,v,6,b[56]),h=s(h,f,m,g,x,10,b[57]),g=s(g,h,f,m,t,15,b[58]),m=s(m,g,h,f,D,21,b[59]),f=s(f,m,g,h,z,6,b[60]),h=s(h,f,m,g,C,10,b[61]),g=s(g,h,f,m,j,15,b[62]),m=s(m,g,h,f,A,21,b[63]);a[0]=a[0]+f|0;a[1]=a[1]+m|0;a[2]=a[2]+g|0;a[3]=a[3]+h|0},_doFinalize:function(){var b=this._data,n=b.words,a=8*this._nDataBytes,c=8*b.sigBytes;n[c>>>5]|=128<<24-c%32;var e=u.floor(a/\n4294967296);n[(c+64>>>9<<4)+15]=(e<<8|e>>>24)&16711935|(e<<24|e>>>8)&4278255360;n[(c+64>>>9<<4)+14]=(a<<8|a>>>24)&16711935|(a<<24|a>>>8)&4278255360;b.sigBytes=4*(n.length+1);this._process();b=this._hash;n=b.words;for(a=0;4>a;a++)c=n[a],n[a]=(c<<8|c>>>24)&16711935|(c<<24|c>>>8)&4278255360;return b},clone:function(){var b=v.clone.call(this);b._hash=this._hash.clone();return b}});t.MD5=v._createHelper(r);t.HmacMD5=v._createHmacHelper(r)})(Math);\n(function(){var u=CryptoJS,p=u.lib,d=p.Base,l=p.WordArray,p=u.algo,s=p.EvpKDF=d.extend({cfg:d.extend({keySize:4,hasher:p.MD5,iterations:1}),init:function(d){this.cfg=this.cfg.extend(d)},compute:function(d,r){for(var p=this.cfg,s=p.hasher.create(),b=l.create(),u=b.words,q=p.keySize,p=p.iterations;u.length>>2]&255}};d.BlockCipher=v.extend({cfg:v.cfg.extend({mode:b,padding:q}),reset:function(){v.reset.call(this);var a=this.cfg,b=a.iv,a=a.mode;if(this._xformMode==this._ENC_XFORM_MODE)var c=a.createEncryptor;else c=a.createDecryptor,this._minBufferSize=1;this._mode=c.call(a,\nthis,b&&b.words)},_doProcessBlock:function(a,b){this._mode.processBlock(a,b)},_doFinalize:function(){var a=this.cfg.padding;if(this._xformMode==this._ENC_XFORM_MODE){a.pad(this._data,this.blockSize);var b=this._process(!0)}else b=this._process(!0),a.unpad(b);return b},blockSize:4});var n=d.CipherParams=l.extend({init:function(a){this.mixIn(a)},toString:function(a){return(a||this.formatter).stringify(this)}}),b=(p.format={}).OpenSSL={stringify:function(a){var b=a.ciphertext;a=a.salt;return(a?s.create([1398893684,\n1701076831]).concat(a).concat(b):b).toString(r)},parse:function(a){a=r.parse(a);var b=a.words;if(1398893684==b[0]&&1701076831==b[1]){var c=s.create(b.slice(2,4));b.splice(0,4);a.sigBytes-=16}return n.create({ciphertext:a,salt:c})}},a=d.SerializableCipher=l.extend({cfg:l.extend({format:b}),encrypt:function(a,b,c,d){d=this.cfg.extend(d);var l=a.createEncryptor(c,d);b=l.finalize(b);l=l.cfg;return n.create({ciphertext:b,key:c,iv:l.iv,algorithm:a,mode:l.mode,padding:l.padding,blockSize:a.blockSize,formatter:d.format})},\ndecrypt:function(a,b,c,d){d=this.cfg.extend(d);b=this._parse(b,d.format);return a.createDecryptor(c,d).finalize(b.ciphertext)},_parse:function(a,b){return\"string\"==typeof a?b.parse(a,this):a}}),p=(p.kdf={}).OpenSSL={execute:function(a,b,c,d){d||(d=s.random(8));a=w.create({keySize:b+c}).compute(a,d);c=s.create(a.words.slice(b),4*c);a.sigBytes=4*b;return n.create({key:a,iv:c,salt:d})}},c=d.PasswordBasedCipher=a.extend({cfg:a.cfg.extend({kdf:p}),encrypt:function(b,c,d,l){l=this.cfg.extend(l);d=l.kdf.execute(d,\nb.keySize,b.ivSize);l.iv=d.iv;b=a.encrypt.call(this,b,c,d.key,l);b.mixIn(d);return b},decrypt:function(b,c,d,l){l=this.cfg.extend(l);c=this._parse(c,l.format);d=l.kdf.execute(d,b.keySize,b.ivSize,c.salt);l.iv=d.iv;return a.decrypt.call(this,b,c,d.key,l)}})}();\n\n// AES\n(function(){for(var u=CryptoJS,p=u.lib.BlockCipher,d=u.algo,l=[],s=[],t=[],r=[],w=[],v=[],b=[],x=[],q=[],n=[],a=[],c=0;256>c;c++)a[c]=128>c?c<<1:c<<1^283;for(var e=0,j=0,c=0;256>c;c++){var k=j^j<<1^j<<2^j<<3^j<<4,k=k>>>8^k&255^99;l[e]=k;s[k]=e;var z=a[e],F=a[z],G=a[F],y=257*a[k]^16843008*k;t[e]=y<<24|y>>>8;r[e]=y<<16|y>>>16;w[e]=y<<8|y>>>24;v[e]=y;y=16843009*G^65537*F^257*z^16843008*e;b[k]=y<<24|y>>>8;x[k]=y<<16|y>>>16;q[k]=y<<8|y>>>24;n[k]=y;e?(e=z^a[a[a[G^z]]],j^=a[a[j]]):e=j=1}var H=[0,1,2,4,8,\n16,32,64,128,27,54],d=d.AES=p.extend({_doReset:function(){for(var a=this._key,c=a.words,d=a.sigBytes/4,a=4*((this._nRounds=d+6)+1),e=this._keySchedule=[],j=0;j>>24]<<24|l[k>>>16&255]<<16|l[k>>>8&255]<<8|l[k&255]):(k=k<<8|k>>>24,k=l[k>>>24]<<24|l[k>>>16&255]<<16|l[k>>>8&255]<<8|l[k&255],k^=H[j/d|0]<<24);e[j]=e[j-d]^k}c=this._invKeySchedule=[];for(d=0;dd||4>=j?k:b[l[k>>>24]]^x[l[k>>>16&255]]^q[l[k>>>\n8&255]]^n[l[k&255]]},encryptBlock:function(a,b){this._doCryptBlock(a,b,this._keySchedule,t,r,w,v,l)},decryptBlock:function(a,c){var d=a[c+1];a[c+1]=a[c+3];a[c+3]=d;this._doCryptBlock(a,c,this._invKeySchedule,b,x,q,n,s);d=a[c+1];a[c+1]=a[c+3];a[c+3]=d},_doCryptBlock:function(a,b,c,d,e,j,l,f){for(var m=this._nRounds,g=a[b]^c[0],h=a[b+1]^c[1],k=a[b+2]^c[2],n=a[b+3]^c[3],p=4,r=1;r>>24]^e[h>>>16&255]^j[k>>>8&255]^l[n&255]^c[p++],s=d[h>>>24]^e[k>>>16&255]^j[n>>>8&255]^l[g&255]^c[p++],t=\nd[k>>>24]^e[n>>>16&255]^j[g>>>8&255]^l[h&255]^c[p++],n=d[n>>>24]^e[g>>>16&255]^j[h>>>8&255]^l[k&255]^c[p++],g=q,h=s,k=t;q=(f[g>>>24]<<24|f[h>>>16&255]<<16|f[k>>>8&255]<<8|f[n&255])^c[p++];s=(f[h>>>24]<<24|f[k>>>16&255]<<16|f[n>>>8&255]<<8|f[g&255])^c[p++];t=(f[k>>>24]<<24|f[n>>>16&255]<<16|f[g>>>8&255]<<8|f[h&255])^c[p++];n=(f[n>>>24]<<24|f[g>>>16&255]<<16|f[h>>>8&255]<<8|f[k&255])^c[p++];a[b]=q;a[b+1]=s;a[b+2]=t;a[b+3]=n},keySize:8});u.AES=p._createHelper(d)})();\n\n// Mode ECB\nCryptoJS.mode.ECB = (function () {\n var ECB = CryptoJS.lib.BlockCipherMode.extend();\n\n ECB.Encryptor = ECB.extend({\n processBlock: function (words, offset) {\n this._cipher.encryptBlock(words, offset);\n }\n });\n\n ECB.Decryptor = ECB.extend({\n processBlock: function (words, offset) {\n this._cipher.decryptBlock(words, offset);\n }\n });\n\n return ECB;\n}());// Moved to hmac-sha-256.js\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./bower_components/pubnub/web/pubnub.js\n ** module id = 10\n ** module chunks = 0\n **/","export default class Cache {\n\n static defaultPrefix = 'rc-';\n\n constructor(storage, prefix) {\n this.setPrefix(prefix);\n this._storage = storage;\n }\n\n setPrefix(prefix) {\n this._prefix = prefix || Cache.defaultPrefix;\n return this;\n }\n\n setItem(key, data) {\n this._storage[this._prefixKey(key)] = JSON.stringify(data);\n return this;\n }\n\n removeItem(key) {\n delete this._storage[this._prefixKey(key)];\n return this;\n }\n\n getItem(key) {\n var item = this._storage[this._prefixKey(key)];\n if (!item) return null;\n return JSON.parse(item);\n }\n\n clean() {\n\n for (var key in this._storage) {\n\n if (!this._storage.hasOwnProperty(key)) continue;\n\n if (key.indexOf(this._prefix) === 0) {\n delete this._storage[key];\n }\n\n }\n\n return this;\n\n }\n\n _prefixKey(key) {\n return this._prefix + key;\n }\n\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/core/Cache.js\n **/","export default class Observable {\n\n constructor() {\n this.off();\n }\n\n hasListeners(event) {\n return (event in this._listeners);\n }\n\n on(events, callback) {\n\n if (typeof events == 'string') events = [events];\n if (!events) throw new Error('No events to subscribe to');\n if (typeof callback !== 'function') throw new Error('Callback must be a function');\n\n events.forEach((event) => {\n\n if (!this.hasListeners(event)) this._listeners[event] = [];\n\n this._listeners[event].push(callback);\n\n });\n\n return this;\n\n }\n\n emit(event, ...args) {\n\n var result = null;\n\n if (!this.hasListeners(event)) return null;\n\n this._listeners[event].some((callback) => {\n\n result = callback.apply(this, args);\n return (result === false);\n\n });\n\n return result;\n\n }\n\n off(event, callback) {\n\n if (!event) {\n\n this._listeners = {};\n\n } else {\n\n if (!callback) {\n\n delete this._listeners[event];\n\n } else {\n\n if (!this.hasListeners(event)) return this;\n\n this._listeners[event].forEach((cb, i) => {\n\n if (cb === callback) delete this._listeners[event][i];\n\n });\n\n }\n\n }\n\n return this;\n\n }\n\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/core/Observable.js\n **/","import {Promise} from '../core/Externals';\nimport {poll, stopPolling} from './Utils';\n\nexport default class Queue {\n\n static _pollInterval = 250;\n static _releaseTimeout = 5000;\n\n constructor(cache, cacheId) {\n\n this._cache = cache;\n this._cacheId = cacheId;\n this._promise = null;\n\n }\n\n isPaused() {\n\n var time = this._cache.getItem(this._cacheId);\n\n return !!time && Date.now() - parseInt(time) < Queue._releaseTimeout;\n }\n\n pause() {\n this._cache.setItem(this._cacheId, Date.now());\n return this;\n }\n\n resume() {\n this._cache.removeItem(this._cacheId);\n return this;\n }\n\n poll() {\n\n if (this._promise) return this._promise;\n\n this._promise = new Promise((resolve, reject) => {\n\n poll((next) => {\n\n if (this.isPaused()) return next();\n\n this._promise = null;\n\n this.resume(); // this is actually not needed but why not\n\n resolve(null);\n\n }, Queue._pollInterval);\n\n });\n\n return this._promise;\n\n }\n\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/core/Queue.js\n **/","import {fetch, Request, Response, Headers, Promise} from '../core/Externals';\nimport {queryStringify} from '../core/Utils';\nimport {findHeaderName} from './Utils';\nimport Observable from '../core/Observable';\nimport ApiResponse from './ApiResponse';\n\nexport default class Client extends Observable {\n\n static _allowedMethods = ['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'OPTIONS', 'HEAD'];\n\n events = {\n beforeRequest: 'beforeRequest',\n requestSuccess: 'requestSuccess',\n requestError: 'requestError'\n };\n\n /**\n * @param {Request} request\n * @return {Promise}\n */\n async sendRequest(request) {\n\n var apiResponse = new ApiResponse(request);\n\n try {\n\n //TODO Stop request if listeners return false\n this.emit(this.events.beforeRequest, apiResponse);\n\n apiResponse._response = await this._loadResponse(request);\n\n if (apiResponse._isMultipart() || apiResponse._isJson()) {\n apiResponse._text = await apiResponse.response().text();\n }\n\n if (!apiResponse.ok()) throw new Error('Response has unsuccessful status');\n\n this.emit(this.events.requestSuccess, apiResponse);\n\n return apiResponse;\n\n } catch (e) {\n\n if (!e.apiResponse) e = this.makeError(e, apiResponse);\n\n this.emit(this.events.requestError, e);\n\n throw e;\n\n }\n\n }\n\n /**\n * @param {Request} request\n * @return {Promise}\n * @private\n */\n async _loadResponse(request) {\n return await fetch.call(null, request);\n }\n\n /**\n * Wraps the JS Error object with transaction information\n * @param {Error|IApiError} e\n * @param {ApiResponse} apiResponse\n * @return {IApiError}\n */\n makeError(e, apiResponse) {\n\n // Wrap only if regular error\n if (!e.hasOwnProperty('apiResponse') && !e.hasOwnProperty('originalMessage')) {\n\n e.apiResponse = apiResponse;\n e.originalMessage = e.message;\n e.message = (apiResponse && apiResponse.error(true)) || e.originalMessage;\n\n }\n\n return e;\n\n }\n\n /**\n *\n * @param {object} init\n * @param {object} [init.url]\n * @param {object} [init.body]\n * @param {string} [init.method]\n * @param {object} [init.query]\n * @param {object} [init.headers]\n * @return {Request}\n */\n createRequest(init) {\n\n init = init || {};\n init.headers = init.headers || {};\n\n // Sanity checks\n if (!init.url) throw new Error('Url is not defined');\n if (!init.method) init.method = 'GET';\n if (init.method && Client._allowedMethods.indexOf(init.method) < 0) throw new Error('Method has wrong value: ' + init.method);\n\n // Defaults\n init.credentials = init.credentials || 'include';\n init.mode = init.mode || 'cors';\n\n // Append Query String\n if (init.query) {\n init.url = init.url + (init.url.indexOf('?') > -1 ? '&' : '?') + queryStringify(init.query);\n }\n\n if (!(findHeaderName('Accept', init.headers))) {\n init.headers['Accept'] = ApiResponse._jsonContentType;\n }\n\n // Serialize body\n //TODO Check that body is a plain object\n if (typeof init.body !== 'string' || !init.body) {\n\n var contentTypeHeaderName = findHeaderName(ApiResponse._contentType, init.headers);\n\n if (!contentTypeHeaderName) {\n contentTypeHeaderName = ApiResponse._contentType;\n init.headers[contentTypeHeaderName] = ApiResponse._jsonContentType;\n }\n\n var contentType = init.headers[contentTypeHeaderName];\n\n // Assign a new encoded body\n if (contentType.indexOf(ApiResponse._jsonContentType) > -1) {\n init.body = JSON.stringify(init.body);\n } else if (contentType.indexOf(ApiResponse._urlencodedContentType) > -1) {\n init.body = queryStringify(init.body);\n }\n\n }\n\n // Create a request with encoded body\n var req = new Request(init.url, init);\n\n // Keep the original body accessible directly (for mocks)\n req.originalBody = init.body;\n\n return req;\n\n }\n\n}\n\n/**\n * @name IApiError\n * @property {string} stack\n * @property {string} originalMessage\n * @property {ApiResponse} apiResponse\n */\n\n\n/** WEBPACK FOOTER **\n ** ./src/http/Client.js\n **/","import {fetch, Request, Response, Headers, Promise} from '../core/Externals';\nimport * as utils from '../core/Utils';\n\n/**\n * Creates a response\n * @param stringBody\n * @param init\n * @return {Response}\n */\nexport function createResponse(stringBody, init) {\n\n init = init || {};\n\n var response = new Response(stringBody, init);\n\n //TODO Wait for https://github.com/bitinn/node-fetch/issues/38\n if (utils.isNodeJS()) {\n\n response._text = stringBody;\n response._decode = function() {\n return this._text;\n };\n\n }\n\n return response;\n\n}\n\nexport function findHeaderName(name, headers) {\n name = name.toLowerCase();\n return Object.keys(headers).reduce(function(res, key) {\n if (res) return res;\n if (name == key.toLowerCase()) return key;\n return res;\n }, null);\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/http/Utils.js\n **/","import {fetch, Request, Response, Headers, Promise} from '../core/Externals';\nimport * as utils from './Utils';\n\nexport default class ApiResponse {\n\n static _contentType = 'Content-Type';\n static _jsonContentType = 'application/json';\n static _multipartContentType = 'multipart/mixed';\n static _urlencodedContentType = 'application/x-www-form-urlencoded';\n static _headerSeparator = ':';\n static _bodySeparator = '\\n\\n';\n static _boundarySeparator = '--';\n\n /**\n * @param {Request} request\n * @param {Response} response\n * @param {string} responseText\n */\n constructor(request, response, responseText) {\n\n /** @type {Request} */\n this._request = request;\n\n /** @type {Response} */\n this._response = response;\n\n this._text = responseText;\n this._json = null;\n this._multipart = [];\n\n }\n\n /**\n * @return {Response}\n */\n response() {\n return this._response;\n }\n\n /**\n * @return {Request}\n */\n request() {\n return this._request;\n }\n\n /**\n * @return {boolean}\n */\n ok() {\n return this._response && this._response.ok;\n }\n\n /**\n * @return {string}\n */\n text() {\n if (!this._isJson() && !this._isMultipart()) throw new Error('Response is not text');\n return this._text;\n }\n\n /**\n * @return {object}\n */\n json() {\n if (!this._isJson()) throw new Error('Response is not JSON');\n if (!this._json) {\n this._json = this._text ? JSON.parse(this._text) : null;\n }\n return this._json;\n }\n\n /**\n * @param [skipOKCheck]\n * @return {string}\n */\n error(skipOKCheck) {\n\n if (this.ok() && !skipOKCheck) return null;\n\n var message = (this._response && this._response.status ? this._response.status + ' ' : '') +\n (this._response && this._response.statusText ? this._response.statusText : '');\n\n try {\n\n if (this.json().message) message = this.json().message;\n if (this.json().error_description) message = this.json().error_description;\n if (this.json().description) message = this.json().description;\n\n } catch (e) {}\n\n return message;\n\n }\n\n /**\n * @return {ApiResponse[]}\n */\n multipart() {\n\n if (!this._isMultipart()) throw new Error('Response is not multipart');\n\n if (!this._multipart.length) {\n\n // Step 1. Split multipart response\n\n var text = this.text();\n\n if (!text) throw new Error('No response body');\n\n var boundary = this._getContentType().match(/boundary=([^;]+)/i)[1];\n\n if (!boundary) throw new Error('Cannot find boundary');\n\n var parts = text.toString().split(ApiResponse._boundarySeparator + boundary);\n\n if (parts[0].trim() === '') parts.shift();\n if (parts[parts.length - 1].trim() == ApiResponse._boundarySeparator) parts.pop();\n\n if (parts.length < 1) throw new Error('No parts in body');\n\n // Step 2. Parse status info\n\n var statusInfo = ApiResponse.create(parts.shift(), this._response.status, this._response.statusText).json();\n\n // Step 3. Parse all other parts\n\n this._multipart = parts.map((part:string, i) => {\n\n var status = statusInfo.response[i].status;\n\n return ApiResponse.create(part, status);\n\n });\n\n }\n\n return this._multipart;\n\n }\n\n _isContentType(contentType) {\n return this._getContentType().indexOf(contentType) > -1;\n }\n\n _getContentType() {\n return this._response.headers.get(ApiResponse._contentType) || '';\n }\n\n _isMultipart() {\n return this._isContentType(ApiResponse._multipartContentType);\n }\n\n _isUrlEncoded() {\n return this._isContentType(ApiResponse._urlencodedContentType);\n }\n\n _isJson() {\n return this._isContentType(ApiResponse._jsonContentType);\n }\n\n /**\n * Method is used to create ApiResponse object from string parts of multipart/mixed response\n * @param {string} [text]\n * @param {number} [status]\n * @param {string} [statusText]\n * @return {ApiResponse}\n */\n static create(text, status, statusText) {\n\n text = text || '';\n status = status || 200;\n statusText = statusText || 'OK';\n\n text = text.replace(/\\r/g, '');\n\n var headers = new Headers(),\n headersAndBody = text.split(ApiResponse._bodySeparator),\n headersText = (headersAndBody.length > 1) ? headersAndBody.shift() : '';\n\n text = headersAndBody.join(ApiResponse._bodySeparator);\n\n (headersText || '')\n .split('\\n')\n .forEach((header:string) => {\n\n var split = header.trim().split(ApiResponse._headerSeparator),\n key = split.shift().trim(),\n value = split.join(ApiResponse._headerSeparator).trim();\n\n if (key) headers.append(key, value);\n\n });\n\n return new ApiResponse(null, utils.createResponse(text, {\n headers: headers,\n status: status,\n statusText: statusText\n }), text);\n\n }\n\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/http/ApiResponse.js\n **/","import Registry from './Registry';\nimport {default as HttpClient} from '../http/Client';\n\nexport default class Client extends HttpClient {\n\n constructor() {\n super();\n this._registry = new Registry();\n }\n\n registry() {\n return this._registry;\n }\n\n async _loadResponse(request) {\n\n var mock = this._registry.find(request);\n\n return await mock.getResponse(request);\n\n }\n\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/mocks/ClientMock.js\n **/","import Mock from './Mock';\n\nexport default class Registry {\n\n constructor() {\n this._mocks = [];\n }\n\n add(mock) {\n this._mocks.push(mock);\n return this;\n }\n\n clear() {\n this._mocks = [];\n return this;\n }\n\n find(request) {\n\n //console.log('Registry is looking for', request);\n\n var mock = this._mocks.shift();\n\n if (!mock) throw new Error('No mock in registry for request ' + request.method + ' ' + request.url);\n\n if (!mock.test(request)) throw new Error('Wrong request ' + request.method + ' ' + request.url +\n ' for expected mock ' + mock.method() + ' ' + mock.path());\n\n return mock;\n\n }\n\n apiCall(method:string, path:string, response:any, status, statusText) {\n\n this.add(new Mock(method, path, response, status, statusText));\n\n return this;\n\n }\n\n authentication() {\n\n this.apiCall('POST', '/restapi/oauth/token', {\n 'access_token': 'ACCESS_TOKEN',\n 'token_type': 'bearer',\n 'expires_in': 3600,\n 'refresh_token': 'REFRESH_TOKEN',\n 'refresh_token_expires_in': 60480,\n 'scope': 'SMS RCM Foo Boo',\n 'expireTime': new Date().getTime() + 3600000\n });\n\n return this;\n\n }\n\n logout() {\n\n this.apiCall('POST', '/restapi/oauth/revoke', {});\n\n return this;\n\n }\n\n presenceLoad(id) {\n\n this.apiCall('GET', '/restapi/v1.0/account/~/extension/' + id + '/presence', {\n \"uri\": \"https://platform.ringcentral.com/restapi/v1.0/account/123/extension/\" + id + \"/presence\",\n \"extension\": {\n \"uri\": \"https://platform.ringcentral.com/restapi/v1.0/account/123/extension/\" + id,\n \"id\": id,\n \"extensionNumber\": \"101\"\n },\n \"activeCalls\": [],\n \"presenceStatus\": \"Available\",\n \"telephonyStatus\": \"Ringing\",\n \"userStatus\": \"Available\",\n \"dndStatus\": \"TakeAllCalls\",\n \"extensionId\": id\n });\n\n return this;\n\n }\n\n subscribeGeneric(expiresIn) {\n\n expiresIn = expiresIn || 15 * 60 * 60;\n\n var date = new Date();\n\n this.apiCall('POST', '/restapi/v1.0/subscription', {\n 'eventFilters': [\n '/restapi/v1.0/account/~/extension/~/presence'\n ],\n 'expirationTime': new Date(date.getTime() + (expiresIn * 1000)).toISOString(),\n 'expiresIn': expiresIn,\n 'deliveryMode': {\n 'transportType': 'PubNub',\n 'encryption': false,\n 'address': '123_foo',\n 'subscriberKey': 'sub-c-foo',\n 'secretKey': 'sec-c-bar'\n },\n 'id': 'foo-bar-baz',\n 'creationTime': date.toISOString(),\n 'status': 'Active',\n 'uri': 'https://platform.ringcentral.com/restapi/v1.0/subscription/foo-bar-baz'\n });\n\n return this;\n\n }\n\n subscribeOnPresence(id, detailed) {\n\n id = id || '1';\n\n var date = new Date();\n\n this.apiCall('POST', '/restapi/v1.0/subscription', {\n 'eventFilters': ['/restapi/v1.0/account/~/extension/' + id + '/presence' + (detailed ? '?detailedTelephonyState=true' : '')],\n 'expirationTime': new Date(date.getTime() + (15 * 60 * 60 * 1000)).toISOString(),\n 'deliveryMode': {\n 'transportType': 'PubNub',\n 'encryption': true,\n 'address': '123_foo',\n 'subscriberKey': 'sub-c-foo',\n 'secretKey': 'sec-c-bar',\n 'encryptionAlgorithm': 'AES',\n 'encryptionKey': 'VQwb6EVNcQPBhE/JgFZ2zw=='\n },\n 'creationTime': date.toISOString(),\n 'id': 'foo-bar-baz',\n 'status': 'Active',\n 'uri': 'https://platform.ringcentral.com/restapi/v1.0/subscription/foo-bar-baz'\n });\n\n return this;\n\n }\n\n tokenRefresh(failure) {\n\n if (!failure) {\n\n this.apiCall('POST', '/restapi/oauth/token', {\n 'access_token': 'ACCESS_TOKEN_FROM_REFRESH',\n 'token_type': 'bearer',\n 'expires_in': 3600,\n 'refresh_token': 'REFRESH_TOKEN_FROM_REFRESH',\n 'refresh_token_expires_in': 60480,\n 'scope': 'SMS RCM Foo Boo'\n });\n\n } else {\n\n this.apiCall('POST', '/restapi/oauth/token', {\n 'message': 'Wrong token',\n 'error_description': 'Wrong token',\n 'description': 'Wrong token'\n }, 400);\n\n }\n\n return this;\n\n }\n\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/mocks/Registry.js\n **/","import ApiResponse from '../http/ApiResponse';\nimport {delay} from '../core/Utils';\nimport {createResponse} from '../http/Utils';\n\nexport default class Mock {\n\n constructor(method, path, json, status, statusText, delay) {\n this._method = method.toUpperCase();\n this._path = path;\n this._json = json || {};\n this._delay = delay || 10;\n this._status = status || 200;\n this._statusText = statusText || 'OK';\n }\n\n path() {\n return this._path;\n }\n\n method() {\n return this._method;\n }\n\n test(request:Request) {\n\n return request.url.indexOf(this._path) > -1 &&\n request.method.toUpperCase() == this._method;\n\n }\n\n async getResponse(request) {\n\n await delay(this._delay);\n\n return this.createResponse(this._json);\n\n }\n\n createResponse(json, init) {\n\n init = init || {};\n\n init.status = init.status || this._status;\n init.statusText = init.statusText || this._statusText;\n\n var str = JSON.stringify(json),\n res = createResponse(str, init);\n\n res.headers.set(ApiResponse._contentType, ApiResponse._jsonContentType);\n\n return res;\n\n }\n\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/mocks/Mock.js\n **/","import Observable from '../core/Observable';\nimport Queue from '../core/Queue';\nimport Auth from './Auth';\nimport {Promise} from '../core/Externals';\nimport {queryStringify, parseQueryString, delay} from '../core/Utils';\n\nexport default class Platform extends Observable {\n\n static _urlPrefix = '/restapi';\n static _apiVersion = 'v1.0';\n static _accessTokenTtl = null; // Platform server by default sets it to 60 * 60 = 1 hour\n static _refreshTokenTtl = 10 * 60 * 60; // 10 hours\n static _refreshTokenTtlRemember = 7 * 24 * 60 * 60; // 1 week\n static _tokenEndpoint = '/restapi/oauth/token';\n static _revokeEndpoint = '/restapi/oauth/revoke';\n static _authorizeEndpoint = '/restapi/oauth/authorize';\n static _refreshDelayMs = 100;\n static _cacheId = 'platform';\n static _clearCacheOnRefreshError = true;\n\n events = {\n beforeLogin: 'beforeLogin',\n loginSuccess: 'loginSuccess',\n loginError: 'loginError',\n beforeRefresh: 'beforeRefresh',\n refreshSuccess: 'refreshSuccess',\n refreshError: 'refreshError',\n beforeLogout: 'beforeLogout',\n logoutSuccess: 'logoutSuccess',\n logoutError: 'logoutError'\n };\n\n constructor(client, cache, server, appKey, appSecret) {\n\n super();\n\n this._server = server;\n this._appKey = appKey;\n this._appSecret = appSecret;\n\n /** @type {Cache} */\n this._cache = cache;\n\n /** @type {Client} */\n this._client = client;\n\n this._queue = new Queue(this._cache, Platform._cacheId + '-refresh');\n\n this._auth = new Auth(this._cache, Platform._cacheId);\n\n }\n\n /**\n * @return {Auth}\n */\n auth() {\n return this._auth;\n }\n\n /**\n * @return {Client}\n */\n client() {\n return this._client;\n }\n\n /**\n * @param {string} path\n * @param {object} [options]\n * @param {boolean} [options.addServer]\n * @param {string} [options.addMethod]\n * @param {boolean} [options.addToken]\n * @return {string}\n */\n createUrl(path, options) {\n\n path = path || '';\n options = options || {};\n\n var builtUrl = '',\n hasHttp = path.indexOf('http://') != -1 || path.indexOf('https://') != -1;\n\n if (options.addServer && !hasHttp) builtUrl += this._server;\n\n if (path.indexOf(Platform._urlPrefix) == -1 && !hasHttp) builtUrl += Platform._urlPrefix + '/' + Platform._apiVersion;\n\n builtUrl += path;\n\n if (options.addMethod || options.addToken) builtUrl += (path.indexOf('?') > -1 ? '&' : '?');\n\n if (options.addMethod) builtUrl += '_method=' + options.addMethod;\n if (options.addToken) builtUrl += (options.addMethod ? '&' : '') + 'access_token=' + this._auth.accessToken();\n\n return builtUrl;\n\n }\n\n /**\n * @param {string} options.redirectUri\n * @param {string} options.state\n * @param {string} options.brandId\n * @param {string} options.display\n * @param {string} options.prompt\n * @return {string}\n */\n authUrl(options) {\n\n options = options || {};\n\n return this.createUrl(Platform._authorizeEndpoint + '?' + queryStringify({\n 'response_type': 'code',\n 'redirect_uri': options.redirectUri || '',\n 'client_id': this._appKey,\n 'state': options.state || '',\n 'brand_id': options.brandId || '',\n 'display': options.display || '',\n 'prompt': options.prompt || ''\n }), {addServer: true})\n\n }\n\n /**\n * @param {string} url\n * @return {Object}\n */\n parseAuthRedirectUrl(url:string) {\n\n var qs = parseQueryString(url.split('?').reverse()[0]),\n error = qs.error_description || qs.error;\n\n if (error) {\n var e = new Error(error);\n e.error = qs.error;\n throw e;\n }\n\n return qs;\n\n }\n\n /**\n * @return {Promise}\n */\n async loggedIn() {\n\n try {\n await this._ensureAuthentication();\n return true;\n } catch (e) {\n return false;\n }\n\n }\n\n /**\n * @param {string} options.username\n * @param {string} options.password\n * @param {string} options.extension\n * @param {string} options.code\n * @param {string} options.redirectUri\n * @param {string} options.endpointId\n * @returns {Promise}\n */\n async login(options) {\n\n try {\n\n options = options || {};\n\n options.remember = options.remember || false;\n\n this.emit(this.events.beforeLogin);\n\n var body = {\n \"access_token_ttl\": Platform._accessTokenTtl,\n \"refresh_token_ttl\": options.remember ? Platform._refreshTokenTtlRemember : Platform._refreshTokenTtl\n };\n\n if (!options.code) {\n\n body.grant_type = 'password';\n body.username = options.username;\n body.password = options.password;\n body.extension = options.extension || '';\n\n } else if (options.code) {\n\n body.grant_type = 'authorization_code';\n body.code = options.code;\n body.redirect_uri = options.redirectUri;\n //body.client_id = this.getCredentials().key; // not needed\n\n }\n\n if (options.endpointId) body.endpoint_id = options.endpointId;\n\n var apiResponse = await this._tokenRequest(Platform._tokenEndpoint, body),\n json = apiResponse.json();\n\n this._auth\n .setData(json)\n .setRemember(options.remember);\n\n this.emit(this.events.loginSuccess, apiResponse);\n\n return apiResponse;\n\n } catch (e) {\n\n this._cache.clean();\n\n this.emit(this.events.loginError, e);\n\n throw e;\n\n }\n\n }\n\n /**\n * @returns {Promise}\n */\n async refresh() {\n\n try {\n\n this.emit(this.events.beforeRefresh);\n\n if (this._queue.isPaused()) {\n\n await this._queue.poll();\n\n if (!this._isAccessTokenValid()) {\n throw new Error('Automatic authentification timeout');\n }\n\n this.emit(this.events.refreshSuccess, null);\n\n return null;\n\n }\n\n this._queue.pause();\n\n // Make sure all existing AJAX calls had a chance to reach the server\n await delay(Platform._refreshDelayMs);\n\n // Perform sanity checks\n if (!this._auth.refreshToken()) throw new Error('Refresh token is missing');\n if (!this._auth.refreshTokenValid()) throw new Error('Refresh token has expired');\n if (!this._queue.isPaused()) throw new Error('Queue was resumed before refresh call');\n\n /** @type {ApiResponse} */\n var res = await this._tokenRequest(Platform._tokenEndpoint, {\n \"grant_type\": \"refresh_token\",\n \"refresh_token\": this._auth.refreshToken(),\n \"access_token_ttl\": Platform._accessTokenTtl,\n \"refresh_token_ttl\": this._auth.remember() ? Platform._refreshTokenTtlRemember : Platform._refreshTokenTtl\n }),\n json = res.json();\n\n if (!json.access_token) {\n throw this._client.makeError(new Error('Malformed OAuth response'), res);\n }\n\n this._auth.setData(json);\n this._queue.resume();\n\n this.emit(this.events.refreshSuccess, res);\n\n return res;\n\n } catch (e) {\n\n e = this._client.makeError(e);\n\n if (Platform._clearCacheOnRefreshError) {\n this._cache.clean();\n }\n\n this.emit(this.events.refreshError, e);\n\n throw e;\n\n }\n\n }\n\n /**\n * @returns {Promise}\n */\n async logout() {\n\n try {\n\n this.emit(this.events.beforeLogout);\n\n this._queue.pause();\n\n var res = await this._tokenRequest(Platform._revokeEndpoint, {\n token: this._auth.accessToken()\n });\n\n this._queue.resume();\n this._cache.clean();\n\n this.emit(this.events.logoutSuccess, res);\n\n return res;\n\n } catch (e) {\n\n this._queue.resume();\n\n this.emit(this.events.logoutError, e);\n\n throw e;\n\n }\n\n }\n\n /**\n * @param {Request} request\n * @param {object} [options]\n * @param {boolean} [options.skipAuthCheck]\n * @return {Promise}\n */\n async inflateRequest(request, options) {\n\n options = options || {};\n\n if (options.skipAuthCheck) return request;\n\n await this._ensureAuthentication();\n\n request.headers.set('Authorization', this._authHeader());\n //request.url = this.createUrl(request.url, {addServer: true}); //FIXME Spec prevents this...\n\n //TODO Add User-Agent here\n\n return request;\n\n }\n\n /**\n * @param {Request} request\n * @param {object} [options]\n * @param {boolean} [options.skipAuthCheck]\n * @return {Promise}\n */\n async sendRequest(request, options) {\n\n try {\n\n request = await this.inflateRequest(request, options);\n\n return (await this._client.sendRequest(request));\n\n } catch (e) {\n\n // Guard is for errors that come from polling\n if (!e.apiResponse || !e.apiResponse.response() || (e.apiResponse.response().status != 401)) throw e;\n\n this._auth.cancelAccessToken();\n\n return (await this.sendRequest(request, options));\n\n }\n\n }\n\n /**\n * General purpose function to send anything to server\n * @param {string} options.url\n * @param {object} [options.body]\n * @param {string} [options.method]\n * @param {object} [options.query]\n * @param {object} [options.headers]\n * @param {boolean} [options.skipAuthCheck]\n * @return {Promise}\n */\n async send(options = {}) {\n\n //FIXME https://github.com/bitinn/node-fetch/issues/43\n options.url = this.createUrl(options.url, {addServer: true});\n\n return await this.sendRequest(this._client.createRequest(options), options);\n\n }\n\n /**\n * @param {string} url\n * @param {object} [query]\n * @param {object} [options]\n * @param {object} [options.headers]\n * @param {boolean} [options.skipAuthCheck]\n * @return {Promise}\n */\n async get(url, query, options) {\n options = options || {};\n options.method = 'GET';\n options.url = url;\n options.query = query;\n return await this.send(options);\n }\n\n /**\n * @param {string} url\n * @param {object} body\n * @param {object} [query]\n * @param {object} [options]\n * @param {object} [options.headers]\n * @param {boolean} [options.skipAuthCheck]\n * @return {Promise}\n */\n async post(url, body, query, options) {\n options = options || {};\n options.method = 'POST';\n options.url = url;\n options.query = query;\n options.body = body;\n return await this.send(options);\n }\n\n /**\n * @param {string} url\n * @param {object} [body]\n * @param {object} [query]\n * @param {object} [options]\n * @param {object} [options.headers]\n * @param {boolean} [options.skipAuthCheck]\n * @return {Promise}\n */\n async put(url, body, query, options) {\n options = options || {};\n options.method = 'PUT';\n options.url = url;\n options.query = query;\n options.body = body;\n return await this.send(options);\n }\n\n /**\n * @param {string} url\n * @param {string} [query]\n * @param {object} [options]\n * @param {object} [options.headers]\n * @param {boolean} [options.skipAuthCheck]\n * @return {Promise}\n */\n async 'delete'(url, query, options) {\n options = options || {};\n options.method = 'DELETE';\n options.url = url;\n options.query = query;\n return await this.send(options);\n }\n\n async _tokenRequest(path, body) {\n\n return await this.send({\n url: path,\n skipAuthCheck: true,\n body: body,\n method: 'POST',\n headers: {\n 'Authorization': 'Basic ' + this._apiKey(),\n 'Content-Type': 'application/x-www-form-urlencoded'\n }\n });\n\n }\n\n async _ensureAuthentication() {\n\n if (this._isAccessTokenValid()) return null;\n return await this.refresh();\n\n }\n\n _isAccessTokenValid() {\n\n return (this._auth.accessTokenValid() && !this._queue.isPaused());\n\n }\n\n _apiKey() {\n var apiKey = this._appKey + ':' + this._appSecret;\n return (typeof btoa == 'function') ? btoa(apiKey) : new Buffer(apiKey).toString('base64');\n }\n\n _authHeader() {\n var token = this._auth.accessToken();\n return this._auth.tokenType() + (token ? ' ' + token : '');\n }\n\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/platform/Platform.js\n **/","export default class Auth {\n\n static refreshHandicapMs:number = 60 * 1000; // 1 minute\n static forcedTokenType = 'forced';\n\n constructor(cache, cacheId:string) {\n\n /** @type {Cache} */\n this._cache = cache;\n this._cacheId = cacheId;\n\n }\n\n accessToken() {\n return this.data().access_token;\n }\n\n refreshToken() {\n return this.data().refresh_token;\n }\n\n tokenType() {\n return this.data().token_type;\n }\n\n /**\n * @return {{token_type: string, access_token: string, expires_in: number, refresh_token: string, refresh_token_expires_in: number}}\n */\n data() {\n\n return this._cache.getItem(this._cacheId) || {\n token_type: '',\n access_token: '',\n expires_in: 0,\n refresh_token: '',\n refresh_token_expires_in: 0\n };\n\n }\n\n /**\n * @param {object} newData\n * @return {Auth}\n */\n setData(newData) {\n\n newData = newData || {};\n\n var data = this.data();\n\n Object.keys(newData).forEach((key) => {\n data[key] = newData[key];\n });\n\n data.expire_time = Date.now() + (data.expires_in * 1000);\n data.refresh_token_expire_time = Date.now() + (data.refresh_token_expires_in * 1000);\n\n this._cache.setItem(this._cacheId, data);\n\n return this;\n\n }\n\n /**\n * Check if there is a valid (not expired) access token\n * @return {boolean}\n */\n accessTokenValid() {\n\n var authData = this.data();\n return (authData.token_type === Auth.forcedTokenType || (authData.expire_time - Auth.refreshHandicapMs > Date.now()));\n\n }\n\n /**\n * Check if there is a valid (not expired) access token\n * @return {boolean}\n */\n refreshTokenValid() {\n\n return (this.data().refresh_token_expire_time > Date.now());\n\n }\n\n /**\n * @return {Auth}\n */\n cancelAccessToken() {\n\n return this.setData({\n access_token: '',\n expires_in: 0\n });\n\n }\n\n /**\n * This method sets a special authentication mode used in Service Web\n * @return {Auth}\n */\n forceAuthentication() {\n\n this.setData({\n token_type: Auth.forcedTokenType,\n access_token: '',\n expires_in: 0,\n refresh_token: '',\n refresh_token_expires_in: 0\n });\n\n return this;\n\n }\n\n /**\n * @param remember\n * @return {Auth}\n */\n setRemember(remember) {\n\n return this.setData({remember: remember});\n\n }\n\n /**\n * @return {boolean}\n */\n remember() {\n\n return !!this.data().remember;\n\n }\n\n}\n\n//export interface IAuthData {\n// remember?:boolean;\n// token_type?:string;\n// access_token?:string;\n// expires_in?:number; // actually it's string\n// expire_time?:number;\n// refresh_token?:string;\n// refresh_token_expires_in?:number; // actually it's string\n// refresh_token_expire_time?:number;\n// scope?:string;\n//}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/platform/Auth.js\n **/","import PubnubMock from './PubnubMock.js';\nimport {PUBNUB} from '../core/Externals';\n\nexport default class PubnubMockFactory {\n\n constructor() {\n this.crypto_obj = PUBNUB.crypto_obj;\n }\n\n init(options:PUBNUBInitOptions) {\n return new PubnubMock(options);\n }\n\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/pubnub/PubnubFactory.js\n **/","import Observable from '../core/Observable';\nimport {PUBNUB} from '../core/Externals';\n\nexport default class PubnubMock extends Observable {\n\n constructor(options) {\n super();\n this.options = options;\n this.crypto_obj = PUBNUB.crypto_obj;\n }\n\n ready() {}\n\n subscribe(options:PUBNUBSubscribeOptions) {\n this.on('message-' + options.channel, options.message);\n }\n\n unsubscribe(options:PUBNUBUnsubscribeOptions) {\n this.off('message-' + options.channel);\n }\n\n receiveMessage(msg, channel) {\n this.emit('message-' + channel, msg, 'env', channel);\n }\n\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/pubnub/PubnubMock.js\n **/","import Observable from '../core/Observable';\nimport Client from '../http/Client';\nimport {poll, stopPolling, delay} from '../core/Utils';\n\nexport default class Subscription extends Observable {\n\n static _renewHandicapMs = 2 * 60 * 1000;\n static _pollInterval = 10 * 1000;\n\n events = {\n notification: 'notification',\n removeSuccess: 'removeSuccess',\n removeError: 'removeError',\n renewSuccess: 'renewSuccess',\n renewError: 'renewError',\n subscribeSuccess: 'subscribeSuccess',\n subscribeError: 'subscribeError'\n };\n\n constructor(pubnubFactory, platform) {\n\n super();\n\n this._pubnubFactory = pubnubFactory;\n this._platform = platform;\n this._pubnub = null;\n this._timeout = null;\n this._subscription = {};\n\n }\n\n subscribed(){\n\n return !!(this._subscription.id &&\n this._subscription.deliveryMode &&\n this._subscription.deliveryMode.subscriberKey &&\n this._subscription.deliveryMode.address);\n\n }\n\n /**\n * @return {boolean}\n */\n alive() {\n\n return this.subscribed() && Date.now() < this.expirationTime();\n\n }\n\n expirationTime() {\n return new Date(this._subscription.expirationTime || 0).getTime() - Subscription._renewHandicapMs;\n }\n\n setSubscription(subscription) {\n\n subscription = subscription || {};\n\n this._clearTimeout();\n\n this._subscription = subscription;\n\n if (!this._pubnub) this._subscribeAtPubnub();\n\n this._setTimeout();\n\n return this;\n\n }\n\n subscription() {\n return this._subscription;\n }\n\n /**\n * Creates or updates subscription if there is an active one\n * @returns {Promise}\n */\n async register() {\n\n if (this.alive()) {\n return await this.renew();\n } else {\n return await this.subscribe();\n }\n\n }\n\n eventFilters() {\n return this._subscription.eventFilters || [];\n }\n\n /**\n * @param {string[]} events\n * @return {Subscription}\n */\n addEventFilters(events) {\n this.setEventFilters(this.eventFilters().concat(events));\n return this;\n }\n\n /**\n * @param {string[]} events\n * @return {Subscription}\n */\n setEventFilters(events) {\n this._subscription.eventFilters = events;\n return this;\n }\n\n /**\n * @returns {Promise}\n */\n async subscribe() {\n\n try {\n\n this._clearTimeout();\n\n if (!this.eventFilters().length) throw new Error('Events are undefined');\n\n var response = await this._platform.post('/restapi/v1.0/subscription', {\n eventFilters: this._getFullEventFilters(),\n deliveryMode: {\n transportType: 'PubNub'\n }\n }),\n json = response.json();\n\n this.setSubscription(json)\n .emit(this.events.subscribeSuccess, response);\n\n return response;\n\n\n } catch (e) {\n\n e = this._platform.client().makeError(e);\n\n this.reset()\n .emit(this.events.subscribeError, e);\n\n throw e;\n\n }\n\n }\n\n /**\n * @returns {Promise}\n */\n async renew() {\n\n try {\n\n this._clearTimeout();\n\n if (!this.alive()) throw new Error('Subscription is not alive');\n\n if (!this.eventFilters().length) throw new Error('Events are undefined');\n\n var response = await this._platform.put('/restapi/v1.0/subscription/' + this._subscription.id, {\n eventFilters: this._getFullEventFilters()\n });\n\n var json = response.json();\n\n this.setSubscription(json)\n .emit(this.events.renewSuccess, response);\n\n return response;\n\n } catch (e) {\n\n e = this._platform.client().makeError(e);\n\n this.reset()\n .emit(this.events.renewError, e);\n\n throw e;\n\n }\n\n }\n\n /**\n * @returns {Promise}\n */\n async remove() {\n\n try {\n\n if (!this.subscribed()) throw new Error('No subscription');\n\n var response = await this._platform.delete('/restapi/v1.0/subscription/' + this._subscription.id);\n\n this.reset()\n .emit(this.events.removeSuccess, response);\n\n return response;\n\n } catch (e) {\n\n e = this._platform.client().makeError(e);\n\n this.emit(this.events.removeError, e);\n\n throw e;\n\n }\n\n }\n\n /**\n * @returns {Promise}\n */\n resubscribe() {\n\n return this.reset().setEventFilters(this.eventFilters()).subscribe();\n\n }\n\n /**\n * Remove subscription and disconnect from PUBNUB\n * This method resets subscription at client side but backend is not notified\n */\n reset() {\n this._clearTimeout();\n if (this.subscribed() && this._pubnub) this._pubnub.unsubscribe({channel: this._subscription.deliveryMode.address});\n this._subscription = {};\n return this;\n }\n\n _getFullEventFilters() {\n\n return this.eventFilters().map((event) => {\n return this._platform.createUrl(event);\n });\n\n }\n\n _setTimeout() {\n\n this._clearTimeout();\n\n if (!this.alive()) throw new Error('Subscription is not alive');\n\n poll((next)=> {\n\n if (this.alive()) return next();\n\n this.renew();\n\n }, Subscription._pollInterval, this._timeout);\n\n return this;\n\n }\n\n _clearTimeout() {\n\n stopPolling(this._timeout);\n\n return this;\n\n }\n\n _decrypt(message:any) {\n\n if (!this.subscribed()) throw new Error('No subscription');\n\n if (this._subscription.deliveryMode.encryptionKey) {\n\n var PUBNUB = this._pubnubFactory;\n\n message = PUBNUB.crypto_obj.decrypt(message, this._subscription.deliveryMode.encryptionKey, {\n encryptKey: false,\n keyEncoding: 'base64',\n keyLength: 128,\n mode: 'ecb'\n });\n\n }\n\n return message;\n\n }\n\n _notify(message:any) {\n\n this.emit(this.events.notification, this._decrypt(message));\n\n return this;\n\n }\n\n _subscribeAtPubnub():Subscription {\n\n if (!this.alive()) throw new Error('Subscription is not alive');\n\n var PUBNUB = this._pubnubFactory;\n\n this._pubnub = PUBNUB.init({\n ssl: true,\n subscribe_key: this._subscription.deliveryMode.subscriberKey\n });\n\n this._pubnub.ready();\n\n this._pubnub.subscribe({\n channel: this._subscription.deliveryMode.address,\n message: this._notify.bind(this),\n connect: () => {}\n });\n\n return this;\n\n }\n\n}\n\n//export interface ISubscription {\n// id?:string;\n// uri?: string;\n// eventFilters?:string[];\n// expirationTime?:string; // 2014-03-12T19:54:35.613Z\n// expiresIn?:number;\n// deliveryMode?: {\n// transportType?:string;\n// encryption?:boolean;\n// address?:string;\n// subscriberKey?:string;\n// encryptionKey?:string;\n// secretKey?:string;\n// };\n// creationTime?:string; // 2014-03-12T19:54:35.613Z\n// status?:string; // Active\n//}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/subscription/Subscription.js\n **/","import Subscription from './Subscription';\nimport Queue from '../core/Queue';\n\nexport default class CachedSubscription extends Subscription {\n\n constructor(pubnubFactory, platform, cache, cacheKey) {\n\n super(pubnubFactory, platform);\n\n this._cache = cache;\n this._cacheKey = cacheKey;\n this._renewQueue = new Queue(this._cache, cacheKey + '-renew');\n this._resubscribeQueue = new Queue(this._cache, cacheKey + '-resubscribe');\n\n this.events = {\n ...this.events,\n queuedRenewSuccess: 'queuedRenewSuccess',\n queuedRenewError: 'queuedRenewError',\n queuedResubscribeSuccess: 'queuedResubscribeSuccess',\n queuedResubscribeError: 'queuedResubscribeError'\n };\n\n this.on(this.events.renewError, () => {\n this.resubscribe();\n });\n\n this.on([this.events.subscribeSuccess, this.events.renewSuccess], () => {\n this._cache.setItem(this._cacheKey, this.subscription());\n });\n\n this.on(this.events.removeSuccess, () => {\n this._cache.removeItem(this._cacheKey);\n });\n\n }\n\n /**\n * TODO Combine with Platform.refresh and move elsewhere\n * @param actionCb\n * @param queue\n * @param successEvent\n * @param errorEvent\n * @param errorMessage\n * @return {*}\n * @private\n */\n async _queue(actionCb, queue, successEvent, errorEvent, errorMessage) {\n\n try {\n\n if (queue.isPaused()) {\n\n await queue.poll();\n\n if (!this.alive()) {\n throw new Error(errorMessage);\n }\n\n this.emit(successEvent, null);\n\n return null;\n\n }\n\n queue.pause();\n\n var res = await actionCb.call(this);\n\n queue.resume();\n\n this.emit(successEvent, res);\n\n return res;\n\n } catch (e) {\n\n this.emit(errorEvent, e);\n\n throw e;\n\n }\n\n }\n\n /**\n * @returns {Promise}\n */\n renew() {\n\n return this._queue(\n super.renew,\n this._renewQueue,\n this.events.queuedRenewSuccess,\n this.events.queuedRenewError,\n 'Subscription is not alive after renew timeout'\n );\n\n }\n\n /**\n * @returns {Promise}\n */\n resubscribe() {\n\n return this._queue(\n super.resubscribe,\n this._resubscribeQueue,\n this.events.queuedResubscribeSuccess,\n this.events.queuedResubscribeError,\n 'Subscription is not alive after resubscribe timeout'\n );\n\n }\n\n /**\n * @param {string[]} events\n * @return {CachedSubscription}\n */\n restore(events) {\n\n var cachedSubscriptionData = this._cache.getItem(this._cacheKey);\n\n if (cachedSubscriptionData) {\n try {\n this.setSubscription(cachedSubscriptionData);\n } catch (e) {}\n } else {\n this.setEventFilters(events);\n }\n\n return this;\n\n }\n\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/subscription/CachedSubscription.js\n **/","/**\n * Copyright (c) 2014, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * https://raw.github.com/facebook/regenerator/master/LICENSE file. An\n * additional grant of patent rights can be found in the PATENTS file in\n * the same directory.\n */\n\n!(function(global) {\n \"use strict\";\n\n var hasOwn = Object.prototype.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n var inModule = typeof module === \"object\";\n var runtime = global.regeneratorRuntime;\n if (runtime) {\n if (inModule) {\n // If regeneratorRuntime is defined globally and we're in a module,\n // make the exports object identical to regeneratorRuntime.\n module.exports = runtime;\n }\n // Don't bother evaluating the rest of this file if the runtime was\n // already defined globally.\n return;\n }\n\n // Define the runtime globally (as expected by generated code) as either\n // module.exports (if we're in a module) or a new, empty object.\n runtime = global.regeneratorRuntime = inModule ? module.exports : {};\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided, then outerFn.prototype instanceof Generator.\n var generator = Object.create((outerFn || Generator).prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n runtime.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype;\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] = GeneratorFunction.displayName = \"GeneratorFunction\";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n runtime.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n runtime.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = \"GeneratorFunction\";\n }\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `value instanceof AwaitArgument` to determine if the yielded value is\n // meant to be awaited. Some may consider the name of this method too\n // cutesy, but they are curmudgeons.\n runtime.awrap = function(arg) {\n return new AwaitArgument(arg);\n };\n\n function AwaitArgument(arg) {\n this.arg = arg;\n }\n\n function AsyncIterator(generator) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value instanceof AwaitArgument) {\n return Promise.resolve(value.arg).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return Promise.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration. If the Promise is rejected, however, the\n // result for this iteration will be rejected with the same\n // reason. Note that rejections of yielded Promises are not\n // thrown back into the generator function, as is the case\n // when an awaited Promise is rejected. This difference in\n // behavior between yield and await is important, because it\n // allows the consumer to decide what to do with the yielded\n // rejection (swallow it and continue, manually .throw it back\n // into the generator, abandon iteration, whatever). With\n // await, by contrast, there is no opportunity to examine the\n // rejection reason outside the generator function, so the\n // only option is to throw it from the await expression, and\n // let the generator function handle the exception.\n result.value = unwrapped;\n resolve(result);\n }, reject);\n }\n }\n\n if (typeof process === \"object\" && process.domain) {\n invoke = process.domain.bind(invoke);\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new Promise(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n runtime.async = function(innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList)\n );\n\n return runtime.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n if (method === \"return\" ||\n (method === \"throw\" && delegate.iterator[method] === undefined)) {\n // A return or throw (when the delegate iterator has no throw\n // method) always terminates the yield* loop.\n context.delegate = null;\n\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n var returnMethod = delegate.iterator[\"return\"];\n if (returnMethod) {\n var record = tryCatch(returnMethod, delegate.iterator, arg);\n if (record.type === \"throw\") {\n // If the return method threw an exception, let that\n // exception prevail over the original return or throw.\n method = \"throw\";\n arg = record.arg;\n continue;\n }\n }\n\n if (method === \"return\") {\n // Continue with the outer return, now that the delegate\n // iterator has been terminated.\n continue;\n }\n }\n\n var record = tryCatch(\n delegate.iterator[method],\n delegate.iterator,\n arg\n );\n\n if (record.type === \"throw\") {\n context.delegate = null;\n\n // Like returning generator.throw(uncaught), but without the\n // overhead of an extra function call.\n method = \"throw\";\n arg = record.arg;\n continue;\n }\n\n // Delegate generator ran and handled its own exceptions so\n // regardless of what the method was, we continue as if it is\n // \"next\" with an undefined arg.\n method = \"next\";\n arg = undefined;\n\n var info = record.arg;\n if (info.done) {\n context[delegate.resultName] = info.value;\n context.next = delegate.nextLoc;\n } else {\n state = GenStateSuspendedYield;\n return info;\n }\n\n context.delegate = null;\n }\n\n if (method === \"next\") {\n if (state === GenStateSuspendedYield) {\n context.sent = arg;\n } else {\n context.sent = undefined;\n }\n\n } else if (method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw arg;\n }\n\n if (context.dispatchException(arg)) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n method = \"next\";\n arg = undefined;\n }\n\n } else if (method === \"return\") {\n context.abrupt(\"return\", arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n var info = {\n value: record.arg,\n done: context.done\n };\n\n if (record.arg === ContinueSentinel) {\n if (context.delegate && method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n arg = undefined;\n }\n } else {\n return info;\n }\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(arg) call above.\n method = \"throw\";\n arg = record.arg;\n }\n }\n };\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp[toStringTagSymbol] = \"Generator\";\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n runtime.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n runtime.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n this.sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n return !!caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.next = finallyEntry.finallyLoc;\n } else {\n this.complete(record);\n }\n\n return ContinueSentinel;\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = record.arg;\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n return ContinueSentinel;\n }\n };\n})(\n // Among the various tricks for obtaining a reference to the global\n // object, this seems to be the most reliable technique that does not\n // use indirect eval (which violates Content Security Policy).\n typeof global === \"object\" ? global :\n typeof window === \"object\" ? window :\n typeof self === \"object\" ? self : this\n);\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/regenerator/runtime.js\n ** module id = 26\n ** module chunks = 0\n **/"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/build/ringcentral.js b/build/ringcentral.js index ddf191ba..57638913 100644 --- a/build/ringcentral.js +++ b/build/ringcentral.js @@ -142,7 +142,7 @@ __webpack_require__(22); var SDK = (function () { _createClass(SDK, null, [{ key: 'version', - value: '2.0.0', + value: '2.0.1', enumerable: true }, { key: 'server', @@ -3254,8 +3254,9 @@ module.exports = exports['default']; var hasOwn = Object.prototype.hasOwnProperty; var undefined; // More compressible than void 0. - var iteratorSymbol = - typeof Symbol === "function" && Symbol.iterator || "@@iterator"; + var $Symbol = typeof Symbol === "function" ? Symbol : {}; + var iteratorSymbol = $Symbol.iterator || "@@iterator"; + var toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag"; var inModule = typeof module === "object"; var runtime = global.regeneratorRuntime; @@ -3325,7 +3326,7 @@ module.exports = exports['default']; var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype; GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype; GeneratorFunctionPrototype.constructor = GeneratorFunction; - GeneratorFunction.displayName = "GeneratorFunction"; + GeneratorFunctionPrototype[toStringTagSymbol] = GeneratorFunction.displayName = "GeneratorFunction"; // Helper for defining the .next, .throw, and .return methods of the // Iterator interface in terms of a single ._invoke method. @@ -3352,6 +3353,9 @@ module.exports = exports['default']; Object.setPrototypeOf(genFun, GeneratorFunctionPrototype); } else { genFun.__proto__ = GeneratorFunctionPrototype; + if (!(toStringTagSymbol in genFun)) { + genFun[toStringTagSymbol] = "GeneratorFunction"; + } } genFun.prototype = Object.create(Gp); return genFun; @@ -3371,46 +3375,54 @@ module.exports = exports['default']; } function AsyncIterator(generator) { - // This invoke function is written in a style that assumes some - // calling function (or Promise) will handle exceptions. - function invoke(method, arg) { - var result = generator[method](arg); - var value = result.value; - return value instanceof AwaitArgument - ? Promise.resolve(value.arg).then(invokeNext, invokeThrow) - : Promise.resolve(value).then(function(unwrapped) { - // When a yielded Promise is resolved, its final value becomes - // the .value of the Promise<{value,done}> result for the - // current iteration. If the Promise is rejected, however, the - // result for this iteration will be rejected with the same - // reason. Note that rejections of yielded Promises are not - // thrown back into the generator function, as is the case - // when an awaited Promise is rejected. This difference in - // behavior between yield and await is important, because it - // allows the consumer to decide what to do with the yielded - // rejection (swallow it and continue, manually .throw it back - // into the generator, abandon iteration, whatever). With - // await, by contrast, there is no opportunity to examine the - // rejection reason outside the generator function, so the - // only option is to throw it from the await expression, and - // let the generator function handle the exception. - result.value = unwrapped; - return result; + function invoke(method, arg, resolve, reject) { + var record = tryCatch(generator[method], generator, arg); + if (record.type === "throw") { + reject(record.arg); + } else { + var result = record.arg; + var value = result.value; + if (value instanceof AwaitArgument) { + return Promise.resolve(value.arg).then(function(value) { + invoke("next", value, resolve, reject); + }, function(err) { + invoke("throw", err, resolve, reject); }); + } + + return Promise.resolve(value).then(function(unwrapped) { + // When a yielded Promise is resolved, its final value becomes + // the .value of the Promise<{value,done}> result for the + // current iteration. If the Promise is rejected, however, the + // result for this iteration will be rejected with the same + // reason. Note that rejections of yielded Promises are not + // thrown back into the generator function, as is the case + // when an awaited Promise is rejected. This difference in + // behavior between yield and await is important, because it + // allows the consumer to decide what to do with the yielded + // rejection (swallow it and continue, manually .throw it back + // into the generator, abandon iteration, whatever). With + // await, by contrast, there is no opportunity to examine the + // rejection reason outside the generator function, so the + // only option is to throw it from the await expression, and + // let the generator function handle the exception. + result.value = unwrapped; + resolve(result); + }, reject); + } } if (typeof process === "object" && process.domain) { invoke = process.domain.bind(invoke); } - var invokeNext = invoke.bind(generator, "next"); - var invokeThrow = invoke.bind(generator, "throw"); - var invokeReturn = invoke.bind(generator, "return"); var previousPromise; function enqueue(method, arg) { function callInvokeWithMethodAndArg() { - return invoke(method, arg); + return new Promise(function(resolve, reject) { + invoke(method, arg, resolve, reject); + }); } return previousPromise = @@ -3431,9 +3443,7 @@ module.exports = exports['default']; // Avoid propagating failures to Promises returned by later // invocations of the iterator. callInvokeWithMethodAndArg - ) : new Promise(function (resolve) { - resolve(callInvokeWithMethodAndArg()); - }); + ) : callInvokeWithMethodAndArg(); } // Define the unified helper method that is used to implement .next, @@ -3608,6 +3618,8 @@ module.exports = exports['default']; return this; }; + Gp[toStringTagSymbol] = "Generator"; + Gp.toString = function() { return "[object Generator]"; }; diff --git a/build/ringcentral.js.map b/build/ringcentral.js.map index c680bc27..e0daa909 100644 --- a/build/ringcentral.js.map +++ b/build/ringcentral.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap 5d800152b5167bf356e8","webpack:///./src/SDK.js","webpack:///./src/core/Utils.js","webpack:///./src/core/Externals.js","webpack:///external {\"commonjs\":\"es6-promise\",\"commonjs2\":\"es6-promise\"}","webpack:///external {\"commonjs\":\"node-fetch\",\"commonjs2\":\"node-fetch\"}","webpack:///external {\"commonjs\":\"pubnub\",\"commonjs2\":\"pubnub\",\"amd\":\"pubnub\"}","webpack:///./src/core/Cache.js","webpack:///./src/core/Observable.js","webpack:///./src/core/Queue.js","webpack:///./src/http/Client.js","webpack:///./src/http/Utils.js","webpack:///./src/http/ApiResponse.js","webpack:///./src/mocks/ClientMock.js","webpack:///./src/mocks/Registry.js","webpack:///./src/mocks/Mock.js","webpack:///./src/platform/Platform.js","webpack:///./src/platform/Auth.js","webpack:///./src/pubnub/PubnubFactory.js","webpack:///./src/pubnub/PubnubMock.js","webpack:///./src/subscription/Subscription.js","webpack:///./src/subscription/CachedSubscription.js","webpack:///./~/regenerator/runtime.js"],"names":[],"mappings":"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A;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd,KAAK;AACL,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,WAAW;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW;AACX;AACA;;AAEA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAAS;AACT;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;;AAEA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,iCAAiC,kBAAkB;AACnD;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,iBAAiB;;AAEjB;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,YAAY;AACZ;AACA;;AAEA;AACA,YAAY;AACZ;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,8CAA8C,QAAQ;AACtD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa;AACb;AACA;;AAEA,WAAW;AACX;AACA;AACA;;AAEA,WAAW;AACX;AACA;AACA;;AAEA,WAAW;AACX;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA,8CAA8C,QAAQ;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;;AAEL;AACA,8CAA8C,QAAQ;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA,8CAA8C,QAAQ;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA","file":"ringcentral.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"es6-promise\"), require(\"node-fetch\"), require(\"pubnub\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([, , \"pubnub\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"SDK\"] = factory(require(\"es6-promise\"), require(\"node-fetch\"), require(\"pubnub\"));\n\telse\n\t\troot[\"RingCentral\"] = root[\"RingCentral\"] || {}, root[\"RingCentral\"][\"SDK\"] = factory(root[undefined], root[undefined], root[undefined]);\n})(this, function(__WEBPACK_EXTERNAL_MODULE_4__, __WEBPACK_EXTERNAL_MODULE_5__, __WEBPACK_EXTERNAL_MODULE_6__) {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/universalModuleDefinition\n **/"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/build/\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap 5d800152b5167bf356e8\n **/","import * as Utils from './core/Utils';\nimport Cache from './core/Cache';\nimport * as Externals from './core/Externals';\nimport Observable from './core/Observable';\nimport Queue from './core/Queue';\n\nimport Client from './http/Client';\nimport ApiResponse from './http/ApiResponse';\nimport * as HttpUtils from './http/Utils';\n\nimport {default as ClientMock} from './mocks/ClientMock';\nimport Mock from './mocks/Mock';\nimport Registry from './mocks/Registry';\n\nimport Platform from './platform/Platform';\nimport Auth from './platform/Auth';\n\nimport PubnubMockFactory from './pubnub/PubnubFactory';\n\nimport Subscription from './subscription/Subscription';\nimport CachedSubscription from './subscription/CachedSubscription';\n\nrequire(\"regenerator/runtime\");\n\nexport default class SDK {\n\n static version = '2.0.0';\n\n static server = {\n sandbox: 'https://platform.devtest.ringcentral.com',\n production: 'https://platform.ringcentral.com'\n };\n\n /**\n * @constructor\n * @param {object} [options]\n * @param {string} [options.server]\n * @param {string} [options.cachePrefix]\n * @param {string} [options.appSecret]\n * @param {string} [options.appKey]\n * @param {string} [options.appName]\n * @param {string} [options.appVersion]\n * @param {string} [options.pubnubFactory]\n * @param {string} [options.client]\n */\n constructor(options) {\n\n options = options || {};\n\n this._cache = new Cache(Externals.localStorage, options.cachePrefix);\n\n this._client = options.client || new Client();\n\n this._platform = new Platform(this._client, this._cache, options.server, options.appKey, options.appSecret);\n\n this._pubnubFactory = options.pubnubFactory || Externals.PUBNUB;\n\n }\n\n /**\n * @return {Platform}\n */\n platform() {\n return this._platform;\n }\n\n /**\n * @return {Subscription}\n */\n createSubscription() {\n return new Subscription(this._pubnubFactory, this._platform);\n }\n\n /**\n * @return {CachedSubscription}\n */\n createCachedSubscription(cacheKey) {\n return new CachedSubscription(this._pubnubFactory, this._platform, this._cache, cacheKey);\n }\n\n /**\n * @return {Cache}\n */\n cache() {\n return this._cache;\n }\n\n static core = {\n Cache: Cache,\n Observable: Observable,\n Utils: Utils,\n Externals: Externals,\n Queue: Queue\n };\n\n static http = {\n Client: Client,\n ApiResponse: ApiResponse,\n Utils: HttpUtils\n };\n\n static platform = {\n Auth: Auth,\n Platform: Platform\n };\n\n static subscription = {\n Subscription: Subscription\n };\n\n static mocks = {\n Client: ClientMock,\n Registry: Registry,\n Mock: Mock\n };\n\n static pubnub = {\n PubnubMockFactory: PubnubMockFactory\n };\n\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/SDK.js\n **/","import {Promise} from './Externals.js';\n\n/**\n * TODO Replace with something better\n * @see https://github.com/joyent/node/blob/master/lib/querystring.js\n * @param {object} parameters\n * @returns {string}\n */\nexport function queryStringify(parameters) {\n\n var array = [];\n\n parameters = parameters || {};\n\n Object.keys(parameters).forEach((k) => {\n\n var v = parameters[k];\n\n if (isArray(v)) {\n v.forEach((vv) => {\n array.push(encodeURIComponent(k) + '=' + encodeURIComponent(vv));\n });\n } else {\n array.push(encodeURIComponent(k) + '=' + encodeURIComponent(v));\n }\n\n });\n\n return array.join('&');\n\n}\n\n/**\n * TODO Replace with something better\n * @see https://github.com/joyent/node/blob/master/lib/querystring.js\n * @param {string} queryString\n * @returns {object}\n */\nexport function parseQueryString(queryString) {\n\n var argsParsed = {};\n\n queryString.split('&').forEach((arg) => {\n\n arg = decodeURIComponent(arg);\n\n if (arg.indexOf('=') == -1) {\n\n argsParsed[arg.trim()] = true;\n\n } else {\n\n var pair = arg.split('='),\n key = pair[0].trim(),\n value = pair[1].trim();\n\n if (key in argsParsed) {\n if (key in argsParsed && !isArray(argsParsed[key])) argsParsed[key] = [argsParsed[key]];\n argsParsed[key].push(value);\n } else {\n argsParsed[key] = value;\n }\n\n }\n\n });\n\n return argsParsed;\n\n}\n\n/**\n * @param obj\n * @return {boolean}\n */\nexport function isFunction(obj) {\n return typeof obj === \"function\";\n}\n\n/**\n * @param obj\n * @return {boolean}\n */\nexport function isArray(obj) {\n return Array.isArray ? Array.isArray(obj) : typeof obj === \"array\";\n}\n\n/**\n * @param fn\n * @param interval\n * @param timeout\n */\nexport function poll(fn, interval, timeout) { //NodeJS.Timer|number\n\n module.exports.stopPolling(timeout);\n\n interval = interval || 1000;\n\n var next = (delay) => {\n\n delay = delay || interval;\n\n interval = delay;\n\n return setTimeout(() => {\n\n fn(next, delay);\n\n }, delay);\n\n };\n\n return next();\n\n}\n\nexport function stopPolling(timeout) {\n if (timeout) clearTimeout(timeout);\n}\n\nexport function isNodeJS() {\n return (typeof process !== 'undefined');\n}\n\nexport function isBrowser() {\n return (typeof window !== 'undefined');\n}\n\nexport function delay(timeout) {\n return new Promise((resolve, reject) => {\n setTimeout(() => {\n resolve(null);\n }, timeout);\n });\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/core/Utils.js\n **/","import ES6Promise from 'es6-promise';\nimport nodeFetch from 'node-fetch';\nimport pubnub from 'pubnub';\n\nvar root = (new Function('return this'))();\n\nexport var Promise = (ES6Promise && ES6Promise.Promise) || root.Promise;\n\nexport var fetch = root.fetch || nodeFetch;\nexport var Request = root.Request || fetch.Request;\nexport var Response = root.Response || fetch.Response;\nexport var Headers = root.Headers || fetch.Headers;\n\nexport var PUBNUB = root.PUBNUB || pubnub;\n\nexport var localStorage = (typeof root.localStorage !== 'undefined') ? root.localStorage : {};\n\n\n/** WEBPACK FOOTER **\n ** ./src/core/Externals.js\n **/","module.exports = __WEBPACK_EXTERNAL_MODULE_4__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external {\"commonjs\":\"es6-promise\",\"commonjs2\":\"es6-promise\"}\n ** module id = 4\n ** module chunks = 0\n **/","module.exports = __WEBPACK_EXTERNAL_MODULE_5__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external {\"commonjs\":\"node-fetch\",\"commonjs2\":\"node-fetch\"}\n ** module id = 5\n ** module chunks = 0\n **/","module.exports = __WEBPACK_EXTERNAL_MODULE_6__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external {\"commonjs\":\"pubnub\",\"commonjs2\":\"pubnub\",\"amd\":\"pubnub\"}\n ** module id = 6\n ** module chunks = 0\n **/","export default class Cache {\n\n static defaultPrefix = 'rc-';\n\n constructor(storage, prefix) {\n this.setPrefix(prefix);\n this._storage = storage;\n }\n\n setPrefix(prefix) {\n this._prefix = prefix || Cache.defaultPrefix;\n return this;\n }\n\n setItem(key, data) {\n this._storage[this._prefixKey(key)] = JSON.stringify(data);\n return this;\n }\n\n removeItem(key) {\n delete this._storage[this._prefixKey(key)];\n return this;\n }\n\n getItem(key) {\n var item = this._storage[this._prefixKey(key)];\n if (!item) return null;\n return JSON.parse(item);\n }\n\n clean() {\n\n for (var key in this._storage) {\n\n if (!this._storage.hasOwnProperty(key)) continue;\n\n if (key.indexOf(this._prefix) === 0) {\n delete this._storage[key];\n }\n\n }\n\n return this;\n\n }\n\n _prefixKey(key) {\n return this._prefix + key;\n }\n\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/core/Cache.js\n **/","export default class Observable {\n\n constructor() {\n this.off();\n }\n\n hasListeners(event) {\n return (event in this._listeners);\n }\n\n on(events, callback) {\n\n if (typeof events == 'string') events = [events];\n if (!events) throw new Error('No events to subscribe to');\n if (typeof callback !== 'function') throw new Error('Callback must be a function');\n\n events.forEach((event) => {\n\n if (!this.hasListeners(event)) this._listeners[event] = [];\n\n this._listeners[event].push(callback);\n\n });\n\n return this;\n\n }\n\n emit(event, ...args) {\n\n var result = null;\n\n if (!this.hasListeners(event)) return null;\n\n this._listeners[event].some((callback) => {\n\n result = callback.apply(this, args);\n return (result === false);\n\n });\n\n return result;\n\n }\n\n off(event, callback) {\n\n if (!event) {\n\n this._listeners = {};\n\n } else {\n\n if (!callback) {\n\n delete this._listeners[event];\n\n } else {\n\n if (!this.hasListeners(event)) return this;\n\n this._listeners[event].forEach((cb, i) => {\n\n if (cb === callback) delete this._listeners[event][i];\n\n });\n\n }\n\n }\n\n return this;\n\n }\n\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/core/Observable.js\n **/","import {Promise} from '../core/Externals';\nimport {poll, stopPolling} from './Utils';\n\nexport default class Queue {\n\n static _pollInterval = 250;\n static _releaseTimeout = 5000;\n\n constructor(cache, cacheId) {\n\n this._cache = cache;\n this._cacheId = cacheId;\n this._promise = null;\n\n }\n\n isPaused() {\n\n var time = this._cache.getItem(this._cacheId);\n\n return !!time && Date.now() - parseInt(time) < Queue._releaseTimeout;\n }\n\n pause() {\n this._cache.setItem(this._cacheId, Date.now());\n return this;\n }\n\n resume() {\n this._cache.removeItem(this._cacheId);\n return this;\n }\n\n poll() {\n\n if (this._promise) return this._promise;\n\n this._promise = new Promise((resolve, reject) => {\n\n poll((next) => {\n\n if (this.isPaused()) return next();\n\n this._promise = null;\n\n this.resume(); // this is actually not needed but why not\n\n resolve(null);\n\n }, Queue._pollInterval);\n\n });\n\n return this._promise;\n\n }\n\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/core/Queue.js\n **/","import {fetch, Request, Response, Headers, Promise} from '../core/Externals';\nimport {queryStringify} from '../core/Utils';\nimport {findHeaderName} from './Utils';\nimport Observable from '../core/Observable';\nimport ApiResponse from './ApiResponse';\n\nexport default class Client extends Observable {\n\n static _allowedMethods = ['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'OPTIONS', 'HEAD'];\n\n events = {\n beforeRequest: 'beforeRequest',\n requestSuccess: 'requestSuccess',\n requestError: 'requestError'\n };\n\n /**\n * @param {Request} request\n * @return {Promise}\n */\n async sendRequest(request) {\n\n var apiResponse = new ApiResponse(request);\n\n try {\n\n //TODO Stop request if listeners return false\n this.emit(this.events.beforeRequest, apiResponse);\n\n apiResponse._response = await this._loadResponse(request);\n\n if (apiResponse._isMultipart() || apiResponse._isJson()) {\n apiResponse._text = await apiResponse.response().text();\n }\n\n if (!apiResponse.ok()) throw new Error('Response has unsuccessful status');\n\n this.emit(this.events.requestSuccess, apiResponse);\n\n return apiResponse;\n\n } catch (e) {\n\n if (!e.apiResponse) e = this.makeError(e, apiResponse);\n\n this.emit(this.events.requestError, e);\n\n throw e;\n\n }\n\n }\n\n /**\n * @param {Request} request\n * @return {Promise}\n * @private\n */\n async _loadResponse(request) {\n return await fetch.call(null, request);\n }\n\n /**\n * Wraps the JS Error object with transaction information\n * @param {Error|IApiError} e\n * @param {ApiResponse} apiResponse\n * @return {IApiError}\n */\n makeError(e, apiResponse) {\n\n // Wrap only if regular error\n if (!e.hasOwnProperty('apiResponse') && !e.hasOwnProperty('originalMessage')) {\n\n e.apiResponse = apiResponse;\n e.originalMessage = e.message;\n e.message = (apiResponse && apiResponse.error(true)) || e.originalMessage;\n\n }\n\n return e;\n\n }\n\n /**\n *\n * @param {object} init\n * @param {object} [init.url]\n * @param {object} [init.body]\n * @param {string} [init.method]\n * @param {object} [init.query]\n * @param {object} [init.headers]\n * @return {Request}\n */\n createRequest(init) {\n\n init = init || {};\n init.headers = init.headers || {};\n\n // Sanity checks\n if (!init.url) throw new Error('Url is not defined');\n if (!init.method) init.method = 'GET';\n if (init.method && Client._allowedMethods.indexOf(init.method) < 0) throw new Error('Method has wrong value: ' + init.method);\n\n // Defaults\n init.credentials = init.credentials || 'include';\n init.mode = init.mode || 'cors';\n\n // Append Query String\n if (init.query) {\n init.url = init.url + (init.url.indexOf('?') > -1 ? '&' : '?') + queryStringify(init.query);\n }\n\n if (!(findHeaderName('Accept', init.headers))) {\n init.headers['Accept'] = ApiResponse._jsonContentType;\n }\n\n // Serialize body\n //TODO Check that body is a plain object\n if (typeof init.body !== 'string' || !init.body) {\n\n var contentTypeHeaderName = findHeaderName(ApiResponse._contentType, init.headers);\n\n if (!contentTypeHeaderName) {\n contentTypeHeaderName = ApiResponse._contentType;\n init.headers[contentTypeHeaderName] = ApiResponse._jsonContentType;\n }\n\n var contentType = init.headers[contentTypeHeaderName];\n\n // Assign a new encoded body\n if (contentType.indexOf(ApiResponse._jsonContentType) > -1) {\n init.body = JSON.stringify(init.body);\n } else if (contentType.indexOf(ApiResponse._urlencodedContentType) > -1) {\n init.body = queryStringify(init.body);\n }\n\n }\n\n // Create a request with encoded body\n var req = new Request(init.url, init);\n\n // Keep the original body accessible directly (for mocks)\n req.originalBody = init.body;\n\n return req;\n\n }\n\n}\n\n/**\n * @name IApiError\n * @property {string} stack\n * @property {string} originalMessage\n * @property {ApiResponse} apiResponse\n */\n\n\n/** WEBPACK FOOTER **\n ** ./src/http/Client.js\n **/","import {fetch, Request, Response, Headers, Promise} from '../core/Externals';\nimport * as utils from '../core/Utils';\n\n/**\n * Creates a response\n * @param stringBody\n * @param init\n * @return {Response}\n */\nexport function createResponse(stringBody, init) {\n\n init = init || {};\n\n var response = new Response(stringBody, init);\n\n //TODO Wait for https://github.com/bitinn/node-fetch/issues/38\n if (utils.isNodeJS()) {\n\n response._text = stringBody;\n response._decode = function() {\n return this._text;\n };\n\n }\n\n return response;\n\n}\n\nexport function findHeaderName(name, headers) {\n name = name.toLowerCase();\n return Object.keys(headers).reduce(function(res, key) {\n if (res) return res;\n if (name == key.toLowerCase()) return key;\n return res;\n }, null);\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/http/Utils.js\n **/","import {fetch, Request, Response, Headers, Promise} from '../core/Externals';\nimport * as utils from './Utils';\n\nexport default class ApiResponse {\n\n static _contentType = 'Content-Type';\n static _jsonContentType = 'application/json';\n static _multipartContentType = 'multipart/mixed';\n static _urlencodedContentType = 'application/x-www-form-urlencoded';\n static _headerSeparator = ':';\n static _bodySeparator = '\\n\\n';\n static _boundarySeparator = '--';\n\n /**\n * @param {Request} request\n * @param {Response} response\n * @param {string} responseText\n */\n constructor(request, response, responseText) {\n\n /** @type {Request} */\n this._request = request;\n\n /** @type {Response} */\n this._response = response;\n\n this._text = responseText;\n this._json = null;\n this._multipart = [];\n\n }\n\n /**\n * @return {Response}\n */\n response() {\n return this._response;\n }\n\n /**\n * @return {Request}\n */\n request() {\n return this._request;\n }\n\n /**\n * @return {boolean}\n */\n ok() {\n return this._response && this._response.ok;\n }\n\n /**\n * @return {string}\n */\n text() {\n if (!this._isJson() && !this._isMultipart()) throw new Error('Response is not text');\n return this._text;\n }\n\n /**\n * @return {object}\n */\n json() {\n if (!this._isJson()) throw new Error('Response is not JSON');\n if (!this._json) {\n this._json = this._text ? JSON.parse(this._text) : null;\n }\n return this._json;\n }\n\n /**\n * @param [skipOKCheck]\n * @return {string}\n */\n error(skipOKCheck) {\n\n if (this.ok() && !skipOKCheck) return null;\n\n var message = (this._response && this._response.status ? this._response.status + ' ' : '') +\n (this._response && this._response.statusText ? this._response.statusText : '');\n\n try {\n\n if (this.json().message) message = this.json().message;\n if (this.json().error_description) message = this.json().error_description;\n if (this.json().description) message = this.json().description;\n\n } catch (e) {}\n\n return message;\n\n }\n\n /**\n * @return {ApiResponse[]}\n */\n multipart() {\n\n if (!this._isMultipart()) throw new Error('Response is not multipart');\n\n if (!this._multipart.length) {\n\n // Step 1. Split multipart response\n\n var text = this.text();\n\n if (!text) throw new Error('No response body');\n\n var boundary = this._getContentType().match(/boundary=([^;]+)/i)[1];\n\n if (!boundary) throw new Error('Cannot find boundary');\n\n var parts = text.toString().split(ApiResponse._boundarySeparator + boundary);\n\n if (parts[0].trim() === '') parts.shift();\n if (parts[parts.length - 1].trim() == ApiResponse._boundarySeparator) parts.pop();\n\n if (parts.length < 1) throw new Error('No parts in body');\n\n // Step 2. Parse status info\n\n var statusInfo = ApiResponse.create(parts.shift(), this._response.status, this._response.statusText).json();\n\n // Step 3. Parse all other parts\n\n this._multipart = parts.map((part:string, i) => {\n\n var status = statusInfo.response[i].status;\n\n return ApiResponse.create(part, status);\n\n });\n\n }\n\n return this._multipart;\n\n }\n\n _isContentType(contentType) {\n return this._getContentType().indexOf(contentType) > -1;\n }\n\n _getContentType() {\n return this._response.headers.get(ApiResponse._contentType) || '';\n }\n\n _isMultipart() {\n return this._isContentType(ApiResponse._multipartContentType);\n }\n\n _isUrlEncoded() {\n return this._isContentType(ApiResponse._urlencodedContentType);\n }\n\n _isJson() {\n return this._isContentType(ApiResponse._jsonContentType);\n }\n\n /**\n * Method is used to create ApiResponse object from string parts of multipart/mixed response\n * @param {string} [text]\n * @param {number} [status]\n * @param {string} [statusText]\n * @return {ApiResponse}\n */\n static create(text, status, statusText) {\n\n text = text || '';\n status = status || 200;\n statusText = statusText || 'OK';\n\n text = text.replace(/\\r/g, '');\n\n var headers = new Headers(),\n headersAndBody = text.split(ApiResponse._bodySeparator),\n headersText = (headersAndBody.length > 1) ? headersAndBody.shift() : '';\n\n text = headersAndBody.join(ApiResponse._bodySeparator);\n\n (headersText || '')\n .split('\\n')\n .forEach((header:string) => {\n\n var split = header.trim().split(ApiResponse._headerSeparator),\n key = split.shift().trim(),\n value = split.join(ApiResponse._headerSeparator).trim();\n\n if (key) headers.append(key, value);\n\n });\n\n return new ApiResponse(null, utils.createResponse(text, {\n headers: headers,\n status: status,\n statusText: statusText\n }), text);\n\n }\n\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/http/ApiResponse.js\n **/","import Registry from './Registry';\nimport {default as HttpClient} from '../http/Client';\n\nexport default class Client extends HttpClient {\n\n constructor() {\n super();\n this._registry = new Registry();\n }\n\n registry() {\n return this._registry;\n }\n\n async _loadResponse(request) {\n\n var mock = this._registry.find(request);\n\n return await mock.getResponse(request);\n\n }\n\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/mocks/ClientMock.js\n **/","import Mock from './Mock';\n\nexport default class Registry {\n\n constructor() {\n this._mocks = [];\n }\n\n add(mock) {\n this._mocks.push(mock);\n return this;\n }\n\n clear() {\n this._mocks = [];\n return this;\n }\n\n find(request) {\n\n //console.log('Registry is looking for', request);\n\n var mock = this._mocks.shift();\n\n if (!mock) throw new Error('No mock in registry for request ' + request.method + ' ' + request.url);\n\n if (!mock.test(request)) throw new Error('Wrong request ' + request.method + ' ' + request.url +\n ' for expected mock ' + mock.method() + ' ' + mock.path());\n\n return mock;\n\n }\n\n apiCall(method:string, path:string, response:any, status, statusText) {\n\n this.add(new Mock(method, path, response, status, statusText));\n\n return this;\n\n }\n\n authentication() {\n\n this.apiCall('POST', '/restapi/oauth/token', {\n 'access_token': 'ACCESS_TOKEN',\n 'token_type': 'bearer',\n 'expires_in': 3600,\n 'refresh_token': 'REFRESH_TOKEN',\n 'refresh_token_expires_in': 60480,\n 'scope': 'SMS RCM Foo Boo',\n 'expireTime': new Date().getTime() + 3600000\n });\n\n return this;\n\n }\n\n logout() {\n\n this.apiCall('POST', '/restapi/oauth/revoke', {});\n\n return this;\n\n }\n\n presenceLoad(id) {\n\n this.apiCall('GET', '/restapi/v1.0/account/~/extension/' + id + '/presence', {\n \"uri\": \"https://platform.ringcentral.com/restapi/v1.0/account/123/extension/\" + id + \"/presence\",\n \"extension\": {\n \"uri\": \"https://platform.ringcentral.com/restapi/v1.0/account/123/extension/\" + id,\n \"id\": id,\n \"extensionNumber\": \"101\"\n },\n \"activeCalls\": [],\n \"presenceStatus\": \"Available\",\n \"telephonyStatus\": \"Ringing\",\n \"userStatus\": \"Available\",\n \"dndStatus\": \"TakeAllCalls\",\n \"extensionId\": id\n });\n\n return this;\n\n }\n\n subscribeGeneric(expiresIn) {\n\n expiresIn = expiresIn || 15 * 60 * 60;\n\n var date = new Date();\n\n this.apiCall('POST', '/restapi/v1.0/subscription', {\n 'eventFilters': [\n '/restapi/v1.0/account/~/extension/~/presence'\n ],\n 'expirationTime': new Date(date.getTime() + (expiresIn * 1000)).toISOString(),\n 'expiresIn': expiresIn,\n 'deliveryMode': {\n 'transportType': 'PubNub',\n 'encryption': false,\n 'address': '123_foo',\n 'subscriberKey': 'sub-c-foo',\n 'secretKey': 'sec-c-bar'\n },\n 'id': 'foo-bar-baz',\n 'creationTime': date.toISOString(),\n 'status': 'Active',\n 'uri': 'https://platform.ringcentral.com/restapi/v1.0/subscription/foo-bar-baz'\n });\n\n return this;\n\n }\n\n subscribeOnPresence(id, detailed) {\n\n id = id || '1';\n\n var date = new Date();\n\n this.apiCall('POST', '/restapi/v1.0/subscription', {\n 'eventFilters': ['/restapi/v1.0/account/~/extension/' + id + '/presence' + (detailed ? '?detailedTelephonyState=true' : '')],\n 'expirationTime': new Date(date.getTime() + (15 * 60 * 60 * 1000)).toISOString(),\n 'deliveryMode': {\n 'transportType': 'PubNub',\n 'encryption': true,\n 'address': '123_foo',\n 'subscriberKey': 'sub-c-foo',\n 'secretKey': 'sec-c-bar',\n 'encryptionAlgorithm': 'AES',\n 'encryptionKey': 'VQwb6EVNcQPBhE/JgFZ2zw=='\n },\n 'creationTime': date.toISOString(),\n 'id': 'foo-bar-baz',\n 'status': 'Active',\n 'uri': 'https://platform.ringcentral.com/restapi/v1.0/subscription/foo-bar-baz'\n });\n\n return this;\n\n }\n\n tokenRefresh(failure) {\n\n if (!failure) {\n\n this.apiCall('POST', '/restapi/oauth/token', {\n 'access_token': 'ACCESS_TOKEN_FROM_REFRESH',\n 'token_type': 'bearer',\n 'expires_in': 3600,\n 'refresh_token': 'REFRESH_TOKEN_FROM_REFRESH',\n 'refresh_token_expires_in': 60480,\n 'scope': 'SMS RCM Foo Boo'\n });\n\n } else {\n\n this.apiCall('POST', '/restapi/oauth/token', {\n 'message': 'Wrong token',\n 'error_description': 'Wrong token',\n 'description': 'Wrong token'\n }, 400);\n\n }\n\n return this;\n\n }\n\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/mocks/Registry.js\n **/","import ApiResponse from '../http/ApiResponse';\nimport {delay} from '../core/Utils';\nimport {createResponse} from '../http/Utils';\n\nexport default class Mock {\n\n constructor(method, path, json, status, statusText, delay) {\n this._method = method.toUpperCase();\n this._path = path;\n this._json = json || {};\n this._delay = delay || 10;\n this._status = status || 200;\n this._statusText = statusText || 'OK';\n }\n\n path() {\n return this._path;\n }\n\n method() {\n return this._method;\n }\n\n test(request:Request) {\n\n return request.url.indexOf(this._path) > -1 &&\n request.method.toUpperCase() == this._method;\n\n }\n\n async getResponse(request) {\n\n await delay(this._delay);\n\n return this.createResponse(this._json);\n\n }\n\n createResponse(json, init) {\n\n init = init || {};\n\n init.status = init.status || this._status;\n init.statusText = init.statusText || this._statusText;\n\n var str = JSON.stringify(json),\n res = createResponse(str, init);\n\n res.headers.set(ApiResponse._contentType, ApiResponse._jsonContentType);\n\n return res;\n\n }\n\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/mocks/Mock.js\n **/","import Observable from '../core/Observable';\nimport Queue from '../core/Queue';\nimport Auth from './Auth';\nimport {Promise} from '../core/Externals';\nimport {queryStringify, parseQueryString, delay} from '../core/Utils';\n\nexport default class Platform extends Observable {\n\n static _urlPrefix = '/restapi';\n static _apiVersion = 'v1.0';\n static _accessTokenTtl = null; // Platform server by default sets it to 60 * 60 = 1 hour\n static _refreshTokenTtl = 10 * 60 * 60; // 10 hours\n static _refreshTokenTtlRemember = 7 * 24 * 60 * 60; // 1 week\n static _tokenEndpoint = '/restapi/oauth/token';\n static _revokeEndpoint = '/restapi/oauth/revoke';\n static _authorizeEndpoint = '/restapi/oauth/authorize';\n static _refreshDelayMs = 100;\n static _cacheId = 'platform';\n static _clearCacheOnRefreshError = true;\n\n events = {\n beforeLogin: 'beforeLogin',\n loginSuccess: 'loginSuccess',\n loginError: 'loginError',\n beforeRefresh: 'beforeRefresh',\n refreshSuccess: 'refreshSuccess',\n refreshError: 'refreshError',\n beforeLogout: 'beforeLogout',\n logoutSuccess: 'logoutSuccess',\n logoutError: 'logoutError'\n };\n\n constructor(client, cache, server, appKey, appSecret) {\n\n super();\n\n this._server = server;\n this._appKey = appKey;\n this._appSecret = appSecret;\n\n /** @type {Cache} */\n this._cache = cache;\n\n /** @type {Client} */\n this._client = client;\n\n this._queue = new Queue(this._cache, Platform._cacheId + '-refresh');\n\n this._auth = new Auth(this._cache, Platform._cacheId);\n\n }\n\n /**\n * @return {Auth}\n */\n auth() {\n return this._auth;\n }\n\n /**\n * @return {Client}\n */\n client() {\n return this._client;\n }\n\n /**\n * @param {string} path\n * @param {object} [options]\n * @param {boolean} [options.addServer]\n * @param {string} [options.addMethod]\n * @param {boolean} [options.addToken]\n * @return {string}\n */\n createUrl(path, options) {\n\n path = path || '';\n options = options || {};\n\n var builtUrl = '',\n hasHttp = path.indexOf('http://') != -1 || path.indexOf('https://') != -1;\n\n if (options.addServer && !hasHttp) builtUrl += this._server;\n\n if (path.indexOf(Platform._urlPrefix) == -1 && !hasHttp) builtUrl += Platform._urlPrefix + '/' + Platform._apiVersion;\n\n builtUrl += path;\n\n if (options.addMethod || options.addToken) builtUrl += (path.indexOf('?') > -1 ? '&' : '?');\n\n if (options.addMethod) builtUrl += '_method=' + options.addMethod;\n if (options.addToken) builtUrl += (options.addMethod ? '&' : '') + 'access_token=' + this._auth.accessToken();\n\n return builtUrl;\n\n }\n\n /**\n * @param {string} options.redirectUri\n * @param {string} options.state\n * @param {string} options.brandId\n * @param {string} options.display\n * @param {string} options.prompt\n * @return {string}\n */\n authUrl(options) {\n\n options = options || {};\n\n return this.createUrl(Platform._authorizeEndpoint + '?' + queryStringify({\n 'response_type': 'code',\n 'redirect_uri': options.redirectUri || '',\n 'client_id': this._appKey,\n 'state': options.state || '',\n 'brand_id': options.brandId || '',\n 'display': options.display || '',\n 'prompt': options.prompt || ''\n }), {addServer: true})\n\n }\n\n /**\n * @param {string} url\n * @return {Object}\n */\n parseAuthRedirectUrl(url:string) {\n\n var qs = parseQueryString(url.split('?').reverse()[0]),\n error = qs.error_description || qs.error;\n\n if (error) {\n var e = new Error(error);\n e.error = qs.error;\n throw e;\n }\n\n return qs;\n\n }\n\n /**\n * @return {Promise}\n */\n async loggedIn() {\n\n try {\n await this._ensureAuthentication();\n return true;\n } catch (e) {\n return false;\n }\n\n }\n\n /**\n * @param {string} options.username\n * @param {string} options.password\n * @param {string} options.extension\n * @param {string} options.code\n * @param {string} options.redirectUri\n * @param {string} options.endpointId\n * @returns {Promise}\n */\n async login(options) {\n\n try {\n\n options = options || {};\n\n options.remember = options.remember || false;\n\n this.emit(this.events.beforeLogin);\n\n var body = {\n \"access_token_ttl\": Platform._accessTokenTtl,\n \"refresh_token_ttl\": options.remember ? Platform._refreshTokenTtlRemember : Platform._refreshTokenTtl\n };\n\n if (!options.code) {\n\n body.grant_type = 'password';\n body.username = options.username;\n body.password = options.password;\n body.extension = options.extension || '';\n\n } else if (options.code) {\n\n body.grant_type = 'authorization_code';\n body.code = options.code;\n body.redirect_uri = options.redirectUri;\n //body.client_id = this.getCredentials().key; // not needed\n\n }\n\n if (options.endpointId) body.endpoint_id = options.endpointId;\n\n var apiResponse = await this._tokenRequest(Platform._tokenEndpoint, body),\n json = apiResponse.json();\n\n this._auth\n .setData(json)\n .setRemember(options.remember);\n\n this.emit(this.events.loginSuccess, apiResponse);\n\n return apiResponse;\n\n } catch (e) {\n\n this._cache.clean();\n\n this.emit(this.events.loginError, e);\n\n throw e;\n\n }\n\n }\n\n /**\n * @returns {Promise}\n */\n async refresh() {\n\n try {\n\n this.emit(this.events.beforeRefresh);\n\n if (this._queue.isPaused()) {\n\n await this._queue.poll();\n\n if (!this._isAccessTokenValid()) {\n throw new Error('Automatic authentification timeout');\n }\n\n this.emit(this.events.refreshSuccess, null);\n\n return null;\n\n }\n\n this._queue.pause();\n\n // Make sure all existing AJAX calls had a chance to reach the server\n await delay(Platform._refreshDelayMs);\n\n // Perform sanity checks\n if (!this._auth.refreshToken()) throw new Error('Refresh token is missing');\n if (!this._auth.refreshTokenValid()) throw new Error('Refresh token has expired');\n if (!this._queue.isPaused()) throw new Error('Queue was resumed before refresh call');\n\n /** @type {ApiResponse} */\n var res = await this._tokenRequest(Platform._tokenEndpoint, {\n \"grant_type\": \"refresh_token\",\n \"refresh_token\": this._auth.refreshToken(),\n \"access_token_ttl\": Platform._accessTokenTtl,\n \"refresh_token_ttl\": this._auth.remember() ? Platform._refreshTokenTtlRemember : Platform._refreshTokenTtl\n }),\n json = res.json();\n\n if (!json.access_token) {\n throw this._client.makeError(new Error('Malformed OAuth response'), res);\n }\n\n this._auth.setData(json);\n this._queue.resume();\n\n this.emit(this.events.refreshSuccess, res);\n\n return res;\n\n } catch (e) {\n\n e = this._client.makeError(e);\n\n if (Platform._clearCacheOnRefreshError) {\n this._cache.clean();\n }\n\n this.emit(this.events.refreshError, e);\n\n throw e;\n\n }\n\n }\n\n /**\n * @returns {Promise}\n */\n async logout() {\n\n try {\n\n this.emit(this.events.beforeLogout);\n\n this._queue.pause();\n\n var res = await this._tokenRequest(Platform._revokeEndpoint, {\n token: this._auth.accessToken()\n });\n\n this._queue.resume();\n this._cache.clean();\n\n this.emit(this.events.logoutSuccess, res);\n\n return res;\n\n } catch (e) {\n\n this._queue.resume();\n\n this.emit(this.events.logoutError, e);\n\n throw e;\n\n }\n\n }\n\n /**\n * @param {Request} request\n * @param {object} [options]\n * @param {boolean} [options.skipAuthCheck]\n * @return {Promise}\n */\n async inflateRequest(request, options) {\n\n options = options || {};\n\n if (options.skipAuthCheck) return request;\n\n await this._ensureAuthentication();\n\n request.headers.set('Authorization', this._authHeader());\n //request.url = this.createUrl(request.url, {addServer: true}); //FIXME Spec prevents this...\n\n //TODO Add User-Agent here\n\n return request;\n\n }\n\n /**\n * @param {Request} request\n * @param {object} [options]\n * @param {boolean} [options.skipAuthCheck]\n * @return {Promise}\n */\n async sendRequest(request, options) {\n\n try {\n\n request = await this.inflateRequest(request, options);\n\n return (await this._client.sendRequest(request));\n\n } catch (e) {\n\n // Guard is for errors that come from polling\n if (!e.apiResponse || !e.apiResponse.response() || (e.apiResponse.response().status != 401)) throw e;\n\n this._auth.cancelAccessToken();\n\n return (await this.sendRequest(request, options));\n\n }\n\n }\n\n /**\n * General purpose function to send anything to server\n * @param {string} options.url\n * @param {object} [options.body]\n * @param {string} [options.method]\n * @param {object} [options.query]\n * @param {object} [options.headers]\n * @param {boolean} [options.skipAuthCheck]\n * @return {Promise}\n */\n async send(options = {}) {\n\n //FIXME https://github.com/bitinn/node-fetch/issues/43\n options.url = this.createUrl(options.url, {addServer: true});\n\n return await this.sendRequest(this._client.createRequest(options), options);\n\n }\n\n /**\n * @param {string} url\n * @param {object} [query]\n * @param {object} [options]\n * @param {object} [options.headers]\n * @param {boolean} [options.skipAuthCheck]\n * @return {Promise}\n */\n async get(url, query, options) {\n options = options || {};\n options.method = 'GET';\n options.url = url;\n options.query = query;\n return await this.send(options);\n }\n\n /**\n * @param {string} url\n * @param {object} body\n * @param {object} [query]\n * @param {object} [options]\n * @param {object} [options.headers]\n * @param {boolean} [options.skipAuthCheck]\n * @return {Promise}\n */\n async post(url, body, query, options) {\n options = options || {};\n options.method = 'POST';\n options.url = url;\n options.query = query;\n options.body = body;\n return await this.send(options);\n }\n\n /**\n * @param {string} url\n * @param {object} [body]\n * @param {object} [query]\n * @param {object} [options]\n * @param {object} [options.headers]\n * @param {boolean} [options.skipAuthCheck]\n * @return {Promise}\n */\n async put(url, body, query, options) {\n options = options || {};\n options.method = 'PUT';\n options.url = url;\n options.query = query;\n options.body = body;\n return await this.send(options);\n }\n\n /**\n * @param {string} url\n * @param {string} [query]\n * @param {object} [options]\n * @param {object} [options.headers]\n * @param {boolean} [options.skipAuthCheck]\n * @return {Promise}\n */\n async 'delete'(url, query, options) {\n options = options || {};\n options.method = 'DELETE';\n options.url = url;\n options.query = query;\n return await this.send(options);\n }\n\n async _tokenRequest(path, body) {\n\n return await this.send({\n url: path,\n skipAuthCheck: true,\n body: body,\n method: 'POST',\n headers: {\n 'Authorization': 'Basic ' + this._apiKey(),\n 'Content-Type': 'application/x-www-form-urlencoded'\n }\n });\n\n }\n\n async _ensureAuthentication() {\n\n if (this._isAccessTokenValid()) return null;\n return await this.refresh();\n\n }\n\n _isAccessTokenValid() {\n\n return (this._auth.accessTokenValid() && !this._queue.isPaused());\n\n }\n\n _apiKey() {\n var apiKey = this._appKey + ':' + this._appSecret;\n return (typeof btoa == 'function') ? btoa(apiKey) : new Buffer(apiKey).toString('base64');\n }\n\n _authHeader() {\n var token = this._auth.accessToken();\n return this._auth.tokenType() + (token ? ' ' + token : '');\n }\n\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/platform/Platform.js\n **/","export default class Auth {\n\n static refreshHandicapMs:number = 60 * 1000; // 1 minute\n static forcedTokenType = 'forced';\n\n constructor(cache, cacheId:string) {\n\n /** @type {Cache} */\n this._cache = cache;\n this._cacheId = cacheId;\n\n }\n\n accessToken() {\n return this.data().access_token;\n }\n\n refreshToken() {\n return this.data().refresh_token;\n }\n\n tokenType() {\n return this.data().token_type;\n }\n\n /**\n * @return {{token_type: string, access_token: string, expires_in: number, refresh_token: string, refresh_token_expires_in: number}}\n */\n data() {\n\n return this._cache.getItem(this._cacheId) || {\n token_type: '',\n access_token: '',\n expires_in: 0,\n refresh_token: '',\n refresh_token_expires_in: 0\n };\n\n }\n\n /**\n * @param {object} newData\n * @return {Auth}\n */\n setData(newData) {\n\n newData = newData || {};\n\n var data = this.data();\n\n Object.keys(newData).forEach((key) => {\n data[key] = newData[key];\n });\n\n data.expire_time = Date.now() + (data.expires_in * 1000);\n data.refresh_token_expire_time = Date.now() + (data.refresh_token_expires_in * 1000);\n\n this._cache.setItem(this._cacheId, data);\n\n return this;\n\n }\n\n /**\n * Check if there is a valid (not expired) access token\n * @return {boolean}\n */\n accessTokenValid() {\n\n var authData = this.data();\n return (authData.token_type === Auth.forcedTokenType || (authData.expire_time - Auth.refreshHandicapMs > Date.now()));\n\n }\n\n /**\n * Check if there is a valid (not expired) access token\n * @return {boolean}\n */\n refreshTokenValid() {\n\n return (this.data().refresh_token_expire_time > Date.now());\n\n }\n\n /**\n * @return {Auth}\n */\n cancelAccessToken() {\n\n return this.setData({\n access_token: '',\n expires_in: 0\n });\n\n }\n\n /**\n * This method sets a special authentication mode used in Service Web\n * @return {Auth}\n */\n forceAuthentication() {\n\n this.setData({\n token_type: Auth.forcedTokenType,\n access_token: '',\n expires_in: 0,\n refresh_token: '',\n refresh_token_expires_in: 0\n });\n\n return this;\n\n }\n\n /**\n * @param remember\n * @return {Auth}\n */\n setRemember(remember) {\n\n return this.setData({remember: remember});\n\n }\n\n /**\n * @return {boolean}\n */\n remember() {\n\n return !!this.data().remember;\n\n }\n\n}\n\n//export interface IAuthData {\n// remember?:boolean;\n// token_type?:string;\n// access_token?:string;\n// expires_in?:number; // actually it's string\n// expire_time?:number;\n// refresh_token?:string;\n// refresh_token_expires_in?:number; // actually it's string\n// refresh_token_expire_time?:number;\n// scope?:string;\n//}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/platform/Auth.js\n **/","import PubnubMock from './PubnubMock.js';\nimport {PUBNUB} from '../core/Externals';\n\nexport default class PubnubMockFactory {\n\n constructor() {\n this.crypto_obj = PUBNUB.crypto_obj;\n }\n\n init(options:PUBNUBInitOptions) {\n return new PubnubMock(options);\n }\n\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/pubnub/PubnubFactory.js\n **/","import Observable from '../core/Observable';\nimport {PUBNUB} from '../core/Externals';\n\nexport default class PubnubMock extends Observable {\n\n constructor(options) {\n super();\n this.options = options;\n this.crypto_obj = PUBNUB.crypto_obj;\n }\n\n ready() {}\n\n subscribe(options:PUBNUBSubscribeOptions) {\n this.on('message-' + options.channel, options.message);\n }\n\n unsubscribe(options:PUBNUBUnsubscribeOptions) {\n this.off('message-' + options.channel);\n }\n\n receiveMessage(msg, channel) {\n this.emit('message-' + channel, msg, 'env', channel);\n }\n\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/pubnub/PubnubMock.js\n **/","import Observable from '../core/Observable';\nimport Client from '../http/Client';\nimport {poll, stopPolling, delay} from '../core/Utils';\n\nexport default class Subscription extends Observable {\n\n static _renewHandicapMs = 2 * 60 * 1000;\n static _pollInterval = 10 * 1000;\n\n events = {\n notification: 'notification',\n removeSuccess: 'removeSuccess',\n removeError: 'removeError',\n renewSuccess: 'renewSuccess',\n renewError: 'renewError',\n subscribeSuccess: 'subscribeSuccess',\n subscribeError: 'subscribeError'\n };\n\n constructor(pubnubFactory, platform) {\n\n super();\n\n this._pubnubFactory = pubnubFactory;\n this._platform = platform;\n this._pubnub = null;\n this._timeout = null;\n this._subscription = {};\n\n }\n\n subscribed(){\n\n return !!(this._subscription.id &&\n this._subscription.deliveryMode &&\n this._subscription.deliveryMode.subscriberKey &&\n this._subscription.deliveryMode.address);\n\n }\n\n /**\n * @return {boolean}\n */\n alive() {\n\n return this.subscribed() && Date.now() < this.expirationTime();\n\n }\n\n expirationTime() {\n return new Date(this._subscription.expirationTime || 0).getTime() - Subscription._renewHandicapMs;\n }\n\n setSubscription(subscription) {\n\n subscription = subscription || {};\n\n this._clearTimeout();\n\n this._subscription = subscription;\n\n if (!this._pubnub) this._subscribeAtPubnub();\n\n this._setTimeout();\n\n return this;\n\n }\n\n subscription() {\n return this._subscription;\n }\n\n /**\n * Creates or updates subscription if there is an active one\n * @returns {Promise}\n */\n async register() {\n\n if (this.alive()) {\n return await this.renew();\n } else {\n return await this.subscribe();\n }\n\n }\n\n eventFilters() {\n return this._subscription.eventFilters || [];\n }\n\n /**\n * @param {string[]} events\n * @return {Subscription}\n */\n addEventFilters(events) {\n this.setEventFilters(this.eventFilters().concat(events));\n return this;\n }\n\n /**\n * @param {string[]} events\n * @return {Subscription}\n */\n setEventFilters(events) {\n this._subscription.eventFilters = events;\n return this;\n }\n\n /**\n * @returns {Promise}\n */\n async subscribe() {\n\n try {\n\n this._clearTimeout();\n\n if (!this.eventFilters().length) throw new Error('Events are undefined');\n\n var response = await this._platform.post('/restapi/v1.0/subscription', {\n eventFilters: this._getFullEventFilters(),\n deliveryMode: {\n transportType: 'PubNub'\n }\n }),\n json = response.json();\n\n this.setSubscription(json)\n .emit(this.events.subscribeSuccess, response);\n\n return response;\n\n\n } catch (e) {\n\n e = this._platform.client().makeError(e);\n\n this.reset()\n .emit(this.events.subscribeError, e);\n\n throw e;\n\n }\n\n }\n\n /**\n * @returns {Promise}\n */\n async renew() {\n\n try {\n\n this._clearTimeout();\n\n if (!this.alive()) throw new Error('Subscription is not alive');\n\n if (!this.eventFilters().length) throw new Error('Events are undefined');\n\n var response = await this._platform.put('/restapi/v1.0/subscription/' + this._subscription.id, {\n eventFilters: this._getFullEventFilters()\n });\n\n var json = response.json();\n\n this.setSubscription(json)\n .emit(this.events.renewSuccess, response);\n\n return response;\n\n } catch (e) {\n\n e = this._platform.client().makeError(e);\n\n this.reset()\n .emit(this.events.renewError, e);\n\n throw e;\n\n }\n\n }\n\n /**\n * @returns {Promise}\n */\n async remove() {\n\n try {\n\n if (!this.subscribed()) throw new Error('No subscription');\n\n var response = await this._platform.delete('/restapi/v1.0/subscription/' + this._subscription.id);\n\n this.reset()\n .emit(this.events.removeSuccess, response);\n\n return response;\n\n } catch (e) {\n\n e = this._platform.client().makeError(e);\n\n this.emit(this.events.removeError, e);\n\n throw e;\n\n }\n\n }\n\n /**\n * @returns {Promise}\n */\n resubscribe() {\n\n return this.reset().setEventFilters(this.eventFilters()).subscribe();\n\n }\n\n /**\n * Remove subscription and disconnect from PUBNUB\n * This method resets subscription at client side but backend is not notified\n */\n reset() {\n this._clearTimeout();\n if (this.subscribed() && this._pubnub) this._pubnub.unsubscribe({channel: this._subscription.deliveryMode.address});\n this._subscription = {};\n return this;\n }\n\n _getFullEventFilters() {\n\n return this.eventFilters().map((event) => {\n return this._platform.createUrl(event);\n });\n\n }\n\n _setTimeout() {\n\n this._clearTimeout();\n\n if (!this.alive()) throw new Error('Subscription is not alive');\n\n poll((next)=> {\n\n if (this.alive()) return next();\n\n this.renew();\n\n }, Subscription._pollInterval, this._timeout);\n\n return this;\n\n }\n\n _clearTimeout() {\n\n stopPolling(this._timeout);\n\n return this;\n\n }\n\n _decrypt(message:any) {\n\n if (!this.subscribed()) throw new Error('No subscription');\n\n if (this._subscription.deliveryMode.encryptionKey) {\n\n var PUBNUB = this._pubnubFactory;\n\n message = PUBNUB.crypto_obj.decrypt(message, this._subscription.deliveryMode.encryptionKey, {\n encryptKey: false,\n keyEncoding: 'base64',\n keyLength: 128,\n mode: 'ecb'\n });\n\n }\n\n return message;\n\n }\n\n _notify(message:any) {\n\n this.emit(this.events.notification, this._decrypt(message));\n\n return this;\n\n }\n\n _subscribeAtPubnub():Subscription {\n\n if (!this.alive()) throw new Error('Subscription is not alive');\n\n var PUBNUB = this._pubnubFactory;\n\n this._pubnub = PUBNUB.init({\n ssl: true,\n subscribe_key: this._subscription.deliveryMode.subscriberKey\n });\n\n this._pubnub.ready();\n\n this._pubnub.subscribe({\n channel: this._subscription.deliveryMode.address,\n message: this._notify.bind(this),\n connect: () => {}\n });\n\n return this;\n\n }\n\n}\n\n//export interface ISubscription {\n// id?:string;\n// uri?: string;\n// eventFilters?:string[];\n// expirationTime?:string; // 2014-03-12T19:54:35.613Z\n// expiresIn?:number;\n// deliveryMode?: {\n// transportType?:string;\n// encryption?:boolean;\n// address?:string;\n// subscriberKey?:string;\n// encryptionKey?:string;\n// secretKey?:string;\n// };\n// creationTime?:string; // 2014-03-12T19:54:35.613Z\n// status?:string; // Active\n//}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/subscription/Subscription.js\n **/","import Subscription from './Subscription';\nimport Queue from '../core/Queue';\n\nexport default class CachedSubscription extends Subscription {\n\n constructor(pubnubFactory, platform, cache, cacheKey) {\n\n super(pubnubFactory, platform);\n\n this._cache = cache;\n this._cacheKey = cacheKey;\n this._renewQueue = new Queue(this._cache, cacheKey + '-renew');\n this._resubscribeQueue = new Queue(this._cache, cacheKey + '-resubscribe');\n\n this.events = {\n ...this.events,\n queuedRenewSuccess: 'queuedRenewSuccess',\n queuedRenewError: 'queuedRenewError',\n queuedResubscribeSuccess: 'queuedResubscribeSuccess',\n queuedResubscribeError: 'queuedResubscribeError'\n };\n\n this.on(this.events.renewError, () => {\n this.resubscribe();\n });\n\n this.on([this.events.subscribeSuccess, this.events.renewSuccess], () => {\n this._cache.setItem(this._cacheKey, this.subscription());\n });\n\n this.on(this.events.removeSuccess, () => {\n this._cache.removeItem(this._cacheKey);\n });\n\n }\n\n /**\n * TODO Combine with Platform.refresh and move elsewhere\n * @param actionCb\n * @param queue\n * @param successEvent\n * @param errorEvent\n * @param errorMessage\n * @return {*}\n * @private\n */\n async _queue(actionCb, queue, successEvent, errorEvent, errorMessage) {\n\n try {\n\n if (queue.isPaused()) {\n\n await queue.poll();\n\n if (!this.alive()) {\n throw new Error(errorMessage);\n }\n\n this.emit(successEvent, null);\n\n return null;\n\n }\n\n queue.pause();\n\n var res = await actionCb.call(this);\n\n queue.resume();\n\n this.emit(successEvent, res);\n\n return res;\n\n } catch (e) {\n\n this.emit(errorEvent, e);\n\n throw e;\n\n }\n\n }\n\n /**\n * @returns {Promise}\n */\n renew() {\n\n return this._queue(\n super.renew,\n this._renewQueue,\n this.events.queuedRenewSuccess,\n this.events.queuedRenewError,\n 'Subscription is not alive after renew timeout'\n );\n\n }\n\n /**\n * @returns {Promise}\n */\n resubscribe() {\n\n return this._queue(\n super.resubscribe,\n this._resubscribeQueue,\n this.events.queuedResubscribeSuccess,\n this.events.queuedResubscribeError,\n 'Subscription is not alive after resubscribe timeout'\n );\n\n }\n\n /**\n * @param {string[]} events\n * @return {CachedSubscription}\n */\n restore(events) {\n\n var cachedSubscriptionData = this._cache.getItem(this._cacheKey);\n\n if (cachedSubscriptionData) {\n try {\n this.setSubscription(cachedSubscriptionData);\n } catch (e) {}\n } else {\n this.setEventFilters(events);\n }\n\n return this;\n\n }\n\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/subscription/CachedSubscription.js\n **/","/**\n * Copyright (c) 2014, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * https://raw.github.com/facebook/regenerator/master/LICENSE file. An\n * additional grant of patent rights can be found in the PATENTS file in\n * the same directory.\n */\n\n!(function(global) {\n \"use strict\";\n\n var hasOwn = Object.prototype.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var iteratorSymbol =\n typeof Symbol === \"function\" && Symbol.iterator || \"@@iterator\";\n\n var inModule = typeof module === \"object\";\n var runtime = global.regeneratorRuntime;\n if (runtime) {\n if (inModule) {\n // If regeneratorRuntime is defined globally and we're in a module,\n // make the exports object identical to regeneratorRuntime.\n module.exports = runtime;\n }\n // Don't bother evaluating the rest of this file if the runtime was\n // already defined globally.\n return;\n }\n\n // Define the runtime globally (as expected by generated code) as either\n // module.exports (if we're in a module) or a new, empty object.\n runtime = global.regeneratorRuntime = inModule ? module.exports : {};\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided, then outerFn.prototype instanceof Generator.\n var generator = Object.create((outerFn || Generator).prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n runtime.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype;\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunction.displayName = \"GeneratorFunction\";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n runtime.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n runtime.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `value instanceof AwaitArgument` to determine if the yielded value is\n // meant to be awaited. Some may consider the name of this method too\n // cutesy, but they are curmudgeons.\n runtime.awrap = function(arg) {\n return new AwaitArgument(arg);\n };\n\n function AwaitArgument(arg) {\n this.arg = arg;\n }\n\n function AsyncIterator(generator) {\n // This invoke function is written in a style that assumes some\n // calling function (or Promise) will handle exceptions.\n function invoke(method, arg) {\n var result = generator[method](arg);\n var value = result.value;\n return value instanceof AwaitArgument\n ? Promise.resolve(value.arg).then(invokeNext, invokeThrow)\n : Promise.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration. If the Promise is rejected, however, the\n // result for this iteration will be rejected with the same\n // reason. Note that rejections of yielded Promises are not\n // thrown back into the generator function, as is the case\n // when an awaited Promise is rejected. This difference in\n // behavior between yield and await is important, because it\n // allows the consumer to decide what to do with the yielded\n // rejection (swallow it and continue, manually .throw it back\n // into the generator, abandon iteration, whatever). With\n // await, by contrast, there is no opportunity to examine the\n // rejection reason outside the generator function, so the\n // only option is to throw it from the await expression, and\n // let the generator function handle the exception.\n result.value = unwrapped;\n return result;\n });\n }\n\n if (typeof process === \"object\" && process.domain) {\n invoke = process.domain.bind(invoke);\n }\n\n var invokeNext = invoke.bind(generator, \"next\");\n var invokeThrow = invoke.bind(generator, \"throw\");\n var invokeReturn = invoke.bind(generator, \"return\");\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return invoke(method, arg);\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : new Promise(function (resolve) {\n resolve(callInvokeWithMethodAndArg());\n });\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n runtime.async = function(innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList)\n );\n\n return runtime.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n if (method === \"return\" ||\n (method === \"throw\" && delegate.iterator[method] === undefined)) {\n // A return or throw (when the delegate iterator has no throw\n // method) always terminates the yield* loop.\n context.delegate = null;\n\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n var returnMethod = delegate.iterator[\"return\"];\n if (returnMethod) {\n var record = tryCatch(returnMethod, delegate.iterator, arg);\n if (record.type === \"throw\") {\n // If the return method threw an exception, let that\n // exception prevail over the original return or throw.\n method = \"throw\";\n arg = record.arg;\n continue;\n }\n }\n\n if (method === \"return\") {\n // Continue with the outer return, now that the delegate\n // iterator has been terminated.\n continue;\n }\n }\n\n var record = tryCatch(\n delegate.iterator[method],\n delegate.iterator,\n arg\n );\n\n if (record.type === \"throw\") {\n context.delegate = null;\n\n // Like returning generator.throw(uncaught), but without the\n // overhead of an extra function call.\n method = \"throw\";\n arg = record.arg;\n continue;\n }\n\n // Delegate generator ran and handled its own exceptions so\n // regardless of what the method was, we continue as if it is\n // \"next\" with an undefined arg.\n method = \"next\";\n arg = undefined;\n\n var info = record.arg;\n if (info.done) {\n context[delegate.resultName] = info.value;\n context.next = delegate.nextLoc;\n } else {\n state = GenStateSuspendedYield;\n return info;\n }\n\n context.delegate = null;\n }\n\n if (method === \"next\") {\n if (state === GenStateSuspendedYield) {\n context.sent = arg;\n } else {\n context.sent = undefined;\n }\n\n } else if (method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw arg;\n }\n\n if (context.dispatchException(arg)) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n method = \"next\";\n arg = undefined;\n }\n\n } else if (method === \"return\") {\n context.abrupt(\"return\", arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n var info = {\n value: record.arg,\n done: context.done\n };\n\n if (record.arg === ContinueSentinel) {\n if (context.delegate && method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n arg = undefined;\n }\n } else {\n return info;\n }\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(arg) call above.\n method = \"throw\";\n arg = record.arg;\n }\n }\n };\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n runtime.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n runtime.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n this.sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n return !!caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.next = finallyEntry.finallyLoc;\n } else {\n this.complete(record);\n }\n\n return ContinueSentinel;\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = record.arg;\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n return ContinueSentinel;\n }\n };\n})(\n // Among the various tricks for obtaining a reference to the global\n // object, this seems to be the most reliable technique that does not\n // use indirect eval (which violates Content Security Policy).\n typeof global === \"object\" ? global :\n typeof window === \"object\" ? window :\n typeof self === \"object\" ? self : this\n);\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/regenerator/runtime.js\n ** module id = 22\n ** module chunks = 0\n **/"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap 5bfcaff1f71afd7618c8","webpack:///./src/SDK.js","webpack:///./src/core/Utils.js","webpack:///./src/core/Externals.js","webpack:///external {\"commonjs\":\"es6-promise\",\"commonjs2\":\"es6-promise\"}","webpack:///external {\"commonjs\":\"node-fetch\",\"commonjs2\":\"node-fetch\"}","webpack:///external {\"commonjs\":\"pubnub\",\"commonjs2\":\"pubnub\",\"amd\":\"pubnub\"}","webpack:///./src/core/Cache.js","webpack:///./src/core/Observable.js","webpack:///./src/core/Queue.js","webpack:///./src/http/Client.js","webpack:///./src/http/Utils.js","webpack:///./src/http/ApiResponse.js","webpack:///./src/mocks/ClientMock.js","webpack:///./src/mocks/Registry.js","webpack:///./src/mocks/Mock.js","webpack:///./src/platform/Platform.js","webpack:///./src/platform/Auth.js","webpack:///./src/pubnub/PubnubFactory.js","webpack:///./src/pubnub/PubnubMock.js","webpack:///./src/subscription/Subscription.js","webpack:///./src/subscription/CachedSubscription.js","webpack:///./~/regenerator/runtime.js"],"names":[],"mappings":"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A;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,gBAAgB;AAChB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd,KAAK;AACL,cAAc;AACd;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA,WAAW;AACX;;AAEA;AACA;AACA,wCAAwC,WAAW;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW;AACX;AACA;;AAEA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAAS;AACT;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;;AAEA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,iCAAiC,kBAAkB;AACnD;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA,iBAAiB;;AAEjB;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,YAAY;AACZ;AACA;;AAEA;AACA,YAAY;AACZ;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,8CAA8C,QAAQ;AACtD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa;AACb;AACA;;AAEA,WAAW;AACX;AACA;AACA;;AAEA,WAAW;AACX;AACA;AACA;;AAEA,WAAW;AACX;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA,8CAA8C,QAAQ;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;;AAEL;AACA,8CAA8C,QAAQ;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA,8CAA8C,QAAQ;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA","file":"ringcentral.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"es6-promise\"), require(\"node-fetch\"), require(\"pubnub\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([, , \"pubnub\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"SDK\"] = factory(require(\"es6-promise\"), require(\"node-fetch\"), require(\"pubnub\"));\n\telse\n\t\troot[\"RingCentral\"] = root[\"RingCentral\"] || {}, root[\"RingCentral\"][\"SDK\"] = factory(root[undefined], root[undefined], root[undefined]);\n})(this, function(__WEBPACK_EXTERNAL_MODULE_4__, __WEBPACK_EXTERNAL_MODULE_5__, __WEBPACK_EXTERNAL_MODULE_6__) {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/universalModuleDefinition\n **/"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/build/\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap 5bfcaff1f71afd7618c8\n **/","import * as Utils from './core/Utils';\nimport Cache from './core/Cache';\nimport * as Externals from './core/Externals';\nimport Observable from './core/Observable';\nimport Queue from './core/Queue';\n\nimport Client from './http/Client';\nimport ApiResponse from './http/ApiResponse';\nimport * as HttpUtils from './http/Utils';\n\nimport {default as ClientMock} from './mocks/ClientMock';\nimport Mock from './mocks/Mock';\nimport Registry from './mocks/Registry';\n\nimport Platform from './platform/Platform';\nimport Auth from './platform/Auth';\n\nimport PubnubMockFactory from './pubnub/PubnubFactory';\n\nimport Subscription from './subscription/Subscription';\nimport CachedSubscription from './subscription/CachedSubscription';\n\nrequire(\"regenerator/runtime\");\n\nexport default class SDK {\n\n static version = '2.0.1';\n\n static server = {\n sandbox: 'https://platform.devtest.ringcentral.com',\n production: 'https://platform.ringcentral.com'\n };\n\n /**\n * @constructor\n * @param {object} [options]\n * @param {string} [options.server]\n * @param {string} [options.cachePrefix]\n * @param {string} [options.appSecret]\n * @param {string} [options.appKey]\n * @param {string} [options.appName]\n * @param {string} [options.appVersion]\n * @param {string} [options.pubnubFactory]\n * @param {string} [options.client]\n */\n constructor(options) {\n\n options = options || {};\n\n this._cache = new Cache(Externals.localStorage, options.cachePrefix);\n\n this._client = options.client || new Client();\n\n this._platform = new Platform(this._client, this._cache, options.server, options.appKey, options.appSecret);\n\n this._pubnubFactory = options.pubnubFactory || Externals.PUBNUB;\n\n }\n\n /**\n * @return {Platform}\n */\n platform() {\n return this._platform;\n }\n\n /**\n * @return {Subscription}\n */\n createSubscription() {\n return new Subscription(this._pubnubFactory, this._platform);\n }\n\n /**\n * @return {CachedSubscription}\n */\n createCachedSubscription(cacheKey) {\n return new CachedSubscription(this._pubnubFactory, this._platform, this._cache, cacheKey);\n }\n\n /**\n * @return {Cache}\n */\n cache() {\n return this._cache;\n }\n\n static core = {\n Cache: Cache,\n Observable: Observable,\n Utils: Utils,\n Externals: Externals,\n Queue: Queue\n };\n\n static http = {\n Client: Client,\n ApiResponse: ApiResponse,\n Utils: HttpUtils\n };\n\n static platform = {\n Auth: Auth,\n Platform: Platform\n };\n\n static subscription = {\n Subscription: Subscription\n };\n\n static mocks = {\n Client: ClientMock,\n Registry: Registry,\n Mock: Mock\n };\n\n static pubnub = {\n PubnubMockFactory: PubnubMockFactory\n };\n\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/SDK.js\n **/","import {Promise} from './Externals.js';\n\n/**\n * TODO Replace with something better\n * @see https://github.com/joyent/node/blob/master/lib/querystring.js\n * @param {object} parameters\n * @returns {string}\n */\nexport function queryStringify(parameters) {\n\n var array = [];\n\n parameters = parameters || {};\n\n Object.keys(parameters).forEach((k) => {\n\n var v = parameters[k];\n\n if (isArray(v)) {\n v.forEach((vv) => {\n array.push(encodeURIComponent(k) + '=' + encodeURIComponent(vv));\n });\n } else {\n array.push(encodeURIComponent(k) + '=' + encodeURIComponent(v));\n }\n\n });\n\n return array.join('&');\n\n}\n\n/**\n * TODO Replace with something better\n * @see https://github.com/joyent/node/blob/master/lib/querystring.js\n * @param {string} queryString\n * @returns {object}\n */\nexport function parseQueryString(queryString) {\n\n var argsParsed = {};\n\n queryString.split('&').forEach((arg) => {\n\n arg = decodeURIComponent(arg);\n\n if (arg.indexOf('=') == -1) {\n\n argsParsed[arg.trim()] = true;\n\n } else {\n\n var pair = arg.split('='),\n key = pair[0].trim(),\n value = pair[1].trim();\n\n if (key in argsParsed) {\n if (key in argsParsed && !isArray(argsParsed[key])) argsParsed[key] = [argsParsed[key]];\n argsParsed[key].push(value);\n } else {\n argsParsed[key] = value;\n }\n\n }\n\n });\n\n return argsParsed;\n\n}\n\n/**\n * @param obj\n * @return {boolean}\n */\nexport function isFunction(obj) {\n return typeof obj === \"function\";\n}\n\n/**\n * @param obj\n * @return {boolean}\n */\nexport function isArray(obj) {\n return Array.isArray ? Array.isArray(obj) : typeof obj === \"array\";\n}\n\n/**\n * @param fn\n * @param interval\n * @param timeout\n */\nexport function poll(fn, interval, timeout) { //NodeJS.Timer|number\n\n module.exports.stopPolling(timeout);\n\n interval = interval || 1000;\n\n var next = (delay) => {\n\n delay = delay || interval;\n\n interval = delay;\n\n return setTimeout(() => {\n\n fn(next, delay);\n\n }, delay);\n\n };\n\n return next();\n\n}\n\nexport function stopPolling(timeout) {\n if (timeout) clearTimeout(timeout);\n}\n\nexport function isNodeJS() {\n return (typeof process !== 'undefined');\n}\n\nexport function isBrowser() {\n return (typeof window !== 'undefined');\n}\n\nexport function delay(timeout) {\n return new Promise((resolve, reject) => {\n setTimeout(() => {\n resolve(null);\n }, timeout);\n });\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/core/Utils.js\n **/","import ES6Promise from 'es6-promise';\nimport nodeFetch from 'node-fetch';\nimport pubnub from 'pubnub';\n\nvar root = (new Function('return this'))();\n\nexport var Promise = (ES6Promise && ES6Promise.Promise) || root.Promise;\n\nexport var fetch = root.fetch || nodeFetch;\nexport var Request = root.Request || fetch.Request;\nexport var Response = root.Response || fetch.Response;\nexport var Headers = root.Headers || fetch.Headers;\n\nexport var PUBNUB = root.PUBNUB || pubnub;\n\nexport var localStorage = (typeof root.localStorage !== 'undefined') ? root.localStorage : {};\n\n\n/** WEBPACK FOOTER **\n ** ./src/core/Externals.js\n **/","module.exports = __WEBPACK_EXTERNAL_MODULE_4__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external {\"commonjs\":\"es6-promise\",\"commonjs2\":\"es6-promise\"}\n ** module id = 4\n ** module chunks = 0\n **/","module.exports = __WEBPACK_EXTERNAL_MODULE_5__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external {\"commonjs\":\"node-fetch\",\"commonjs2\":\"node-fetch\"}\n ** module id = 5\n ** module chunks = 0\n **/","module.exports = __WEBPACK_EXTERNAL_MODULE_6__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external {\"commonjs\":\"pubnub\",\"commonjs2\":\"pubnub\",\"amd\":\"pubnub\"}\n ** module id = 6\n ** module chunks = 0\n **/","export default class Cache {\n\n static defaultPrefix = 'rc-';\n\n constructor(storage, prefix) {\n this.setPrefix(prefix);\n this._storage = storage;\n }\n\n setPrefix(prefix) {\n this._prefix = prefix || Cache.defaultPrefix;\n return this;\n }\n\n setItem(key, data) {\n this._storage[this._prefixKey(key)] = JSON.stringify(data);\n return this;\n }\n\n removeItem(key) {\n delete this._storage[this._prefixKey(key)];\n return this;\n }\n\n getItem(key) {\n var item = this._storage[this._prefixKey(key)];\n if (!item) return null;\n return JSON.parse(item);\n }\n\n clean() {\n\n for (var key in this._storage) {\n\n if (!this._storage.hasOwnProperty(key)) continue;\n\n if (key.indexOf(this._prefix) === 0) {\n delete this._storage[key];\n }\n\n }\n\n return this;\n\n }\n\n _prefixKey(key) {\n return this._prefix + key;\n }\n\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/core/Cache.js\n **/","export default class Observable {\n\n constructor() {\n this.off();\n }\n\n hasListeners(event) {\n return (event in this._listeners);\n }\n\n on(events, callback) {\n\n if (typeof events == 'string') events = [events];\n if (!events) throw new Error('No events to subscribe to');\n if (typeof callback !== 'function') throw new Error('Callback must be a function');\n\n events.forEach((event) => {\n\n if (!this.hasListeners(event)) this._listeners[event] = [];\n\n this._listeners[event].push(callback);\n\n });\n\n return this;\n\n }\n\n emit(event, ...args) {\n\n var result = null;\n\n if (!this.hasListeners(event)) return null;\n\n this._listeners[event].some((callback) => {\n\n result = callback.apply(this, args);\n return (result === false);\n\n });\n\n return result;\n\n }\n\n off(event, callback) {\n\n if (!event) {\n\n this._listeners = {};\n\n } else {\n\n if (!callback) {\n\n delete this._listeners[event];\n\n } else {\n\n if (!this.hasListeners(event)) return this;\n\n this._listeners[event].forEach((cb, i) => {\n\n if (cb === callback) delete this._listeners[event][i];\n\n });\n\n }\n\n }\n\n return this;\n\n }\n\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/core/Observable.js\n **/","import {Promise} from '../core/Externals';\nimport {poll, stopPolling} from './Utils';\n\nexport default class Queue {\n\n static _pollInterval = 250;\n static _releaseTimeout = 5000;\n\n constructor(cache, cacheId) {\n\n this._cache = cache;\n this._cacheId = cacheId;\n this._promise = null;\n\n }\n\n isPaused() {\n\n var time = this._cache.getItem(this._cacheId);\n\n return !!time && Date.now() - parseInt(time) < Queue._releaseTimeout;\n }\n\n pause() {\n this._cache.setItem(this._cacheId, Date.now());\n return this;\n }\n\n resume() {\n this._cache.removeItem(this._cacheId);\n return this;\n }\n\n poll() {\n\n if (this._promise) return this._promise;\n\n this._promise = new Promise((resolve, reject) => {\n\n poll((next) => {\n\n if (this.isPaused()) return next();\n\n this._promise = null;\n\n this.resume(); // this is actually not needed but why not\n\n resolve(null);\n\n }, Queue._pollInterval);\n\n });\n\n return this._promise;\n\n }\n\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/core/Queue.js\n **/","import {fetch, Request, Response, Headers, Promise} from '../core/Externals';\nimport {queryStringify} from '../core/Utils';\nimport {findHeaderName} from './Utils';\nimport Observable from '../core/Observable';\nimport ApiResponse from './ApiResponse';\n\nexport default class Client extends Observable {\n\n static _allowedMethods = ['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'OPTIONS', 'HEAD'];\n\n events = {\n beforeRequest: 'beforeRequest',\n requestSuccess: 'requestSuccess',\n requestError: 'requestError'\n };\n\n /**\n * @param {Request} request\n * @return {Promise}\n */\n async sendRequest(request) {\n\n var apiResponse = new ApiResponse(request);\n\n try {\n\n //TODO Stop request if listeners return false\n this.emit(this.events.beforeRequest, apiResponse);\n\n apiResponse._response = await this._loadResponse(request);\n\n if (apiResponse._isMultipart() || apiResponse._isJson()) {\n apiResponse._text = await apiResponse.response().text();\n }\n\n if (!apiResponse.ok()) throw new Error('Response has unsuccessful status');\n\n this.emit(this.events.requestSuccess, apiResponse);\n\n return apiResponse;\n\n } catch (e) {\n\n if (!e.apiResponse) e = this.makeError(e, apiResponse);\n\n this.emit(this.events.requestError, e);\n\n throw e;\n\n }\n\n }\n\n /**\n * @param {Request} request\n * @return {Promise}\n * @private\n */\n async _loadResponse(request) {\n return await fetch.call(null, request);\n }\n\n /**\n * Wraps the JS Error object with transaction information\n * @param {Error|IApiError} e\n * @param {ApiResponse} apiResponse\n * @return {IApiError}\n */\n makeError(e, apiResponse) {\n\n // Wrap only if regular error\n if (!e.hasOwnProperty('apiResponse') && !e.hasOwnProperty('originalMessage')) {\n\n e.apiResponse = apiResponse;\n e.originalMessage = e.message;\n e.message = (apiResponse && apiResponse.error(true)) || e.originalMessage;\n\n }\n\n return e;\n\n }\n\n /**\n *\n * @param {object} init\n * @param {object} [init.url]\n * @param {object} [init.body]\n * @param {string} [init.method]\n * @param {object} [init.query]\n * @param {object} [init.headers]\n * @return {Request}\n */\n createRequest(init) {\n\n init = init || {};\n init.headers = init.headers || {};\n\n // Sanity checks\n if (!init.url) throw new Error('Url is not defined');\n if (!init.method) init.method = 'GET';\n if (init.method && Client._allowedMethods.indexOf(init.method) < 0) throw new Error('Method has wrong value: ' + init.method);\n\n // Defaults\n init.credentials = init.credentials || 'include';\n init.mode = init.mode || 'cors';\n\n // Append Query String\n if (init.query) {\n init.url = init.url + (init.url.indexOf('?') > -1 ? '&' : '?') + queryStringify(init.query);\n }\n\n if (!(findHeaderName('Accept', init.headers))) {\n init.headers['Accept'] = ApiResponse._jsonContentType;\n }\n\n // Serialize body\n //TODO Check that body is a plain object\n if (typeof init.body !== 'string' || !init.body) {\n\n var contentTypeHeaderName = findHeaderName(ApiResponse._contentType, init.headers);\n\n if (!contentTypeHeaderName) {\n contentTypeHeaderName = ApiResponse._contentType;\n init.headers[contentTypeHeaderName] = ApiResponse._jsonContentType;\n }\n\n var contentType = init.headers[contentTypeHeaderName];\n\n // Assign a new encoded body\n if (contentType.indexOf(ApiResponse._jsonContentType) > -1) {\n init.body = JSON.stringify(init.body);\n } else if (contentType.indexOf(ApiResponse._urlencodedContentType) > -1) {\n init.body = queryStringify(init.body);\n }\n\n }\n\n // Create a request with encoded body\n var req = new Request(init.url, init);\n\n // Keep the original body accessible directly (for mocks)\n req.originalBody = init.body;\n\n return req;\n\n }\n\n}\n\n/**\n * @name IApiError\n * @property {string} stack\n * @property {string} originalMessage\n * @property {ApiResponse} apiResponse\n */\n\n\n/** WEBPACK FOOTER **\n ** ./src/http/Client.js\n **/","import {fetch, Request, Response, Headers, Promise} from '../core/Externals';\nimport * as utils from '../core/Utils';\n\n/**\n * Creates a response\n * @param stringBody\n * @param init\n * @return {Response}\n */\nexport function createResponse(stringBody, init) {\n\n init = init || {};\n\n var response = new Response(stringBody, init);\n\n //TODO Wait for https://github.com/bitinn/node-fetch/issues/38\n if (utils.isNodeJS()) {\n\n response._text = stringBody;\n response._decode = function() {\n return this._text;\n };\n\n }\n\n return response;\n\n}\n\nexport function findHeaderName(name, headers) {\n name = name.toLowerCase();\n return Object.keys(headers).reduce(function(res, key) {\n if (res) return res;\n if (name == key.toLowerCase()) return key;\n return res;\n }, null);\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/http/Utils.js\n **/","import {fetch, Request, Response, Headers, Promise} from '../core/Externals';\nimport * as utils from './Utils';\n\nexport default class ApiResponse {\n\n static _contentType = 'Content-Type';\n static _jsonContentType = 'application/json';\n static _multipartContentType = 'multipart/mixed';\n static _urlencodedContentType = 'application/x-www-form-urlencoded';\n static _headerSeparator = ':';\n static _bodySeparator = '\\n\\n';\n static _boundarySeparator = '--';\n\n /**\n * @param {Request} request\n * @param {Response} response\n * @param {string} responseText\n */\n constructor(request, response, responseText) {\n\n /** @type {Request} */\n this._request = request;\n\n /** @type {Response} */\n this._response = response;\n\n this._text = responseText;\n this._json = null;\n this._multipart = [];\n\n }\n\n /**\n * @return {Response}\n */\n response() {\n return this._response;\n }\n\n /**\n * @return {Request}\n */\n request() {\n return this._request;\n }\n\n /**\n * @return {boolean}\n */\n ok() {\n return this._response && this._response.ok;\n }\n\n /**\n * @return {string}\n */\n text() {\n if (!this._isJson() && !this._isMultipart()) throw new Error('Response is not text');\n return this._text;\n }\n\n /**\n * @return {object}\n */\n json() {\n if (!this._isJson()) throw new Error('Response is not JSON');\n if (!this._json) {\n this._json = this._text ? JSON.parse(this._text) : null;\n }\n return this._json;\n }\n\n /**\n * @param [skipOKCheck]\n * @return {string}\n */\n error(skipOKCheck) {\n\n if (this.ok() && !skipOKCheck) return null;\n\n var message = (this._response && this._response.status ? this._response.status + ' ' : '') +\n (this._response && this._response.statusText ? this._response.statusText : '');\n\n try {\n\n if (this.json().message) message = this.json().message;\n if (this.json().error_description) message = this.json().error_description;\n if (this.json().description) message = this.json().description;\n\n } catch (e) {}\n\n return message;\n\n }\n\n /**\n * @return {ApiResponse[]}\n */\n multipart() {\n\n if (!this._isMultipart()) throw new Error('Response is not multipart');\n\n if (!this._multipart.length) {\n\n // Step 1. Split multipart response\n\n var text = this.text();\n\n if (!text) throw new Error('No response body');\n\n var boundary = this._getContentType().match(/boundary=([^;]+)/i)[1];\n\n if (!boundary) throw new Error('Cannot find boundary');\n\n var parts = text.toString().split(ApiResponse._boundarySeparator + boundary);\n\n if (parts[0].trim() === '') parts.shift();\n if (parts[parts.length - 1].trim() == ApiResponse._boundarySeparator) parts.pop();\n\n if (parts.length < 1) throw new Error('No parts in body');\n\n // Step 2. Parse status info\n\n var statusInfo = ApiResponse.create(parts.shift(), this._response.status, this._response.statusText).json();\n\n // Step 3. Parse all other parts\n\n this._multipart = parts.map((part:string, i) => {\n\n var status = statusInfo.response[i].status;\n\n return ApiResponse.create(part, status);\n\n });\n\n }\n\n return this._multipart;\n\n }\n\n _isContentType(contentType) {\n return this._getContentType().indexOf(contentType) > -1;\n }\n\n _getContentType() {\n return this._response.headers.get(ApiResponse._contentType) || '';\n }\n\n _isMultipart() {\n return this._isContentType(ApiResponse._multipartContentType);\n }\n\n _isUrlEncoded() {\n return this._isContentType(ApiResponse._urlencodedContentType);\n }\n\n _isJson() {\n return this._isContentType(ApiResponse._jsonContentType);\n }\n\n /**\n * Method is used to create ApiResponse object from string parts of multipart/mixed response\n * @param {string} [text]\n * @param {number} [status]\n * @param {string} [statusText]\n * @return {ApiResponse}\n */\n static create(text, status, statusText) {\n\n text = text || '';\n status = status || 200;\n statusText = statusText || 'OK';\n\n text = text.replace(/\\r/g, '');\n\n var headers = new Headers(),\n headersAndBody = text.split(ApiResponse._bodySeparator),\n headersText = (headersAndBody.length > 1) ? headersAndBody.shift() : '';\n\n text = headersAndBody.join(ApiResponse._bodySeparator);\n\n (headersText || '')\n .split('\\n')\n .forEach((header:string) => {\n\n var split = header.trim().split(ApiResponse._headerSeparator),\n key = split.shift().trim(),\n value = split.join(ApiResponse._headerSeparator).trim();\n\n if (key) headers.append(key, value);\n\n });\n\n return new ApiResponse(null, utils.createResponse(text, {\n headers: headers,\n status: status,\n statusText: statusText\n }), text);\n\n }\n\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/http/ApiResponse.js\n **/","import Registry from './Registry';\nimport {default as HttpClient} from '../http/Client';\n\nexport default class Client extends HttpClient {\n\n constructor() {\n super();\n this._registry = new Registry();\n }\n\n registry() {\n return this._registry;\n }\n\n async _loadResponse(request) {\n\n var mock = this._registry.find(request);\n\n return await mock.getResponse(request);\n\n }\n\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/mocks/ClientMock.js\n **/","import Mock from './Mock';\n\nexport default class Registry {\n\n constructor() {\n this._mocks = [];\n }\n\n add(mock) {\n this._mocks.push(mock);\n return this;\n }\n\n clear() {\n this._mocks = [];\n return this;\n }\n\n find(request) {\n\n //console.log('Registry is looking for', request);\n\n var mock = this._mocks.shift();\n\n if (!mock) throw new Error('No mock in registry for request ' + request.method + ' ' + request.url);\n\n if (!mock.test(request)) throw new Error('Wrong request ' + request.method + ' ' + request.url +\n ' for expected mock ' + mock.method() + ' ' + mock.path());\n\n return mock;\n\n }\n\n apiCall(method:string, path:string, response:any, status, statusText) {\n\n this.add(new Mock(method, path, response, status, statusText));\n\n return this;\n\n }\n\n authentication() {\n\n this.apiCall('POST', '/restapi/oauth/token', {\n 'access_token': 'ACCESS_TOKEN',\n 'token_type': 'bearer',\n 'expires_in': 3600,\n 'refresh_token': 'REFRESH_TOKEN',\n 'refresh_token_expires_in': 60480,\n 'scope': 'SMS RCM Foo Boo',\n 'expireTime': new Date().getTime() + 3600000\n });\n\n return this;\n\n }\n\n logout() {\n\n this.apiCall('POST', '/restapi/oauth/revoke', {});\n\n return this;\n\n }\n\n presenceLoad(id) {\n\n this.apiCall('GET', '/restapi/v1.0/account/~/extension/' + id + '/presence', {\n \"uri\": \"https://platform.ringcentral.com/restapi/v1.0/account/123/extension/\" + id + \"/presence\",\n \"extension\": {\n \"uri\": \"https://platform.ringcentral.com/restapi/v1.0/account/123/extension/\" + id,\n \"id\": id,\n \"extensionNumber\": \"101\"\n },\n \"activeCalls\": [],\n \"presenceStatus\": \"Available\",\n \"telephonyStatus\": \"Ringing\",\n \"userStatus\": \"Available\",\n \"dndStatus\": \"TakeAllCalls\",\n \"extensionId\": id\n });\n\n return this;\n\n }\n\n subscribeGeneric(expiresIn) {\n\n expiresIn = expiresIn || 15 * 60 * 60;\n\n var date = new Date();\n\n this.apiCall('POST', '/restapi/v1.0/subscription', {\n 'eventFilters': [\n '/restapi/v1.0/account/~/extension/~/presence'\n ],\n 'expirationTime': new Date(date.getTime() + (expiresIn * 1000)).toISOString(),\n 'expiresIn': expiresIn,\n 'deliveryMode': {\n 'transportType': 'PubNub',\n 'encryption': false,\n 'address': '123_foo',\n 'subscriberKey': 'sub-c-foo',\n 'secretKey': 'sec-c-bar'\n },\n 'id': 'foo-bar-baz',\n 'creationTime': date.toISOString(),\n 'status': 'Active',\n 'uri': 'https://platform.ringcentral.com/restapi/v1.0/subscription/foo-bar-baz'\n });\n\n return this;\n\n }\n\n subscribeOnPresence(id, detailed) {\n\n id = id || '1';\n\n var date = new Date();\n\n this.apiCall('POST', '/restapi/v1.0/subscription', {\n 'eventFilters': ['/restapi/v1.0/account/~/extension/' + id + '/presence' + (detailed ? '?detailedTelephonyState=true' : '')],\n 'expirationTime': new Date(date.getTime() + (15 * 60 * 60 * 1000)).toISOString(),\n 'deliveryMode': {\n 'transportType': 'PubNub',\n 'encryption': true,\n 'address': '123_foo',\n 'subscriberKey': 'sub-c-foo',\n 'secretKey': 'sec-c-bar',\n 'encryptionAlgorithm': 'AES',\n 'encryptionKey': 'VQwb6EVNcQPBhE/JgFZ2zw=='\n },\n 'creationTime': date.toISOString(),\n 'id': 'foo-bar-baz',\n 'status': 'Active',\n 'uri': 'https://platform.ringcentral.com/restapi/v1.0/subscription/foo-bar-baz'\n });\n\n return this;\n\n }\n\n tokenRefresh(failure) {\n\n if (!failure) {\n\n this.apiCall('POST', '/restapi/oauth/token', {\n 'access_token': 'ACCESS_TOKEN_FROM_REFRESH',\n 'token_type': 'bearer',\n 'expires_in': 3600,\n 'refresh_token': 'REFRESH_TOKEN_FROM_REFRESH',\n 'refresh_token_expires_in': 60480,\n 'scope': 'SMS RCM Foo Boo'\n });\n\n } else {\n\n this.apiCall('POST', '/restapi/oauth/token', {\n 'message': 'Wrong token',\n 'error_description': 'Wrong token',\n 'description': 'Wrong token'\n }, 400);\n\n }\n\n return this;\n\n }\n\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/mocks/Registry.js\n **/","import ApiResponse from '../http/ApiResponse';\nimport {delay} from '../core/Utils';\nimport {createResponse} from '../http/Utils';\n\nexport default class Mock {\n\n constructor(method, path, json, status, statusText, delay) {\n this._method = method.toUpperCase();\n this._path = path;\n this._json = json || {};\n this._delay = delay || 10;\n this._status = status || 200;\n this._statusText = statusText || 'OK';\n }\n\n path() {\n return this._path;\n }\n\n method() {\n return this._method;\n }\n\n test(request:Request) {\n\n return request.url.indexOf(this._path) > -1 &&\n request.method.toUpperCase() == this._method;\n\n }\n\n async getResponse(request) {\n\n await delay(this._delay);\n\n return this.createResponse(this._json);\n\n }\n\n createResponse(json, init) {\n\n init = init || {};\n\n init.status = init.status || this._status;\n init.statusText = init.statusText || this._statusText;\n\n var str = JSON.stringify(json),\n res = createResponse(str, init);\n\n res.headers.set(ApiResponse._contentType, ApiResponse._jsonContentType);\n\n return res;\n\n }\n\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/mocks/Mock.js\n **/","import Observable from '../core/Observable';\nimport Queue from '../core/Queue';\nimport Auth from './Auth';\nimport {Promise} from '../core/Externals';\nimport {queryStringify, parseQueryString, delay} from '../core/Utils';\n\nexport default class Platform extends Observable {\n\n static _urlPrefix = '/restapi';\n static _apiVersion = 'v1.0';\n static _accessTokenTtl = null; // Platform server by default sets it to 60 * 60 = 1 hour\n static _refreshTokenTtl = 10 * 60 * 60; // 10 hours\n static _refreshTokenTtlRemember = 7 * 24 * 60 * 60; // 1 week\n static _tokenEndpoint = '/restapi/oauth/token';\n static _revokeEndpoint = '/restapi/oauth/revoke';\n static _authorizeEndpoint = '/restapi/oauth/authorize';\n static _refreshDelayMs = 100;\n static _cacheId = 'platform';\n static _clearCacheOnRefreshError = true;\n\n events = {\n beforeLogin: 'beforeLogin',\n loginSuccess: 'loginSuccess',\n loginError: 'loginError',\n beforeRefresh: 'beforeRefresh',\n refreshSuccess: 'refreshSuccess',\n refreshError: 'refreshError',\n beforeLogout: 'beforeLogout',\n logoutSuccess: 'logoutSuccess',\n logoutError: 'logoutError'\n };\n\n constructor(client, cache, server, appKey, appSecret) {\n\n super();\n\n this._server = server;\n this._appKey = appKey;\n this._appSecret = appSecret;\n\n /** @type {Cache} */\n this._cache = cache;\n\n /** @type {Client} */\n this._client = client;\n\n this._queue = new Queue(this._cache, Platform._cacheId + '-refresh');\n\n this._auth = new Auth(this._cache, Platform._cacheId);\n\n }\n\n /**\n * @return {Auth}\n */\n auth() {\n return this._auth;\n }\n\n /**\n * @return {Client}\n */\n client() {\n return this._client;\n }\n\n /**\n * @param {string} path\n * @param {object} [options]\n * @param {boolean} [options.addServer]\n * @param {string} [options.addMethod]\n * @param {boolean} [options.addToken]\n * @return {string}\n */\n createUrl(path, options) {\n\n path = path || '';\n options = options || {};\n\n var builtUrl = '',\n hasHttp = path.indexOf('http://') != -1 || path.indexOf('https://') != -1;\n\n if (options.addServer && !hasHttp) builtUrl += this._server;\n\n if (path.indexOf(Platform._urlPrefix) == -1 && !hasHttp) builtUrl += Platform._urlPrefix + '/' + Platform._apiVersion;\n\n builtUrl += path;\n\n if (options.addMethod || options.addToken) builtUrl += (path.indexOf('?') > -1 ? '&' : '?');\n\n if (options.addMethod) builtUrl += '_method=' + options.addMethod;\n if (options.addToken) builtUrl += (options.addMethod ? '&' : '') + 'access_token=' + this._auth.accessToken();\n\n return builtUrl;\n\n }\n\n /**\n * @param {string} options.redirectUri\n * @param {string} options.state\n * @param {string} options.brandId\n * @param {string} options.display\n * @param {string} options.prompt\n * @return {string}\n */\n authUrl(options) {\n\n options = options || {};\n\n return this.createUrl(Platform._authorizeEndpoint + '?' + queryStringify({\n 'response_type': 'code',\n 'redirect_uri': options.redirectUri || '',\n 'client_id': this._appKey,\n 'state': options.state || '',\n 'brand_id': options.brandId || '',\n 'display': options.display || '',\n 'prompt': options.prompt || ''\n }), {addServer: true})\n\n }\n\n /**\n * @param {string} url\n * @return {Object}\n */\n parseAuthRedirectUrl(url:string) {\n\n var qs = parseQueryString(url.split('?').reverse()[0]),\n error = qs.error_description || qs.error;\n\n if (error) {\n var e = new Error(error);\n e.error = qs.error;\n throw e;\n }\n\n return qs;\n\n }\n\n /**\n * @return {Promise}\n */\n async loggedIn() {\n\n try {\n await this._ensureAuthentication();\n return true;\n } catch (e) {\n return false;\n }\n\n }\n\n /**\n * @param {string} options.username\n * @param {string} options.password\n * @param {string} options.extension\n * @param {string} options.code\n * @param {string} options.redirectUri\n * @param {string} options.endpointId\n * @returns {Promise}\n */\n async login(options) {\n\n try {\n\n options = options || {};\n\n options.remember = options.remember || false;\n\n this.emit(this.events.beforeLogin);\n\n var body = {\n \"access_token_ttl\": Platform._accessTokenTtl,\n \"refresh_token_ttl\": options.remember ? Platform._refreshTokenTtlRemember : Platform._refreshTokenTtl\n };\n\n if (!options.code) {\n\n body.grant_type = 'password';\n body.username = options.username;\n body.password = options.password;\n body.extension = options.extension || '';\n\n } else if (options.code) {\n\n body.grant_type = 'authorization_code';\n body.code = options.code;\n body.redirect_uri = options.redirectUri;\n //body.client_id = this.getCredentials().key; // not needed\n\n }\n\n if (options.endpointId) body.endpoint_id = options.endpointId;\n\n var apiResponse = await this._tokenRequest(Platform._tokenEndpoint, body),\n json = apiResponse.json();\n\n this._auth\n .setData(json)\n .setRemember(options.remember);\n\n this.emit(this.events.loginSuccess, apiResponse);\n\n return apiResponse;\n\n } catch (e) {\n\n this._cache.clean();\n\n this.emit(this.events.loginError, e);\n\n throw e;\n\n }\n\n }\n\n /**\n * @returns {Promise}\n */\n async refresh() {\n\n try {\n\n this.emit(this.events.beforeRefresh);\n\n if (this._queue.isPaused()) {\n\n await this._queue.poll();\n\n if (!this._isAccessTokenValid()) {\n throw new Error('Automatic authentification timeout');\n }\n\n this.emit(this.events.refreshSuccess, null);\n\n return null;\n\n }\n\n this._queue.pause();\n\n // Make sure all existing AJAX calls had a chance to reach the server\n await delay(Platform._refreshDelayMs);\n\n // Perform sanity checks\n if (!this._auth.refreshToken()) throw new Error('Refresh token is missing');\n if (!this._auth.refreshTokenValid()) throw new Error('Refresh token has expired');\n if (!this._queue.isPaused()) throw new Error('Queue was resumed before refresh call');\n\n /** @type {ApiResponse} */\n var res = await this._tokenRequest(Platform._tokenEndpoint, {\n \"grant_type\": \"refresh_token\",\n \"refresh_token\": this._auth.refreshToken(),\n \"access_token_ttl\": Platform._accessTokenTtl,\n \"refresh_token_ttl\": this._auth.remember() ? Platform._refreshTokenTtlRemember : Platform._refreshTokenTtl\n }),\n json = res.json();\n\n if (!json.access_token) {\n throw this._client.makeError(new Error('Malformed OAuth response'), res);\n }\n\n this._auth.setData(json);\n this._queue.resume();\n\n this.emit(this.events.refreshSuccess, res);\n\n return res;\n\n } catch (e) {\n\n e = this._client.makeError(e);\n\n if (Platform._clearCacheOnRefreshError) {\n this._cache.clean();\n }\n\n this.emit(this.events.refreshError, e);\n\n throw e;\n\n }\n\n }\n\n /**\n * @returns {Promise}\n */\n async logout() {\n\n try {\n\n this.emit(this.events.beforeLogout);\n\n this._queue.pause();\n\n var res = await this._tokenRequest(Platform._revokeEndpoint, {\n token: this._auth.accessToken()\n });\n\n this._queue.resume();\n this._cache.clean();\n\n this.emit(this.events.logoutSuccess, res);\n\n return res;\n\n } catch (e) {\n\n this._queue.resume();\n\n this.emit(this.events.logoutError, e);\n\n throw e;\n\n }\n\n }\n\n /**\n * @param {Request} request\n * @param {object} [options]\n * @param {boolean} [options.skipAuthCheck]\n * @return {Promise}\n */\n async inflateRequest(request, options) {\n\n options = options || {};\n\n if (options.skipAuthCheck) return request;\n\n await this._ensureAuthentication();\n\n request.headers.set('Authorization', this._authHeader());\n //request.url = this.createUrl(request.url, {addServer: true}); //FIXME Spec prevents this...\n\n //TODO Add User-Agent here\n\n return request;\n\n }\n\n /**\n * @param {Request} request\n * @param {object} [options]\n * @param {boolean} [options.skipAuthCheck]\n * @return {Promise}\n */\n async sendRequest(request, options) {\n\n try {\n\n request = await this.inflateRequest(request, options);\n\n return (await this._client.sendRequest(request));\n\n } catch (e) {\n\n // Guard is for errors that come from polling\n if (!e.apiResponse || !e.apiResponse.response() || (e.apiResponse.response().status != 401)) throw e;\n\n this._auth.cancelAccessToken();\n\n return (await this.sendRequest(request, options));\n\n }\n\n }\n\n /**\n * General purpose function to send anything to server\n * @param {string} options.url\n * @param {object} [options.body]\n * @param {string} [options.method]\n * @param {object} [options.query]\n * @param {object} [options.headers]\n * @param {boolean} [options.skipAuthCheck]\n * @return {Promise}\n */\n async send(options = {}) {\n\n //FIXME https://github.com/bitinn/node-fetch/issues/43\n options.url = this.createUrl(options.url, {addServer: true});\n\n return await this.sendRequest(this._client.createRequest(options), options);\n\n }\n\n /**\n * @param {string} url\n * @param {object} [query]\n * @param {object} [options]\n * @param {object} [options.headers]\n * @param {boolean} [options.skipAuthCheck]\n * @return {Promise}\n */\n async get(url, query, options) {\n options = options || {};\n options.method = 'GET';\n options.url = url;\n options.query = query;\n return await this.send(options);\n }\n\n /**\n * @param {string} url\n * @param {object} body\n * @param {object} [query]\n * @param {object} [options]\n * @param {object} [options.headers]\n * @param {boolean} [options.skipAuthCheck]\n * @return {Promise}\n */\n async post(url, body, query, options) {\n options = options || {};\n options.method = 'POST';\n options.url = url;\n options.query = query;\n options.body = body;\n return await this.send(options);\n }\n\n /**\n * @param {string} url\n * @param {object} [body]\n * @param {object} [query]\n * @param {object} [options]\n * @param {object} [options.headers]\n * @param {boolean} [options.skipAuthCheck]\n * @return {Promise}\n */\n async put(url, body, query, options) {\n options = options || {};\n options.method = 'PUT';\n options.url = url;\n options.query = query;\n options.body = body;\n return await this.send(options);\n }\n\n /**\n * @param {string} url\n * @param {string} [query]\n * @param {object} [options]\n * @param {object} [options.headers]\n * @param {boolean} [options.skipAuthCheck]\n * @return {Promise}\n */\n async 'delete'(url, query, options) {\n options = options || {};\n options.method = 'DELETE';\n options.url = url;\n options.query = query;\n return await this.send(options);\n }\n\n async _tokenRequest(path, body) {\n\n return await this.send({\n url: path,\n skipAuthCheck: true,\n body: body,\n method: 'POST',\n headers: {\n 'Authorization': 'Basic ' + this._apiKey(),\n 'Content-Type': 'application/x-www-form-urlencoded'\n }\n });\n\n }\n\n async _ensureAuthentication() {\n\n if (this._isAccessTokenValid()) return null;\n return await this.refresh();\n\n }\n\n _isAccessTokenValid() {\n\n return (this._auth.accessTokenValid() && !this._queue.isPaused());\n\n }\n\n _apiKey() {\n var apiKey = this._appKey + ':' + this._appSecret;\n return (typeof btoa == 'function') ? btoa(apiKey) : new Buffer(apiKey).toString('base64');\n }\n\n _authHeader() {\n var token = this._auth.accessToken();\n return this._auth.tokenType() + (token ? ' ' + token : '');\n }\n\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/platform/Platform.js\n **/","export default class Auth {\n\n static refreshHandicapMs:number = 60 * 1000; // 1 minute\n static forcedTokenType = 'forced';\n\n constructor(cache, cacheId:string) {\n\n /** @type {Cache} */\n this._cache = cache;\n this._cacheId = cacheId;\n\n }\n\n accessToken() {\n return this.data().access_token;\n }\n\n refreshToken() {\n return this.data().refresh_token;\n }\n\n tokenType() {\n return this.data().token_type;\n }\n\n /**\n * @return {{token_type: string, access_token: string, expires_in: number, refresh_token: string, refresh_token_expires_in: number}}\n */\n data() {\n\n return this._cache.getItem(this._cacheId) || {\n token_type: '',\n access_token: '',\n expires_in: 0,\n refresh_token: '',\n refresh_token_expires_in: 0\n };\n\n }\n\n /**\n * @param {object} newData\n * @return {Auth}\n */\n setData(newData) {\n\n newData = newData || {};\n\n var data = this.data();\n\n Object.keys(newData).forEach((key) => {\n data[key] = newData[key];\n });\n\n data.expire_time = Date.now() + (data.expires_in * 1000);\n data.refresh_token_expire_time = Date.now() + (data.refresh_token_expires_in * 1000);\n\n this._cache.setItem(this._cacheId, data);\n\n return this;\n\n }\n\n /**\n * Check if there is a valid (not expired) access token\n * @return {boolean}\n */\n accessTokenValid() {\n\n var authData = this.data();\n return (authData.token_type === Auth.forcedTokenType || (authData.expire_time - Auth.refreshHandicapMs > Date.now()));\n\n }\n\n /**\n * Check if there is a valid (not expired) access token\n * @return {boolean}\n */\n refreshTokenValid() {\n\n return (this.data().refresh_token_expire_time > Date.now());\n\n }\n\n /**\n * @return {Auth}\n */\n cancelAccessToken() {\n\n return this.setData({\n access_token: '',\n expires_in: 0\n });\n\n }\n\n /**\n * This method sets a special authentication mode used in Service Web\n * @return {Auth}\n */\n forceAuthentication() {\n\n this.setData({\n token_type: Auth.forcedTokenType,\n access_token: '',\n expires_in: 0,\n refresh_token: '',\n refresh_token_expires_in: 0\n });\n\n return this;\n\n }\n\n /**\n * @param remember\n * @return {Auth}\n */\n setRemember(remember) {\n\n return this.setData({remember: remember});\n\n }\n\n /**\n * @return {boolean}\n */\n remember() {\n\n return !!this.data().remember;\n\n }\n\n}\n\n//export interface IAuthData {\n// remember?:boolean;\n// token_type?:string;\n// access_token?:string;\n// expires_in?:number; // actually it's string\n// expire_time?:number;\n// refresh_token?:string;\n// refresh_token_expires_in?:number; // actually it's string\n// refresh_token_expire_time?:number;\n// scope?:string;\n//}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/platform/Auth.js\n **/","import PubnubMock from './PubnubMock.js';\nimport {PUBNUB} from '../core/Externals';\n\nexport default class PubnubMockFactory {\n\n constructor() {\n this.crypto_obj = PUBNUB.crypto_obj;\n }\n\n init(options:PUBNUBInitOptions) {\n return new PubnubMock(options);\n }\n\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/pubnub/PubnubFactory.js\n **/","import Observable from '../core/Observable';\nimport {PUBNUB} from '../core/Externals';\n\nexport default class PubnubMock extends Observable {\n\n constructor(options) {\n super();\n this.options = options;\n this.crypto_obj = PUBNUB.crypto_obj;\n }\n\n ready() {}\n\n subscribe(options:PUBNUBSubscribeOptions) {\n this.on('message-' + options.channel, options.message);\n }\n\n unsubscribe(options:PUBNUBUnsubscribeOptions) {\n this.off('message-' + options.channel);\n }\n\n receiveMessage(msg, channel) {\n this.emit('message-' + channel, msg, 'env', channel);\n }\n\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/pubnub/PubnubMock.js\n **/","import Observable from '../core/Observable';\nimport Client from '../http/Client';\nimport {poll, stopPolling, delay} from '../core/Utils';\n\nexport default class Subscription extends Observable {\n\n static _renewHandicapMs = 2 * 60 * 1000;\n static _pollInterval = 10 * 1000;\n\n events = {\n notification: 'notification',\n removeSuccess: 'removeSuccess',\n removeError: 'removeError',\n renewSuccess: 'renewSuccess',\n renewError: 'renewError',\n subscribeSuccess: 'subscribeSuccess',\n subscribeError: 'subscribeError'\n };\n\n constructor(pubnubFactory, platform) {\n\n super();\n\n this._pubnubFactory = pubnubFactory;\n this._platform = platform;\n this._pubnub = null;\n this._timeout = null;\n this._subscription = {};\n\n }\n\n subscribed(){\n\n return !!(this._subscription.id &&\n this._subscription.deliveryMode &&\n this._subscription.deliveryMode.subscriberKey &&\n this._subscription.deliveryMode.address);\n\n }\n\n /**\n * @return {boolean}\n */\n alive() {\n\n return this.subscribed() && Date.now() < this.expirationTime();\n\n }\n\n expirationTime() {\n return new Date(this._subscription.expirationTime || 0).getTime() - Subscription._renewHandicapMs;\n }\n\n setSubscription(subscription) {\n\n subscription = subscription || {};\n\n this._clearTimeout();\n\n this._subscription = subscription;\n\n if (!this._pubnub) this._subscribeAtPubnub();\n\n this._setTimeout();\n\n return this;\n\n }\n\n subscription() {\n return this._subscription;\n }\n\n /**\n * Creates or updates subscription if there is an active one\n * @returns {Promise}\n */\n async register() {\n\n if (this.alive()) {\n return await this.renew();\n } else {\n return await this.subscribe();\n }\n\n }\n\n eventFilters() {\n return this._subscription.eventFilters || [];\n }\n\n /**\n * @param {string[]} events\n * @return {Subscription}\n */\n addEventFilters(events) {\n this.setEventFilters(this.eventFilters().concat(events));\n return this;\n }\n\n /**\n * @param {string[]} events\n * @return {Subscription}\n */\n setEventFilters(events) {\n this._subscription.eventFilters = events;\n return this;\n }\n\n /**\n * @returns {Promise}\n */\n async subscribe() {\n\n try {\n\n this._clearTimeout();\n\n if (!this.eventFilters().length) throw new Error('Events are undefined');\n\n var response = await this._platform.post('/restapi/v1.0/subscription', {\n eventFilters: this._getFullEventFilters(),\n deliveryMode: {\n transportType: 'PubNub'\n }\n }),\n json = response.json();\n\n this.setSubscription(json)\n .emit(this.events.subscribeSuccess, response);\n\n return response;\n\n\n } catch (e) {\n\n e = this._platform.client().makeError(e);\n\n this.reset()\n .emit(this.events.subscribeError, e);\n\n throw e;\n\n }\n\n }\n\n /**\n * @returns {Promise}\n */\n async renew() {\n\n try {\n\n this._clearTimeout();\n\n if (!this.alive()) throw new Error('Subscription is not alive');\n\n if (!this.eventFilters().length) throw new Error('Events are undefined');\n\n var response = await this._platform.put('/restapi/v1.0/subscription/' + this._subscription.id, {\n eventFilters: this._getFullEventFilters()\n });\n\n var json = response.json();\n\n this.setSubscription(json)\n .emit(this.events.renewSuccess, response);\n\n return response;\n\n } catch (e) {\n\n e = this._platform.client().makeError(e);\n\n this.reset()\n .emit(this.events.renewError, e);\n\n throw e;\n\n }\n\n }\n\n /**\n * @returns {Promise}\n */\n async remove() {\n\n try {\n\n if (!this.subscribed()) throw new Error('No subscription');\n\n var response = await this._platform.delete('/restapi/v1.0/subscription/' + this._subscription.id);\n\n this.reset()\n .emit(this.events.removeSuccess, response);\n\n return response;\n\n } catch (e) {\n\n e = this._platform.client().makeError(e);\n\n this.emit(this.events.removeError, e);\n\n throw e;\n\n }\n\n }\n\n /**\n * @returns {Promise}\n */\n resubscribe() {\n\n return this.reset().setEventFilters(this.eventFilters()).subscribe();\n\n }\n\n /**\n * Remove subscription and disconnect from PUBNUB\n * This method resets subscription at client side but backend is not notified\n */\n reset() {\n this._clearTimeout();\n if (this.subscribed() && this._pubnub) this._pubnub.unsubscribe({channel: this._subscription.deliveryMode.address});\n this._subscription = {};\n return this;\n }\n\n _getFullEventFilters() {\n\n return this.eventFilters().map((event) => {\n return this._platform.createUrl(event);\n });\n\n }\n\n _setTimeout() {\n\n this._clearTimeout();\n\n if (!this.alive()) throw new Error('Subscription is not alive');\n\n poll((next)=> {\n\n if (this.alive()) return next();\n\n this.renew();\n\n }, Subscription._pollInterval, this._timeout);\n\n return this;\n\n }\n\n _clearTimeout() {\n\n stopPolling(this._timeout);\n\n return this;\n\n }\n\n _decrypt(message:any) {\n\n if (!this.subscribed()) throw new Error('No subscription');\n\n if (this._subscription.deliveryMode.encryptionKey) {\n\n var PUBNUB = this._pubnubFactory;\n\n message = PUBNUB.crypto_obj.decrypt(message, this._subscription.deliveryMode.encryptionKey, {\n encryptKey: false,\n keyEncoding: 'base64',\n keyLength: 128,\n mode: 'ecb'\n });\n\n }\n\n return message;\n\n }\n\n _notify(message:any) {\n\n this.emit(this.events.notification, this._decrypt(message));\n\n return this;\n\n }\n\n _subscribeAtPubnub():Subscription {\n\n if (!this.alive()) throw new Error('Subscription is not alive');\n\n var PUBNUB = this._pubnubFactory;\n\n this._pubnub = PUBNUB.init({\n ssl: true,\n subscribe_key: this._subscription.deliveryMode.subscriberKey\n });\n\n this._pubnub.ready();\n\n this._pubnub.subscribe({\n channel: this._subscription.deliveryMode.address,\n message: this._notify.bind(this),\n connect: () => {}\n });\n\n return this;\n\n }\n\n}\n\n//export interface ISubscription {\n// id?:string;\n// uri?: string;\n// eventFilters?:string[];\n// expirationTime?:string; // 2014-03-12T19:54:35.613Z\n// expiresIn?:number;\n// deliveryMode?: {\n// transportType?:string;\n// encryption?:boolean;\n// address?:string;\n// subscriberKey?:string;\n// encryptionKey?:string;\n// secretKey?:string;\n// };\n// creationTime?:string; // 2014-03-12T19:54:35.613Z\n// status?:string; // Active\n//}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/subscription/Subscription.js\n **/","import Subscription from './Subscription';\nimport Queue from '../core/Queue';\n\nexport default class CachedSubscription extends Subscription {\n\n constructor(pubnubFactory, platform, cache, cacheKey) {\n\n super(pubnubFactory, platform);\n\n this._cache = cache;\n this._cacheKey = cacheKey;\n this._renewQueue = new Queue(this._cache, cacheKey + '-renew');\n this._resubscribeQueue = new Queue(this._cache, cacheKey + '-resubscribe');\n\n this.events = {\n ...this.events,\n queuedRenewSuccess: 'queuedRenewSuccess',\n queuedRenewError: 'queuedRenewError',\n queuedResubscribeSuccess: 'queuedResubscribeSuccess',\n queuedResubscribeError: 'queuedResubscribeError'\n };\n\n this.on(this.events.renewError, () => {\n this.resubscribe();\n });\n\n this.on([this.events.subscribeSuccess, this.events.renewSuccess], () => {\n this._cache.setItem(this._cacheKey, this.subscription());\n });\n\n this.on(this.events.removeSuccess, () => {\n this._cache.removeItem(this._cacheKey);\n });\n\n }\n\n /**\n * TODO Combine with Platform.refresh and move elsewhere\n * @param actionCb\n * @param queue\n * @param successEvent\n * @param errorEvent\n * @param errorMessage\n * @return {*}\n * @private\n */\n async _queue(actionCb, queue, successEvent, errorEvent, errorMessage) {\n\n try {\n\n if (queue.isPaused()) {\n\n await queue.poll();\n\n if (!this.alive()) {\n throw new Error(errorMessage);\n }\n\n this.emit(successEvent, null);\n\n return null;\n\n }\n\n queue.pause();\n\n var res = await actionCb.call(this);\n\n queue.resume();\n\n this.emit(successEvent, res);\n\n return res;\n\n } catch (e) {\n\n this.emit(errorEvent, e);\n\n throw e;\n\n }\n\n }\n\n /**\n * @returns {Promise}\n */\n renew() {\n\n return this._queue(\n super.renew,\n this._renewQueue,\n this.events.queuedRenewSuccess,\n this.events.queuedRenewError,\n 'Subscription is not alive after renew timeout'\n );\n\n }\n\n /**\n * @returns {Promise}\n */\n resubscribe() {\n\n return this._queue(\n super.resubscribe,\n this._resubscribeQueue,\n this.events.queuedResubscribeSuccess,\n this.events.queuedResubscribeError,\n 'Subscription is not alive after resubscribe timeout'\n );\n\n }\n\n /**\n * @param {string[]} events\n * @return {CachedSubscription}\n */\n restore(events) {\n\n var cachedSubscriptionData = this._cache.getItem(this._cacheKey);\n\n if (cachedSubscriptionData) {\n try {\n this.setSubscription(cachedSubscriptionData);\n } catch (e) {}\n } else {\n this.setEventFilters(events);\n }\n\n return this;\n\n }\n\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/subscription/CachedSubscription.js\n **/","/**\n * Copyright (c) 2014, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * https://raw.github.com/facebook/regenerator/master/LICENSE file. An\n * additional grant of patent rights can be found in the PATENTS file in\n * the same directory.\n */\n\n!(function(global) {\n \"use strict\";\n\n var hasOwn = Object.prototype.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n var inModule = typeof module === \"object\";\n var runtime = global.regeneratorRuntime;\n if (runtime) {\n if (inModule) {\n // If regeneratorRuntime is defined globally and we're in a module,\n // make the exports object identical to regeneratorRuntime.\n module.exports = runtime;\n }\n // Don't bother evaluating the rest of this file if the runtime was\n // already defined globally.\n return;\n }\n\n // Define the runtime globally (as expected by generated code) as either\n // module.exports (if we're in a module) or a new, empty object.\n runtime = global.regeneratorRuntime = inModule ? module.exports : {};\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided, then outerFn.prototype instanceof Generator.\n var generator = Object.create((outerFn || Generator).prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n runtime.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype;\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] = GeneratorFunction.displayName = \"GeneratorFunction\";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n runtime.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n runtime.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = \"GeneratorFunction\";\n }\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `value instanceof AwaitArgument` to determine if the yielded value is\n // meant to be awaited. Some may consider the name of this method too\n // cutesy, but they are curmudgeons.\n runtime.awrap = function(arg) {\n return new AwaitArgument(arg);\n };\n\n function AwaitArgument(arg) {\n this.arg = arg;\n }\n\n function AsyncIterator(generator) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value instanceof AwaitArgument) {\n return Promise.resolve(value.arg).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return Promise.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration. If the Promise is rejected, however, the\n // result for this iteration will be rejected with the same\n // reason. Note that rejections of yielded Promises are not\n // thrown back into the generator function, as is the case\n // when an awaited Promise is rejected. This difference in\n // behavior between yield and await is important, because it\n // allows the consumer to decide what to do with the yielded\n // rejection (swallow it and continue, manually .throw it back\n // into the generator, abandon iteration, whatever). With\n // await, by contrast, there is no opportunity to examine the\n // rejection reason outside the generator function, so the\n // only option is to throw it from the await expression, and\n // let the generator function handle the exception.\n result.value = unwrapped;\n resolve(result);\n }, reject);\n }\n }\n\n if (typeof process === \"object\" && process.domain) {\n invoke = process.domain.bind(invoke);\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new Promise(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n runtime.async = function(innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList)\n );\n\n return runtime.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n if (method === \"return\" ||\n (method === \"throw\" && delegate.iterator[method] === undefined)) {\n // A return or throw (when the delegate iterator has no throw\n // method) always terminates the yield* loop.\n context.delegate = null;\n\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n var returnMethod = delegate.iterator[\"return\"];\n if (returnMethod) {\n var record = tryCatch(returnMethod, delegate.iterator, arg);\n if (record.type === \"throw\") {\n // If the return method threw an exception, let that\n // exception prevail over the original return or throw.\n method = \"throw\";\n arg = record.arg;\n continue;\n }\n }\n\n if (method === \"return\") {\n // Continue with the outer return, now that the delegate\n // iterator has been terminated.\n continue;\n }\n }\n\n var record = tryCatch(\n delegate.iterator[method],\n delegate.iterator,\n arg\n );\n\n if (record.type === \"throw\") {\n context.delegate = null;\n\n // Like returning generator.throw(uncaught), but without the\n // overhead of an extra function call.\n method = \"throw\";\n arg = record.arg;\n continue;\n }\n\n // Delegate generator ran and handled its own exceptions so\n // regardless of what the method was, we continue as if it is\n // \"next\" with an undefined arg.\n method = \"next\";\n arg = undefined;\n\n var info = record.arg;\n if (info.done) {\n context[delegate.resultName] = info.value;\n context.next = delegate.nextLoc;\n } else {\n state = GenStateSuspendedYield;\n return info;\n }\n\n context.delegate = null;\n }\n\n if (method === \"next\") {\n if (state === GenStateSuspendedYield) {\n context.sent = arg;\n } else {\n context.sent = undefined;\n }\n\n } else if (method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw arg;\n }\n\n if (context.dispatchException(arg)) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n method = \"next\";\n arg = undefined;\n }\n\n } else if (method === \"return\") {\n context.abrupt(\"return\", arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n var info = {\n value: record.arg,\n done: context.done\n };\n\n if (record.arg === ContinueSentinel) {\n if (context.delegate && method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n arg = undefined;\n }\n } else {\n return info;\n }\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(arg) call above.\n method = \"throw\";\n arg = record.arg;\n }\n }\n };\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp[toStringTagSymbol] = \"Generator\";\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n runtime.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n runtime.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n this.sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n return !!caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.next = finallyEntry.finallyLoc;\n } else {\n this.complete(record);\n }\n\n return ContinueSentinel;\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = record.arg;\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n return ContinueSentinel;\n }\n };\n})(\n // Among the various tricks for obtaining a reference to the global\n // object, this seems to be the most reliable technique that does not\n // use indirect eval (which violates Content Security Policy).\n typeof global === \"object\" ? global :\n typeof window === \"object\" ? window :\n typeof self === \"object\" ? self : this\n);\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/regenerator/runtime.js\n ** module id = 22\n ** module chunks = 0\n **/"],"sourceRoot":""} \ No newline at end of file diff --git a/build/ringcentral.min.js b/build/ringcentral.min.js index 9ab5bc27..4a4b541e 100644 --- a/build/ringcentral.min.js +++ b/build/ringcentral.min.js @@ -1,3 +1,3 @@ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("es6-promise"),require("node-fetch"),require("pubnub")):"function"==typeof define&&define.amd?define([,,"pubnub"],t):"object"==typeof exports?exports.SDK=t(require("es6-promise"),require("node-fetch"),require("pubnub")):(e.RingCentral=e.RingCentral||{},e.RingCentral.SDK=t(e[void 0],e[void 0],e[void 0]))}(this,function(e,t,r){return function(e){function t(n){if(r[n])return r[n].exports;var o=r[n]={exports:{},id:n,loaded:!1};return e[n].call(o.exports,o,o.exports,t),o.loaded=!0,o.exports}var r={};return t.m=e,t.c=r,t.p="/build/",t(0)}([function(e,t,r){e.exports=r(1)},function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}function o(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t["default"]=e,t}function s(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}t.__esModule=!0;var i=function(){function e(e,t){for(var r=0;r1?r-1:0),o=1;r>o;o++)n[o-1]=arguments[o];var s=null;return this.hasListeners(e)?(this._listeners[e].some(function(e){return s=e.apply(t,n),s===!1}),s):null},e.prototype.off=function(e,t){var r=this;if(e)if(t){if(!this.hasListeners(e))return this;this._listeners[e].forEach(function(n,o){n===t&&delete r._listeners[e][o]})}else delete this._listeners[e];else this._listeners={};return this},e}();t["default"]=n,e.exports=t["default"]},function(e,t,r){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}t.__esModule=!0;var o=function(){function e(e,t){for(var r=0;r-1?"&":"?")+a.queryStringify(e.query)),c.findHeaderName("Accept",e.headers)||(e.headers.Accept=h["default"]._jsonContentType),"string"!=typeof e.body||!e.body){var r=c.findHeaderName(h["default"]._contentType,e.headers);r||(r=h["default"]._contentType,e.headers[r]=h["default"]._jsonContentType);var n=e.headers[r];n.indexOf(h["default"]._jsonContentType)>-1?e.body=JSON.stringify(e.body):n.indexOf(h["default"]._urlencodedContentType)>-1&&(e.body=a.queryStringify(e.body))}var o=new u.Request(e.url,e);return o.originalBody=e.body,o},i(t,null,[{key:"_allowedMethods",value:["GET","POST","PUT","DELETE","PATCH","OPTIONS","HEAD"],enumerable:!0}]),t}(l["default"]);t["default"]=d,e.exports=t["default"]},function(e,t,r){"use strict";function n(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t["default"]=e,t}function o(e,t){t=t||{};var r=new i.Response(e,t);return a.isNodeJS()&&(r._text=e,r._decode=function(){return this._text}),r}function s(e,t){return e=e.toLowerCase(),Object.keys(t).reduce(function(t,r){return t?t:e==r.toLowerCase()?r:t},null)}t.__esModule=!0,t.createResponse=o,t.findHeaderName=s;var i=r(3),u=r(2),a=n(u)},function(e,t,r){"use strict";function n(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t["default"]=e,t}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}t.__esModule=!0;var s=function(){function e(e,t){for(var r=0;r-1},e.prototype._getContentType=function(){return this._response.headers.get(e._contentType)||""},e.prototype._isMultipart=function(){return this._isContentType(e._multipartContentType)},e.prototype._isUrlEncoded=function(){return this._isContentType(e._urlencodedContentType)},e.prototype._isJson=function(){return this._isContentType(e._jsonContentType)},e.create=function(t,r,n){t=t||"",r=r||200,n=n||"OK",t=t.replace(/\r/g,"");var o=new i.Headers,s=t.split(e._bodySeparator),u=s.length>1?s.shift():"";return t=s.join(e._bodySeparator),(u||"").split("\n").forEach(function(t){var r=t.trim().split(e._headerSeparator),n=r.shift().trim(),s=r.join(e._headerSeparator).trim();n&&o.append(n,s)}),new e(null,a.createResponse(t,{headers:o,status:r,statusText:n}),t)},e}();t["default"]=c,e.exports=t["default"]},function(e,t,r){"use strict";function n(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")}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)}t.__esModule=!0;var i=r(14),u=n(i),a=r(10),c=n(a),p=function(e){function t(){o(this,t),e.call(this),this._registry=new u["default"]}return s(t,e),t.prototype.registry=function(){return this._registry},t.prototype._loadResponse=function(e){var t;return regeneratorRuntime.async(function(r){for(;;)switch(r.prev=r.next){case 0:return t=this._registry.find(e),r.next=3,regeneratorRuntime.awrap(t.getResponse(e));case 3:return r.abrupt("return",r.sent);case 4:case"end":return r.stop()}},null,this)},t}(c["default"]);t["default"]=p,e.exports=t["default"]},function(e,t,r){"use strict";function n(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")}t.__esModule=!0;var s=r(15),i=n(s),u=function(){function e(){o(this,e),this._mocks=[]}return e.prototype.add=function(e){return this._mocks.push(e),this},e.prototype.clear=function(){return this._mocks=[],this},e.prototype.find=function(e){var t=this._mocks.shift();if(!t)throw new Error("No mock in registry for request "+e.method+" "+e.url);if(!t.test(e))throw new Error("Wrong request "+e.method+" "+e.url+" for expected mock "+t.method()+" "+t.path());return t},e.prototype.apiCall=function(e,t,r,n,o){return this.add(new i["default"](e,t,r,n,o)),this},e.prototype.authentication=function(){return this.apiCall("POST","/restapi/oauth/token",{access_token:"ACCESS_TOKEN",token_type:"bearer",expires_in:3600,refresh_token:"REFRESH_TOKEN",refresh_token_expires_in:60480,scope:"SMS RCM Foo Boo",expireTime:(new Date).getTime()+36e5}),this},e.prototype.logout=function(){return this.apiCall("POST","/restapi/oauth/revoke",{}),this},e.prototype.presenceLoad=function(e){return this.apiCall("GET","/restapi/v1.0/account/~/extension/"+e+"/presence",{uri:"https://platform.ringcentral.com/restapi/v1.0/account/123/extension/"+e+"/presence",extension:{uri:"https://platform.ringcentral.com/restapi/v1.0/account/123/extension/"+e,id:e,extensionNumber:"101"},activeCalls:[],presenceStatus:"Available",telephonyStatus:"Ringing",userStatus:"Available",dndStatus:"TakeAllCalls",extensionId:e}),this},e.prototype.subscribeGeneric=function(e){e=e||54e3;var t=new Date;return this.apiCall("POST","/restapi/v1.0/subscription",{eventFilters:["/restapi/v1.0/account/~/extension/~/presence"],expirationTime:new Date(t.getTime()+1e3*e).toISOString(),expiresIn:e,deliveryMode:{transportType:"PubNub",encryption:!1,address:"123_foo",subscriberKey:"sub-c-foo",secretKey:"sec-c-bar"},id:"foo-bar-baz",creationTime:t.toISOString(),status:"Active",uri:"https://platform.ringcentral.com/restapi/v1.0/subscription/foo-bar-baz"}),this},e.prototype.subscribeOnPresence=function(e,t){e=e||"1";var r=new Date;return this.apiCall("POST","/restapi/v1.0/subscription",{eventFilters:["/restapi/v1.0/account/~/extension/"+e+"/presence"+(t?"?detailedTelephonyState=true":"")],expirationTime:new Date(r.getTime()+54e6).toISOString(),deliveryMode:{transportType:"PubNub",encryption:!0,address:"123_foo",subscriberKey:"sub-c-foo",secretKey:"sec-c-bar",encryptionAlgorithm:"AES",encryptionKey:"VQwb6EVNcQPBhE/JgFZ2zw=="},creationTime:r.toISOString(),id:"foo-bar-baz",status:"Active",uri:"https://platform.ringcentral.com/restapi/v1.0/subscription/foo-bar-baz"}),this},e.prototype.tokenRefresh=function(e){return e?this.apiCall("POST","/restapi/oauth/token",{message:"Wrong token",error_description:"Wrong token",description:"Wrong token"},400):this.apiCall("POST","/restapi/oauth/token",{access_token:"ACCESS_TOKEN_FROM_REFRESH",token_type:"bearer",expires_in:3600,refresh_token:"REFRESH_TOKEN_FROM_REFRESH",refresh_token_expires_in:60480,scope:"SMS RCM Foo Boo"}),this},e}();t["default"]=u,e.exports=t["default"]},function(e,t,r){"use strict";function n(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")}t.__esModule=!0;var s=r(12),i=n(s),u=r(2),a=r(11),c=function(){function e(t,r,n,s,i,u){o(this,e),this._method=t.toUpperCase(),this._path=r,this._json=n||{},this._delay=u||10,this._status=s||200,this._statusText=i||"OK"}return e.prototype.path=function(){return this._path},e.prototype.method=function(){return this._method},e.prototype.test=function(e){return e.url.indexOf(this._path)>-1&&e.method.toUpperCase()==this._method},e.prototype.getResponse=function(e){return regeneratorRuntime.async(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,regeneratorRuntime.awrap(u.delay(this._delay));case 2:return e.abrupt("return",this.createResponse(this._json));case 3:case"end":return e.stop()}},null,this)},e.prototype.createResponse=function(e,t){t=t||{},t.status=t.status||this._status,t.statusText=t.statusText||this._statusText;var r=JSON.stringify(e),n=a.createResponse(r,t);return n.headers.set(i["default"]._contentType,i["default"]._jsonContentType),n},e}();t["default"]=c,e.exports=t["default"]},function(e,t,r){"use strict";function n(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")}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)}t.__esModule=!0;var i=function(){function e(e,t){for(var r=0;r-1?"&":"?"),r.addMethod&&(n+="_method="+r.addMethod),r.addToken&&(n+=(r.addMethod?"&":"")+"access_token="+this._auth.accessToken()),n},t.prototype.authUrl=function(e){return e=e||{},this.createUrl(t._authorizeEndpoint+"?"+h.queryStringify({response_type:"code",redirect_uri:e.redirectUri||"",client_id:this._appKey,state:e.state||"",brand_id:e.brandId||"",display:e.display||"",prompt:e.prompt||""}),{addServer:!0})},t.prototype.parseAuthRedirectUrl=function(e){var t=h.parseQueryString(e.split("?").reverse()[0]),r=t.error_description||t.error;if(r){var n=new Error(r);throw n.error=t.error,n}return t},t.prototype.loggedIn=function(){return regeneratorRuntime.async(function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,regeneratorRuntime.awrap(this._ensureAuthentication());case 3:return e.abrupt("return",!0);case 6:return e.prev=6,e.t0=e["catch"](0),e.abrupt("return",!1);case 9:case"end":return e.stop()}},null,this,[[0,6]])},t.prototype.login=function(e){var r,n,o;return regeneratorRuntime.async(function(s){for(;;)switch(s.prev=s.next){case 0:return s.prev=0,e=e||{},e.remember=e.remember||!1,this.emit(this.events.beforeLogin),r={access_token_ttl:t._accessTokenTtl,refresh_token_ttl:e.remember?t._refreshTokenTtlRemember:t._refreshTokenTtl},e.code?e.code&&(r.grant_type="authorization_code",r.code=e.code,r.redirect_uri=e.redirectUri):(r.grant_type="password",r.username=e.username,r.password=e.password,r.extension=e.extension||""),e.endpointId&&(r.endpoint_id=e.endpointId),s.next=9,regeneratorRuntime.awrap(this._tokenRequest(t._tokenEndpoint,r));case 9:return n=s.sent,o=n.json(),this._auth.setData(o).setRemember(e.remember),this.emit(this.events.loginSuccess,n),s.abrupt("return",n);case 16:throw s.prev=16,s.t0=s["catch"](0),this._cache.clean(),this.emit(this.events.loginError,s.t0),s.t0;case 21:case"end":return s.stop()}},null,this,[[0,16]])},t.prototype.refresh=function(){var e,r;return regeneratorRuntime.async(function(n){for(;;)switch(n.prev=n.next){case 0:if(n.prev=0,this.emit(this.events.beforeRefresh),!this._queue.isPaused()){n.next=9;break}return n.next=5,regeneratorRuntime.awrap(this._queue.poll());case 5:if(this._isAccessTokenValid()){n.next=7;break}throw new Error("Automatic authentification timeout");case 7:return this.emit(this.events.refreshSuccess,null),n.abrupt("return",null);case 9:return this._queue.pause(),n.next=12,regeneratorRuntime.awrap(h.delay(t._refreshDelayMs));case 12:if(this._auth.refreshToken()){n.next=14;break}throw new Error("Refresh token is missing");case 14:if(this._auth.refreshTokenValid()){n.next=16;break}throw new Error("Refresh token has expired");case 16:if(this._queue.isPaused()){n.next=18;break}throw new Error("Queue was resumed before refresh call");case 18:return n.next=20,regeneratorRuntime.awrap(this._tokenRequest(t._tokenEndpoint,{grant_type:"refresh_token",refresh_token:this._auth.refreshToken(),access_token_ttl:t._accessTokenTtl,refresh_token_ttl:this._auth.remember()?t._refreshTokenTtlRemember:t._refreshTokenTtl}));case 20:if(e=n.sent,r=e.json(),r.access_token){n.next=24;break}throw this._client.makeError(new Error("Malformed OAuth response"),e);case 24:return this._auth.setData(r),this._queue.resume(),this.emit(this.events.refreshSuccess,e),n.abrupt("return",e);case 30:throw n.prev=30,n.t0=n["catch"](0),n.t0=this._client.makeError(n.t0),t._clearCacheOnRefreshError&&this._cache.clean(),this.emit(this.events.refreshError,n.t0),n.t0;case 36:case"end":return n.stop()}},null,this,[[0,30]])},t.prototype.logout=function(){var e;return regeneratorRuntime.async(function(r){for(;;)switch(r.prev=r.next){case 0:return r.prev=0,this.emit(this.events.beforeLogout),this._queue.pause(),r.next=5,regeneratorRuntime.awrap(this._tokenRequest(t._revokeEndpoint,{token:this._auth.accessToken()}));case 5:return e=r.sent,this._queue.resume(),this._cache.clean(),this.emit(this.events.logoutSuccess,e),r.abrupt("return",e);case 12:throw r.prev=12,r.t0=r["catch"](0),this._queue.resume(),this.emit(this.events.logoutError,r.t0),r.t0;case 17:case"end":return r.stop()}},null,this,[[0,12]])},t.prototype.inflateRequest=function(e,t){return regeneratorRuntime.async(function(r){for(;;)switch(r.prev=r.next){case 0:if(t=t||{},!t.skipAuthCheck){r.next=3;break}return r.abrupt("return",e);case 3:return r.next=5,regeneratorRuntime.awrap(this._ensureAuthentication());case 5:return e.headers.set("Authorization",this._authHeader()),r.abrupt("return",e);case 7:case"end":return r.stop()}},null,this)},t.prototype.sendRequest=function(e,t){return regeneratorRuntime.async(function(r){for(;;)switch(r.prev=r.next){case 0:return r.prev=0,r.next=3,regeneratorRuntime.awrap(this.inflateRequest(e,t));case 3:return e=r.sent,r.next=6,regeneratorRuntime.awrap(this._client.sendRequest(e));case 6:return r.abrupt("return",r.sent);case 9:if(r.prev=9,r.t0=r["catch"](0),r.t0.apiResponse&&r.t0.apiResponse.response()&&401==r.t0.apiResponse.response().status){r.next=13;break}throw r.t0;case 13:return this._auth.cancelAccessToken(),r.next=16,regeneratorRuntime.awrap(this.sendRequest(e,t));case 16:return r.abrupt("return",r.sent);case 17:case"end":return r.stop()}},null,this,[[0,9]])},t.prototype.send=function(){var e=arguments.length<=0||void 0===arguments[0]?{}:arguments[0];return regeneratorRuntime.async(function(t){for(;;)switch(t.prev=t.next){case 0:return e.url=this.createUrl(e.url,{addServer:!0}),t.next=3,regeneratorRuntime.awrap(this.sendRequest(this._client.createRequest(e),e));case 3:return t.abrupt("return",t.sent);case 4:case"end":return t.stop()}},null,this)},t.prototype.get=function(e,t,r){return regeneratorRuntime.async(function(n){for(;;)switch(n.prev=n.next){case 0:return r=r||{},r.method="GET",r.url=e,r.query=t,n.next=6,regeneratorRuntime.awrap(this.send(r));case 6:return n.abrupt("return",n.sent);case 7:case"end":return n.stop()}},null,this)},t.prototype.post=function(e,t,r,n){return regeneratorRuntime.async(function(o){for(;;)switch(o.prev=o.next){case 0:return n=n||{},n.method="POST",n.url=e,n.query=r,n.body=t,o.next=7,regeneratorRuntime.awrap(this.send(n));case 7:return o.abrupt("return",o.sent);case 8:case"end":return o.stop()}},null,this)},t.prototype.put=function(e,t,r,n){return regeneratorRuntime.async(function(o){for(;;)switch(o.prev=o.next){case 0:return n=n||{},n.method="PUT",n.url=e,n.query=r,n.body=t,o.next=7,regeneratorRuntime.awrap(this.send(n));case 7:return o.abrupt("return",o.sent);case 8:case"end":return o.stop()}},null,this)},t.prototype["delete"]=function(e,t,r){return regeneratorRuntime.async(function(n){for(;;)switch(n.prev=n.next){case 0:return r=r||{},r.method="DELETE",r.url=e,r.query=t,n.next=6,regeneratorRuntime.awrap(this.send(r));case 6:return n.abrupt("return",n.sent);case 7:case"end":return n.stop()}},null,this)},t.prototype._tokenRequest=function(e,t){return regeneratorRuntime.async(function(r){for(;;)switch(r.prev=r.next){case 0:return r.next=2,regeneratorRuntime.awrap(this.send({url:e,skipAuthCheck:!0,body:t,method:"POST",headers:{Authorization:"Basic "+this._apiKey(),"Content-Type":"application/x-www-form-urlencoded"}}));case 2:return r.abrupt("return",r.sent);case 3:case"end":return r.stop()}},null,this)},t.prototype._ensureAuthentication=function(){return regeneratorRuntime.async(function(e){for(;;)switch(e.prev=e.next){case 0:if(!this._isAccessTokenValid()){e.next=2;break}return e.abrupt("return",null);case 2:return e.next=4,regeneratorRuntime.awrap(this.refresh());case 4:return e.abrupt("return",e.sent);case 5:case"end":return e.stop()}},null,this)},t.prototype._isAccessTokenValid=function(){return this._auth.accessTokenValid()&&!this._queue.isPaused()},t.prototype._apiKey=function(){var e=this._appKey+":"+this._appSecret;return"function"==typeof btoa?btoa(e):new Buffer(e).toString("base64")},t.prototype._authHeader=function(){var e=this._auth.accessToken();return this._auth.tokenType()+(e?" "+e:"")},t}(a["default"]);t["default"]=d,e.exports=t["default"]},function(e,t){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}t.__esModule=!0;var n=function(){function e(e,t){for(var r=0;rDate.now()},e.prototype.refreshTokenValid=function(){return this.data().refresh_token_expire_time>Date.now()},e.prototype.cancelAccessToken=function(){return this.setData({access_token:"",expires_in:0})},e.prototype.forceAuthentication=function(){return this.setData({token_type:e.forcedTokenType,access_token:"",expires_in:0,refresh_token:"",refresh_token_expires_in:0}),this},e.prototype.setRemember=function(e){return this.setData({remember:e})},e.prototype.remember=function(){return!!this.data().remember},e}();t["default"]=o,e.exports=t["default"]},function(e,t,r){"use strict";function n(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")}t.__esModule=!0;var s=r(19),i=n(s),u=r(3),a=function(){function e(){o(this,e),this.crypto_obj=u.PUBNUB.crypto_obj}return e.prototype.init=function(e){return new i["default"](e)},e}();t["default"]=a,e.exports=t["default"]},function(e,t,r){"use strict";function n(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")}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)}t.__esModule=!0;var i=r(8),u=n(i),a=r(3),c=function(e){function t(r){o(this,t),e.call(this),this.options=r,this.crypto_obj=a.PUBNUB.crypto_obj}return s(t,e),t.prototype.ready=function(){},t.prototype.subscribe=function(e){this.on("message-"+e.channel,e.message)},t.prototype.unsubscribe=function(e){this.off("message-"+e.channel)},t.prototype.receiveMessage=function(e,t){this.emit("message-"+t,e,"env",t)},t}(u["default"]);t["default"]=c,e.exports=t["default"]},function(e,t,r){"use strict";function n(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")}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)}t.__esModule=!0;var i=function(){function e(e,t){for(var r=0;r=0;--n){var o=this.tryEntries[n],s=o.completion;if("root"===o.tryLoc)return t("end");if(o.tryLoc<=this.prev){var i=b.call(o,"catchLoc"),u=b.call(o,"finallyLoc");if(i&&u){if(this.prev=0;--r){var n=this.tryEntries[r];if(n.tryLoc<=this.prev&&b.call(n,"finallyLoc")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),f(r),T}},"catch":function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var o=n.arg;f(r)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,r){return this.delegate={iterator:d(e),resultName:t,nextLoc:r},T}}}("object"==typeof t?t:"object"==typeof window?window:"object"==typeof self?self:this)}).call(t,function(){return this}())}])}); +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("es6-promise"),require("node-fetch"),require("pubnub")):"function"==typeof define&&define.amd?define([,,"pubnub"],t):"object"==typeof exports?exports.SDK=t(require("es6-promise"),require("node-fetch"),require("pubnub")):(e.RingCentral=e.RingCentral||{},e.RingCentral.SDK=t(e[void 0],e[void 0],e[void 0]))}(this,function(e,t,r){return function(e){function t(n){if(r[n])return r[n].exports;var o=r[n]={exports:{},id:n,loaded:!1};return e[n].call(o.exports,o,o.exports,t),o.loaded=!0,o.exports}var r={};return t.m=e,t.c=r,t.p="/build/",t(0)}([function(e,t,r){e.exports=r(1)},function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}function o(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t["default"]=e,t}function s(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}t.__esModule=!0;var i=function(){function e(e,t){for(var r=0;r1?r-1:0),o=1;r>o;o++)n[o-1]=arguments[o];var s=null;return this.hasListeners(e)?(this._listeners[e].some(function(e){return s=e.apply(t,n),s===!1}),s):null},e.prototype.off=function(e,t){var r=this;if(e)if(t){if(!this.hasListeners(e))return this;this._listeners[e].forEach(function(n,o){n===t&&delete r._listeners[e][o]})}else delete this._listeners[e];else this._listeners={};return this},e}();t["default"]=n,e.exports=t["default"]},function(e,t,r){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}t.__esModule=!0;var o=function(){function e(e,t){for(var r=0;r-1?"&":"?")+a.queryStringify(e.query)),c.findHeaderName("Accept",e.headers)||(e.headers.Accept=h["default"]._jsonContentType),"string"!=typeof e.body||!e.body){var r=c.findHeaderName(h["default"]._contentType,e.headers);r||(r=h["default"]._contentType,e.headers[r]=h["default"]._jsonContentType);var n=e.headers[r];n.indexOf(h["default"]._jsonContentType)>-1?e.body=JSON.stringify(e.body):n.indexOf(h["default"]._urlencodedContentType)>-1&&(e.body=a.queryStringify(e.body))}var o=new u.Request(e.url,e);return o.originalBody=e.body,o},i(t,null,[{key:"_allowedMethods",value:["GET","POST","PUT","DELETE","PATCH","OPTIONS","HEAD"],enumerable:!0}]),t}(l["default"]);t["default"]=d,e.exports=t["default"]},function(e,t,r){"use strict";function n(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t["default"]=e,t}function o(e,t){t=t||{};var r=new i.Response(e,t);return a.isNodeJS()&&(r._text=e,r._decode=function(){return this._text}),r}function s(e,t){return e=e.toLowerCase(),Object.keys(t).reduce(function(t,r){return t?t:e==r.toLowerCase()?r:t},null)}t.__esModule=!0,t.createResponse=o,t.findHeaderName=s;var i=r(3),u=r(2),a=n(u)},function(e,t,r){"use strict";function n(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t["default"]=e,t}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}t.__esModule=!0;var s=function(){function e(e,t){for(var r=0;r-1},e.prototype._getContentType=function(){return this._response.headers.get(e._contentType)||""},e.prototype._isMultipart=function(){return this._isContentType(e._multipartContentType)},e.prototype._isUrlEncoded=function(){return this._isContentType(e._urlencodedContentType)},e.prototype._isJson=function(){return this._isContentType(e._jsonContentType)},e.create=function(t,r,n){t=t||"",r=r||200,n=n||"OK",t=t.replace(/\r/g,"");var o=new i.Headers,s=t.split(e._bodySeparator),u=s.length>1?s.shift():"";return t=s.join(e._bodySeparator),(u||"").split("\n").forEach(function(t){var r=t.trim().split(e._headerSeparator),n=r.shift().trim(),s=r.join(e._headerSeparator).trim();n&&o.append(n,s)}),new e(null,a.createResponse(t,{headers:o,status:r,statusText:n}),t)},e}();t["default"]=c,e.exports=t["default"]},function(e,t,r){"use strict";function n(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")}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)}t.__esModule=!0;var i=r(14),u=n(i),a=r(10),c=n(a),p=function(e){function t(){o(this,t),e.call(this),this._registry=new u["default"]}return s(t,e),t.prototype.registry=function(){return this._registry},t.prototype._loadResponse=function(e){var t;return regeneratorRuntime.async(function(r){for(;;)switch(r.prev=r.next){case 0:return t=this._registry.find(e),r.next=3,regeneratorRuntime.awrap(t.getResponse(e));case 3:return r.abrupt("return",r.sent);case 4:case"end":return r.stop()}},null,this)},t}(c["default"]);t["default"]=p,e.exports=t["default"]},function(e,t,r){"use strict";function n(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")}t.__esModule=!0;var s=r(15),i=n(s),u=function(){function e(){o(this,e),this._mocks=[]}return e.prototype.add=function(e){return this._mocks.push(e),this},e.prototype.clear=function(){return this._mocks=[],this},e.prototype.find=function(e){var t=this._mocks.shift();if(!t)throw new Error("No mock in registry for request "+e.method+" "+e.url);if(!t.test(e))throw new Error("Wrong request "+e.method+" "+e.url+" for expected mock "+t.method()+" "+t.path());return t},e.prototype.apiCall=function(e,t,r,n,o){return this.add(new i["default"](e,t,r,n,o)),this},e.prototype.authentication=function(){return this.apiCall("POST","/restapi/oauth/token",{access_token:"ACCESS_TOKEN",token_type:"bearer",expires_in:3600,refresh_token:"REFRESH_TOKEN",refresh_token_expires_in:60480,scope:"SMS RCM Foo Boo",expireTime:(new Date).getTime()+36e5}),this},e.prototype.logout=function(){return this.apiCall("POST","/restapi/oauth/revoke",{}),this},e.prototype.presenceLoad=function(e){return this.apiCall("GET","/restapi/v1.0/account/~/extension/"+e+"/presence",{uri:"https://platform.ringcentral.com/restapi/v1.0/account/123/extension/"+e+"/presence",extension:{uri:"https://platform.ringcentral.com/restapi/v1.0/account/123/extension/"+e,id:e,extensionNumber:"101"},activeCalls:[],presenceStatus:"Available",telephonyStatus:"Ringing",userStatus:"Available",dndStatus:"TakeAllCalls",extensionId:e}),this},e.prototype.subscribeGeneric=function(e){e=e||54e3;var t=new Date;return this.apiCall("POST","/restapi/v1.0/subscription",{eventFilters:["/restapi/v1.0/account/~/extension/~/presence"],expirationTime:new Date(t.getTime()+1e3*e).toISOString(),expiresIn:e,deliveryMode:{transportType:"PubNub",encryption:!1,address:"123_foo",subscriberKey:"sub-c-foo",secretKey:"sec-c-bar"},id:"foo-bar-baz",creationTime:t.toISOString(),status:"Active",uri:"https://platform.ringcentral.com/restapi/v1.0/subscription/foo-bar-baz"}),this},e.prototype.subscribeOnPresence=function(e,t){e=e||"1";var r=new Date;return this.apiCall("POST","/restapi/v1.0/subscription",{eventFilters:["/restapi/v1.0/account/~/extension/"+e+"/presence"+(t?"?detailedTelephonyState=true":"")],expirationTime:new Date(r.getTime()+54e6).toISOString(),deliveryMode:{transportType:"PubNub",encryption:!0,address:"123_foo",subscriberKey:"sub-c-foo",secretKey:"sec-c-bar",encryptionAlgorithm:"AES",encryptionKey:"VQwb6EVNcQPBhE/JgFZ2zw=="},creationTime:r.toISOString(),id:"foo-bar-baz",status:"Active",uri:"https://platform.ringcentral.com/restapi/v1.0/subscription/foo-bar-baz"}),this},e.prototype.tokenRefresh=function(e){return e?this.apiCall("POST","/restapi/oauth/token",{message:"Wrong token",error_description:"Wrong token",description:"Wrong token"},400):this.apiCall("POST","/restapi/oauth/token",{access_token:"ACCESS_TOKEN_FROM_REFRESH",token_type:"bearer",expires_in:3600,refresh_token:"REFRESH_TOKEN_FROM_REFRESH",refresh_token_expires_in:60480,scope:"SMS RCM Foo Boo"}),this},e}();t["default"]=u,e.exports=t["default"]},function(e,t,r){"use strict";function n(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")}t.__esModule=!0;var s=r(12),i=n(s),u=r(2),a=r(11),c=function(){function e(t,r,n,s,i,u){o(this,e),this._method=t.toUpperCase(),this._path=r,this._json=n||{},this._delay=u||10,this._status=s||200,this._statusText=i||"OK"}return e.prototype.path=function(){return this._path},e.prototype.method=function(){return this._method},e.prototype.test=function(e){return e.url.indexOf(this._path)>-1&&e.method.toUpperCase()==this._method},e.prototype.getResponse=function(e){return regeneratorRuntime.async(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,regeneratorRuntime.awrap(u.delay(this._delay));case 2:return e.abrupt("return",this.createResponse(this._json));case 3:case"end":return e.stop()}},null,this)},e.prototype.createResponse=function(e,t){t=t||{},t.status=t.status||this._status,t.statusText=t.statusText||this._statusText;var r=JSON.stringify(e),n=a.createResponse(r,t);return n.headers.set(i["default"]._contentType,i["default"]._jsonContentType),n},e}();t["default"]=c,e.exports=t["default"]},function(e,t,r){"use strict";function n(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")}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)}t.__esModule=!0;var i=function(){function e(e,t){for(var r=0;r-1?"&":"?"),r.addMethod&&(n+="_method="+r.addMethod),r.addToken&&(n+=(r.addMethod?"&":"")+"access_token="+this._auth.accessToken()),n},t.prototype.authUrl=function(e){return e=e||{},this.createUrl(t._authorizeEndpoint+"?"+h.queryStringify({response_type:"code",redirect_uri:e.redirectUri||"",client_id:this._appKey,state:e.state||"",brand_id:e.brandId||"",display:e.display||"",prompt:e.prompt||""}),{addServer:!0})},t.prototype.parseAuthRedirectUrl=function(e){var t=h.parseQueryString(e.split("?").reverse()[0]),r=t.error_description||t.error;if(r){var n=new Error(r);throw n.error=t.error,n}return t},t.prototype.loggedIn=function(){return regeneratorRuntime.async(function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,regeneratorRuntime.awrap(this._ensureAuthentication());case 3:return e.abrupt("return",!0);case 6:return e.prev=6,e.t0=e["catch"](0),e.abrupt("return",!1);case 9:case"end":return e.stop()}},null,this,[[0,6]])},t.prototype.login=function(e){var r,n,o;return regeneratorRuntime.async(function(s){for(;;)switch(s.prev=s.next){case 0:return s.prev=0,e=e||{},e.remember=e.remember||!1,this.emit(this.events.beforeLogin),r={access_token_ttl:t._accessTokenTtl,refresh_token_ttl:e.remember?t._refreshTokenTtlRemember:t._refreshTokenTtl},e.code?e.code&&(r.grant_type="authorization_code",r.code=e.code,r.redirect_uri=e.redirectUri):(r.grant_type="password",r.username=e.username,r.password=e.password,r.extension=e.extension||""),e.endpointId&&(r.endpoint_id=e.endpointId),s.next=9,regeneratorRuntime.awrap(this._tokenRequest(t._tokenEndpoint,r));case 9:return n=s.sent,o=n.json(),this._auth.setData(o).setRemember(e.remember),this.emit(this.events.loginSuccess,n),s.abrupt("return",n);case 16:throw s.prev=16,s.t0=s["catch"](0),this._cache.clean(),this.emit(this.events.loginError,s.t0),s.t0;case 21:case"end":return s.stop()}},null,this,[[0,16]])},t.prototype.refresh=function(){var e,r;return regeneratorRuntime.async(function(n){for(;;)switch(n.prev=n.next){case 0:if(n.prev=0,this.emit(this.events.beforeRefresh),!this._queue.isPaused()){n.next=9;break}return n.next=5,regeneratorRuntime.awrap(this._queue.poll());case 5:if(this._isAccessTokenValid()){n.next=7;break}throw new Error("Automatic authentification timeout");case 7:return this.emit(this.events.refreshSuccess,null),n.abrupt("return",null);case 9:return this._queue.pause(),n.next=12,regeneratorRuntime.awrap(h.delay(t._refreshDelayMs));case 12:if(this._auth.refreshToken()){n.next=14;break}throw new Error("Refresh token is missing");case 14:if(this._auth.refreshTokenValid()){n.next=16;break}throw new Error("Refresh token has expired");case 16:if(this._queue.isPaused()){n.next=18;break}throw new Error("Queue was resumed before refresh call");case 18:return n.next=20,regeneratorRuntime.awrap(this._tokenRequest(t._tokenEndpoint,{grant_type:"refresh_token",refresh_token:this._auth.refreshToken(),access_token_ttl:t._accessTokenTtl,refresh_token_ttl:this._auth.remember()?t._refreshTokenTtlRemember:t._refreshTokenTtl}));case 20:if(e=n.sent,r=e.json(),r.access_token){n.next=24;break}throw this._client.makeError(new Error("Malformed OAuth response"),e);case 24:return this._auth.setData(r),this._queue.resume(),this.emit(this.events.refreshSuccess,e),n.abrupt("return",e);case 30:throw n.prev=30,n.t0=n["catch"](0),n.t0=this._client.makeError(n.t0),t._clearCacheOnRefreshError&&this._cache.clean(),this.emit(this.events.refreshError,n.t0),n.t0;case 36:case"end":return n.stop()}},null,this,[[0,30]])},t.prototype.logout=function(){var e;return regeneratorRuntime.async(function(r){for(;;)switch(r.prev=r.next){case 0:return r.prev=0,this.emit(this.events.beforeLogout),this._queue.pause(),r.next=5,regeneratorRuntime.awrap(this._tokenRequest(t._revokeEndpoint,{token:this._auth.accessToken()}));case 5:return e=r.sent,this._queue.resume(),this._cache.clean(),this.emit(this.events.logoutSuccess,e),r.abrupt("return",e);case 12:throw r.prev=12,r.t0=r["catch"](0),this._queue.resume(),this.emit(this.events.logoutError,r.t0),r.t0;case 17:case"end":return r.stop()}},null,this,[[0,12]])},t.prototype.inflateRequest=function(e,t){return regeneratorRuntime.async(function(r){for(;;)switch(r.prev=r.next){case 0:if(t=t||{},!t.skipAuthCheck){r.next=3;break}return r.abrupt("return",e);case 3:return r.next=5,regeneratorRuntime.awrap(this._ensureAuthentication());case 5:return e.headers.set("Authorization",this._authHeader()),r.abrupt("return",e);case 7:case"end":return r.stop()}},null,this)},t.prototype.sendRequest=function(e,t){return regeneratorRuntime.async(function(r){for(;;)switch(r.prev=r.next){case 0:return r.prev=0,r.next=3,regeneratorRuntime.awrap(this.inflateRequest(e,t));case 3:return e=r.sent,r.next=6,regeneratorRuntime.awrap(this._client.sendRequest(e));case 6:return r.abrupt("return",r.sent);case 9:if(r.prev=9,r.t0=r["catch"](0),r.t0.apiResponse&&r.t0.apiResponse.response()&&401==r.t0.apiResponse.response().status){r.next=13;break}throw r.t0;case 13:return this._auth.cancelAccessToken(),r.next=16,regeneratorRuntime.awrap(this.sendRequest(e,t));case 16:return r.abrupt("return",r.sent);case 17:case"end":return r.stop()}},null,this,[[0,9]])},t.prototype.send=function(){var e=arguments.length<=0||void 0===arguments[0]?{}:arguments[0];return regeneratorRuntime.async(function(t){for(;;)switch(t.prev=t.next){case 0:return e.url=this.createUrl(e.url,{addServer:!0}),t.next=3,regeneratorRuntime.awrap(this.sendRequest(this._client.createRequest(e),e));case 3:return t.abrupt("return",t.sent);case 4:case"end":return t.stop()}},null,this)},t.prototype.get=function(e,t,r){return regeneratorRuntime.async(function(n){for(;;)switch(n.prev=n.next){case 0:return r=r||{},r.method="GET",r.url=e,r.query=t,n.next=6,regeneratorRuntime.awrap(this.send(r));case 6:return n.abrupt("return",n.sent);case 7:case"end":return n.stop()}},null,this)},t.prototype.post=function(e,t,r,n){return regeneratorRuntime.async(function(o){for(;;)switch(o.prev=o.next){case 0:return n=n||{},n.method="POST",n.url=e,n.query=r,n.body=t,o.next=7,regeneratorRuntime.awrap(this.send(n));case 7:return o.abrupt("return",o.sent);case 8:case"end":return o.stop()}},null,this)},t.prototype.put=function(e,t,r,n){return regeneratorRuntime.async(function(o){for(;;)switch(o.prev=o.next){case 0:return n=n||{},n.method="PUT",n.url=e,n.query=r,n.body=t,o.next=7,regeneratorRuntime.awrap(this.send(n));case 7:return o.abrupt("return",o.sent);case 8:case"end":return o.stop()}},null,this)},t.prototype["delete"]=function(e,t,r){return regeneratorRuntime.async(function(n){for(;;)switch(n.prev=n.next){case 0:return r=r||{},r.method="DELETE",r.url=e,r.query=t,n.next=6,regeneratorRuntime.awrap(this.send(r));case 6:return n.abrupt("return",n.sent);case 7:case"end":return n.stop()}},null,this)},t.prototype._tokenRequest=function(e,t){return regeneratorRuntime.async(function(r){for(;;)switch(r.prev=r.next){case 0:return r.next=2,regeneratorRuntime.awrap(this.send({url:e,skipAuthCheck:!0,body:t,method:"POST",headers:{Authorization:"Basic "+this._apiKey(),"Content-Type":"application/x-www-form-urlencoded"}}));case 2:return r.abrupt("return",r.sent);case 3:case"end":return r.stop()}},null,this)},t.prototype._ensureAuthentication=function(){return regeneratorRuntime.async(function(e){for(;;)switch(e.prev=e.next){case 0:if(!this._isAccessTokenValid()){e.next=2;break}return e.abrupt("return",null);case 2:return e.next=4,regeneratorRuntime.awrap(this.refresh());case 4:return e.abrupt("return",e.sent);case 5:case"end":return e.stop()}},null,this)},t.prototype._isAccessTokenValid=function(){return this._auth.accessTokenValid()&&!this._queue.isPaused()},t.prototype._apiKey=function(){var e=this._appKey+":"+this._appSecret;return"function"==typeof btoa?btoa(e):new Buffer(e).toString("base64")},t.prototype._authHeader=function(){var e=this._auth.accessToken();return this._auth.tokenType()+(e?" "+e:"")},t}(a["default"]);t["default"]=d,e.exports=t["default"]},function(e,t){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}t.__esModule=!0;var n=function(){function e(e,t){for(var r=0;rDate.now()},e.prototype.refreshTokenValid=function(){return this.data().refresh_token_expire_time>Date.now()},e.prototype.cancelAccessToken=function(){return this.setData({access_token:"",expires_in:0})},e.prototype.forceAuthentication=function(){return this.setData({token_type:e.forcedTokenType,access_token:"",expires_in:0,refresh_token:"",refresh_token_expires_in:0}),this},e.prototype.setRemember=function(e){return this.setData({remember:e})},e.prototype.remember=function(){return!!this.data().remember},e}();t["default"]=o,e.exports=t["default"]},function(e,t,r){"use strict";function n(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")}t.__esModule=!0;var s=r(19),i=n(s),u=r(3),a=function(){function e(){o(this,e),this.crypto_obj=u.PUBNUB.crypto_obj}return e.prototype.init=function(e){return new i["default"](e)},e}();t["default"]=a,e.exports=t["default"]},function(e,t,r){"use strict";function n(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")}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)}t.__esModule=!0;var i=r(8),u=n(i),a=r(3),c=function(e){function t(r){o(this,t),e.call(this),this.options=r,this.crypto_obj=a.PUBNUB.crypto_obj}return s(t,e),t.prototype.ready=function(){},t.prototype.subscribe=function(e){this.on("message-"+e.channel,e.message)},t.prototype.unsubscribe=function(e){this.off("message-"+e.channel)},t.prototype.receiveMessage=function(e,t){this.emit("message-"+t,e,"env",t)},t}(u["default"]);t["default"]=c,e.exports=t["default"]},function(e,t,r){"use strict";function n(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")}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)}t.__esModule=!0;var i=function(){function e(e,t){for(var r=0;r=0;--n){var o=this.tryEntries[n],s=o.completion;if("root"===o.tryLoc)return t("end");if(o.tryLoc<=this.prev){var i=b.call(o,"catchLoc"),u=b.call(o,"finallyLoc");if(i&&u){if(this.prev=0;--r){var n=this.tryEntries[r];if(n.tryLoc<=this.prev&&b.call(n,"finallyLoc")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),f(r),S}},"catch":function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var o=n.arg;f(r)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,r){return this.delegate={iterator:d(e),resultName:t,nextLoc:r},S}}}("object"==typeof t?t:"object"==typeof window?window:"object"==typeof self?self:this)}).call(t,function(){return this}())}])}); //# sourceMappingURL=ringcentral.min.js.map diff --git a/build/ringcentral.min.js.map b/build/ringcentral.min.js.map index b25a513f..4ba34d48 100644 --- a/build/ringcentral.min.js.map +++ b/build/ringcentral.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","ringcentral.js","webpack:/webpack/bootstrap 5d800152b5167bf356e8","webpack:///src/SDK.js","webpack:///src/core/Utils.js","webpack:///src/core/Externals.js","webpack:/external {\"commonjs\":\"es6-promise\",\"commonjs2\":\"es6-promise\"}","webpack:/external {\"commonjs\":\"node-fetch\",\"commonjs2\":\"node-fetch\"}","webpack:/external {\"commonjs\":\"pubnub\",\"commonjs2\":\"pubnub\",\"amd\":\"pubnub\"}","webpack:///src/core/Cache.js","webpack:///src/core/Observable.js","webpack:///src/core/Queue.js","webpack:///src/http/Client.js","webpack:///src/http/Utils.js","webpack:///src/http/ApiResponse.js","webpack:///src/mocks/ClientMock.js","webpack:///src/mocks/Registry.js","webpack:///src/mocks/Mock.js","webpack:///src/platform/Platform.js","webpack:///src/platform/Auth.js","webpack:///src/pubnub/PubnubFactory.js","webpack:///src/pubnub/PubnubMock.js","webpack:///src/subscription/Subscription.js","webpack:///src/subscription/CachedSubscription.js","webpack:///~/regenerator/runtime.js"],"names":["root","factory","exports","module","require","define","amd","undefined","this","__WEBPACK_EXTERNAL_MODULE_4__","__WEBPACK_EXTERNAL_MODULE_5__","__WEBPACK_EXTERNAL_MODULE_6__","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","_interopRequireDefault","obj","__esModule","default","_interopRequireWildcard","newObj","key","Object","prototype","hasOwnProperty","_classCallCheck","instance","Constructor","TypeError","_createClass","defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","defineProperty","protoProps","staticProps","_coreUtils","Utils","_coreCache","_coreCache2","_coreExternals","Externals","_coreObservable","_coreObservable2","_coreQueue","_coreQueue2","_httpClient","_httpClient2","_httpApiResponse","_httpApiResponse2","_httpUtils","HttpUtils","_mocksClientMock","_mocksClientMock2","_mocksMock","_mocksMock2","_mocksRegistry","_mocksRegistry2","_platformPlatform","_platformPlatform2","_platformAuth","_platformAuth2","_pubnubPubnubFactory","_pubnubPubnubFactory2","_subscriptionSubscription","_subscriptionSubscription2","_subscriptionCachedSubscription","_subscriptionCachedSubscription2","SDK","options","_cache","localStorage","cachePrefix","_client","client","_platform","server","appKey","appSecret","_pubnubFactory","pubnubFactory","PUBNUB","value","sandbox","production","platform","createSubscription","createCachedSubscription","cacheKey","cache","Cache","Observable","Queue","Client","ApiResponse","Auth","Platform","Subscription","Registry","Mock","PubnubMockFactory","queryStringify","parameters","array","keys","forEach","k","v","isArray","vv","push","encodeURIComponent","join","parseQueryString","queryString","argsParsed","split","arg","decodeURIComponent","indexOf","trim","pair","isFunction","Array","poll","fn","interval","timeout","stopPolling","next","delay","setTimeout","clearTimeout","isNodeJS","process","isBrowser","window","_ExternalsJs","Promise","resolve","reject","_es6Promise","_es6Promise2","_nodeFetch","_nodeFetch2","_pubnub","_pubnub2","Function","fetch","Request","Response","Headers","storage","prefix","setPrefix","_storage","_prefix","defaultPrefix","setItem","data","_prefixKey","JSON","stringify","removeItem","getItem","item","parse","clean","off","hasListeners","event","_listeners","on","events","callback","_this","Error","emit","_this2","_len","arguments","args","_key","result","some","apply","_this3","cb","_Utils","cacheId","_cacheId","_promise","isPaused","time","Date","now","parseInt","_releaseTimeout","pause","resume","_pollInterval","_inherits","subClass","superClass","create","constructor","setPrototypeOf","__proto__","_ApiResponse","_ApiResponse2","_Observable","beforeRequest","requestSuccess","requestError","sendRequest","request","apiResponse","regeneratorRuntime","async","context$2$0","prev","awrap","_loadResponse","_response","sent","_isMultipart","_isJson","response","text","_text","ok","abrupt","t0","makeError","stop","e","originalMessage","message","error","createRequest","init","headers","url","method","_allowedMethods","credentials","mode","query","findHeaderName","_jsonContentType","body","contentTypeHeaderName","_contentType","contentType","_urlencodedContentType","req","originalBody","createResponse","stringBody","utils","_decode","name","toLowerCase","reduce","res","responseText","_request","_json","_multipart","json","skipOKCheck","status","statusText","error_description","description","multipart","boundary","_getContentType","match","parts","toString","_boundarySeparator","shift","pop","statusInfo","map","part","_isContentType","get","_multipartContentType","_isUrlEncoded","replace","headersAndBody","_bodySeparator","headersText","header","_headerSeparator","append","_Registry","_Registry2","_HttpClient","_registry","registry","mock","find","getResponse","_Mock","_Mock2","_mocks","add","clear","test","path","apiCall","authentication","access_token","token_type","expires_in","refresh_token","refresh_token_expires_in","scope","expireTime","getTime","logout","presenceLoad","uri","extension","extensionNumber","activeCalls","presenceStatus","telephonyStatus","userStatus","dndStatus","extensionId","subscribeGeneric","expiresIn","date","eventFilters","expirationTime","toISOString","deliveryMode","transportType","encryption","address","subscriberKey","secretKey","creationTime","subscribeOnPresence","detailed","encryptionAlgorithm","encryptionKey","tokenRefresh","failure","_method","toUpperCase","_path","_delay","_status","_statusText","str","set","_Auth","_Auth2","beforeLogin","loginSuccess","loginError","beforeRefresh","refreshSuccess","refreshError","beforeLogout","logoutSuccess","logoutError","_server","_appKey","_appSecret","_queue","_auth","auth","createUrl","builtUrl","hasHttp","addServer","_urlPrefix","_apiVersion","addMethod","addToken","accessToken","authUrl","_authorizeEndpoint","response_type","redirect_uri","redirectUri","client_id","state","brand_id","brandId","display","prompt","parseAuthRedirectUrl","qs","reverse","loggedIn","_ensureAuthentication","login","remember","access_token_ttl","_accessTokenTtl","refresh_token_ttl","_refreshTokenTtlRemember","_refreshTokenTtl","code","grant_type","username","password","endpointId","endpoint_id","_tokenRequest","_tokenEndpoint","setData","setRemember","refresh","_isAccessTokenValid","_refreshDelayMs","refreshToken","refreshTokenValid","_clearCacheOnRefreshError","_revokeEndpoint","token","inflateRequest","skipAuthCheck","_authHeader","cancelAccessToken","send","post","put","Authorization","_apiKey","Content-Type","accessTokenValid","apiKey","btoa","Buffer","tokenType","newData","expire_time","refresh_token_expire_time","authData","forcedTokenType","refreshHandicapMs","forceAuthentication","_PubnubMockJs","_PubnubMockJs2","crypto_obj","PubnubMock","ready","subscribe","channel","unsubscribe","receiveMessage","msg","notification","removeSuccess","removeError","renewSuccess","renewError","subscribeSuccess","subscribeError","_timeout","_subscription","subscribed","alive","_renewHandicapMs","setSubscription","subscription","_clearTimeout","_subscribeAtPubnub","_setTimeout","register","renew","addEventFilters","setEventFilters","concat","_getFullEventFilters","reset","remove","resubscribe","_decrypt","decrypt","encryptKey","keyEncoding","keyLength","_notify","ssl","subscribe_key","bind","connect","_extends","assign","source","_Subscription2","_Subscription3","CachedSubscription","_Subscription","_cacheKey","_renewQueue","_resubscribeQueue","queuedRenewSuccess","queuedRenewError","queuedResubscribeSuccess","queuedResubscribeError","actionCb","queue","successEvent","errorEvent","errorMessage","restore","cachedSubscriptionData","global","wrap","innerFn","outerFn","self","tryLocsList","generator","Generator","context","Context","_invoke","makeInvokeMethod","tryCatch","type","err","GeneratorFunction","GeneratorFunctionPrototype","defineIteratorMethods","AwaitArgument","AsyncIterator","invoke","then","invokeNext","invokeThrow","unwrapped","enqueue","callInvokeWithMethodAndArg","previousPromise","domain","GenStateSuspendedStart","GenStateExecuting","GenStateCompleted","doneResult","delegate","iterator","returnMethod","record","info","done","GenStateSuspendedYield","resultName","nextLoc","dispatchException","ContinueSentinel","pushTryEntry","locs","entry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","values","iterable","iteratorMethod","iteratorSymbol","isNaN","hasOwn","Symbol","inModule","runtime","Gp","displayName","isGeneratorFunction","genFun","ctor","mark","iter","object","skipTempReset","charAt","slice","rootEntry","rootRecord","rval","exception","handle","loc","caught","hasCatch","hasFinally","finallyEntry","complete","finish","catch","thrown","delegateYield"],"mappings":"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","file":"ringcentral.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"es6-promise\"), require(\"node-fetch\"), require(\"pubnub\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([, , \"pubnub\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"SDK\"] = factory(require(\"es6-promise\"), require(\"node-fetch\"), require(\"pubnub\"));\n\telse\n\t\troot[\"RingCentral\"] = root[\"RingCentral\"] || {}, root[\"RingCentral\"][\"SDK\"] = factory(root[undefined], root[undefined], root[undefined]);\n})(this, function(__WEBPACK_EXTERNAL_MODULE_4__, __WEBPACK_EXTERNAL_MODULE_5__, __WEBPACK_EXTERNAL_MODULE_6__) {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/universalModuleDefinition\n **/","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"es6-promise\"), require(\"node-fetch\"), require(\"pubnub\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([, , \"pubnub\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"SDK\"] = factory(require(\"es6-promise\"), require(\"node-fetch\"), require(\"pubnub\"));\n\telse\n\t\troot[\"RingCentral\"] = root[\"RingCentral\"] || {}, root[\"RingCentral\"][\"SDK\"] = factory(root[undefined], root[undefined], root[undefined]);\n})(this, function(__WEBPACK_EXTERNAL_MODULE_4__, __WEBPACK_EXTERNAL_MODULE_5__, __WEBPACK_EXTERNAL_MODULE_6__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"/build/\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ function(module, exports, __webpack_require__) {\n\nmodule.exports = __webpack_require__(1);\n\n\n/***/ },\n/* 1 */\n/***/ function(module, exports, __webpack_require__) {\n\n'use strict';\n\nexports.__esModule = true;\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nvar _coreUtils = __webpack_require__(2);\n\nvar Utils = _interopRequireWildcard(_coreUtils);\n\nvar _coreCache = __webpack_require__(7);\n\nvar _coreCache2 = _interopRequireDefault(_coreCache);\n\nvar _coreExternals = __webpack_require__(3);\n\nvar Externals = _interopRequireWildcard(_coreExternals);\n\nvar _coreObservable = __webpack_require__(8);\n\nvar _coreObservable2 = _interopRequireDefault(_coreObservable);\n\nvar _coreQueue = __webpack_require__(9);\n\nvar _coreQueue2 = _interopRequireDefault(_coreQueue);\n\nvar _httpClient = __webpack_require__(10);\n\nvar _httpClient2 = _interopRequireDefault(_httpClient);\n\nvar _httpApiResponse = __webpack_require__(12);\n\nvar _httpApiResponse2 = _interopRequireDefault(_httpApiResponse);\n\nvar _httpUtils = __webpack_require__(11);\n\nvar HttpUtils = _interopRequireWildcard(_httpUtils);\n\nvar _mocksClientMock = __webpack_require__(13);\n\nvar _mocksClientMock2 = _interopRequireDefault(_mocksClientMock);\n\nvar _mocksMock = __webpack_require__(15);\n\nvar _mocksMock2 = _interopRequireDefault(_mocksMock);\n\nvar _mocksRegistry = __webpack_require__(14);\n\nvar _mocksRegistry2 = _interopRequireDefault(_mocksRegistry);\n\nvar _platformPlatform = __webpack_require__(16);\n\nvar _platformPlatform2 = _interopRequireDefault(_platformPlatform);\n\nvar _platformAuth = __webpack_require__(17);\n\nvar _platformAuth2 = _interopRequireDefault(_platformAuth);\n\nvar _pubnubPubnubFactory = __webpack_require__(18);\n\nvar _pubnubPubnubFactory2 = _interopRequireDefault(_pubnubPubnubFactory);\n\nvar _subscriptionSubscription = __webpack_require__(20);\n\nvar _subscriptionSubscription2 = _interopRequireDefault(_subscriptionSubscription);\n\nvar _subscriptionCachedSubscription = __webpack_require__(21);\n\nvar _subscriptionCachedSubscription2 = _interopRequireDefault(_subscriptionCachedSubscription);\n\n__webpack_require__(22);\n\nvar SDK = (function () {\n _createClass(SDK, null, [{\n key: 'version',\n value: '2.0.0',\n enumerable: true\n }, {\n key: 'server',\n value: {\n sandbox: 'https://platform.devtest.ringcentral.com',\n production: 'https://platform.ringcentral.com'\n },\n\n /**\n * @constructor\n * @param {object} [options]\n * @param {string} [options.server]\n * @param {string} [options.cachePrefix]\n * @param {string} [options.appSecret]\n * @param {string} [options.appKey]\n * @param {string} [options.appName]\n * @param {string} [options.appVersion]\n * @param {string} [options.pubnubFactory]\n * @param {string} [options.client]\n */\n enumerable: true\n }]);\n\n function SDK(options) {\n _classCallCheck(this, SDK);\n\n options = options || {};\n\n this._cache = new _coreCache2['default'](Externals.localStorage, options.cachePrefix);\n\n this._client = options.client || new _httpClient2['default']();\n\n this._platform = new _platformPlatform2['default'](this._client, this._cache, options.server, options.appKey, options.appSecret);\n\n this._pubnubFactory = options.pubnubFactory || Externals.PUBNUB;\n }\n\n /**\n * @return {Platform}\n */\n\n SDK.prototype.platform = function platform() {\n return this._platform;\n };\n\n /**\n * @return {Subscription}\n */\n\n SDK.prototype.createSubscription = function createSubscription() {\n return new _subscriptionSubscription2['default'](this._pubnubFactory, this._platform);\n };\n\n /**\n * @return {CachedSubscription}\n */\n\n SDK.prototype.createCachedSubscription = function createCachedSubscription(cacheKey) {\n return new _subscriptionCachedSubscription2['default'](this._pubnubFactory, this._platform, this._cache, cacheKey);\n };\n\n /**\n * @return {Cache}\n */\n\n SDK.prototype.cache = function cache() {\n return this._cache;\n };\n\n _createClass(SDK, null, [{\n key: 'core',\n value: {\n Cache: _coreCache2['default'],\n Observable: _coreObservable2['default'],\n Utils: Utils,\n Externals: Externals,\n Queue: _coreQueue2['default']\n },\n enumerable: true\n }, {\n key: 'http',\n value: {\n Client: _httpClient2['default'],\n ApiResponse: _httpApiResponse2['default'],\n Utils: HttpUtils\n },\n enumerable: true\n }, {\n key: 'platform',\n value: {\n Auth: _platformAuth2['default'],\n Platform: _platformPlatform2['default']\n },\n enumerable: true\n }, {\n key: 'subscription',\n value: {\n Subscription: _subscriptionSubscription2['default']\n },\n enumerable: true\n }, {\n key: 'mocks',\n value: {\n Client: _mocksClientMock2['default'],\n Registry: _mocksRegistry2['default'],\n Mock: _mocksMock2['default']\n },\n enumerable: true\n }, {\n key: 'pubnub',\n value: {\n PubnubMockFactory: _pubnubPubnubFactory2['default']\n },\n enumerable: true\n }]);\n\n return SDK;\n})();\n\nexports['default'] = SDK;\nmodule.exports = exports['default'];\n\n/***/ },\n/* 2 */\n/***/ function(module, exports, __webpack_require__) {\n\n'use strict';\n\nexports.__esModule = true;\nexports.queryStringify = queryStringify;\nexports.parseQueryString = parseQueryString;\nexports.isFunction = isFunction;\nexports.isArray = isArray;\nexports.poll = poll;\nexports.stopPolling = stopPolling;\nexports.isNodeJS = isNodeJS;\nexports.isBrowser = isBrowser;\nexports.delay = delay;\n\nvar _ExternalsJs = __webpack_require__(3);\n\n/**\n * TODO Replace with something better\n * @see https://github.com/joyent/node/blob/master/lib/querystring.js\n * @param {object} parameters\n * @returns {string}\n */\n\nfunction queryStringify(parameters) {\n\n var array = [];\n\n parameters = parameters || {};\n\n Object.keys(parameters).forEach(function (k) {\n\n var v = parameters[k];\n\n if (isArray(v)) {\n v.forEach(function (vv) {\n array.push(encodeURIComponent(k) + '=' + encodeURIComponent(vv));\n });\n } else {\n array.push(encodeURIComponent(k) + '=' + encodeURIComponent(v));\n }\n });\n\n return array.join('&');\n}\n\n/**\n * TODO Replace with something better\n * @see https://github.com/joyent/node/blob/master/lib/querystring.js\n * @param {string} queryString\n * @returns {object}\n */\n\nfunction parseQueryString(queryString) {\n\n var argsParsed = {};\n\n queryString.split('&').forEach(function (arg) {\n\n arg = decodeURIComponent(arg);\n\n if (arg.indexOf('=') == -1) {\n\n argsParsed[arg.trim()] = true;\n } else {\n\n var pair = arg.split('='),\n key = pair[0].trim(),\n value = pair[1].trim();\n\n if (key in argsParsed) {\n if (key in argsParsed && !isArray(argsParsed[key])) argsParsed[key] = [argsParsed[key]];\n argsParsed[key].push(value);\n } else {\n argsParsed[key] = value;\n }\n }\n });\n\n return argsParsed;\n}\n\n/**\n * @param obj\n * @return {boolean}\n */\n\nfunction isFunction(obj) {\n return typeof obj === \"function\";\n}\n\n/**\n * @param obj\n * @return {boolean}\n */\n\nfunction isArray(obj) {\n return Array.isArray ? Array.isArray(obj) : typeof obj === \"array\";\n}\n\n/**\n * @param fn\n * @param interval\n * @param timeout\n */\n\nfunction poll(fn, interval, timeout) {\n //NodeJS.Timer|number\n\n module.exports.stopPolling(timeout);\n\n interval = interval || 1000;\n\n var next = function next(delay) {\n\n delay = delay || interval;\n\n interval = delay;\n\n return setTimeout(function () {\n\n fn(next, delay);\n }, delay);\n };\n\n return next();\n}\n\nfunction stopPolling(timeout) {\n if (timeout) clearTimeout(timeout);\n}\n\nfunction isNodeJS() {\n return typeof process !== 'undefined';\n}\n\nfunction isBrowser() {\n return typeof window !== 'undefined';\n}\n\nfunction delay(timeout) {\n return new _ExternalsJs.Promise(function (resolve, reject) {\n setTimeout(function () {\n resolve(null);\n }, timeout);\n });\n}\n\n/***/ },\n/* 3 */\n/***/ function(module, exports, __webpack_require__) {\n\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _es6Promise = __webpack_require__(4);\n\nvar _es6Promise2 = _interopRequireDefault(_es6Promise);\n\nvar _nodeFetch = __webpack_require__(5);\n\nvar _nodeFetch2 = _interopRequireDefault(_nodeFetch);\n\nvar _pubnub = __webpack_require__(6);\n\nvar _pubnub2 = _interopRequireDefault(_pubnub);\n\nvar root = new Function('return this')();\n\nvar Promise = _es6Promise2['default'] && _es6Promise2['default'].Promise || root.Promise;\n\nexports.Promise = Promise;\nvar fetch = root.fetch || _nodeFetch2['default'];\nexports.fetch = fetch;\nvar Request = root.Request || fetch.Request;\nexports.Request = Request;\nvar Response = root.Response || fetch.Response;\nexports.Response = Response;\nvar Headers = root.Headers || fetch.Headers;\n\nexports.Headers = Headers;\nvar PUBNUB = root.PUBNUB || _pubnub2['default'];\n\nexports.PUBNUB = PUBNUB;\nvar localStorage = typeof root.localStorage !== 'undefined' ? root.localStorage : {};\nexports.localStorage = localStorage;\n\n/***/ },\n/* 4 */\n/***/ function(module, exports) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE_4__;\n\n/***/ },\n/* 5 */\n/***/ function(module, exports) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE_5__;\n\n/***/ },\n/* 6 */\n/***/ function(module, exports) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE_6__;\n\n/***/ },\n/* 7 */\n/***/ function(module, exports) {\n\n'use strict';\n\nexports.__esModule = true;\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nvar Cache = (function () {\n _createClass(Cache, null, [{\n key: 'defaultPrefix',\n value: 'rc-',\n enumerable: true\n }]);\n\n function Cache(storage, prefix) {\n _classCallCheck(this, Cache);\n\n this.setPrefix(prefix);\n this._storage = storage;\n }\n\n Cache.prototype.setPrefix = function setPrefix(prefix) {\n this._prefix = prefix || Cache.defaultPrefix;\n return this;\n };\n\n Cache.prototype.setItem = function setItem(key, data) {\n this._storage[this._prefixKey(key)] = JSON.stringify(data);\n return this;\n };\n\n Cache.prototype.removeItem = function removeItem(key) {\n delete this._storage[this._prefixKey(key)];\n return this;\n };\n\n Cache.prototype.getItem = function getItem(key) {\n var item = this._storage[this._prefixKey(key)];\n if (!item) return null;\n return JSON.parse(item);\n };\n\n Cache.prototype.clean = function clean() {\n\n for (var key in this._storage) {\n\n if (!this._storage.hasOwnProperty(key)) continue;\n\n if (key.indexOf(this._prefix) === 0) {\n delete this._storage[key];\n }\n }\n\n return this;\n };\n\n Cache.prototype._prefixKey = function _prefixKey(key) {\n return this._prefix + key;\n };\n\n return Cache;\n})();\n\nexports['default'] = Cache;\nmodule.exports = exports['default'];\n\n/***/ },\n/* 8 */\n/***/ function(module, exports) {\n\n'use strict';\n\nexports.__esModule = true;\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nvar Observable = (function () {\n function Observable() {\n _classCallCheck(this, Observable);\n\n this.off();\n }\n\n Observable.prototype.hasListeners = function hasListeners(event) {\n return event in this._listeners;\n };\n\n Observable.prototype.on = function on(events, callback) {\n var _this = this;\n\n if (typeof events == 'string') events = [events];\n if (!events) throw new Error('No events to subscribe to');\n if (typeof callback !== 'function') throw new Error('Callback must be a function');\n\n events.forEach(function (event) {\n\n if (!_this.hasListeners(event)) _this._listeners[event] = [];\n\n _this._listeners[event].push(callback);\n });\n\n return this;\n };\n\n Observable.prototype.emit = function emit(event) {\n var _this2 = this;\n\n for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n var result = null;\n\n if (!this.hasListeners(event)) return null;\n\n this._listeners[event].some(function (callback) {\n\n result = callback.apply(_this2, args);\n return result === false;\n });\n\n return result;\n };\n\n Observable.prototype.off = function off(event, callback) {\n var _this3 = this;\n\n if (!event) {\n\n this._listeners = {};\n } else {\n\n if (!callback) {\n\n delete this._listeners[event];\n } else {\n\n if (!this.hasListeners(event)) return this;\n\n this._listeners[event].forEach(function (cb, i) {\n\n if (cb === callback) delete _this3._listeners[event][i];\n });\n }\n }\n\n return this;\n };\n\n return Observable;\n})();\n\nexports['default'] = Observable;\nmodule.exports = exports['default'];\n\n/***/ },\n/* 9 */\n/***/ function(module, exports, __webpack_require__) {\n\n'use strict';\n\nexports.__esModule = true;\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nvar _coreExternals = __webpack_require__(3);\n\nvar _Utils = __webpack_require__(2);\n\nvar Queue = (function () {\n _createClass(Queue, null, [{\n key: '_pollInterval',\n value: 250,\n enumerable: true\n }, {\n key: '_releaseTimeout',\n value: 5000,\n enumerable: true\n }]);\n\n function Queue(cache, cacheId) {\n _classCallCheck(this, Queue);\n\n this._cache = cache;\n this._cacheId = cacheId;\n this._promise = null;\n }\n\n Queue.prototype.isPaused = function isPaused() {\n\n var time = this._cache.getItem(this._cacheId);\n\n return !!time && Date.now() - parseInt(time) < Queue._releaseTimeout;\n };\n\n Queue.prototype.pause = function pause() {\n this._cache.setItem(this._cacheId, Date.now());\n return this;\n };\n\n Queue.prototype.resume = function resume() {\n this._cache.removeItem(this._cacheId);\n return this;\n };\n\n Queue.prototype.poll = function poll() {\n var _this = this;\n\n if (this._promise) return this._promise;\n\n this._promise = new _coreExternals.Promise(function (resolve, reject) {\n\n _Utils.poll(function (next) {\n\n if (_this.isPaused()) return next();\n\n _this._promise = null;\n\n _this.resume(); // this is actually not needed but why not\n\n resolve(null);\n }, Queue._pollInterval);\n });\n\n return this._promise;\n };\n\n return Queue;\n})();\n\nexports['default'] = Queue;\nmodule.exports = exports['default'];\n\n/***/ },\n/* 10 */\n/***/ function(module, exports, __webpack_require__) {\n\n'use strict';\n\nexports.__esModule = true;\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _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; }\n\nvar _coreExternals = __webpack_require__(3);\n\nvar _coreUtils = __webpack_require__(2);\n\nvar _Utils = __webpack_require__(11);\n\nvar _coreObservable = __webpack_require__(8);\n\nvar _coreObservable2 = _interopRequireDefault(_coreObservable);\n\nvar _ApiResponse = __webpack_require__(12);\n\nvar _ApiResponse2 = _interopRequireDefault(_ApiResponse);\n\nvar Client = (function (_Observable) {\n _inherits(Client, _Observable);\n\n function Client() {\n _classCallCheck(this, Client);\n\n _Observable.apply(this, arguments);\n\n this.events = {\n beforeRequest: 'beforeRequest',\n requestSuccess: 'requestSuccess',\n requestError: 'requestError'\n };\n }\n\n /**\n * @name IApiError\n * @property {string} stack\n * @property {string} originalMessage\n * @property {ApiResponse} apiResponse\n */\n\n /**\n * @param {Request} request\n * @return {Promise}\n */\n\n Client.prototype.sendRequest = function sendRequest(request) {\n var apiResponse;\n return regeneratorRuntime.async(function sendRequest$(context$2$0) {\n while (1) switch (context$2$0.prev = context$2$0.next) {\n case 0:\n apiResponse = new _ApiResponse2['default'](request);\n context$2$0.prev = 1;\n\n //TODO Stop request if listeners return false\n this.emit(this.events.beforeRequest, apiResponse);\n\n context$2$0.next = 5;\n return regeneratorRuntime.awrap(this._loadResponse(request));\n\n case 5:\n apiResponse._response = context$2$0.sent;\n\n if (!(apiResponse._isMultipart() || apiResponse._isJson())) {\n context$2$0.next = 10;\n break;\n }\n\n context$2$0.next = 9;\n return regeneratorRuntime.awrap(apiResponse.response().text());\n\n case 9:\n apiResponse._text = context$2$0.sent;\n\n case 10:\n if (apiResponse.ok()) {\n context$2$0.next = 12;\n break;\n }\n\n throw new Error('Response has unsuccessful status');\n\n case 12:\n\n this.emit(this.events.requestSuccess, apiResponse);\n\n return context$2$0.abrupt('return', apiResponse);\n\n case 16:\n context$2$0.prev = 16;\n context$2$0.t0 = context$2$0['catch'](1);\n\n if (!context$2$0.t0.apiResponse) context$2$0.t0 = this.makeError(context$2$0.t0, apiResponse);\n\n this.emit(this.events.requestError, context$2$0.t0);\n\n throw context$2$0.t0;\n\n case 21:\n case 'end':\n return context$2$0.stop();\n }\n }, null, this, [[1, 16]]);\n };\n\n /**\n * @param {Request} request\n * @return {Promise}\n * @private\n */\n\n Client.prototype._loadResponse = function _loadResponse(request) {\n return regeneratorRuntime.async(function _loadResponse$(context$2$0) {\n while (1) switch (context$2$0.prev = context$2$0.next) {\n case 0:\n context$2$0.next = 2;\n return regeneratorRuntime.awrap(_coreExternals.fetch.call(null, request));\n\n case 2:\n return context$2$0.abrupt('return', context$2$0.sent);\n\n case 3:\n case 'end':\n return context$2$0.stop();\n }\n }, null, this);\n };\n\n /**\n * Wraps the JS Error object with transaction information\n * @param {Error|IApiError} e\n * @param {ApiResponse} apiResponse\n * @return {IApiError}\n */\n\n Client.prototype.makeError = function makeError(e, apiResponse) {\n\n // Wrap only if regular error\n if (!e.hasOwnProperty('apiResponse') && !e.hasOwnProperty('originalMessage')) {\n\n e.apiResponse = apiResponse;\n e.originalMessage = e.message;\n e.message = apiResponse && apiResponse.error(true) || e.originalMessage;\n }\n\n return e;\n };\n\n /**\n *\n * @param {object} init\n * @param {object} [init.url]\n * @param {object} [init.body]\n * @param {string} [init.method]\n * @param {object} [init.query]\n * @param {object} [init.headers]\n * @return {Request}\n */\n\n Client.prototype.createRequest = function createRequest(init) {\n\n init = init || {};\n init.headers = init.headers || {};\n\n // Sanity checks\n if (!init.url) throw new Error('Url is not defined');\n if (!init.method) init.method = 'GET';\n if (init.method && Client._allowedMethods.indexOf(init.method) < 0) throw new Error('Method has wrong value: ' + init.method);\n\n // Defaults\n init.credentials = init.credentials || 'include';\n init.mode = init.mode || 'cors';\n\n // Append Query String\n if (init.query) {\n init.url = init.url + (init.url.indexOf('?') > -1 ? '&' : '?') + _coreUtils.queryStringify(init.query);\n }\n\n if (!_Utils.findHeaderName('Accept', init.headers)) {\n init.headers['Accept'] = _ApiResponse2['default']._jsonContentType;\n }\n\n // Serialize body\n //TODO Check that body is a plain object\n if (typeof init.body !== 'string' || !init.body) {\n\n var contentTypeHeaderName = _Utils.findHeaderName(_ApiResponse2['default']._contentType, init.headers);\n\n if (!contentTypeHeaderName) {\n contentTypeHeaderName = _ApiResponse2['default']._contentType;\n init.headers[contentTypeHeaderName] = _ApiResponse2['default']._jsonContentType;\n }\n\n var contentType = init.headers[contentTypeHeaderName];\n\n // Assign a new encoded body\n if (contentType.indexOf(_ApiResponse2['default']._jsonContentType) > -1) {\n init.body = JSON.stringify(init.body);\n } else if (contentType.indexOf(_ApiResponse2['default']._urlencodedContentType) > -1) {\n init.body = _coreUtils.queryStringify(init.body);\n }\n }\n\n // Create a request with encoded body\n var req = new _coreExternals.Request(init.url, init);\n\n // Keep the original body accessible directly (for mocks)\n req.originalBody = init.body;\n\n return req;\n };\n\n _createClass(Client, null, [{\n key: '_allowedMethods',\n value: ['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'OPTIONS', 'HEAD'],\n enumerable: true\n }]);\n\n return Client;\n})(_coreObservable2['default']);\n\nexports['default'] = Client;\nmodule.exports = exports['default'];\n\n/***/ },\n/* 11 */\n/***/ function(module, exports, __webpack_require__) {\n\n'use strict';\n\nexports.__esModule = true;\nexports.createResponse = createResponse;\nexports.findHeaderName = findHeaderName;\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nvar _coreExternals = __webpack_require__(3);\n\nvar _coreUtils = __webpack_require__(2);\n\nvar utils = _interopRequireWildcard(_coreUtils);\n\n/**\n * Creates a response\n * @param stringBody\n * @param init\n * @return {Response}\n */\n\nfunction createResponse(stringBody, init) {\n\n init = init || {};\n\n var response = new _coreExternals.Response(stringBody, init);\n\n //TODO Wait for https://github.com/bitinn/node-fetch/issues/38\n if (utils.isNodeJS()) {\n\n response._text = stringBody;\n response._decode = function () {\n return this._text;\n };\n }\n\n return response;\n}\n\nfunction findHeaderName(name, headers) {\n name = name.toLowerCase();\n return Object.keys(headers).reduce(function (res, key) {\n if (res) return res;\n if (name == key.toLowerCase()) return key;\n return res;\n }, null);\n}\n\n/***/ },\n/* 12 */\n/***/ function(module, exports, __webpack_require__) {\n\n'use strict';\n\nexports.__esModule = true;\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nvar _coreExternals = __webpack_require__(3);\n\nvar _Utils = __webpack_require__(11);\n\nvar utils = _interopRequireWildcard(_Utils);\n\nvar ApiResponse = (function () {\n _createClass(ApiResponse, null, [{\n key: '_contentType',\n value: 'Content-Type',\n enumerable: true\n }, {\n key: '_jsonContentType',\n value: 'application/json',\n enumerable: true\n }, {\n key: '_multipartContentType',\n value: 'multipart/mixed',\n enumerable: true\n }, {\n key: '_urlencodedContentType',\n value: 'application/x-www-form-urlencoded',\n enumerable: true\n }, {\n key: '_headerSeparator',\n value: ':',\n enumerable: true\n }, {\n key: '_bodySeparator',\n value: '\\n\\n',\n enumerable: true\n }, {\n key: '_boundarySeparator',\n value: '--',\n\n /**\n * @param {Request} request\n * @param {Response} response\n * @param {string} responseText\n */\n enumerable: true\n }]);\n\n function ApiResponse(request, response, responseText) {\n _classCallCheck(this, ApiResponse);\n\n /** @type {Request} */\n this._request = request;\n\n /** @type {Response} */\n this._response = response;\n\n this._text = responseText;\n this._json = null;\n this._multipart = [];\n }\n\n /**\n * @return {Response}\n */\n\n ApiResponse.prototype.response = function response() {\n return this._response;\n };\n\n /**\n * @return {Request}\n */\n\n ApiResponse.prototype.request = function request() {\n return this._request;\n };\n\n /**\n * @return {boolean}\n */\n\n ApiResponse.prototype.ok = function ok() {\n return this._response && this._response.ok;\n };\n\n /**\n * @return {string}\n */\n\n ApiResponse.prototype.text = function text() {\n if (!this._isJson() && !this._isMultipart()) throw new Error('Response is not text');\n return this._text;\n };\n\n /**\n * @return {object}\n */\n\n ApiResponse.prototype.json = function json() {\n if (!this._isJson()) throw new Error('Response is not JSON');\n if (!this._json) {\n this._json = this._text ? JSON.parse(this._text) : null;\n }\n return this._json;\n };\n\n /**\n * @param [skipOKCheck]\n * @return {string}\n */\n\n ApiResponse.prototype.error = function error(skipOKCheck) {\n\n if (this.ok() && !skipOKCheck) return null;\n\n var message = (this._response && this._response.status ? this._response.status + ' ' : '') + (this._response && this._response.statusText ? this._response.statusText : '');\n\n try {\n\n if (this.json().message) message = this.json().message;\n if (this.json().error_description) message = this.json().error_description;\n if (this.json().description) message = this.json().description;\n } catch (e) {}\n\n return message;\n };\n\n /**\n * @return {ApiResponse[]}\n */\n\n ApiResponse.prototype.multipart = function multipart() {\n\n if (!this._isMultipart()) throw new Error('Response is not multipart');\n\n if (!this._multipart.length) {\n\n // Step 1. Split multipart response\n\n var text = this.text();\n\n if (!text) throw new Error('No response body');\n\n var boundary = this._getContentType().match(/boundary=([^;]+)/i)[1];\n\n if (!boundary) throw new Error('Cannot find boundary');\n\n var parts = text.toString().split(ApiResponse._boundarySeparator + boundary);\n\n if (parts[0].trim() === '') parts.shift();\n if (parts[parts.length - 1].trim() == ApiResponse._boundarySeparator) parts.pop();\n\n if (parts.length < 1) throw new Error('No parts in body');\n\n // Step 2. Parse status info\n\n var statusInfo = ApiResponse.create(parts.shift(), this._response.status, this._response.statusText).json();\n\n // Step 3. Parse all other parts\n\n this._multipart = parts.map(function (part, i) {\n\n var status = statusInfo.response[i].status;\n\n return ApiResponse.create(part, status);\n });\n }\n\n return this._multipart;\n };\n\n ApiResponse.prototype._isContentType = function _isContentType(contentType) {\n return this._getContentType().indexOf(contentType) > -1;\n };\n\n ApiResponse.prototype._getContentType = function _getContentType() {\n return this._response.headers.get(ApiResponse._contentType) || '';\n };\n\n ApiResponse.prototype._isMultipart = function _isMultipart() {\n return this._isContentType(ApiResponse._multipartContentType);\n };\n\n ApiResponse.prototype._isUrlEncoded = function _isUrlEncoded() {\n return this._isContentType(ApiResponse._urlencodedContentType);\n };\n\n ApiResponse.prototype._isJson = function _isJson() {\n return this._isContentType(ApiResponse._jsonContentType);\n };\n\n /**\n * Method is used to create ApiResponse object from string parts of multipart/mixed response\n * @param {string} [text]\n * @param {number} [status]\n * @param {string} [statusText]\n * @return {ApiResponse}\n */\n\n ApiResponse.create = function create(text, status, statusText) {\n\n text = text || '';\n status = status || 200;\n statusText = statusText || 'OK';\n\n text = text.replace(/\\r/g, '');\n\n var headers = new _coreExternals.Headers(),\n headersAndBody = text.split(ApiResponse._bodySeparator),\n headersText = headersAndBody.length > 1 ? headersAndBody.shift() : '';\n\n text = headersAndBody.join(ApiResponse._bodySeparator);\n\n (headersText || '').split('\\n').forEach(function (header) {\n\n var split = header.trim().split(ApiResponse._headerSeparator),\n key = split.shift().trim(),\n value = split.join(ApiResponse._headerSeparator).trim();\n\n if (key) headers.append(key, value);\n });\n\n return new ApiResponse(null, utils.createResponse(text, {\n headers: headers,\n status: status,\n statusText: statusText\n }), text);\n };\n\n return ApiResponse;\n})();\n\nexports['default'] = ApiResponse;\nmodule.exports = exports['default'];\n\n/***/ },\n/* 13 */\n/***/ function(module, exports, __webpack_require__) {\n\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _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; }\n\nvar _Registry = __webpack_require__(14);\n\nvar _Registry2 = _interopRequireDefault(_Registry);\n\nvar _httpClient = __webpack_require__(10);\n\nvar _httpClient2 = _interopRequireDefault(_httpClient);\n\nvar Client = (function (_HttpClient) {\n _inherits(Client, _HttpClient);\n\n function Client() {\n _classCallCheck(this, Client);\n\n _HttpClient.call(this);\n this._registry = new _Registry2['default']();\n }\n\n Client.prototype.registry = function registry() {\n return this._registry;\n };\n\n Client.prototype._loadResponse = function _loadResponse(request) {\n var mock;\n return regeneratorRuntime.async(function _loadResponse$(context$2$0) {\n while (1) switch (context$2$0.prev = context$2$0.next) {\n case 0:\n mock = this._registry.find(request);\n context$2$0.next = 3;\n return regeneratorRuntime.awrap(mock.getResponse(request));\n\n case 3:\n return context$2$0.abrupt('return', context$2$0.sent);\n\n case 4:\n case 'end':\n return context$2$0.stop();\n }\n }, null, this);\n };\n\n return Client;\n})(_httpClient2['default']);\n\nexports['default'] = Client;\nmodule.exports = exports['default'];\n\n/***/ },\n/* 14 */\n/***/ function(module, exports, __webpack_require__) {\n\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nvar _Mock = __webpack_require__(15);\n\nvar _Mock2 = _interopRequireDefault(_Mock);\n\nvar Registry = (function () {\n function Registry() {\n _classCallCheck(this, Registry);\n\n this._mocks = [];\n }\n\n Registry.prototype.add = function add(mock) {\n this._mocks.push(mock);\n return this;\n };\n\n Registry.prototype.clear = function clear() {\n this._mocks = [];\n return this;\n };\n\n Registry.prototype.find = function find(request) {\n\n //console.log('Registry is looking for', request);\n\n var mock = this._mocks.shift();\n\n if (!mock) throw new Error('No mock in registry for request ' + request.method + ' ' + request.url);\n\n if (!mock.test(request)) throw new Error('Wrong request ' + request.method + ' ' + request.url + ' for expected mock ' + mock.method() + ' ' + mock.path());\n\n return mock;\n };\n\n Registry.prototype.apiCall = function apiCall(method, path, response, status, statusText) {\n\n this.add(new _Mock2['default'](method, path, response, status, statusText));\n\n return this;\n };\n\n Registry.prototype.authentication = function authentication() {\n\n this.apiCall('POST', '/restapi/oauth/token', {\n 'access_token': 'ACCESS_TOKEN',\n 'token_type': 'bearer',\n 'expires_in': 3600,\n 'refresh_token': 'REFRESH_TOKEN',\n 'refresh_token_expires_in': 60480,\n 'scope': 'SMS RCM Foo Boo',\n 'expireTime': new Date().getTime() + 3600000\n });\n\n return this;\n };\n\n Registry.prototype.logout = function logout() {\n\n this.apiCall('POST', '/restapi/oauth/revoke', {});\n\n return this;\n };\n\n Registry.prototype.presenceLoad = function presenceLoad(id) {\n\n this.apiCall('GET', '/restapi/v1.0/account/~/extension/' + id + '/presence', {\n \"uri\": \"https://platform.ringcentral.com/restapi/v1.0/account/123/extension/\" + id + \"/presence\",\n \"extension\": {\n \"uri\": \"https://platform.ringcentral.com/restapi/v1.0/account/123/extension/\" + id,\n \"id\": id,\n \"extensionNumber\": \"101\"\n },\n \"activeCalls\": [],\n \"presenceStatus\": \"Available\",\n \"telephonyStatus\": \"Ringing\",\n \"userStatus\": \"Available\",\n \"dndStatus\": \"TakeAllCalls\",\n \"extensionId\": id\n });\n\n return this;\n };\n\n Registry.prototype.subscribeGeneric = function subscribeGeneric(expiresIn) {\n\n expiresIn = expiresIn || 15 * 60 * 60;\n\n var date = new Date();\n\n this.apiCall('POST', '/restapi/v1.0/subscription', {\n 'eventFilters': ['/restapi/v1.0/account/~/extension/~/presence'],\n 'expirationTime': new Date(date.getTime() + expiresIn * 1000).toISOString(),\n 'expiresIn': expiresIn,\n 'deliveryMode': {\n 'transportType': 'PubNub',\n 'encryption': false,\n 'address': '123_foo',\n 'subscriberKey': 'sub-c-foo',\n 'secretKey': 'sec-c-bar'\n },\n 'id': 'foo-bar-baz',\n 'creationTime': date.toISOString(),\n 'status': 'Active',\n 'uri': 'https://platform.ringcentral.com/restapi/v1.0/subscription/foo-bar-baz'\n });\n\n return this;\n };\n\n Registry.prototype.subscribeOnPresence = function subscribeOnPresence(id, detailed) {\n\n id = id || '1';\n\n var date = new Date();\n\n this.apiCall('POST', '/restapi/v1.0/subscription', {\n 'eventFilters': ['/restapi/v1.0/account/~/extension/' + id + '/presence' + (detailed ? '?detailedTelephonyState=true' : '')],\n 'expirationTime': new Date(date.getTime() + 15 * 60 * 60 * 1000).toISOString(),\n 'deliveryMode': {\n 'transportType': 'PubNub',\n 'encryption': true,\n 'address': '123_foo',\n 'subscriberKey': 'sub-c-foo',\n 'secretKey': 'sec-c-bar',\n 'encryptionAlgorithm': 'AES',\n 'encryptionKey': 'VQwb6EVNcQPBhE/JgFZ2zw=='\n },\n 'creationTime': date.toISOString(),\n 'id': 'foo-bar-baz',\n 'status': 'Active',\n 'uri': 'https://platform.ringcentral.com/restapi/v1.0/subscription/foo-bar-baz'\n });\n\n return this;\n };\n\n Registry.prototype.tokenRefresh = function tokenRefresh(failure) {\n\n if (!failure) {\n\n this.apiCall('POST', '/restapi/oauth/token', {\n 'access_token': 'ACCESS_TOKEN_FROM_REFRESH',\n 'token_type': 'bearer',\n 'expires_in': 3600,\n 'refresh_token': 'REFRESH_TOKEN_FROM_REFRESH',\n 'refresh_token_expires_in': 60480,\n 'scope': 'SMS RCM Foo Boo'\n });\n } else {\n\n this.apiCall('POST', '/restapi/oauth/token', {\n 'message': 'Wrong token',\n 'error_description': 'Wrong token',\n 'description': 'Wrong token'\n }, 400);\n }\n\n return this;\n };\n\n return Registry;\n})();\n\nexports['default'] = Registry;\nmodule.exports = exports['default'];\n\n/***/ },\n/* 15 */\n/***/ function(module, exports, __webpack_require__) {\n\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nvar _httpApiResponse = __webpack_require__(12);\n\nvar _httpApiResponse2 = _interopRequireDefault(_httpApiResponse);\n\nvar _coreUtils = __webpack_require__(2);\n\nvar _httpUtils = __webpack_require__(11);\n\nvar Mock = (function () {\n function Mock(method, path, json, status, statusText, delay) {\n _classCallCheck(this, Mock);\n\n this._method = method.toUpperCase();\n this._path = path;\n this._json = json || {};\n this._delay = delay || 10;\n this._status = status || 200;\n this._statusText = statusText || 'OK';\n }\n\n Mock.prototype.path = function path() {\n return this._path;\n };\n\n Mock.prototype.method = function method() {\n return this._method;\n };\n\n Mock.prototype.test = function test(request) {\n\n return request.url.indexOf(this._path) > -1 && request.method.toUpperCase() == this._method;\n };\n\n Mock.prototype.getResponse = function getResponse(request) {\n return regeneratorRuntime.async(function getResponse$(context$2$0) {\n while (1) switch (context$2$0.prev = context$2$0.next) {\n case 0:\n context$2$0.next = 2;\n return regeneratorRuntime.awrap(_coreUtils.delay(this._delay));\n\n case 2:\n return context$2$0.abrupt('return', this.createResponse(this._json));\n\n case 3:\n case 'end':\n return context$2$0.stop();\n }\n }, null, this);\n };\n\n Mock.prototype.createResponse = function createResponse(json, init) {\n\n init = init || {};\n\n init.status = init.status || this._status;\n init.statusText = init.statusText || this._statusText;\n\n var str = JSON.stringify(json),\n res = _httpUtils.createResponse(str, init);\n\n res.headers.set(_httpApiResponse2['default']._contentType, _httpApiResponse2['default']._jsonContentType);\n\n return res;\n };\n\n return Mock;\n})();\n\nexports['default'] = Mock;\nmodule.exports = exports['default'];\n\n/***/ },\n/* 16 */\n/***/ function(module, exports, __webpack_require__) {\n\n'use strict';\n\nexports.__esModule = true;\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _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; }\n\nvar _coreObservable = __webpack_require__(8);\n\nvar _coreObservable2 = _interopRequireDefault(_coreObservable);\n\nvar _coreQueue = __webpack_require__(9);\n\nvar _coreQueue2 = _interopRequireDefault(_coreQueue);\n\nvar _Auth = __webpack_require__(17);\n\nvar _Auth2 = _interopRequireDefault(_Auth);\n\nvar _coreExternals = __webpack_require__(3);\n\nvar _coreUtils = __webpack_require__(2);\n\nvar Platform = (function (_Observable) {\n _inherits(Platform, _Observable);\n\n _createClass(Platform, null, [{\n key: '_urlPrefix',\n value: '/restapi',\n enumerable: true\n }, {\n key: '_apiVersion',\n value: 'v1.0',\n enumerable: true\n }, {\n key: '_accessTokenTtl',\n value: null,\n // Platform server by default sets it to 60 * 60 = 1 hour\n enumerable: true\n }, {\n key: '_refreshTokenTtl',\n value: 10 * 60 * 60,\n // 10 hours\n enumerable: true\n }, {\n key: '_refreshTokenTtlRemember',\n value: 7 * 24 * 60 * 60,\n // 1 week\n enumerable: true\n }, {\n key: '_tokenEndpoint',\n value: '/restapi/oauth/token',\n enumerable: true\n }, {\n key: '_revokeEndpoint',\n value: '/restapi/oauth/revoke',\n enumerable: true\n }, {\n key: '_authorizeEndpoint',\n value: '/restapi/oauth/authorize',\n enumerable: true\n }, {\n key: '_refreshDelayMs',\n value: 100,\n enumerable: true\n }, {\n key: '_cacheId',\n value: 'platform',\n enumerable: true\n }, {\n key: '_clearCacheOnRefreshError',\n value: true,\n enumerable: true\n }]);\n\n function Platform(client, cache, server, appKey, appSecret) {\n _classCallCheck(this, Platform);\n\n _Observable.call(this);\n\n this.events = {\n beforeLogin: 'beforeLogin',\n loginSuccess: 'loginSuccess',\n loginError: 'loginError',\n beforeRefresh: 'beforeRefresh',\n refreshSuccess: 'refreshSuccess',\n refreshError: 'refreshError',\n beforeLogout: 'beforeLogout',\n logoutSuccess: 'logoutSuccess',\n logoutError: 'logoutError'\n };\n this._server = server;\n this._appKey = appKey;\n this._appSecret = appSecret;\n\n /** @type {Cache} */\n this._cache = cache;\n\n /** @type {Client} */\n this._client = client;\n\n this._queue = new _coreQueue2['default'](this._cache, Platform._cacheId + '-refresh');\n\n this._auth = new _Auth2['default'](this._cache, Platform._cacheId);\n }\n\n /**\n * @return {Auth}\n */\n\n Platform.prototype.auth = function auth() {\n return this._auth;\n };\n\n /**\n * @return {Client}\n */\n\n Platform.prototype.client = function client() {\n return this._client;\n };\n\n /**\n * @param {string} path\n * @param {object} [options]\n * @param {boolean} [options.addServer]\n * @param {string} [options.addMethod]\n * @param {boolean} [options.addToken]\n * @return {string}\n */\n\n Platform.prototype.createUrl = function createUrl(path, options) {\n\n path = path || '';\n options = options || {};\n\n var builtUrl = '',\n hasHttp = path.indexOf('http://') != -1 || path.indexOf('https://') != -1;\n\n if (options.addServer && !hasHttp) builtUrl += this._server;\n\n if (path.indexOf(Platform._urlPrefix) == -1 && !hasHttp) builtUrl += Platform._urlPrefix + '/' + Platform._apiVersion;\n\n builtUrl += path;\n\n if (options.addMethod || options.addToken) builtUrl += path.indexOf('?') > -1 ? '&' : '?';\n\n if (options.addMethod) builtUrl += '_method=' + options.addMethod;\n if (options.addToken) builtUrl += (options.addMethod ? '&' : '') + 'access_token=' + this._auth.accessToken();\n\n return builtUrl;\n };\n\n /**\n * @param {string} options.redirectUri\n * @param {string} options.state\n * @param {string} options.brandId\n * @param {string} options.display\n * @param {string} options.prompt\n * @return {string}\n */\n\n Platform.prototype.authUrl = function authUrl(options) {\n\n options = options || {};\n\n return this.createUrl(Platform._authorizeEndpoint + '?' + _coreUtils.queryStringify({\n 'response_type': 'code',\n 'redirect_uri': options.redirectUri || '',\n 'client_id': this._appKey,\n 'state': options.state || '',\n 'brand_id': options.brandId || '',\n 'display': options.display || '',\n 'prompt': options.prompt || ''\n }), { addServer: true });\n };\n\n /**\n * @param {string} url\n * @return {Object}\n */\n\n Platform.prototype.parseAuthRedirectUrl = function parseAuthRedirectUrl(url) {\n\n var qs = _coreUtils.parseQueryString(url.split('?').reverse()[0]),\n error = qs.error_description || qs.error;\n\n if (error) {\n var e = new Error(error);\n e.error = qs.error;\n throw e;\n }\n\n return qs;\n };\n\n /**\n * @return {Promise}\n */\n\n Platform.prototype.loggedIn = function loggedIn() {\n return regeneratorRuntime.async(function loggedIn$(context$2$0) {\n while (1) switch (context$2$0.prev = context$2$0.next) {\n case 0:\n context$2$0.prev = 0;\n context$2$0.next = 3;\n return regeneratorRuntime.awrap(this._ensureAuthentication());\n\n case 3:\n return context$2$0.abrupt('return', true);\n\n case 6:\n context$2$0.prev = 6;\n context$2$0.t0 = context$2$0['catch'](0);\n return context$2$0.abrupt('return', false);\n\n case 9:\n case 'end':\n return context$2$0.stop();\n }\n }, null, this, [[0, 6]]);\n };\n\n /**\n * @param {string} options.username\n * @param {string} options.password\n * @param {string} options.extension\n * @param {string} options.code\n * @param {string} options.redirectUri\n * @param {string} options.endpointId\n * @returns {Promise}\n */\n\n Platform.prototype.login = function login(options) {\n var body, apiResponse, json;\n return regeneratorRuntime.async(function login$(context$2$0) {\n while (1) switch (context$2$0.prev = context$2$0.next) {\n case 0:\n context$2$0.prev = 0;\n\n options = options || {};\n\n options.remember = options.remember || false;\n\n this.emit(this.events.beforeLogin);\n\n body = {\n \"access_token_ttl\": Platform._accessTokenTtl,\n \"refresh_token_ttl\": options.remember ? Platform._refreshTokenTtlRemember : Platform._refreshTokenTtl\n };\n\n if (!options.code) {\n\n body.grant_type = 'password';\n body.username = options.username;\n body.password = options.password;\n body.extension = options.extension || '';\n } else if (options.code) {\n\n body.grant_type = 'authorization_code';\n body.code = options.code;\n body.redirect_uri = options.redirectUri;\n //body.client_id = this.getCredentials().key; // not needed\n }\n\n if (options.endpointId) body.endpoint_id = options.endpointId;\n\n context$2$0.next = 9;\n return regeneratorRuntime.awrap(this._tokenRequest(Platform._tokenEndpoint, body));\n\n case 9:\n apiResponse = context$2$0.sent;\n json = apiResponse.json();\n\n this._auth.setData(json).setRemember(options.remember);\n\n this.emit(this.events.loginSuccess, apiResponse);\n\n return context$2$0.abrupt('return', apiResponse);\n\n case 16:\n context$2$0.prev = 16;\n context$2$0.t0 = context$2$0['catch'](0);\n\n this._cache.clean();\n\n this.emit(this.events.loginError, context$2$0.t0);\n\n throw context$2$0.t0;\n\n case 21:\n case 'end':\n return context$2$0.stop();\n }\n }, null, this, [[0, 16]]);\n };\n\n /**\n * @returns {Promise}\n */\n\n Platform.prototype.refresh = function refresh() {\n var res, json;\n return regeneratorRuntime.async(function refresh$(context$2$0) {\n while (1) switch (context$2$0.prev = context$2$0.next) {\n case 0:\n context$2$0.prev = 0;\n\n this.emit(this.events.beforeRefresh);\n\n if (!this._queue.isPaused()) {\n context$2$0.next = 9;\n break;\n }\n\n context$2$0.next = 5;\n return regeneratorRuntime.awrap(this._queue.poll());\n\n case 5:\n if (this._isAccessTokenValid()) {\n context$2$0.next = 7;\n break;\n }\n\n throw new Error('Automatic authentification timeout');\n\n case 7:\n\n this.emit(this.events.refreshSuccess, null);\n\n return context$2$0.abrupt('return', null);\n\n case 9:\n\n this._queue.pause();\n\n // Make sure all existing AJAX calls had a chance to reach the server\n context$2$0.next = 12;\n return regeneratorRuntime.awrap(_coreUtils.delay(Platform._refreshDelayMs));\n\n case 12:\n if (this._auth.refreshToken()) {\n context$2$0.next = 14;\n break;\n }\n\n throw new Error('Refresh token is missing');\n\n case 14:\n if (this._auth.refreshTokenValid()) {\n context$2$0.next = 16;\n break;\n }\n\n throw new Error('Refresh token has expired');\n\n case 16:\n if (this._queue.isPaused()) {\n context$2$0.next = 18;\n break;\n }\n\n throw new Error('Queue was resumed before refresh call');\n\n case 18:\n context$2$0.next = 20;\n return regeneratorRuntime.awrap(this._tokenRequest(Platform._tokenEndpoint, {\n \"grant_type\": \"refresh_token\",\n \"refresh_token\": this._auth.refreshToken(),\n \"access_token_ttl\": Platform._accessTokenTtl,\n \"refresh_token_ttl\": this._auth.remember() ? Platform._refreshTokenTtlRemember : Platform._refreshTokenTtl\n }));\n\n case 20:\n res = context$2$0.sent;\n json = res.json();\n\n if (json.access_token) {\n context$2$0.next = 24;\n break;\n }\n\n throw this._client.makeError(new Error('Malformed OAuth response'), res);\n\n case 24:\n\n this._auth.setData(json);\n this._queue.resume();\n\n this.emit(this.events.refreshSuccess, res);\n\n return context$2$0.abrupt('return', res);\n\n case 30:\n context$2$0.prev = 30;\n context$2$0.t0 = context$2$0['catch'](0);\n\n context$2$0.t0 = this._client.makeError(context$2$0.t0);\n\n if (Platform._clearCacheOnRefreshError) {\n this._cache.clean();\n }\n\n this.emit(this.events.refreshError, context$2$0.t0);\n\n throw context$2$0.t0;\n\n case 36:\n case 'end':\n return context$2$0.stop();\n }\n }, null, this, [[0, 30]]);\n };\n\n /**\n * @returns {Promise}\n */\n\n Platform.prototype.logout = function logout() {\n var res;\n return regeneratorRuntime.async(function logout$(context$2$0) {\n while (1) switch (context$2$0.prev = context$2$0.next) {\n case 0:\n context$2$0.prev = 0;\n\n this.emit(this.events.beforeLogout);\n\n this._queue.pause();\n\n context$2$0.next = 5;\n return regeneratorRuntime.awrap(this._tokenRequest(Platform._revokeEndpoint, {\n token: this._auth.accessToken()\n }));\n\n case 5:\n res = context$2$0.sent;\n\n this._queue.resume();\n this._cache.clean();\n\n this.emit(this.events.logoutSuccess, res);\n\n return context$2$0.abrupt('return', res);\n\n case 12:\n context$2$0.prev = 12;\n context$2$0.t0 = context$2$0['catch'](0);\n\n this._queue.resume();\n\n this.emit(this.events.logoutError, context$2$0.t0);\n\n throw context$2$0.t0;\n\n case 17:\n case 'end':\n return context$2$0.stop();\n }\n }, null, this, [[0, 12]]);\n };\n\n /**\n * @param {Request} request\n * @param {object} [options]\n * @param {boolean} [options.skipAuthCheck]\n * @return {Promise}\n */\n\n Platform.prototype.inflateRequest = function inflateRequest(request, options) {\n return regeneratorRuntime.async(function inflateRequest$(context$2$0) {\n while (1) switch (context$2$0.prev = context$2$0.next) {\n case 0:\n\n options = options || {};\n\n if (!options.skipAuthCheck) {\n context$2$0.next = 3;\n break;\n }\n\n return context$2$0.abrupt('return', request);\n\n case 3:\n context$2$0.next = 5;\n return regeneratorRuntime.awrap(this._ensureAuthentication());\n\n case 5:\n\n request.headers.set('Authorization', this._authHeader());\n //request.url = this.createUrl(request.url, {addServer: true}); //FIXME Spec prevents this...\n\n //TODO Add User-Agent here\n\n return context$2$0.abrupt('return', request);\n\n case 7:\n case 'end':\n return context$2$0.stop();\n }\n }, null, this);\n };\n\n /**\n * @param {Request} request\n * @param {object} [options]\n * @param {boolean} [options.skipAuthCheck]\n * @return {Promise}\n */\n\n Platform.prototype.sendRequest = function sendRequest(request, options) {\n return regeneratorRuntime.async(function sendRequest$(context$2$0) {\n while (1) switch (context$2$0.prev = context$2$0.next) {\n case 0:\n context$2$0.prev = 0;\n context$2$0.next = 3;\n return regeneratorRuntime.awrap(this.inflateRequest(request, options));\n\n case 3:\n request = context$2$0.sent;\n context$2$0.next = 6;\n return regeneratorRuntime.awrap(this._client.sendRequest(request));\n\n case 6:\n return context$2$0.abrupt('return', context$2$0.sent);\n\n case 9:\n context$2$0.prev = 9;\n context$2$0.t0 = context$2$0['catch'](0);\n\n if (!(!context$2$0.t0.apiResponse || !context$2$0.t0.apiResponse.response() || context$2$0.t0.apiResponse.response().status != 401)) {\n context$2$0.next = 13;\n break;\n }\n\n throw context$2$0.t0;\n\n case 13:\n\n this._auth.cancelAccessToken();\n\n context$2$0.next = 16;\n return regeneratorRuntime.awrap(this.sendRequest(request, options));\n\n case 16:\n return context$2$0.abrupt('return', context$2$0.sent);\n\n case 17:\n case 'end':\n return context$2$0.stop();\n }\n }, null, this, [[0, 9]]);\n };\n\n /**\n * General purpose function to send anything to server\n * @param {string} options.url\n * @param {object} [options.body]\n * @param {string} [options.method]\n * @param {object} [options.query]\n * @param {object} [options.headers]\n * @param {boolean} [options.skipAuthCheck]\n * @return {Promise}\n */\n\n Platform.prototype.send = function send() {\n var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];\n return regeneratorRuntime.async(function send$(context$2$0) {\n while (1) switch (context$2$0.prev = context$2$0.next) {\n case 0:\n\n //FIXME https://github.com/bitinn/node-fetch/issues/43\n options.url = this.createUrl(options.url, { addServer: true });\n\n context$2$0.next = 3;\n return regeneratorRuntime.awrap(this.sendRequest(this._client.createRequest(options), options));\n\n case 3:\n return context$2$0.abrupt('return', context$2$0.sent);\n\n case 4:\n case 'end':\n return context$2$0.stop();\n }\n }, null, this);\n };\n\n /**\n * @param {string} url\n * @param {object} [query]\n * @param {object} [options]\n * @param {object} [options.headers]\n * @param {boolean} [options.skipAuthCheck]\n * @return {Promise}\n */\n\n Platform.prototype.get = function get(url, query, options) {\n return regeneratorRuntime.async(function get$(context$2$0) {\n while (1) switch (context$2$0.prev = context$2$0.next) {\n case 0:\n options = options || {};\n options.method = 'GET';\n options.url = url;\n options.query = query;\n context$2$0.next = 6;\n return regeneratorRuntime.awrap(this.send(options));\n\n case 6:\n return context$2$0.abrupt('return', context$2$0.sent);\n\n case 7:\n case 'end':\n return context$2$0.stop();\n }\n }, null, this);\n };\n\n /**\n * @param {string} url\n * @param {object} body\n * @param {object} [query]\n * @param {object} [options]\n * @param {object} [options.headers]\n * @param {boolean} [options.skipAuthCheck]\n * @return {Promise}\n */\n\n Platform.prototype.post = function post(url, body, query, options) {\n return regeneratorRuntime.async(function post$(context$2$0) {\n while (1) switch (context$2$0.prev = context$2$0.next) {\n case 0:\n options = options || {};\n options.method = 'POST';\n options.url = url;\n options.query = query;\n options.body = body;\n context$2$0.next = 7;\n return regeneratorRuntime.awrap(this.send(options));\n\n case 7:\n return context$2$0.abrupt('return', context$2$0.sent);\n\n case 8:\n case 'end':\n return context$2$0.stop();\n }\n }, null, this);\n };\n\n /**\n * @param {string} url\n * @param {object} [body]\n * @param {object} [query]\n * @param {object} [options]\n * @param {object} [options.headers]\n * @param {boolean} [options.skipAuthCheck]\n * @return {Promise}\n */\n\n Platform.prototype.put = function put(url, body, query, options) {\n return regeneratorRuntime.async(function put$(context$2$0) {\n while (1) switch (context$2$0.prev = context$2$0.next) {\n case 0:\n options = options || {};\n options.method = 'PUT';\n options.url = url;\n options.query = query;\n options.body = body;\n context$2$0.next = 7;\n return regeneratorRuntime.awrap(this.send(options));\n\n case 7:\n return context$2$0.abrupt('return', context$2$0.sent);\n\n case 8:\n case 'end':\n return context$2$0.stop();\n }\n }, null, this);\n };\n\n /**\n * @param {string} url\n * @param {string} [query]\n * @param {object} [options]\n * @param {object} [options.headers]\n * @param {boolean} [options.skipAuthCheck]\n * @return {Promise}\n */\n\n Platform.prototype['delete'] = function _delete(url, query, options) {\n return regeneratorRuntime.async(function _delete$(context$2$0) {\n while (1) switch (context$2$0.prev = context$2$0.next) {\n case 0:\n options = options || {};\n options.method = 'DELETE';\n options.url = url;\n options.query = query;\n context$2$0.next = 6;\n return regeneratorRuntime.awrap(this.send(options));\n\n case 6:\n return context$2$0.abrupt('return', context$2$0.sent);\n\n case 7:\n case 'end':\n return context$2$0.stop();\n }\n }, null, this);\n };\n\n Platform.prototype._tokenRequest = function _tokenRequest(path, body) {\n return regeneratorRuntime.async(function _tokenRequest$(context$2$0) {\n while (1) switch (context$2$0.prev = context$2$0.next) {\n case 0:\n context$2$0.next = 2;\n return regeneratorRuntime.awrap(this.send({\n url: path,\n skipAuthCheck: true,\n body: body,\n method: 'POST',\n headers: {\n 'Authorization': 'Basic ' + this._apiKey(),\n 'Content-Type': 'application/x-www-form-urlencoded'\n }\n }));\n\n case 2:\n return context$2$0.abrupt('return', context$2$0.sent);\n\n case 3:\n case 'end':\n return context$2$0.stop();\n }\n }, null, this);\n };\n\n Platform.prototype._ensureAuthentication = function _ensureAuthentication() {\n return regeneratorRuntime.async(function _ensureAuthentication$(context$2$0) {\n while (1) switch (context$2$0.prev = context$2$0.next) {\n case 0:\n if (!this._isAccessTokenValid()) {\n context$2$0.next = 2;\n break;\n }\n\n return context$2$0.abrupt('return', null);\n\n case 2:\n context$2$0.next = 4;\n return regeneratorRuntime.awrap(this.refresh());\n\n case 4:\n return context$2$0.abrupt('return', context$2$0.sent);\n\n case 5:\n case 'end':\n return context$2$0.stop();\n }\n }, null, this);\n };\n\n Platform.prototype._isAccessTokenValid = function _isAccessTokenValid() {\n\n return this._auth.accessTokenValid() && !this._queue.isPaused();\n };\n\n Platform.prototype._apiKey = function _apiKey() {\n var apiKey = this._appKey + ':' + this._appSecret;\n return typeof btoa == 'function' ? btoa(apiKey) : new Buffer(apiKey).toString('base64');\n };\n\n Platform.prototype._authHeader = function _authHeader() {\n var token = this._auth.accessToken();\n return this._auth.tokenType() + (token ? ' ' + token : '');\n };\n\n return Platform;\n})(_coreObservable2['default']);\n\nexports['default'] = Platform;\nmodule.exports = exports['default'];\n\n// Perform sanity checks\n\n/** @type {ApiResponse} */\n\n// Guard is for errors that come from polling\n\n/***/ },\n/* 17 */\n/***/ function(module, exports) {\n\n'use strict';\n\nexports.__esModule = true;\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nvar Auth = (function () {\n _createClass(Auth, null, [{\n key: 'refreshHandicapMs',\n value: 60 * 1000,\n // 1 minute\n enumerable: true\n }, {\n key: 'forcedTokenType',\n value: 'forced',\n enumerable: true\n }]);\n\n function Auth(cache, cacheId) {\n _classCallCheck(this, Auth);\n\n /** @type {Cache} */\n this._cache = cache;\n this._cacheId = cacheId;\n }\n\n //export interface IAuthData {\n // remember?:boolean;\n // token_type?:string;\n // access_token?:string;\n // expires_in?:number; // actually it's string\n // expire_time?:number;\n // refresh_token?:string;\n // refresh_token_expires_in?:number; // actually it's string\n // refresh_token_expire_time?:number;\n // scope?:string;\n //}\n\n Auth.prototype.accessToken = function accessToken() {\n return this.data().access_token;\n };\n\n Auth.prototype.refreshToken = function refreshToken() {\n return this.data().refresh_token;\n };\n\n Auth.prototype.tokenType = function tokenType() {\n return this.data().token_type;\n };\n\n /**\n * @return {{token_type: string, access_token: string, expires_in: number, refresh_token: string, refresh_token_expires_in: number}}\n */\n\n Auth.prototype.data = function data() {\n\n return this._cache.getItem(this._cacheId) || {\n token_type: '',\n access_token: '',\n expires_in: 0,\n refresh_token: '',\n refresh_token_expires_in: 0\n };\n };\n\n /**\n * @param {object} newData\n * @return {Auth}\n */\n\n Auth.prototype.setData = function setData(newData) {\n\n newData = newData || {};\n\n var data = this.data();\n\n Object.keys(newData).forEach(function (key) {\n data[key] = newData[key];\n });\n\n data.expire_time = Date.now() + data.expires_in * 1000;\n data.refresh_token_expire_time = Date.now() + data.refresh_token_expires_in * 1000;\n\n this._cache.setItem(this._cacheId, data);\n\n return this;\n };\n\n /**\n * Check if there is a valid (not expired) access token\n * @return {boolean}\n */\n\n Auth.prototype.accessTokenValid = function accessTokenValid() {\n\n var authData = this.data();\n return authData.token_type === Auth.forcedTokenType || authData.expire_time - Auth.refreshHandicapMs > Date.now();\n };\n\n /**\n * Check if there is a valid (not expired) access token\n * @return {boolean}\n */\n\n Auth.prototype.refreshTokenValid = function refreshTokenValid() {\n\n return this.data().refresh_token_expire_time > Date.now();\n };\n\n /**\n * @return {Auth}\n */\n\n Auth.prototype.cancelAccessToken = function cancelAccessToken() {\n\n return this.setData({\n access_token: '',\n expires_in: 0\n });\n };\n\n /**\n * This method sets a special authentication mode used in Service Web\n * @return {Auth}\n */\n\n Auth.prototype.forceAuthentication = function forceAuthentication() {\n\n this.setData({\n token_type: Auth.forcedTokenType,\n access_token: '',\n expires_in: 0,\n refresh_token: '',\n refresh_token_expires_in: 0\n });\n\n return this;\n };\n\n /**\n * @param remember\n * @return {Auth}\n */\n\n Auth.prototype.setRemember = function setRemember(remember) {\n\n return this.setData({ remember: remember });\n };\n\n /**\n * @return {boolean}\n */\n\n Auth.prototype.remember = function remember() {\n\n return !!this.data().remember;\n };\n\n return Auth;\n})();\n\nexports['default'] = Auth;\nmodule.exports = exports['default'];\n\n/***/ },\n/* 18 */\n/***/ function(module, exports, __webpack_require__) {\n\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nvar _PubnubMockJs = __webpack_require__(19);\n\nvar _PubnubMockJs2 = _interopRequireDefault(_PubnubMockJs);\n\nvar _coreExternals = __webpack_require__(3);\n\nvar PubnubMockFactory = (function () {\n function PubnubMockFactory() {\n _classCallCheck(this, PubnubMockFactory);\n\n this.crypto_obj = _coreExternals.PUBNUB.crypto_obj;\n }\n\n PubnubMockFactory.prototype.init = function init(options) {\n return new _PubnubMockJs2['default'](options);\n };\n\n return PubnubMockFactory;\n})();\n\nexports['default'] = PubnubMockFactory;\nmodule.exports = exports['default'];\n\n/***/ },\n/* 19 */\n/***/ function(module, exports, __webpack_require__) {\n\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _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; }\n\nvar _coreObservable = __webpack_require__(8);\n\nvar _coreObservable2 = _interopRequireDefault(_coreObservable);\n\nvar _coreExternals = __webpack_require__(3);\n\nvar PubnubMock = (function (_Observable) {\n _inherits(PubnubMock, _Observable);\n\n function PubnubMock(options) {\n _classCallCheck(this, PubnubMock);\n\n _Observable.call(this);\n this.options = options;\n this.crypto_obj = _coreExternals.PUBNUB.crypto_obj;\n }\n\n PubnubMock.prototype.ready = function ready() {};\n\n PubnubMock.prototype.subscribe = function subscribe(options) {\n this.on('message-' + options.channel, options.message);\n };\n\n PubnubMock.prototype.unsubscribe = function unsubscribe(options) {\n this.off('message-' + options.channel);\n };\n\n PubnubMock.prototype.receiveMessage = function receiveMessage(msg, channel) {\n this.emit('message-' + channel, msg, 'env', channel);\n };\n\n return PubnubMock;\n})(_coreObservable2['default']);\n\nexports['default'] = PubnubMock;\nmodule.exports = exports['default'];\n\n/***/ },\n/* 20 */\n/***/ function(module, exports, __webpack_require__) {\n\n'use strict';\n\nexports.__esModule = true;\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _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; }\n\nvar _coreObservable = __webpack_require__(8);\n\nvar _coreObservable2 = _interopRequireDefault(_coreObservable);\n\nvar _httpClient = __webpack_require__(10);\n\nvar _httpClient2 = _interopRequireDefault(_httpClient);\n\nvar _coreUtils = __webpack_require__(2);\n\nvar Subscription = (function (_Observable) {\n _inherits(Subscription, _Observable);\n\n _createClass(Subscription, null, [{\n key: '_renewHandicapMs',\n value: 2 * 60 * 1000,\n enumerable: true\n }, {\n key: '_pollInterval',\n value: 10 * 1000,\n enumerable: true\n }]);\n\n function Subscription(pubnubFactory, platform) {\n _classCallCheck(this, Subscription);\n\n _Observable.call(this);\n\n this.events = {\n notification: 'notification',\n removeSuccess: 'removeSuccess',\n removeError: 'removeError',\n renewSuccess: 'renewSuccess',\n renewError: 'renewError',\n subscribeSuccess: 'subscribeSuccess',\n subscribeError: 'subscribeError'\n };\n this._pubnubFactory = pubnubFactory;\n this._platform = platform;\n this._pubnub = null;\n this._timeout = null;\n this._subscription = {};\n }\n\n //export interface ISubscription {\n // id?:string;\n // uri?: string;\n // eventFilters?:string[];\n // expirationTime?:string; // 2014-03-12T19:54:35.613Z\n // expiresIn?:number;\n // deliveryMode?: {\n // transportType?:string;\n // encryption?:boolean;\n // address?:string;\n // subscriberKey?:string;\n // encryptionKey?:string;\n // secretKey?:string;\n // };\n // creationTime?:string; // 2014-03-12T19:54:35.613Z\n // status?:string; // Active\n //}\n\n Subscription.prototype.subscribed = function subscribed() {\n\n return !!(this._subscription.id && this._subscription.deliveryMode && this._subscription.deliveryMode.subscriberKey && this._subscription.deliveryMode.address);\n };\n\n /**\n * @return {boolean}\n */\n\n Subscription.prototype.alive = function alive() {\n\n return this.subscribed() && Date.now() < this.expirationTime();\n };\n\n Subscription.prototype.expirationTime = function expirationTime() {\n return new Date(this._subscription.expirationTime || 0).getTime() - Subscription._renewHandicapMs;\n };\n\n Subscription.prototype.setSubscription = function setSubscription(subscription) {\n\n subscription = subscription || {};\n\n this._clearTimeout();\n\n this._subscription = subscription;\n\n if (!this._pubnub) this._subscribeAtPubnub();\n\n this._setTimeout();\n\n return this;\n };\n\n Subscription.prototype.subscription = function subscription() {\n return this._subscription;\n };\n\n /**\n * Creates or updates subscription if there is an active one\n * @returns {Promise}\n */\n\n Subscription.prototype.register = function register() {\n return regeneratorRuntime.async(function register$(context$2$0) {\n while (1) switch (context$2$0.prev = context$2$0.next) {\n case 0:\n if (!this.alive()) {\n context$2$0.next = 6;\n break;\n }\n\n context$2$0.next = 3;\n return regeneratorRuntime.awrap(this.renew());\n\n case 3:\n return context$2$0.abrupt('return', context$2$0.sent);\n\n case 6:\n context$2$0.next = 8;\n return regeneratorRuntime.awrap(this.subscribe());\n\n case 8:\n return context$2$0.abrupt('return', context$2$0.sent);\n\n case 9:\n case 'end':\n return context$2$0.stop();\n }\n }, null, this);\n };\n\n Subscription.prototype.eventFilters = function eventFilters() {\n return this._subscription.eventFilters || [];\n };\n\n /**\n * @param {string[]} events\n * @return {Subscription}\n */\n\n Subscription.prototype.addEventFilters = function addEventFilters(events) {\n this.setEventFilters(this.eventFilters().concat(events));\n return this;\n };\n\n /**\n * @param {string[]} events\n * @return {Subscription}\n */\n\n Subscription.prototype.setEventFilters = function setEventFilters(events) {\n this._subscription.eventFilters = events;\n return this;\n };\n\n /**\n * @returns {Promise}\n */\n\n Subscription.prototype.subscribe = function subscribe() {\n var response, json;\n return regeneratorRuntime.async(function subscribe$(context$2$0) {\n while (1) switch (context$2$0.prev = context$2$0.next) {\n case 0:\n context$2$0.prev = 0;\n\n this._clearTimeout();\n\n if (this.eventFilters().length) {\n context$2$0.next = 4;\n break;\n }\n\n throw new Error('Events are undefined');\n\n case 4:\n context$2$0.next = 6;\n return regeneratorRuntime.awrap(this._platform.post('/restapi/v1.0/subscription', {\n eventFilters: this._getFullEventFilters(),\n deliveryMode: {\n transportType: 'PubNub'\n }\n }));\n\n case 6:\n response = context$2$0.sent;\n json = response.json();\n\n this.setSubscription(json).emit(this.events.subscribeSuccess, response);\n\n return context$2$0.abrupt('return', response);\n\n case 12:\n context$2$0.prev = 12;\n context$2$0.t0 = context$2$0['catch'](0);\n\n context$2$0.t0 = this._platform.client().makeError(context$2$0.t0);\n\n this.reset().emit(this.events.subscribeError, context$2$0.t0);\n\n throw context$2$0.t0;\n\n case 17:\n case 'end':\n return context$2$0.stop();\n }\n }, null, this, [[0, 12]]);\n };\n\n /**\n * @returns {Promise}\n */\n\n Subscription.prototype.renew = function renew() {\n var response, json;\n return regeneratorRuntime.async(function renew$(context$2$0) {\n while (1) switch (context$2$0.prev = context$2$0.next) {\n case 0:\n context$2$0.prev = 0;\n\n this._clearTimeout();\n\n if (this.alive()) {\n context$2$0.next = 4;\n break;\n }\n\n throw new Error('Subscription is not alive');\n\n case 4:\n if (this.eventFilters().length) {\n context$2$0.next = 6;\n break;\n }\n\n throw new Error('Events are undefined');\n\n case 6:\n context$2$0.next = 8;\n return regeneratorRuntime.awrap(this._platform.put('/restapi/v1.0/subscription/' + this._subscription.id, {\n eventFilters: this._getFullEventFilters()\n }));\n\n case 8:\n response = context$2$0.sent;\n json = response.json();\n\n this.setSubscription(json).emit(this.events.renewSuccess, response);\n\n return context$2$0.abrupt('return', response);\n\n case 14:\n context$2$0.prev = 14;\n context$2$0.t0 = context$2$0['catch'](0);\n\n context$2$0.t0 = this._platform.client().makeError(context$2$0.t0);\n\n this.reset().emit(this.events.renewError, context$2$0.t0);\n\n throw context$2$0.t0;\n\n case 19:\n case 'end':\n return context$2$0.stop();\n }\n }, null, this, [[0, 14]]);\n };\n\n /**\n * @returns {Promise}\n */\n\n Subscription.prototype.remove = function remove() {\n var response;\n return regeneratorRuntime.async(function remove$(context$2$0) {\n while (1) switch (context$2$0.prev = context$2$0.next) {\n case 0:\n context$2$0.prev = 0;\n\n if (this.subscribed()) {\n context$2$0.next = 3;\n break;\n }\n\n throw new Error('No subscription');\n\n case 3:\n context$2$0.next = 5;\n return regeneratorRuntime.awrap(this._platform['delete']('/restapi/v1.0/subscription/' + this._subscription.id));\n\n case 5:\n response = context$2$0.sent;\n\n this.reset().emit(this.events.removeSuccess, response);\n\n return context$2$0.abrupt('return', response);\n\n case 10:\n context$2$0.prev = 10;\n context$2$0.t0 = context$2$0['catch'](0);\n\n context$2$0.t0 = this._platform.client().makeError(context$2$0.t0);\n\n this.emit(this.events.removeError, context$2$0.t0);\n\n throw context$2$0.t0;\n\n case 15:\n case 'end':\n return context$2$0.stop();\n }\n }, null, this, [[0, 10]]);\n };\n\n /**\n * @returns {Promise}\n */\n\n Subscription.prototype.resubscribe = function resubscribe() {\n\n return this.reset().setEventFilters(this.eventFilters()).subscribe();\n };\n\n /**\n * Remove subscription and disconnect from PUBNUB\n * This method resets subscription at client side but backend is not notified\n */\n\n Subscription.prototype.reset = function reset() {\n this._clearTimeout();\n if (this.subscribed() && this._pubnub) this._pubnub.unsubscribe({ channel: this._subscription.deliveryMode.address });\n this._subscription = {};\n return this;\n };\n\n Subscription.prototype._getFullEventFilters = function _getFullEventFilters() {\n var _this = this;\n\n return this.eventFilters().map(function (event) {\n return _this._platform.createUrl(event);\n });\n };\n\n Subscription.prototype._setTimeout = function _setTimeout() {\n var _this2 = this;\n\n this._clearTimeout();\n\n if (!this.alive()) throw new Error('Subscription is not alive');\n\n _coreUtils.poll(function (next) {\n\n if (_this2.alive()) return next();\n\n _this2.renew();\n }, Subscription._pollInterval, this._timeout);\n\n return this;\n };\n\n Subscription.prototype._clearTimeout = function _clearTimeout() {\n\n _coreUtils.stopPolling(this._timeout);\n\n return this;\n };\n\n Subscription.prototype._decrypt = function _decrypt(message) {\n\n if (!this.subscribed()) throw new Error('No subscription');\n\n if (this._subscription.deliveryMode.encryptionKey) {\n\n var PUBNUB = this._pubnubFactory;\n\n message = PUBNUB.crypto_obj.decrypt(message, this._subscription.deliveryMode.encryptionKey, {\n encryptKey: false,\n keyEncoding: 'base64',\n keyLength: 128,\n mode: 'ecb'\n });\n }\n\n return message;\n };\n\n Subscription.prototype._notify = function _notify(message) {\n\n this.emit(this.events.notification, this._decrypt(message));\n\n return this;\n };\n\n Subscription.prototype._subscribeAtPubnub = function _subscribeAtPubnub() {\n\n if (!this.alive()) throw new Error('Subscription is not alive');\n\n var PUBNUB = this._pubnubFactory;\n\n this._pubnub = PUBNUB.init({\n ssl: true,\n subscribe_key: this._subscription.deliveryMode.subscriberKey\n });\n\n this._pubnub.ready();\n\n this._pubnub.subscribe({\n channel: this._subscription.deliveryMode.address,\n message: this._notify.bind(this),\n connect: function connect() {}\n });\n\n return this;\n };\n\n return Subscription;\n})(_coreObservable2['default']);\n\nexports['default'] = Subscription;\nmodule.exports = exports['default'];\n\n/***/ },\n/* 21 */\n/***/ function(module, exports, __webpack_require__) {\n\n'use strict';\n\nexports.__esModule = true;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _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; }\n\nvar _Subscription2 = __webpack_require__(20);\n\nvar _Subscription3 = _interopRequireDefault(_Subscription2);\n\nvar _coreQueue = __webpack_require__(9);\n\nvar _coreQueue2 = _interopRequireDefault(_coreQueue);\n\nvar CachedSubscription = (function (_Subscription) {\n _inherits(CachedSubscription, _Subscription);\n\n function CachedSubscription(pubnubFactory, platform, cache, cacheKey) {\n var _this = this;\n\n _classCallCheck(this, CachedSubscription);\n\n _Subscription.call(this, pubnubFactory, platform);\n\n this._cache = cache;\n this._cacheKey = cacheKey;\n this._renewQueue = new _coreQueue2['default'](this._cache, cacheKey + '-renew');\n this._resubscribeQueue = new _coreQueue2['default'](this._cache, cacheKey + '-resubscribe');\n\n this.events = _extends({}, this.events, {\n queuedRenewSuccess: 'queuedRenewSuccess',\n queuedRenewError: 'queuedRenewError',\n queuedResubscribeSuccess: 'queuedResubscribeSuccess',\n queuedResubscribeError: 'queuedResubscribeError'\n });\n\n this.on(this.events.renewError, function () {\n _this.resubscribe();\n });\n\n this.on([this.events.subscribeSuccess, this.events.renewSuccess], function () {\n _this._cache.setItem(_this._cacheKey, _this.subscription());\n });\n\n this.on(this.events.removeSuccess, function () {\n _this._cache.removeItem(_this._cacheKey);\n });\n }\n\n /**\n * TODO Combine with Platform.refresh and move elsewhere\n * @param actionCb\n * @param queue\n * @param successEvent\n * @param errorEvent\n * @param errorMessage\n * @return {*}\n * @private\n */\n\n CachedSubscription.prototype._queue = function _queue(actionCb, queue, successEvent, errorEvent, errorMessage) {\n var res;\n return regeneratorRuntime.async(function _queue$(context$2$0) {\n while (1) switch (context$2$0.prev = context$2$0.next) {\n case 0:\n context$2$0.prev = 0;\n\n if (!queue.isPaused()) {\n context$2$0.next = 8;\n break;\n }\n\n context$2$0.next = 4;\n return regeneratorRuntime.awrap(queue.poll());\n\n case 4:\n if (this.alive()) {\n context$2$0.next = 6;\n break;\n }\n\n throw new Error(errorMessage);\n\n case 6:\n\n this.emit(successEvent, null);\n\n return context$2$0.abrupt('return', null);\n\n case 8:\n\n queue.pause();\n\n context$2$0.next = 11;\n return regeneratorRuntime.awrap(actionCb.call(this));\n\n case 11:\n res = context$2$0.sent;\n\n queue.resume();\n\n this.emit(successEvent, res);\n\n return context$2$0.abrupt('return', res);\n\n case 17:\n context$2$0.prev = 17;\n context$2$0.t0 = context$2$0['catch'](0);\n\n this.emit(errorEvent, context$2$0.t0);\n\n throw context$2$0.t0;\n\n case 21:\n case 'end':\n return context$2$0.stop();\n }\n }, null, this, [[0, 17]]);\n };\n\n /**\n * @returns {Promise}\n */\n\n CachedSubscription.prototype.renew = function renew() {\n\n return this._queue(_Subscription.prototype.renew, this._renewQueue, this.events.queuedRenewSuccess, this.events.queuedRenewError, 'Subscription is not alive after renew timeout');\n };\n\n /**\n * @returns {Promise}\n */\n\n CachedSubscription.prototype.resubscribe = function resubscribe() {\n\n return this._queue(_Subscription.prototype.resubscribe, this._resubscribeQueue, this.events.queuedResubscribeSuccess, this.events.queuedResubscribeError, 'Subscription is not alive after resubscribe timeout');\n };\n\n /**\n * @param {string[]} events\n * @return {CachedSubscription}\n */\n\n CachedSubscription.prototype.restore = function restore(events) {\n\n var cachedSubscriptionData = this._cache.getItem(this._cacheKey);\n\n if (cachedSubscriptionData) {\n try {\n this.setSubscription(cachedSubscriptionData);\n } catch (e) {}\n } else {\n this.setEventFilters(events);\n }\n\n return this;\n };\n\n return CachedSubscription;\n})(_Subscription3['default']);\n\nexports['default'] = CachedSubscription;\nmodule.exports = exports['default'];\n\n/***/ },\n/* 22 */\n/***/ function(module, exports) {\n\n/* WEBPACK VAR INJECTION */(function(global) {/**\n * Copyright (c) 2014, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * https://raw.github.com/facebook/regenerator/master/LICENSE file. An\n * additional grant of patent rights can be found in the PATENTS file in\n * the same directory.\n */\n\n!(function(global) {\n \"use strict\";\n\n var hasOwn = Object.prototype.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var iteratorSymbol =\n typeof Symbol === \"function\" && Symbol.iterator || \"@@iterator\";\n\n var inModule = typeof module === \"object\";\n var runtime = global.regeneratorRuntime;\n if (runtime) {\n if (inModule) {\n // If regeneratorRuntime is defined globally and we're in a module,\n // make the exports object identical to regeneratorRuntime.\n module.exports = runtime;\n }\n // Don't bother evaluating the rest of this file if the runtime was\n // already defined globally.\n return;\n }\n\n // Define the runtime globally (as expected by generated code) as either\n // module.exports (if we're in a module) or a new, empty object.\n runtime = global.regeneratorRuntime = inModule ? module.exports : {};\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided, then outerFn.prototype instanceof Generator.\n var generator = Object.create((outerFn || Generator).prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n runtime.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype;\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunction.displayName = \"GeneratorFunction\";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n runtime.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n runtime.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `value instanceof AwaitArgument` to determine if the yielded value is\n // meant to be awaited. Some may consider the name of this method too\n // cutesy, but they are curmudgeons.\n runtime.awrap = function(arg) {\n return new AwaitArgument(arg);\n };\n\n function AwaitArgument(arg) {\n this.arg = arg;\n }\n\n function AsyncIterator(generator) {\n // This invoke function is written in a style that assumes some\n // calling function (or Promise) will handle exceptions.\n function invoke(method, arg) {\n var result = generator[method](arg);\n var value = result.value;\n return value instanceof AwaitArgument\n ? Promise.resolve(value.arg).then(invokeNext, invokeThrow)\n : Promise.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration. If the Promise is rejected, however, the\n // result for this iteration will be rejected with the same\n // reason. Note that rejections of yielded Promises are not\n // thrown back into the generator function, as is the case\n // when an awaited Promise is rejected. This difference in\n // behavior between yield and await is important, because it\n // allows the consumer to decide what to do with the yielded\n // rejection (swallow it and continue, manually .throw it back\n // into the generator, abandon iteration, whatever). With\n // await, by contrast, there is no opportunity to examine the\n // rejection reason outside the generator function, so the\n // only option is to throw it from the await expression, and\n // let the generator function handle the exception.\n result.value = unwrapped;\n return result;\n });\n }\n\n if (typeof process === \"object\" && process.domain) {\n invoke = process.domain.bind(invoke);\n }\n\n var invokeNext = invoke.bind(generator, \"next\");\n var invokeThrow = invoke.bind(generator, \"throw\");\n var invokeReturn = invoke.bind(generator, \"return\");\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return invoke(method, arg);\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : new Promise(function (resolve) {\n resolve(callInvokeWithMethodAndArg());\n });\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n runtime.async = function(innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList)\n );\n\n return runtime.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n if (method === \"return\" ||\n (method === \"throw\" && delegate.iterator[method] === undefined)) {\n // A return or throw (when the delegate iterator has no throw\n // method) always terminates the yield* loop.\n context.delegate = null;\n\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n var returnMethod = delegate.iterator[\"return\"];\n if (returnMethod) {\n var record = tryCatch(returnMethod, delegate.iterator, arg);\n if (record.type === \"throw\") {\n // If the return method threw an exception, let that\n // exception prevail over the original return or throw.\n method = \"throw\";\n arg = record.arg;\n continue;\n }\n }\n\n if (method === \"return\") {\n // Continue with the outer return, now that the delegate\n // iterator has been terminated.\n continue;\n }\n }\n\n var record = tryCatch(\n delegate.iterator[method],\n delegate.iterator,\n arg\n );\n\n if (record.type === \"throw\") {\n context.delegate = null;\n\n // Like returning generator.throw(uncaught), but without the\n // overhead of an extra function call.\n method = \"throw\";\n arg = record.arg;\n continue;\n }\n\n // Delegate generator ran and handled its own exceptions so\n // regardless of what the method was, we continue as if it is\n // \"next\" with an undefined arg.\n method = \"next\";\n arg = undefined;\n\n var info = record.arg;\n if (info.done) {\n context[delegate.resultName] = info.value;\n context.next = delegate.nextLoc;\n } else {\n state = GenStateSuspendedYield;\n return info;\n }\n\n context.delegate = null;\n }\n\n if (method === \"next\") {\n if (state === GenStateSuspendedYield) {\n context.sent = arg;\n } else {\n context.sent = undefined;\n }\n\n } else if (method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw arg;\n }\n\n if (context.dispatchException(arg)) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n method = \"next\";\n arg = undefined;\n }\n\n } else if (method === \"return\") {\n context.abrupt(\"return\", arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n var info = {\n value: record.arg,\n done: context.done\n };\n\n if (record.arg === ContinueSentinel) {\n if (context.delegate && method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n arg = undefined;\n }\n } else {\n return info;\n }\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(arg) call above.\n method = \"throw\";\n arg = record.arg;\n }\n }\n };\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n runtime.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n runtime.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n this.sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n return !!caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.next = finallyEntry.finallyLoc;\n } else {\n this.complete(record);\n }\n\n return ContinueSentinel;\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = record.arg;\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n return ContinueSentinel;\n }\n };\n})(\n // Among the various tricks for obtaining a reference to the global\n // object, this seems to be the most reliable technique that does not\n // use indirect eval (which violates Content Security Policy).\n typeof global === \"object\" ? global :\n typeof window === \"object\" ? window :\n typeof self === \"object\" ? self : this\n);\n\n/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))\n\n/***/ }\n/******/ ])\n});\n;\n//# sourceMappingURL=ringcentral.js.map"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/build/\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap 5d800152b5167bf356e8\n **/","import * as Utils from './core/Utils';\nimport Cache from './core/Cache';\nimport * as Externals from './core/Externals';\nimport Observable from './core/Observable';\nimport Queue from './core/Queue';\n\nimport Client from './http/Client';\nimport ApiResponse from './http/ApiResponse';\nimport * as HttpUtils from './http/Utils';\n\nimport {default as ClientMock} from './mocks/ClientMock';\nimport Mock from './mocks/Mock';\nimport Registry from './mocks/Registry';\n\nimport Platform from './platform/Platform';\nimport Auth from './platform/Auth';\n\nimport PubnubMockFactory from './pubnub/PubnubFactory';\n\nimport Subscription from './subscription/Subscription';\nimport CachedSubscription from './subscription/CachedSubscription';\n\nrequire(\"regenerator/runtime\");\n\nexport default class SDK {\n\n static version = '2.0.0';\n\n static server = {\n sandbox: 'https://platform.devtest.ringcentral.com',\n production: 'https://platform.ringcentral.com'\n };\n\n /**\n * @constructor\n * @param {object} [options]\n * @param {string} [options.server]\n * @param {string} [options.cachePrefix]\n * @param {string} [options.appSecret]\n * @param {string} [options.appKey]\n * @param {string} [options.appName]\n * @param {string} [options.appVersion]\n * @param {string} [options.pubnubFactory]\n * @param {string} [options.client]\n */\n constructor(options) {\n\n options = options || {};\n\n this._cache = new Cache(Externals.localStorage, options.cachePrefix);\n\n this._client = options.client || new Client();\n\n this._platform = new Platform(this._client, this._cache, options.server, options.appKey, options.appSecret);\n\n this._pubnubFactory = options.pubnubFactory || Externals.PUBNUB;\n\n }\n\n /**\n * @return {Platform}\n */\n platform() {\n return this._platform;\n }\n\n /**\n * @return {Subscription}\n */\n createSubscription() {\n return new Subscription(this._pubnubFactory, this._platform);\n }\n\n /**\n * @return {CachedSubscription}\n */\n createCachedSubscription(cacheKey) {\n return new CachedSubscription(this._pubnubFactory, this._platform, this._cache, cacheKey);\n }\n\n /**\n * @return {Cache}\n */\n cache() {\n return this._cache;\n }\n\n static core = {\n Cache: Cache,\n Observable: Observable,\n Utils: Utils,\n Externals: Externals,\n Queue: Queue\n };\n\n static http = {\n Client: Client,\n ApiResponse: ApiResponse,\n Utils: HttpUtils\n };\n\n static platform = {\n Auth: Auth,\n Platform: Platform\n };\n\n static subscription = {\n Subscription: Subscription\n };\n\n static mocks = {\n Client: ClientMock,\n Registry: Registry,\n Mock: Mock\n };\n\n static pubnub = {\n PubnubMockFactory: PubnubMockFactory\n };\n\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/SDK.js\n **/","import {Promise} from './Externals.js';\n\n/**\n * TODO Replace with something better\n * @see https://github.com/joyent/node/blob/master/lib/querystring.js\n * @param {object} parameters\n * @returns {string}\n */\nexport function queryStringify(parameters) {\n\n var array = [];\n\n parameters = parameters || {};\n\n Object.keys(parameters).forEach((k) => {\n\n var v = parameters[k];\n\n if (isArray(v)) {\n v.forEach((vv) => {\n array.push(encodeURIComponent(k) + '=' + encodeURIComponent(vv));\n });\n } else {\n array.push(encodeURIComponent(k) + '=' + encodeURIComponent(v));\n }\n\n });\n\n return array.join('&');\n\n}\n\n/**\n * TODO Replace with something better\n * @see https://github.com/joyent/node/blob/master/lib/querystring.js\n * @param {string} queryString\n * @returns {object}\n */\nexport function parseQueryString(queryString) {\n\n var argsParsed = {};\n\n queryString.split('&').forEach((arg) => {\n\n arg = decodeURIComponent(arg);\n\n if (arg.indexOf('=') == -1) {\n\n argsParsed[arg.trim()] = true;\n\n } else {\n\n var pair = arg.split('='),\n key = pair[0].trim(),\n value = pair[1].trim();\n\n if (key in argsParsed) {\n if (key in argsParsed && !isArray(argsParsed[key])) argsParsed[key] = [argsParsed[key]];\n argsParsed[key].push(value);\n } else {\n argsParsed[key] = value;\n }\n\n }\n\n });\n\n return argsParsed;\n\n}\n\n/**\n * @param obj\n * @return {boolean}\n */\nexport function isFunction(obj) {\n return typeof obj === \"function\";\n}\n\n/**\n * @param obj\n * @return {boolean}\n */\nexport function isArray(obj) {\n return Array.isArray ? Array.isArray(obj) : typeof obj === \"array\";\n}\n\n/**\n * @param fn\n * @param interval\n * @param timeout\n */\nexport function poll(fn, interval, timeout) { //NodeJS.Timer|number\n\n module.exports.stopPolling(timeout);\n\n interval = interval || 1000;\n\n var next = (delay) => {\n\n delay = delay || interval;\n\n interval = delay;\n\n return setTimeout(() => {\n\n fn(next, delay);\n\n }, delay);\n\n };\n\n return next();\n\n}\n\nexport function stopPolling(timeout) {\n if (timeout) clearTimeout(timeout);\n}\n\nexport function isNodeJS() {\n return (typeof process !== 'undefined');\n}\n\nexport function isBrowser() {\n return (typeof window !== 'undefined');\n}\n\nexport function delay(timeout) {\n return new Promise((resolve, reject) => {\n setTimeout(() => {\n resolve(null);\n }, timeout);\n });\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/core/Utils.js\n **/","import ES6Promise from 'es6-promise';\nimport nodeFetch from 'node-fetch';\nimport pubnub from 'pubnub';\n\nvar root = (new Function('return this'))();\n\nexport var Promise = (ES6Promise && ES6Promise.Promise) || root.Promise;\n\nexport var fetch = root.fetch || nodeFetch;\nexport var Request = root.Request || fetch.Request;\nexport var Response = root.Response || fetch.Response;\nexport var Headers = root.Headers || fetch.Headers;\n\nexport var PUBNUB = root.PUBNUB || pubnub;\n\nexport var localStorage = (typeof root.localStorage !== 'undefined') ? root.localStorage : {};\n\n\n/** WEBPACK FOOTER **\n ** ./src/core/Externals.js\n **/","module.exports = __WEBPACK_EXTERNAL_MODULE_4__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external {\"commonjs\":\"es6-promise\",\"commonjs2\":\"es6-promise\"}\n ** module id = 4\n ** module chunks = 0\n **/","module.exports = __WEBPACK_EXTERNAL_MODULE_5__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external {\"commonjs\":\"node-fetch\",\"commonjs2\":\"node-fetch\"}\n ** module id = 5\n ** module chunks = 0\n **/","module.exports = __WEBPACK_EXTERNAL_MODULE_6__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external {\"commonjs\":\"pubnub\",\"commonjs2\":\"pubnub\",\"amd\":\"pubnub\"}\n ** module id = 6\n ** module chunks = 0\n **/","export default class Cache {\n\n static defaultPrefix = 'rc-';\n\n constructor(storage, prefix) {\n this.setPrefix(prefix);\n this._storage = storage;\n }\n\n setPrefix(prefix) {\n this._prefix = prefix || Cache.defaultPrefix;\n return this;\n }\n\n setItem(key, data) {\n this._storage[this._prefixKey(key)] = JSON.stringify(data);\n return this;\n }\n\n removeItem(key) {\n delete this._storage[this._prefixKey(key)];\n return this;\n }\n\n getItem(key) {\n var item = this._storage[this._prefixKey(key)];\n if (!item) return null;\n return JSON.parse(item);\n }\n\n clean() {\n\n for (var key in this._storage) {\n\n if (!this._storage.hasOwnProperty(key)) continue;\n\n if (key.indexOf(this._prefix) === 0) {\n delete this._storage[key];\n }\n\n }\n\n return this;\n\n }\n\n _prefixKey(key) {\n return this._prefix + key;\n }\n\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/core/Cache.js\n **/","export default class Observable {\n\n constructor() {\n this.off();\n }\n\n hasListeners(event) {\n return (event in this._listeners);\n }\n\n on(events, callback) {\n\n if (typeof events == 'string') events = [events];\n if (!events) throw new Error('No events to subscribe to');\n if (typeof callback !== 'function') throw new Error('Callback must be a function');\n\n events.forEach((event) => {\n\n if (!this.hasListeners(event)) this._listeners[event] = [];\n\n this._listeners[event].push(callback);\n\n });\n\n return this;\n\n }\n\n emit(event, ...args) {\n\n var result = null;\n\n if (!this.hasListeners(event)) return null;\n\n this._listeners[event].some((callback) => {\n\n result = callback.apply(this, args);\n return (result === false);\n\n });\n\n return result;\n\n }\n\n off(event, callback) {\n\n if (!event) {\n\n this._listeners = {};\n\n } else {\n\n if (!callback) {\n\n delete this._listeners[event];\n\n } else {\n\n if (!this.hasListeners(event)) return this;\n\n this._listeners[event].forEach((cb, i) => {\n\n if (cb === callback) delete this._listeners[event][i];\n\n });\n\n }\n\n }\n\n return this;\n\n }\n\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/core/Observable.js\n **/","import {Promise} from '../core/Externals';\nimport {poll, stopPolling} from './Utils';\n\nexport default class Queue {\n\n static _pollInterval = 250;\n static _releaseTimeout = 5000;\n\n constructor(cache, cacheId) {\n\n this._cache = cache;\n this._cacheId = cacheId;\n this._promise = null;\n\n }\n\n isPaused() {\n\n var time = this._cache.getItem(this._cacheId);\n\n return !!time && Date.now() - parseInt(time) < Queue._releaseTimeout;\n }\n\n pause() {\n this._cache.setItem(this._cacheId, Date.now());\n return this;\n }\n\n resume() {\n this._cache.removeItem(this._cacheId);\n return this;\n }\n\n poll() {\n\n if (this._promise) return this._promise;\n\n this._promise = new Promise((resolve, reject) => {\n\n poll((next) => {\n\n if (this.isPaused()) return next();\n\n this._promise = null;\n\n this.resume(); // this is actually not needed but why not\n\n resolve(null);\n\n }, Queue._pollInterval);\n\n });\n\n return this._promise;\n\n }\n\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/core/Queue.js\n **/","import {fetch, Request, Response, Headers, Promise} from '../core/Externals';\nimport {queryStringify} from '../core/Utils';\nimport {findHeaderName} from './Utils';\nimport Observable from '../core/Observable';\nimport ApiResponse from './ApiResponse';\n\nexport default class Client extends Observable {\n\n static _allowedMethods = ['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'OPTIONS', 'HEAD'];\n\n events = {\n beforeRequest: 'beforeRequest',\n requestSuccess: 'requestSuccess',\n requestError: 'requestError'\n };\n\n /**\n * @param {Request} request\n * @return {Promise}\n */\n async sendRequest(request) {\n\n var apiResponse = new ApiResponse(request);\n\n try {\n\n //TODO Stop request if listeners return false\n this.emit(this.events.beforeRequest, apiResponse);\n\n apiResponse._response = await this._loadResponse(request);\n\n if (apiResponse._isMultipart() || apiResponse._isJson()) {\n apiResponse._text = await apiResponse.response().text();\n }\n\n if (!apiResponse.ok()) throw new Error('Response has unsuccessful status');\n\n this.emit(this.events.requestSuccess, apiResponse);\n\n return apiResponse;\n\n } catch (e) {\n\n if (!e.apiResponse) e = this.makeError(e, apiResponse);\n\n this.emit(this.events.requestError, e);\n\n throw e;\n\n }\n\n }\n\n /**\n * @param {Request} request\n * @return {Promise}\n * @private\n */\n async _loadResponse(request) {\n return await fetch.call(null, request);\n }\n\n /**\n * Wraps the JS Error object with transaction information\n * @param {Error|IApiError} e\n * @param {ApiResponse} apiResponse\n * @return {IApiError}\n */\n makeError(e, apiResponse) {\n\n // Wrap only if regular error\n if (!e.hasOwnProperty('apiResponse') && !e.hasOwnProperty('originalMessage')) {\n\n e.apiResponse = apiResponse;\n e.originalMessage = e.message;\n e.message = (apiResponse && apiResponse.error(true)) || e.originalMessage;\n\n }\n\n return e;\n\n }\n\n /**\n *\n * @param {object} init\n * @param {object} [init.url]\n * @param {object} [init.body]\n * @param {string} [init.method]\n * @param {object} [init.query]\n * @param {object} [init.headers]\n * @return {Request}\n */\n createRequest(init) {\n\n init = init || {};\n init.headers = init.headers || {};\n\n // Sanity checks\n if (!init.url) throw new Error('Url is not defined');\n if (!init.method) init.method = 'GET';\n if (init.method && Client._allowedMethods.indexOf(init.method) < 0) throw new Error('Method has wrong value: ' + init.method);\n\n // Defaults\n init.credentials = init.credentials || 'include';\n init.mode = init.mode || 'cors';\n\n // Append Query String\n if (init.query) {\n init.url = init.url + (init.url.indexOf('?') > -1 ? '&' : '?') + queryStringify(init.query);\n }\n\n if (!(findHeaderName('Accept', init.headers))) {\n init.headers['Accept'] = ApiResponse._jsonContentType;\n }\n\n // Serialize body\n //TODO Check that body is a plain object\n if (typeof init.body !== 'string' || !init.body) {\n\n var contentTypeHeaderName = findHeaderName(ApiResponse._contentType, init.headers);\n\n if (!contentTypeHeaderName) {\n contentTypeHeaderName = ApiResponse._contentType;\n init.headers[contentTypeHeaderName] = ApiResponse._jsonContentType;\n }\n\n var contentType = init.headers[contentTypeHeaderName];\n\n // Assign a new encoded body\n if (contentType.indexOf(ApiResponse._jsonContentType) > -1) {\n init.body = JSON.stringify(init.body);\n } else if (contentType.indexOf(ApiResponse._urlencodedContentType) > -1) {\n init.body = queryStringify(init.body);\n }\n\n }\n\n // Create a request with encoded body\n var req = new Request(init.url, init);\n\n // Keep the original body accessible directly (for mocks)\n req.originalBody = init.body;\n\n return req;\n\n }\n\n}\n\n/**\n * @name IApiError\n * @property {string} stack\n * @property {string} originalMessage\n * @property {ApiResponse} apiResponse\n */\n\n\n/** WEBPACK FOOTER **\n ** ./src/http/Client.js\n **/","import {fetch, Request, Response, Headers, Promise} from '../core/Externals';\nimport * as utils from '../core/Utils';\n\n/**\n * Creates a response\n * @param stringBody\n * @param init\n * @return {Response}\n */\nexport function createResponse(stringBody, init) {\n\n init = init || {};\n\n var response = new Response(stringBody, init);\n\n //TODO Wait for https://github.com/bitinn/node-fetch/issues/38\n if (utils.isNodeJS()) {\n\n response._text = stringBody;\n response._decode = function() {\n return this._text;\n };\n\n }\n\n return response;\n\n}\n\nexport function findHeaderName(name, headers) {\n name = name.toLowerCase();\n return Object.keys(headers).reduce(function(res, key) {\n if (res) return res;\n if (name == key.toLowerCase()) return key;\n return res;\n }, null);\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/http/Utils.js\n **/","import {fetch, Request, Response, Headers, Promise} from '../core/Externals';\nimport * as utils from './Utils';\n\nexport default class ApiResponse {\n\n static _contentType = 'Content-Type';\n static _jsonContentType = 'application/json';\n static _multipartContentType = 'multipart/mixed';\n static _urlencodedContentType = 'application/x-www-form-urlencoded';\n static _headerSeparator = ':';\n static _bodySeparator = '\\n\\n';\n static _boundarySeparator = '--';\n\n /**\n * @param {Request} request\n * @param {Response} response\n * @param {string} responseText\n */\n constructor(request, response, responseText) {\n\n /** @type {Request} */\n this._request = request;\n\n /** @type {Response} */\n this._response = response;\n\n this._text = responseText;\n this._json = null;\n this._multipart = [];\n\n }\n\n /**\n * @return {Response}\n */\n response() {\n return this._response;\n }\n\n /**\n * @return {Request}\n */\n request() {\n return this._request;\n }\n\n /**\n * @return {boolean}\n */\n ok() {\n return this._response && this._response.ok;\n }\n\n /**\n * @return {string}\n */\n text() {\n if (!this._isJson() && !this._isMultipart()) throw new Error('Response is not text');\n return this._text;\n }\n\n /**\n * @return {object}\n */\n json() {\n if (!this._isJson()) throw new Error('Response is not JSON');\n if (!this._json) {\n this._json = this._text ? JSON.parse(this._text) : null;\n }\n return this._json;\n }\n\n /**\n * @param [skipOKCheck]\n * @return {string}\n */\n error(skipOKCheck) {\n\n if (this.ok() && !skipOKCheck) return null;\n\n var message = (this._response && this._response.status ? this._response.status + ' ' : '') +\n (this._response && this._response.statusText ? this._response.statusText : '');\n\n try {\n\n if (this.json().message) message = this.json().message;\n if (this.json().error_description) message = this.json().error_description;\n if (this.json().description) message = this.json().description;\n\n } catch (e) {}\n\n return message;\n\n }\n\n /**\n * @return {ApiResponse[]}\n */\n multipart() {\n\n if (!this._isMultipart()) throw new Error('Response is not multipart');\n\n if (!this._multipart.length) {\n\n // Step 1. Split multipart response\n\n var text = this.text();\n\n if (!text) throw new Error('No response body');\n\n var boundary = this._getContentType().match(/boundary=([^;]+)/i)[1];\n\n if (!boundary) throw new Error('Cannot find boundary');\n\n var parts = text.toString().split(ApiResponse._boundarySeparator + boundary);\n\n if (parts[0].trim() === '') parts.shift();\n if (parts[parts.length - 1].trim() == ApiResponse._boundarySeparator) parts.pop();\n\n if (parts.length < 1) throw new Error('No parts in body');\n\n // Step 2. Parse status info\n\n var statusInfo = ApiResponse.create(parts.shift(), this._response.status, this._response.statusText).json();\n\n // Step 3. Parse all other parts\n\n this._multipart = parts.map((part:string, i) => {\n\n var status = statusInfo.response[i].status;\n\n return ApiResponse.create(part, status);\n\n });\n\n }\n\n return this._multipart;\n\n }\n\n _isContentType(contentType) {\n return this._getContentType().indexOf(contentType) > -1;\n }\n\n _getContentType() {\n return this._response.headers.get(ApiResponse._contentType) || '';\n }\n\n _isMultipart() {\n return this._isContentType(ApiResponse._multipartContentType);\n }\n\n _isUrlEncoded() {\n return this._isContentType(ApiResponse._urlencodedContentType);\n }\n\n _isJson() {\n return this._isContentType(ApiResponse._jsonContentType);\n }\n\n /**\n * Method is used to create ApiResponse object from string parts of multipart/mixed response\n * @param {string} [text]\n * @param {number} [status]\n * @param {string} [statusText]\n * @return {ApiResponse}\n */\n static create(text, status, statusText) {\n\n text = text || '';\n status = status || 200;\n statusText = statusText || 'OK';\n\n text = text.replace(/\\r/g, '');\n\n var headers = new Headers(),\n headersAndBody = text.split(ApiResponse._bodySeparator),\n headersText = (headersAndBody.length > 1) ? headersAndBody.shift() : '';\n\n text = headersAndBody.join(ApiResponse._bodySeparator);\n\n (headersText || '')\n .split('\\n')\n .forEach((header:string) => {\n\n var split = header.trim().split(ApiResponse._headerSeparator),\n key = split.shift().trim(),\n value = split.join(ApiResponse._headerSeparator).trim();\n\n if (key) headers.append(key, value);\n\n });\n\n return new ApiResponse(null, utils.createResponse(text, {\n headers: headers,\n status: status,\n statusText: statusText\n }), text);\n\n }\n\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/http/ApiResponse.js\n **/","import Registry from './Registry';\nimport {default as HttpClient} from '../http/Client';\n\nexport default class Client extends HttpClient {\n\n constructor() {\n super();\n this._registry = new Registry();\n }\n\n registry() {\n return this._registry;\n }\n\n async _loadResponse(request) {\n\n var mock = this._registry.find(request);\n\n return await mock.getResponse(request);\n\n }\n\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/mocks/ClientMock.js\n **/","import Mock from './Mock';\n\nexport default class Registry {\n\n constructor() {\n this._mocks = [];\n }\n\n add(mock) {\n this._mocks.push(mock);\n return this;\n }\n\n clear() {\n this._mocks = [];\n return this;\n }\n\n find(request) {\n\n //console.log('Registry is looking for', request);\n\n var mock = this._mocks.shift();\n\n if (!mock) throw new Error('No mock in registry for request ' + request.method + ' ' + request.url);\n\n if (!mock.test(request)) throw new Error('Wrong request ' + request.method + ' ' + request.url +\n ' for expected mock ' + mock.method() + ' ' + mock.path());\n\n return mock;\n\n }\n\n apiCall(method:string, path:string, response:any, status, statusText) {\n\n this.add(new Mock(method, path, response, status, statusText));\n\n return this;\n\n }\n\n authentication() {\n\n this.apiCall('POST', '/restapi/oauth/token', {\n 'access_token': 'ACCESS_TOKEN',\n 'token_type': 'bearer',\n 'expires_in': 3600,\n 'refresh_token': 'REFRESH_TOKEN',\n 'refresh_token_expires_in': 60480,\n 'scope': 'SMS RCM Foo Boo',\n 'expireTime': new Date().getTime() + 3600000\n });\n\n return this;\n\n }\n\n logout() {\n\n this.apiCall('POST', '/restapi/oauth/revoke', {});\n\n return this;\n\n }\n\n presenceLoad(id) {\n\n this.apiCall('GET', '/restapi/v1.0/account/~/extension/' + id + '/presence', {\n \"uri\": \"https://platform.ringcentral.com/restapi/v1.0/account/123/extension/\" + id + \"/presence\",\n \"extension\": {\n \"uri\": \"https://platform.ringcentral.com/restapi/v1.0/account/123/extension/\" + id,\n \"id\": id,\n \"extensionNumber\": \"101\"\n },\n \"activeCalls\": [],\n \"presenceStatus\": \"Available\",\n \"telephonyStatus\": \"Ringing\",\n \"userStatus\": \"Available\",\n \"dndStatus\": \"TakeAllCalls\",\n \"extensionId\": id\n });\n\n return this;\n\n }\n\n subscribeGeneric(expiresIn) {\n\n expiresIn = expiresIn || 15 * 60 * 60;\n\n var date = new Date();\n\n this.apiCall('POST', '/restapi/v1.0/subscription', {\n 'eventFilters': [\n '/restapi/v1.0/account/~/extension/~/presence'\n ],\n 'expirationTime': new Date(date.getTime() + (expiresIn * 1000)).toISOString(),\n 'expiresIn': expiresIn,\n 'deliveryMode': {\n 'transportType': 'PubNub',\n 'encryption': false,\n 'address': '123_foo',\n 'subscriberKey': 'sub-c-foo',\n 'secretKey': 'sec-c-bar'\n },\n 'id': 'foo-bar-baz',\n 'creationTime': date.toISOString(),\n 'status': 'Active',\n 'uri': 'https://platform.ringcentral.com/restapi/v1.0/subscription/foo-bar-baz'\n });\n\n return this;\n\n }\n\n subscribeOnPresence(id, detailed) {\n\n id = id || '1';\n\n var date = new Date();\n\n this.apiCall('POST', '/restapi/v1.0/subscription', {\n 'eventFilters': ['/restapi/v1.0/account/~/extension/' + id + '/presence' + (detailed ? '?detailedTelephonyState=true' : '')],\n 'expirationTime': new Date(date.getTime() + (15 * 60 * 60 * 1000)).toISOString(),\n 'deliveryMode': {\n 'transportType': 'PubNub',\n 'encryption': true,\n 'address': '123_foo',\n 'subscriberKey': 'sub-c-foo',\n 'secretKey': 'sec-c-bar',\n 'encryptionAlgorithm': 'AES',\n 'encryptionKey': 'VQwb6EVNcQPBhE/JgFZ2zw=='\n },\n 'creationTime': date.toISOString(),\n 'id': 'foo-bar-baz',\n 'status': 'Active',\n 'uri': 'https://platform.ringcentral.com/restapi/v1.0/subscription/foo-bar-baz'\n });\n\n return this;\n\n }\n\n tokenRefresh(failure) {\n\n if (!failure) {\n\n this.apiCall('POST', '/restapi/oauth/token', {\n 'access_token': 'ACCESS_TOKEN_FROM_REFRESH',\n 'token_type': 'bearer',\n 'expires_in': 3600,\n 'refresh_token': 'REFRESH_TOKEN_FROM_REFRESH',\n 'refresh_token_expires_in': 60480,\n 'scope': 'SMS RCM Foo Boo'\n });\n\n } else {\n\n this.apiCall('POST', '/restapi/oauth/token', {\n 'message': 'Wrong token',\n 'error_description': 'Wrong token',\n 'description': 'Wrong token'\n }, 400);\n\n }\n\n return this;\n\n }\n\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/mocks/Registry.js\n **/","import ApiResponse from '../http/ApiResponse';\nimport {delay} from '../core/Utils';\nimport {createResponse} from '../http/Utils';\n\nexport default class Mock {\n\n constructor(method, path, json, status, statusText, delay) {\n this._method = method.toUpperCase();\n this._path = path;\n this._json = json || {};\n this._delay = delay || 10;\n this._status = status || 200;\n this._statusText = statusText || 'OK';\n }\n\n path() {\n return this._path;\n }\n\n method() {\n return this._method;\n }\n\n test(request:Request) {\n\n return request.url.indexOf(this._path) > -1 &&\n request.method.toUpperCase() == this._method;\n\n }\n\n async getResponse(request) {\n\n await delay(this._delay);\n\n return this.createResponse(this._json);\n\n }\n\n createResponse(json, init) {\n\n init = init || {};\n\n init.status = init.status || this._status;\n init.statusText = init.statusText || this._statusText;\n\n var str = JSON.stringify(json),\n res = createResponse(str, init);\n\n res.headers.set(ApiResponse._contentType, ApiResponse._jsonContentType);\n\n return res;\n\n }\n\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/mocks/Mock.js\n **/","import Observable from '../core/Observable';\nimport Queue from '../core/Queue';\nimport Auth from './Auth';\nimport {Promise} from '../core/Externals';\nimport {queryStringify, parseQueryString, delay} from '../core/Utils';\n\nexport default class Platform extends Observable {\n\n static _urlPrefix = '/restapi';\n static _apiVersion = 'v1.0';\n static _accessTokenTtl = null; // Platform server by default sets it to 60 * 60 = 1 hour\n static _refreshTokenTtl = 10 * 60 * 60; // 10 hours\n static _refreshTokenTtlRemember = 7 * 24 * 60 * 60; // 1 week\n static _tokenEndpoint = '/restapi/oauth/token';\n static _revokeEndpoint = '/restapi/oauth/revoke';\n static _authorizeEndpoint = '/restapi/oauth/authorize';\n static _refreshDelayMs = 100;\n static _cacheId = 'platform';\n static _clearCacheOnRefreshError = true;\n\n events = {\n beforeLogin: 'beforeLogin',\n loginSuccess: 'loginSuccess',\n loginError: 'loginError',\n beforeRefresh: 'beforeRefresh',\n refreshSuccess: 'refreshSuccess',\n refreshError: 'refreshError',\n beforeLogout: 'beforeLogout',\n logoutSuccess: 'logoutSuccess',\n logoutError: 'logoutError'\n };\n\n constructor(client, cache, server, appKey, appSecret) {\n\n super();\n\n this._server = server;\n this._appKey = appKey;\n this._appSecret = appSecret;\n\n /** @type {Cache} */\n this._cache = cache;\n\n /** @type {Client} */\n this._client = client;\n\n this._queue = new Queue(this._cache, Platform._cacheId + '-refresh');\n\n this._auth = new Auth(this._cache, Platform._cacheId);\n\n }\n\n /**\n * @return {Auth}\n */\n auth() {\n return this._auth;\n }\n\n /**\n * @return {Client}\n */\n client() {\n return this._client;\n }\n\n /**\n * @param {string} path\n * @param {object} [options]\n * @param {boolean} [options.addServer]\n * @param {string} [options.addMethod]\n * @param {boolean} [options.addToken]\n * @return {string}\n */\n createUrl(path, options) {\n\n path = path || '';\n options = options || {};\n\n var builtUrl = '',\n hasHttp = path.indexOf('http://') != -1 || path.indexOf('https://') != -1;\n\n if (options.addServer && !hasHttp) builtUrl += this._server;\n\n if (path.indexOf(Platform._urlPrefix) == -1 && !hasHttp) builtUrl += Platform._urlPrefix + '/' + Platform._apiVersion;\n\n builtUrl += path;\n\n if (options.addMethod || options.addToken) builtUrl += (path.indexOf('?') > -1 ? '&' : '?');\n\n if (options.addMethod) builtUrl += '_method=' + options.addMethod;\n if (options.addToken) builtUrl += (options.addMethod ? '&' : '') + 'access_token=' + this._auth.accessToken();\n\n return builtUrl;\n\n }\n\n /**\n * @param {string} options.redirectUri\n * @param {string} options.state\n * @param {string} options.brandId\n * @param {string} options.display\n * @param {string} options.prompt\n * @return {string}\n */\n authUrl(options) {\n\n options = options || {};\n\n return this.createUrl(Platform._authorizeEndpoint + '?' + queryStringify({\n 'response_type': 'code',\n 'redirect_uri': options.redirectUri || '',\n 'client_id': this._appKey,\n 'state': options.state || '',\n 'brand_id': options.brandId || '',\n 'display': options.display || '',\n 'prompt': options.prompt || ''\n }), {addServer: true})\n\n }\n\n /**\n * @param {string} url\n * @return {Object}\n */\n parseAuthRedirectUrl(url:string) {\n\n var qs = parseQueryString(url.split('?').reverse()[0]),\n error = qs.error_description || qs.error;\n\n if (error) {\n var e = new Error(error);\n e.error = qs.error;\n throw e;\n }\n\n return qs;\n\n }\n\n /**\n * @return {Promise}\n */\n async loggedIn() {\n\n try {\n await this._ensureAuthentication();\n return true;\n } catch (e) {\n return false;\n }\n\n }\n\n /**\n * @param {string} options.username\n * @param {string} options.password\n * @param {string} options.extension\n * @param {string} options.code\n * @param {string} options.redirectUri\n * @param {string} options.endpointId\n * @returns {Promise}\n */\n async login(options) {\n\n try {\n\n options = options || {};\n\n options.remember = options.remember || false;\n\n this.emit(this.events.beforeLogin);\n\n var body = {\n \"access_token_ttl\": Platform._accessTokenTtl,\n \"refresh_token_ttl\": options.remember ? Platform._refreshTokenTtlRemember : Platform._refreshTokenTtl\n };\n\n if (!options.code) {\n\n body.grant_type = 'password';\n body.username = options.username;\n body.password = options.password;\n body.extension = options.extension || '';\n\n } else if (options.code) {\n\n body.grant_type = 'authorization_code';\n body.code = options.code;\n body.redirect_uri = options.redirectUri;\n //body.client_id = this.getCredentials().key; // not needed\n\n }\n\n if (options.endpointId) body.endpoint_id = options.endpointId;\n\n var apiResponse = await this._tokenRequest(Platform._tokenEndpoint, body),\n json = apiResponse.json();\n\n this._auth\n .setData(json)\n .setRemember(options.remember);\n\n this.emit(this.events.loginSuccess, apiResponse);\n\n return apiResponse;\n\n } catch (e) {\n\n this._cache.clean();\n\n this.emit(this.events.loginError, e);\n\n throw e;\n\n }\n\n }\n\n /**\n * @returns {Promise}\n */\n async refresh() {\n\n try {\n\n this.emit(this.events.beforeRefresh);\n\n if (this._queue.isPaused()) {\n\n await this._queue.poll();\n\n if (!this._isAccessTokenValid()) {\n throw new Error('Automatic authentification timeout');\n }\n\n this.emit(this.events.refreshSuccess, null);\n\n return null;\n\n }\n\n this._queue.pause();\n\n // Make sure all existing AJAX calls had a chance to reach the server\n await delay(Platform._refreshDelayMs);\n\n // Perform sanity checks\n if (!this._auth.refreshToken()) throw new Error('Refresh token is missing');\n if (!this._auth.refreshTokenValid()) throw new Error('Refresh token has expired');\n if (!this._queue.isPaused()) throw new Error('Queue was resumed before refresh call');\n\n /** @type {ApiResponse} */\n var res = await this._tokenRequest(Platform._tokenEndpoint, {\n \"grant_type\": \"refresh_token\",\n \"refresh_token\": this._auth.refreshToken(),\n \"access_token_ttl\": Platform._accessTokenTtl,\n \"refresh_token_ttl\": this._auth.remember() ? Platform._refreshTokenTtlRemember : Platform._refreshTokenTtl\n }),\n json = res.json();\n\n if (!json.access_token) {\n throw this._client.makeError(new Error('Malformed OAuth response'), res);\n }\n\n this._auth.setData(json);\n this._queue.resume();\n\n this.emit(this.events.refreshSuccess, res);\n\n return res;\n\n } catch (e) {\n\n e = this._client.makeError(e);\n\n if (Platform._clearCacheOnRefreshError) {\n this._cache.clean();\n }\n\n this.emit(this.events.refreshError, e);\n\n throw e;\n\n }\n\n }\n\n /**\n * @returns {Promise}\n */\n async logout() {\n\n try {\n\n this.emit(this.events.beforeLogout);\n\n this._queue.pause();\n\n var res = await this._tokenRequest(Platform._revokeEndpoint, {\n token: this._auth.accessToken()\n });\n\n this._queue.resume();\n this._cache.clean();\n\n this.emit(this.events.logoutSuccess, res);\n\n return res;\n\n } catch (e) {\n\n this._queue.resume();\n\n this.emit(this.events.logoutError, e);\n\n throw e;\n\n }\n\n }\n\n /**\n * @param {Request} request\n * @param {object} [options]\n * @param {boolean} [options.skipAuthCheck]\n * @return {Promise}\n */\n async inflateRequest(request, options) {\n\n options = options || {};\n\n if (options.skipAuthCheck) return request;\n\n await this._ensureAuthentication();\n\n request.headers.set('Authorization', this._authHeader());\n //request.url = this.createUrl(request.url, {addServer: true}); //FIXME Spec prevents this...\n\n //TODO Add User-Agent here\n\n return request;\n\n }\n\n /**\n * @param {Request} request\n * @param {object} [options]\n * @param {boolean} [options.skipAuthCheck]\n * @return {Promise}\n */\n async sendRequest(request, options) {\n\n try {\n\n request = await this.inflateRequest(request, options);\n\n return (await this._client.sendRequest(request));\n\n } catch (e) {\n\n // Guard is for errors that come from polling\n if (!e.apiResponse || !e.apiResponse.response() || (e.apiResponse.response().status != 401)) throw e;\n\n this._auth.cancelAccessToken();\n\n return (await this.sendRequest(request, options));\n\n }\n\n }\n\n /**\n * General purpose function to send anything to server\n * @param {string} options.url\n * @param {object} [options.body]\n * @param {string} [options.method]\n * @param {object} [options.query]\n * @param {object} [options.headers]\n * @param {boolean} [options.skipAuthCheck]\n * @return {Promise}\n */\n async send(options = {}) {\n\n //FIXME https://github.com/bitinn/node-fetch/issues/43\n options.url = this.createUrl(options.url, {addServer: true});\n\n return await this.sendRequest(this._client.createRequest(options), options);\n\n }\n\n /**\n * @param {string} url\n * @param {object} [query]\n * @param {object} [options]\n * @param {object} [options.headers]\n * @param {boolean} [options.skipAuthCheck]\n * @return {Promise}\n */\n async get(url, query, options) {\n options = options || {};\n options.method = 'GET';\n options.url = url;\n options.query = query;\n return await this.send(options);\n }\n\n /**\n * @param {string} url\n * @param {object} body\n * @param {object} [query]\n * @param {object} [options]\n * @param {object} [options.headers]\n * @param {boolean} [options.skipAuthCheck]\n * @return {Promise}\n */\n async post(url, body, query, options) {\n options = options || {};\n options.method = 'POST';\n options.url = url;\n options.query = query;\n options.body = body;\n return await this.send(options);\n }\n\n /**\n * @param {string} url\n * @param {object} [body]\n * @param {object} [query]\n * @param {object} [options]\n * @param {object} [options.headers]\n * @param {boolean} [options.skipAuthCheck]\n * @return {Promise}\n */\n async put(url, body, query, options) {\n options = options || {};\n options.method = 'PUT';\n options.url = url;\n options.query = query;\n options.body = body;\n return await this.send(options);\n }\n\n /**\n * @param {string} url\n * @param {string} [query]\n * @param {object} [options]\n * @param {object} [options.headers]\n * @param {boolean} [options.skipAuthCheck]\n * @return {Promise}\n */\n async 'delete'(url, query, options) {\n options = options || {};\n options.method = 'DELETE';\n options.url = url;\n options.query = query;\n return await this.send(options);\n }\n\n async _tokenRequest(path, body) {\n\n return await this.send({\n url: path,\n skipAuthCheck: true,\n body: body,\n method: 'POST',\n headers: {\n 'Authorization': 'Basic ' + this._apiKey(),\n 'Content-Type': 'application/x-www-form-urlencoded'\n }\n });\n\n }\n\n async _ensureAuthentication() {\n\n if (this._isAccessTokenValid()) return null;\n return await this.refresh();\n\n }\n\n _isAccessTokenValid() {\n\n return (this._auth.accessTokenValid() && !this._queue.isPaused());\n\n }\n\n _apiKey() {\n var apiKey = this._appKey + ':' + this._appSecret;\n return (typeof btoa == 'function') ? btoa(apiKey) : new Buffer(apiKey).toString('base64');\n }\n\n _authHeader() {\n var token = this._auth.accessToken();\n return this._auth.tokenType() + (token ? ' ' + token : '');\n }\n\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/platform/Platform.js\n **/","export default class Auth {\n\n static refreshHandicapMs:number = 60 * 1000; // 1 minute\n static forcedTokenType = 'forced';\n\n constructor(cache, cacheId:string) {\n\n /** @type {Cache} */\n this._cache = cache;\n this._cacheId = cacheId;\n\n }\n\n accessToken() {\n return this.data().access_token;\n }\n\n refreshToken() {\n return this.data().refresh_token;\n }\n\n tokenType() {\n return this.data().token_type;\n }\n\n /**\n * @return {{token_type: string, access_token: string, expires_in: number, refresh_token: string, refresh_token_expires_in: number}}\n */\n data() {\n\n return this._cache.getItem(this._cacheId) || {\n token_type: '',\n access_token: '',\n expires_in: 0,\n refresh_token: '',\n refresh_token_expires_in: 0\n };\n\n }\n\n /**\n * @param {object} newData\n * @return {Auth}\n */\n setData(newData) {\n\n newData = newData || {};\n\n var data = this.data();\n\n Object.keys(newData).forEach((key) => {\n data[key] = newData[key];\n });\n\n data.expire_time = Date.now() + (data.expires_in * 1000);\n data.refresh_token_expire_time = Date.now() + (data.refresh_token_expires_in * 1000);\n\n this._cache.setItem(this._cacheId, data);\n\n return this;\n\n }\n\n /**\n * Check if there is a valid (not expired) access token\n * @return {boolean}\n */\n accessTokenValid() {\n\n var authData = this.data();\n return (authData.token_type === Auth.forcedTokenType || (authData.expire_time - Auth.refreshHandicapMs > Date.now()));\n\n }\n\n /**\n * Check if there is a valid (not expired) access token\n * @return {boolean}\n */\n refreshTokenValid() {\n\n return (this.data().refresh_token_expire_time > Date.now());\n\n }\n\n /**\n * @return {Auth}\n */\n cancelAccessToken() {\n\n return this.setData({\n access_token: '',\n expires_in: 0\n });\n\n }\n\n /**\n * This method sets a special authentication mode used in Service Web\n * @return {Auth}\n */\n forceAuthentication() {\n\n this.setData({\n token_type: Auth.forcedTokenType,\n access_token: '',\n expires_in: 0,\n refresh_token: '',\n refresh_token_expires_in: 0\n });\n\n return this;\n\n }\n\n /**\n * @param remember\n * @return {Auth}\n */\n setRemember(remember) {\n\n return this.setData({remember: remember});\n\n }\n\n /**\n * @return {boolean}\n */\n remember() {\n\n return !!this.data().remember;\n\n }\n\n}\n\n//export interface IAuthData {\n// remember?:boolean;\n// token_type?:string;\n// access_token?:string;\n// expires_in?:number; // actually it's string\n// expire_time?:number;\n// refresh_token?:string;\n// refresh_token_expires_in?:number; // actually it's string\n// refresh_token_expire_time?:number;\n// scope?:string;\n//}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/platform/Auth.js\n **/","import PubnubMock from './PubnubMock.js';\nimport {PUBNUB} from '../core/Externals';\n\nexport default class PubnubMockFactory {\n\n constructor() {\n this.crypto_obj = PUBNUB.crypto_obj;\n }\n\n init(options:PUBNUBInitOptions) {\n return new PubnubMock(options);\n }\n\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/pubnub/PubnubFactory.js\n **/","import Observable from '../core/Observable';\nimport {PUBNUB} from '../core/Externals';\n\nexport default class PubnubMock extends Observable {\n\n constructor(options) {\n super();\n this.options = options;\n this.crypto_obj = PUBNUB.crypto_obj;\n }\n\n ready() {}\n\n subscribe(options:PUBNUBSubscribeOptions) {\n this.on('message-' + options.channel, options.message);\n }\n\n unsubscribe(options:PUBNUBUnsubscribeOptions) {\n this.off('message-' + options.channel);\n }\n\n receiveMessage(msg, channel) {\n this.emit('message-' + channel, msg, 'env', channel);\n }\n\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/pubnub/PubnubMock.js\n **/","import Observable from '../core/Observable';\nimport Client from '../http/Client';\nimport {poll, stopPolling, delay} from '../core/Utils';\n\nexport default class Subscription extends Observable {\n\n static _renewHandicapMs = 2 * 60 * 1000;\n static _pollInterval = 10 * 1000;\n\n events = {\n notification: 'notification',\n removeSuccess: 'removeSuccess',\n removeError: 'removeError',\n renewSuccess: 'renewSuccess',\n renewError: 'renewError',\n subscribeSuccess: 'subscribeSuccess',\n subscribeError: 'subscribeError'\n };\n\n constructor(pubnubFactory, platform) {\n\n super();\n\n this._pubnubFactory = pubnubFactory;\n this._platform = platform;\n this._pubnub = null;\n this._timeout = null;\n this._subscription = {};\n\n }\n\n subscribed(){\n\n return !!(this._subscription.id &&\n this._subscription.deliveryMode &&\n this._subscription.deliveryMode.subscriberKey &&\n this._subscription.deliveryMode.address);\n\n }\n\n /**\n * @return {boolean}\n */\n alive() {\n\n return this.subscribed() && Date.now() < this.expirationTime();\n\n }\n\n expirationTime() {\n return new Date(this._subscription.expirationTime || 0).getTime() - Subscription._renewHandicapMs;\n }\n\n setSubscription(subscription) {\n\n subscription = subscription || {};\n\n this._clearTimeout();\n\n this._subscription = subscription;\n\n if (!this._pubnub) this._subscribeAtPubnub();\n\n this._setTimeout();\n\n return this;\n\n }\n\n subscription() {\n return this._subscription;\n }\n\n /**\n * Creates or updates subscription if there is an active one\n * @returns {Promise}\n */\n async register() {\n\n if (this.alive()) {\n return await this.renew();\n } else {\n return await this.subscribe();\n }\n\n }\n\n eventFilters() {\n return this._subscription.eventFilters || [];\n }\n\n /**\n * @param {string[]} events\n * @return {Subscription}\n */\n addEventFilters(events) {\n this.setEventFilters(this.eventFilters().concat(events));\n return this;\n }\n\n /**\n * @param {string[]} events\n * @return {Subscription}\n */\n setEventFilters(events) {\n this._subscription.eventFilters = events;\n return this;\n }\n\n /**\n * @returns {Promise}\n */\n async subscribe() {\n\n try {\n\n this._clearTimeout();\n\n if (!this.eventFilters().length) throw new Error('Events are undefined');\n\n var response = await this._platform.post('/restapi/v1.0/subscription', {\n eventFilters: this._getFullEventFilters(),\n deliveryMode: {\n transportType: 'PubNub'\n }\n }),\n json = response.json();\n\n this.setSubscription(json)\n .emit(this.events.subscribeSuccess, response);\n\n return response;\n\n\n } catch (e) {\n\n e = this._platform.client().makeError(e);\n\n this.reset()\n .emit(this.events.subscribeError, e);\n\n throw e;\n\n }\n\n }\n\n /**\n * @returns {Promise}\n */\n async renew() {\n\n try {\n\n this._clearTimeout();\n\n if (!this.alive()) throw new Error('Subscription is not alive');\n\n if (!this.eventFilters().length) throw new Error('Events are undefined');\n\n var response = await this._platform.put('/restapi/v1.0/subscription/' + this._subscription.id, {\n eventFilters: this._getFullEventFilters()\n });\n\n var json = response.json();\n\n this.setSubscription(json)\n .emit(this.events.renewSuccess, response);\n\n return response;\n\n } catch (e) {\n\n e = this._platform.client().makeError(e);\n\n this.reset()\n .emit(this.events.renewError, e);\n\n throw e;\n\n }\n\n }\n\n /**\n * @returns {Promise}\n */\n async remove() {\n\n try {\n\n if (!this.subscribed()) throw new Error('No subscription');\n\n var response = await this._platform.delete('/restapi/v1.0/subscription/' + this._subscription.id);\n\n this.reset()\n .emit(this.events.removeSuccess, response);\n\n return response;\n\n } catch (e) {\n\n e = this._platform.client().makeError(e);\n\n this.emit(this.events.removeError, e);\n\n throw e;\n\n }\n\n }\n\n /**\n * @returns {Promise}\n */\n resubscribe() {\n\n return this.reset().setEventFilters(this.eventFilters()).subscribe();\n\n }\n\n /**\n * Remove subscription and disconnect from PUBNUB\n * This method resets subscription at client side but backend is not notified\n */\n reset() {\n this._clearTimeout();\n if (this.subscribed() && this._pubnub) this._pubnub.unsubscribe({channel: this._subscription.deliveryMode.address});\n this._subscription = {};\n return this;\n }\n\n _getFullEventFilters() {\n\n return this.eventFilters().map((event) => {\n return this._platform.createUrl(event);\n });\n\n }\n\n _setTimeout() {\n\n this._clearTimeout();\n\n if (!this.alive()) throw new Error('Subscription is not alive');\n\n poll((next)=> {\n\n if (this.alive()) return next();\n\n this.renew();\n\n }, Subscription._pollInterval, this._timeout);\n\n return this;\n\n }\n\n _clearTimeout() {\n\n stopPolling(this._timeout);\n\n return this;\n\n }\n\n _decrypt(message:any) {\n\n if (!this.subscribed()) throw new Error('No subscription');\n\n if (this._subscription.deliveryMode.encryptionKey) {\n\n var PUBNUB = this._pubnubFactory;\n\n message = PUBNUB.crypto_obj.decrypt(message, this._subscription.deliveryMode.encryptionKey, {\n encryptKey: false,\n keyEncoding: 'base64',\n keyLength: 128,\n mode: 'ecb'\n });\n\n }\n\n return message;\n\n }\n\n _notify(message:any) {\n\n this.emit(this.events.notification, this._decrypt(message));\n\n return this;\n\n }\n\n _subscribeAtPubnub():Subscription {\n\n if (!this.alive()) throw new Error('Subscription is not alive');\n\n var PUBNUB = this._pubnubFactory;\n\n this._pubnub = PUBNUB.init({\n ssl: true,\n subscribe_key: this._subscription.deliveryMode.subscriberKey\n });\n\n this._pubnub.ready();\n\n this._pubnub.subscribe({\n channel: this._subscription.deliveryMode.address,\n message: this._notify.bind(this),\n connect: () => {}\n });\n\n return this;\n\n }\n\n}\n\n//export interface ISubscription {\n// id?:string;\n// uri?: string;\n// eventFilters?:string[];\n// expirationTime?:string; // 2014-03-12T19:54:35.613Z\n// expiresIn?:number;\n// deliveryMode?: {\n// transportType?:string;\n// encryption?:boolean;\n// address?:string;\n// subscriberKey?:string;\n// encryptionKey?:string;\n// secretKey?:string;\n// };\n// creationTime?:string; // 2014-03-12T19:54:35.613Z\n// status?:string; // Active\n//}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/subscription/Subscription.js\n **/","import Subscription from './Subscription';\nimport Queue from '../core/Queue';\n\nexport default class CachedSubscription extends Subscription {\n\n constructor(pubnubFactory, platform, cache, cacheKey) {\n\n super(pubnubFactory, platform);\n\n this._cache = cache;\n this._cacheKey = cacheKey;\n this._renewQueue = new Queue(this._cache, cacheKey + '-renew');\n this._resubscribeQueue = new Queue(this._cache, cacheKey + '-resubscribe');\n\n this.events = {\n ...this.events,\n queuedRenewSuccess: 'queuedRenewSuccess',\n queuedRenewError: 'queuedRenewError',\n queuedResubscribeSuccess: 'queuedResubscribeSuccess',\n queuedResubscribeError: 'queuedResubscribeError'\n };\n\n this.on(this.events.renewError, () => {\n this.resubscribe();\n });\n\n this.on([this.events.subscribeSuccess, this.events.renewSuccess], () => {\n this._cache.setItem(this._cacheKey, this.subscription());\n });\n\n this.on(this.events.removeSuccess, () => {\n this._cache.removeItem(this._cacheKey);\n });\n\n }\n\n /**\n * TODO Combine with Platform.refresh and move elsewhere\n * @param actionCb\n * @param queue\n * @param successEvent\n * @param errorEvent\n * @param errorMessage\n * @return {*}\n * @private\n */\n async _queue(actionCb, queue, successEvent, errorEvent, errorMessage) {\n\n try {\n\n if (queue.isPaused()) {\n\n await queue.poll();\n\n if (!this.alive()) {\n throw new Error(errorMessage);\n }\n\n this.emit(successEvent, null);\n\n return null;\n\n }\n\n queue.pause();\n\n var res = await actionCb.call(this);\n\n queue.resume();\n\n this.emit(successEvent, res);\n\n return res;\n\n } catch (e) {\n\n this.emit(errorEvent, e);\n\n throw e;\n\n }\n\n }\n\n /**\n * @returns {Promise}\n */\n renew() {\n\n return this._queue(\n super.renew,\n this._renewQueue,\n this.events.queuedRenewSuccess,\n this.events.queuedRenewError,\n 'Subscription is not alive after renew timeout'\n );\n\n }\n\n /**\n * @returns {Promise}\n */\n resubscribe() {\n\n return this._queue(\n super.resubscribe,\n this._resubscribeQueue,\n this.events.queuedResubscribeSuccess,\n this.events.queuedResubscribeError,\n 'Subscription is not alive after resubscribe timeout'\n );\n\n }\n\n /**\n * @param {string[]} events\n * @return {CachedSubscription}\n */\n restore(events) {\n\n var cachedSubscriptionData = this._cache.getItem(this._cacheKey);\n\n if (cachedSubscriptionData) {\n try {\n this.setSubscription(cachedSubscriptionData);\n } catch (e) {}\n } else {\n this.setEventFilters(events);\n }\n\n return this;\n\n }\n\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/subscription/CachedSubscription.js\n **/","/**\n * Copyright (c) 2014, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * https://raw.github.com/facebook/regenerator/master/LICENSE file. An\n * additional grant of patent rights can be found in the PATENTS file in\n * the same directory.\n */\n\n!(function(global) {\n \"use strict\";\n\n var hasOwn = Object.prototype.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var iteratorSymbol =\n typeof Symbol === \"function\" && Symbol.iterator || \"@@iterator\";\n\n var inModule = typeof module === \"object\";\n var runtime = global.regeneratorRuntime;\n if (runtime) {\n if (inModule) {\n // If regeneratorRuntime is defined globally and we're in a module,\n // make the exports object identical to regeneratorRuntime.\n module.exports = runtime;\n }\n // Don't bother evaluating the rest of this file if the runtime was\n // already defined globally.\n return;\n }\n\n // Define the runtime globally (as expected by generated code) as either\n // module.exports (if we're in a module) or a new, empty object.\n runtime = global.regeneratorRuntime = inModule ? module.exports : {};\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided, then outerFn.prototype instanceof Generator.\n var generator = Object.create((outerFn || Generator).prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n runtime.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype;\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunction.displayName = \"GeneratorFunction\";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n runtime.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n runtime.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `value instanceof AwaitArgument` to determine if the yielded value is\n // meant to be awaited. Some may consider the name of this method too\n // cutesy, but they are curmudgeons.\n runtime.awrap = function(arg) {\n return new AwaitArgument(arg);\n };\n\n function AwaitArgument(arg) {\n this.arg = arg;\n }\n\n function AsyncIterator(generator) {\n // This invoke function is written in a style that assumes some\n // calling function (or Promise) will handle exceptions.\n function invoke(method, arg) {\n var result = generator[method](arg);\n var value = result.value;\n return value instanceof AwaitArgument\n ? Promise.resolve(value.arg).then(invokeNext, invokeThrow)\n : Promise.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration. If the Promise is rejected, however, the\n // result for this iteration will be rejected with the same\n // reason. Note that rejections of yielded Promises are not\n // thrown back into the generator function, as is the case\n // when an awaited Promise is rejected. This difference in\n // behavior between yield and await is important, because it\n // allows the consumer to decide what to do with the yielded\n // rejection (swallow it and continue, manually .throw it back\n // into the generator, abandon iteration, whatever). With\n // await, by contrast, there is no opportunity to examine the\n // rejection reason outside the generator function, so the\n // only option is to throw it from the await expression, and\n // let the generator function handle the exception.\n result.value = unwrapped;\n return result;\n });\n }\n\n if (typeof process === \"object\" && process.domain) {\n invoke = process.domain.bind(invoke);\n }\n\n var invokeNext = invoke.bind(generator, \"next\");\n var invokeThrow = invoke.bind(generator, \"throw\");\n var invokeReturn = invoke.bind(generator, \"return\");\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return invoke(method, arg);\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : new Promise(function (resolve) {\n resolve(callInvokeWithMethodAndArg());\n });\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n runtime.async = function(innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList)\n );\n\n return runtime.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n if (method === \"return\" ||\n (method === \"throw\" && delegate.iterator[method] === undefined)) {\n // A return or throw (when the delegate iterator has no throw\n // method) always terminates the yield* loop.\n context.delegate = null;\n\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n var returnMethod = delegate.iterator[\"return\"];\n if (returnMethod) {\n var record = tryCatch(returnMethod, delegate.iterator, arg);\n if (record.type === \"throw\") {\n // If the return method threw an exception, let that\n // exception prevail over the original return or throw.\n method = \"throw\";\n arg = record.arg;\n continue;\n }\n }\n\n if (method === \"return\") {\n // Continue with the outer return, now that the delegate\n // iterator has been terminated.\n continue;\n }\n }\n\n var record = tryCatch(\n delegate.iterator[method],\n delegate.iterator,\n arg\n );\n\n if (record.type === \"throw\") {\n context.delegate = null;\n\n // Like returning generator.throw(uncaught), but without the\n // overhead of an extra function call.\n method = \"throw\";\n arg = record.arg;\n continue;\n }\n\n // Delegate generator ran and handled its own exceptions so\n // regardless of what the method was, we continue as if it is\n // \"next\" with an undefined arg.\n method = \"next\";\n arg = undefined;\n\n var info = record.arg;\n if (info.done) {\n context[delegate.resultName] = info.value;\n context.next = delegate.nextLoc;\n } else {\n state = GenStateSuspendedYield;\n return info;\n }\n\n context.delegate = null;\n }\n\n if (method === \"next\") {\n if (state === GenStateSuspendedYield) {\n context.sent = arg;\n } else {\n context.sent = undefined;\n }\n\n } else if (method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw arg;\n }\n\n if (context.dispatchException(arg)) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n method = \"next\";\n arg = undefined;\n }\n\n } else if (method === \"return\") {\n context.abrupt(\"return\", arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n var info = {\n value: record.arg,\n done: context.done\n };\n\n if (record.arg === ContinueSentinel) {\n if (context.delegate && method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n arg = undefined;\n }\n } else {\n return info;\n }\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(arg) call above.\n method = \"throw\";\n arg = record.arg;\n }\n }\n };\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n runtime.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n runtime.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n this.sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n return !!caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.next = finallyEntry.finallyLoc;\n } else {\n this.complete(record);\n }\n\n return ContinueSentinel;\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = record.arg;\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n return ContinueSentinel;\n }\n };\n})(\n // Among the various tricks for obtaining a reference to the global\n // object, this seems to be the most reliable technique that does not\n // use indirect eval (which violates Content Security Policy).\n typeof global === \"object\" ? global :\n typeof window === \"object\" ? window :\n typeof self === \"object\" ? self : this\n);\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/regenerator/runtime.js\n ** module id = 22\n ** module chunks = 0\n **/"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","ringcentral.js","webpack:/webpack/bootstrap 5bfcaff1f71afd7618c8","webpack:///src/SDK.js","webpack:///src/core/Utils.js","webpack:///src/core/Externals.js","webpack:/external {\"commonjs\":\"es6-promise\",\"commonjs2\":\"es6-promise\"}","webpack:/external {\"commonjs\":\"node-fetch\",\"commonjs2\":\"node-fetch\"}","webpack:/external {\"commonjs\":\"pubnub\",\"commonjs2\":\"pubnub\",\"amd\":\"pubnub\"}","webpack:///src/core/Cache.js","webpack:///src/core/Observable.js","webpack:///src/core/Queue.js","webpack:///src/http/Client.js","webpack:///src/http/Utils.js","webpack:///src/http/ApiResponse.js","webpack:///src/mocks/ClientMock.js","webpack:///src/mocks/Registry.js","webpack:///src/mocks/Mock.js","webpack:///src/platform/Platform.js","webpack:///src/platform/Auth.js","webpack:///src/pubnub/PubnubFactory.js","webpack:///src/pubnub/PubnubMock.js","webpack:///src/subscription/Subscription.js","webpack:///src/subscription/CachedSubscription.js","webpack:///~/regenerator/runtime.js"],"names":["root","factory","exports","module","require","define","amd","undefined","this","__WEBPACK_EXTERNAL_MODULE_4__","__WEBPACK_EXTERNAL_MODULE_5__","__WEBPACK_EXTERNAL_MODULE_6__","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","_interopRequireDefault","obj","__esModule","default","_interopRequireWildcard","newObj","key","Object","prototype","hasOwnProperty","_classCallCheck","instance","Constructor","TypeError","_createClass","defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","defineProperty","protoProps","staticProps","_coreUtils","Utils","_coreCache","_coreCache2","_coreExternals","Externals","_coreObservable","_coreObservable2","_coreQueue","_coreQueue2","_httpClient","_httpClient2","_httpApiResponse","_httpApiResponse2","_httpUtils","HttpUtils","_mocksClientMock","_mocksClientMock2","_mocksMock","_mocksMock2","_mocksRegistry","_mocksRegistry2","_platformPlatform","_platformPlatform2","_platformAuth","_platformAuth2","_pubnubPubnubFactory","_pubnubPubnubFactory2","_subscriptionSubscription","_subscriptionSubscription2","_subscriptionCachedSubscription","_subscriptionCachedSubscription2","SDK","options","_cache","localStorage","cachePrefix","_client","client","_platform","server","appKey","appSecret","_pubnubFactory","pubnubFactory","PUBNUB","value","sandbox","production","platform","createSubscription","createCachedSubscription","cacheKey","cache","Cache","Observable","Queue","Client","ApiResponse","Auth","Platform","Subscription","Registry","Mock","PubnubMockFactory","queryStringify","parameters","array","keys","forEach","k","v","isArray","vv","push","encodeURIComponent","join","parseQueryString","queryString","argsParsed","split","arg","decodeURIComponent","indexOf","trim","pair","isFunction","Array","poll","fn","interval","timeout","stopPolling","next","delay","setTimeout","clearTimeout","isNodeJS","process","isBrowser","window","_ExternalsJs","Promise","resolve","reject","_es6Promise","_es6Promise2","_nodeFetch","_nodeFetch2","_pubnub","_pubnub2","Function","fetch","Request","Response","Headers","storage","prefix","setPrefix","_storage","_prefix","defaultPrefix","setItem","data","_prefixKey","JSON","stringify","removeItem","getItem","item","parse","clean","off","hasListeners","event","_listeners","on","events","callback","_this","Error","emit","_this2","_len","arguments","args","_key","result","some","apply","_this3","cb","_Utils","cacheId","_cacheId","_promise","isPaused","time","Date","now","parseInt","_releaseTimeout","pause","resume","_pollInterval","_inherits","subClass","superClass","create","constructor","setPrototypeOf","__proto__","_ApiResponse","_ApiResponse2","_Observable","beforeRequest","requestSuccess","requestError","sendRequest","request","apiResponse","regeneratorRuntime","async","context$2$0","prev","awrap","_loadResponse","_response","sent","_isMultipart","_isJson","response","text","_text","ok","abrupt","t0","makeError","stop","e","originalMessage","message","error","createRequest","init","headers","url","method","_allowedMethods","credentials","mode","query","findHeaderName","_jsonContentType","body","contentTypeHeaderName","_contentType","contentType","_urlencodedContentType","req","originalBody","createResponse","stringBody","utils","_decode","name","toLowerCase","reduce","res","responseText","_request","_json","_multipart","json","skipOKCheck","status","statusText","error_description","description","multipart","boundary","_getContentType","match","parts","toString","_boundarySeparator","shift","pop","statusInfo","map","part","_isContentType","get","_multipartContentType","_isUrlEncoded","replace","headersAndBody","_bodySeparator","headersText","header","_headerSeparator","append","_Registry","_Registry2","_HttpClient","_registry","registry","mock","find","getResponse","_Mock","_Mock2","_mocks","add","clear","test","path","apiCall","authentication","access_token","token_type","expires_in","refresh_token","refresh_token_expires_in","scope","expireTime","getTime","logout","presenceLoad","uri","extension","extensionNumber","activeCalls","presenceStatus","telephonyStatus","userStatus","dndStatus","extensionId","subscribeGeneric","expiresIn","date","eventFilters","expirationTime","toISOString","deliveryMode","transportType","encryption","address","subscriberKey","secretKey","creationTime","subscribeOnPresence","detailed","encryptionAlgorithm","encryptionKey","tokenRefresh","failure","_method","toUpperCase","_path","_delay","_status","_statusText","str","set","_Auth","_Auth2","beforeLogin","loginSuccess","loginError","beforeRefresh","refreshSuccess","refreshError","beforeLogout","logoutSuccess","logoutError","_server","_appKey","_appSecret","_queue","_auth","auth","createUrl","builtUrl","hasHttp","addServer","_urlPrefix","_apiVersion","addMethod","addToken","accessToken","authUrl","_authorizeEndpoint","response_type","redirect_uri","redirectUri","client_id","state","brand_id","brandId","display","prompt","parseAuthRedirectUrl","qs","reverse","loggedIn","_ensureAuthentication","login","remember","access_token_ttl","_accessTokenTtl","refresh_token_ttl","_refreshTokenTtlRemember","_refreshTokenTtl","code","grant_type","username","password","endpointId","endpoint_id","_tokenRequest","_tokenEndpoint","setData","setRemember","refresh","_isAccessTokenValid","_refreshDelayMs","refreshToken","refreshTokenValid","_clearCacheOnRefreshError","_revokeEndpoint","token","inflateRequest","skipAuthCheck","_authHeader","cancelAccessToken","send","post","put","Authorization","_apiKey","Content-Type","accessTokenValid","apiKey","btoa","Buffer","tokenType","newData","expire_time","refresh_token_expire_time","authData","forcedTokenType","refreshHandicapMs","forceAuthentication","_PubnubMockJs","_PubnubMockJs2","crypto_obj","PubnubMock","ready","subscribe","channel","unsubscribe","receiveMessage","msg","notification","removeSuccess","removeError","renewSuccess","renewError","subscribeSuccess","subscribeError","_timeout","_subscription","subscribed","alive","_renewHandicapMs","setSubscription","subscription","_clearTimeout","_subscribeAtPubnub","_setTimeout","register","renew","addEventFilters","setEventFilters","concat","_getFullEventFilters","reset","remove","resubscribe","_decrypt","decrypt","encryptKey","keyEncoding","keyLength","_notify","ssl","subscribe_key","bind","connect","_extends","assign","source","_Subscription2","_Subscription3","CachedSubscription","_Subscription","_cacheKey","_renewQueue","_resubscribeQueue","queuedRenewSuccess","queuedRenewError","queuedResubscribeSuccess","queuedResubscribeError","actionCb","queue","successEvent","errorEvent","errorMessage","restore","cachedSubscriptionData","global","wrap","innerFn","outerFn","self","tryLocsList","generator","Generator","context","Context","_invoke","makeInvokeMethod","tryCatch","type","err","GeneratorFunction","GeneratorFunctionPrototype","defineIteratorMethods","AwaitArgument","AsyncIterator","invoke","record","then","unwrapped","enqueue","callInvokeWithMethodAndArg","previousPromise","domain","GenStateSuspendedStart","GenStateExecuting","GenStateCompleted","doneResult","delegate","iterator","returnMethod","info","done","GenStateSuspendedYield","resultName","nextLoc","dispatchException","ContinueSentinel","pushTryEntry","locs","entry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","values","iterable","iteratorMethod","iteratorSymbol","isNaN","hasOwn","$Symbol","Symbol","toStringTagSymbol","toStringTag","inModule","runtime","Gp","displayName","isGeneratorFunction","genFun","ctor","mark","iter","object","skipTempReset","charAt","slice","rootEntry","rootRecord","rval","exception","handle","loc","caught","hasCatch","hasFinally","finallyEntry","complete","finish","catch","thrown","delegateYield"],"mappings":"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","file":"ringcentral.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"es6-promise\"), require(\"node-fetch\"), require(\"pubnub\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([, , \"pubnub\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"SDK\"] = factory(require(\"es6-promise\"), require(\"node-fetch\"), require(\"pubnub\"));\n\telse\n\t\troot[\"RingCentral\"] = root[\"RingCentral\"] || {}, root[\"RingCentral\"][\"SDK\"] = factory(root[undefined], root[undefined], root[undefined]);\n})(this, function(__WEBPACK_EXTERNAL_MODULE_4__, __WEBPACK_EXTERNAL_MODULE_5__, __WEBPACK_EXTERNAL_MODULE_6__) {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/universalModuleDefinition\n **/","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"es6-promise\"), require(\"node-fetch\"), require(\"pubnub\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([, , \"pubnub\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"SDK\"] = factory(require(\"es6-promise\"), require(\"node-fetch\"), require(\"pubnub\"));\n\telse\n\t\troot[\"RingCentral\"] = root[\"RingCentral\"] || {}, root[\"RingCentral\"][\"SDK\"] = factory(root[undefined], root[undefined], root[undefined]);\n})(this, function(__WEBPACK_EXTERNAL_MODULE_4__, __WEBPACK_EXTERNAL_MODULE_5__, __WEBPACK_EXTERNAL_MODULE_6__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"/build/\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ function(module, exports, __webpack_require__) {\n\nmodule.exports = __webpack_require__(1);\n\n\n/***/ },\n/* 1 */\n/***/ function(module, exports, __webpack_require__) {\n\n'use strict';\n\nexports.__esModule = true;\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nvar _coreUtils = __webpack_require__(2);\n\nvar Utils = _interopRequireWildcard(_coreUtils);\n\nvar _coreCache = __webpack_require__(7);\n\nvar _coreCache2 = _interopRequireDefault(_coreCache);\n\nvar _coreExternals = __webpack_require__(3);\n\nvar Externals = _interopRequireWildcard(_coreExternals);\n\nvar _coreObservable = __webpack_require__(8);\n\nvar _coreObservable2 = _interopRequireDefault(_coreObservable);\n\nvar _coreQueue = __webpack_require__(9);\n\nvar _coreQueue2 = _interopRequireDefault(_coreQueue);\n\nvar _httpClient = __webpack_require__(10);\n\nvar _httpClient2 = _interopRequireDefault(_httpClient);\n\nvar _httpApiResponse = __webpack_require__(12);\n\nvar _httpApiResponse2 = _interopRequireDefault(_httpApiResponse);\n\nvar _httpUtils = __webpack_require__(11);\n\nvar HttpUtils = _interopRequireWildcard(_httpUtils);\n\nvar _mocksClientMock = __webpack_require__(13);\n\nvar _mocksClientMock2 = _interopRequireDefault(_mocksClientMock);\n\nvar _mocksMock = __webpack_require__(15);\n\nvar _mocksMock2 = _interopRequireDefault(_mocksMock);\n\nvar _mocksRegistry = __webpack_require__(14);\n\nvar _mocksRegistry2 = _interopRequireDefault(_mocksRegistry);\n\nvar _platformPlatform = __webpack_require__(16);\n\nvar _platformPlatform2 = _interopRequireDefault(_platformPlatform);\n\nvar _platformAuth = __webpack_require__(17);\n\nvar _platformAuth2 = _interopRequireDefault(_platformAuth);\n\nvar _pubnubPubnubFactory = __webpack_require__(18);\n\nvar _pubnubPubnubFactory2 = _interopRequireDefault(_pubnubPubnubFactory);\n\nvar _subscriptionSubscription = __webpack_require__(20);\n\nvar _subscriptionSubscription2 = _interopRequireDefault(_subscriptionSubscription);\n\nvar _subscriptionCachedSubscription = __webpack_require__(21);\n\nvar _subscriptionCachedSubscription2 = _interopRequireDefault(_subscriptionCachedSubscription);\n\n__webpack_require__(22);\n\nvar SDK = (function () {\n _createClass(SDK, null, [{\n key: 'version',\n value: '2.0.1',\n enumerable: true\n }, {\n key: 'server',\n value: {\n sandbox: 'https://platform.devtest.ringcentral.com',\n production: 'https://platform.ringcentral.com'\n },\n\n /**\n * @constructor\n * @param {object} [options]\n * @param {string} [options.server]\n * @param {string} [options.cachePrefix]\n * @param {string} [options.appSecret]\n * @param {string} [options.appKey]\n * @param {string} [options.appName]\n * @param {string} [options.appVersion]\n * @param {string} [options.pubnubFactory]\n * @param {string} [options.client]\n */\n enumerable: true\n }]);\n\n function SDK(options) {\n _classCallCheck(this, SDK);\n\n options = options || {};\n\n this._cache = new _coreCache2['default'](Externals.localStorage, options.cachePrefix);\n\n this._client = options.client || new _httpClient2['default']();\n\n this._platform = new _platformPlatform2['default'](this._client, this._cache, options.server, options.appKey, options.appSecret);\n\n this._pubnubFactory = options.pubnubFactory || Externals.PUBNUB;\n }\n\n /**\n * @return {Platform}\n */\n\n SDK.prototype.platform = function platform() {\n return this._platform;\n };\n\n /**\n * @return {Subscription}\n */\n\n SDK.prototype.createSubscription = function createSubscription() {\n return new _subscriptionSubscription2['default'](this._pubnubFactory, this._platform);\n };\n\n /**\n * @return {CachedSubscription}\n */\n\n SDK.prototype.createCachedSubscription = function createCachedSubscription(cacheKey) {\n return new _subscriptionCachedSubscription2['default'](this._pubnubFactory, this._platform, this._cache, cacheKey);\n };\n\n /**\n * @return {Cache}\n */\n\n SDK.prototype.cache = function cache() {\n return this._cache;\n };\n\n _createClass(SDK, null, [{\n key: 'core',\n value: {\n Cache: _coreCache2['default'],\n Observable: _coreObservable2['default'],\n Utils: Utils,\n Externals: Externals,\n Queue: _coreQueue2['default']\n },\n enumerable: true\n }, {\n key: 'http',\n value: {\n Client: _httpClient2['default'],\n ApiResponse: _httpApiResponse2['default'],\n Utils: HttpUtils\n },\n enumerable: true\n }, {\n key: 'platform',\n value: {\n Auth: _platformAuth2['default'],\n Platform: _platformPlatform2['default']\n },\n enumerable: true\n }, {\n key: 'subscription',\n value: {\n Subscription: _subscriptionSubscription2['default']\n },\n enumerable: true\n }, {\n key: 'mocks',\n value: {\n Client: _mocksClientMock2['default'],\n Registry: _mocksRegistry2['default'],\n Mock: _mocksMock2['default']\n },\n enumerable: true\n }, {\n key: 'pubnub',\n value: {\n PubnubMockFactory: _pubnubPubnubFactory2['default']\n },\n enumerable: true\n }]);\n\n return SDK;\n})();\n\nexports['default'] = SDK;\nmodule.exports = exports['default'];\n\n/***/ },\n/* 2 */\n/***/ function(module, exports, __webpack_require__) {\n\n'use strict';\n\nexports.__esModule = true;\nexports.queryStringify = queryStringify;\nexports.parseQueryString = parseQueryString;\nexports.isFunction = isFunction;\nexports.isArray = isArray;\nexports.poll = poll;\nexports.stopPolling = stopPolling;\nexports.isNodeJS = isNodeJS;\nexports.isBrowser = isBrowser;\nexports.delay = delay;\n\nvar _ExternalsJs = __webpack_require__(3);\n\n/**\n * TODO Replace with something better\n * @see https://github.com/joyent/node/blob/master/lib/querystring.js\n * @param {object} parameters\n * @returns {string}\n */\n\nfunction queryStringify(parameters) {\n\n var array = [];\n\n parameters = parameters || {};\n\n Object.keys(parameters).forEach(function (k) {\n\n var v = parameters[k];\n\n if (isArray(v)) {\n v.forEach(function (vv) {\n array.push(encodeURIComponent(k) + '=' + encodeURIComponent(vv));\n });\n } else {\n array.push(encodeURIComponent(k) + '=' + encodeURIComponent(v));\n }\n });\n\n return array.join('&');\n}\n\n/**\n * TODO Replace with something better\n * @see https://github.com/joyent/node/blob/master/lib/querystring.js\n * @param {string} queryString\n * @returns {object}\n */\n\nfunction parseQueryString(queryString) {\n\n var argsParsed = {};\n\n queryString.split('&').forEach(function (arg) {\n\n arg = decodeURIComponent(arg);\n\n if (arg.indexOf('=') == -1) {\n\n argsParsed[arg.trim()] = true;\n } else {\n\n var pair = arg.split('='),\n key = pair[0].trim(),\n value = pair[1].trim();\n\n if (key in argsParsed) {\n if (key in argsParsed && !isArray(argsParsed[key])) argsParsed[key] = [argsParsed[key]];\n argsParsed[key].push(value);\n } else {\n argsParsed[key] = value;\n }\n }\n });\n\n return argsParsed;\n}\n\n/**\n * @param obj\n * @return {boolean}\n */\n\nfunction isFunction(obj) {\n return typeof obj === \"function\";\n}\n\n/**\n * @param obj\n * @return {boolean}\n */\n\nfunction isArray(obj) {\n return Array.isArray ? Array.isArray(obj) : typeof obj === \"array\";\n}\n\n/**\n * @param fn\n * @param interval\n * @param timeout\n */\n\nfunction poll(fn, interval, timeout) {\n //NodeJS.Timer|number\n\n module.exports.stopPolling(timeout);\n\n interval = interval || 1000;\n\n var next = function next(delay) {\n\n delay = delay || interval;\n\n interval = delay;\n\n return setTimeout(function () {\n\n fn(next, delay);\n }, delay);\n };\n\n return next();\n}\n\nfunction stopPolling(timeout) {\n if (timeout) clearTimeout(timeout);\n}\n\nfunction isNodeJS() {\n return typeof process !== 'undefined';\n}\n\nfunction isBrowser() {\n return typeof window !== 'undefined';\n}\n\nfunction delay(timeout) {\n return new _ExternalsJs.Promise(function (resolve, reject) {\n setTimeout(function () {\n resolve(null);\n }, timeout);\n });\n}\n\n/***/ },\n/* 3 */\n/***/ function(module, exports, __webpack_require__) {\n\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _es6Promise = __webpack_require__(4);\n\nvar _es6Promise2 = _interopRequireDefault(_es6Promise);\n\nvar _nodeFetch = __webpack_require__(5);\n\nvar _nodeFetch2 = _interopRequireDefault(_nodeFetch);\n\nvar _pubnub = __webpack_require__(6);\n\nvar _pubnub2 = _interopRequireDefault(_pubnub);\n\nvar root = new Function('return this')();\n\nvar Promise = _es6Promise2['default'] && _es6Promise2['default'].Promise || root.Promise;\n\nexports.Promise = Promise;\nvar fetch = root.fetch || _nodeFetch2['default'];\nexports.fetch = fetch;\nvar Request = root.Request || fetch.Request;\nexports.Request = Request;\nvar Response = root.Response || fetch.Response;\nexports.Response = Response;\nvar Headers = root.Headers || fetch.Headers;\n\nexports.Headers = Headers;\nvar PUBNUB = root.PUBNUB || _pubnub2['default'];\n\nexports.PUBNUB = PUBNUB;\nvar localStorage = typeof root.localStorage !== 'undefined' ? root.localStorage : {};\nexports.localStorage = localStorage;\n\n/***/ },\n/* 4 */\n/***/ function(module, exports) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE_4__;\n\n/***/ },\n/* 5 */\n/***/ function(module, exports) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE_5__;\n\n/***/ },\n/* 6 */\n/***/ function(module, exports) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE_6__;\n\n/***/ },\n/* 7 */\n/***/ function(module, exports) {\n\n'use strict';\n\nexports.__esModule = true;\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nvar Cache = (function () {\n _createClass(Cache, null, [{\n key: 'defaultPrefix',\n value: 'rc-',\n enumerable: true\n }]);\n\n function Cache(storage, prefix) {\n _classCallCheck(this, Cache);\n\n this.setPrefix(prefix);\n this._storage = storage;\n }\n\n Cache.prototype.setPrefix = function setPrefix(prefix) {\n this._prefix = prefix || Cache.defaultPrefix;\n return this;\n };\n\n Cache.prototype.setItem = function setItem(key, data) {\n this._storage[this._prefixKey(key)] = JSON.stringify(data);\n return this;\n };\n\n Cache.prototype.removeItem = function removeItem(key) {\n delete this._storage[this._prefixKey(key)];\n return this;\n };\n\n Cache.prototype.getItem = function getItem(key) {\n var item = this._storage[this._prefixKey(key)];\n if (!item) return null;\n return JSON.parse(item);\n };\n\n Cache.prototype.clean = function clean() {\n\n for (var key in this._storage) {\n\n if (!this._storage.hasOwnProperty(key)) continue;\n\n if (key.indexOf(this._prefix) === 0) {\n delete this._storage[key];\n }\n }\n\n return this;\n };\n\n Cache.prototype._prefixKey = function _prefixKey(key) {\n return this._prefix + key;\n };\n\n return Cache;\n})();\n\nexports['default'] = Cache;\nmodule.exports = exports['default'];\n\n/***/ },\n/* 8 */\n/***/ function(module, exports) {\n\n'use strict';\n\nexports.__esModule = true;\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nvar Observable = (function () {\n function Observable() {\n _classCallCheck(this, Observable);\n\n this.off();\n }\n\n Observable.prototype.hasListeners = function hasListeners(event) {\n return event in this._listeners;\n };\n\n Observable.prototype.on = function on(events, callback) {\n var _this = this;\n\n if (typeof events == 'string') events = [events];\n if (!events) throw new Error('No events to subscribe to');\n if (typeof callback !== 'function') throw new Error('Callback must be a function');\n\n events.forEach(function (event) {\n\n if (!_this.hasListeners(event)) _this._listeners[event] = [];\n\n _this._listeners[event].push(callback);\n });\n\n return this;\n };\n\n Observable.prototype.emit = function emit(event) {\n var _this2 = this;\n\n for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n var result = null;\n\n if (!this.hasListeners(event)) return null;\n\n this._listeners[event].some(function (callback) {\n\n result = callback.apply(_this2, args);\n return result === false;\n });\n\n return result;\n };\n\n Observable.prototype.off = function off(event, callback) {\n var _this3 = this;\n\n if (!event) {\n\n this._listeners = {};\n } else {\n\n if (!callback) {\n\n delete this._listeners[event];\n } else {\n\n if (!this.hasListeners(event)) return this;\n\n this._listeners[event].forEach(function (cb, i) {\n\n if (cb === callback) delete _this3._listeners[event][i];\n });\n }\n }\n\n return this;\n };\n\n return Observable;\n})();\n\nexports['default'] = Observable;\nmodule.exports = exports['default'];\n\n/***/ },\n/* 9 */\n/***/ function(module, exports, __webpack_require__) {\n\n'use strict';\n\nexports.__esModule = true;\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nvar _coreExternals = __webpack_require__(3);\n\nvar _Utils = __webpack_require__(2);\n\nvar Queue = (function () {\n _createClass(Queue, null, [{\n key: '_pollInterval',\n value: 250,\n enumerable: true\n }, {\n key: '_releaseTimeout',\n value: 5000,\n enumerable: true\n }]);\n\n function Queue(cache, cacheId) {\n _classCallCheck(this, Queue);\n\n this._cache = cache;\n this._cacheId = cacheId;\n this._promise = null;\n }\n\n Queue.prototype.isPaused = function isPaused() {\n\n var time = this._cache.getItem(this._cacheId);\n\n return !!time && Date.now() - parseInt(time) < Queue._releaseTimeout;\n };\n\n Queue.prototype.pause = function pause() {\n this._cache.setItem(this._cacheId, Date.now());\n return this;\n };\n\n Queue.prototype.resume = function resume() {\n this._cache.removeItem(this._cacheId);\n return this;\n };\n\n Queue.prototype.poll = function poll() {\n var _this = this;\n\n if (this._promise) return this._promise;\n\n this._promise = new _coreExternals.Promise(function (resolve, reject) {\n\n _Utils.poll(function (next) {\n\n if (_this.isPaused()) return next();\n\n _this._promise = null;\n\n _this.resume(); // this is actually not needed but why not\n\n resolve(null);\n }, Queue._pollInterval);\n });\n\n return this._promise;\n };\n\n return Queue;\n})();\n\nexports['default'] = Queue;\nmodule.exports = exports['default'];\n\n/***/ },\n/* 10 */\n/***/ function(module, exports, __webpack_require__) {\n\n'use strict';\n\nexports.__esModule = true;\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _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; }\n\nvar _coreExternals = __webpack_require__(3);\n\nvar _coreUtils = __webpack_require__(2);\n\nvar _Utils = __webpack_require__(11);\n\nvar _coreObservable = __webpack_require__(8);\n\nvar _coreObservable2 = _interopRequireDefault(_coreObservable);\n\nvar _ApiResponse = __webpack_require__(12);\n\nvar _ApiResponse2 = _interopRequireDefault(_ApiResponse);\n\nvar Client = (function (_Observable) {\n _inherits(Client, _Observable);\n\n function Client() {\n _classCallCheck(this, Client);\n\n _Observable.apply(this, arguments);\n\n this.events = {\n beforeRequest: 'beforeRequest',\n requestSuccess: 'requestSuccess',\n requestError: 'requestError'\n };\n }\n\n /**\n * @name IApiError\n * @property {string} stack\n * @property {string} originalMessage\n * @property {ApiResponse} apiResponse\n */\n\n /**\n * @param {Request} request\n * @return {Promise}\n */\n\n Client.prototype.sendRequest = function sendRequest(request) {\n var apiResponse;\n return regeneratorRuntime.async(function sendRequest$(context$2$0) {\n while (1) switch (context$2$0.prev = context$2$0.next) {\n case 0:\n apiResponse = new _ApiResponse2['default'](request);\n context$2$0.prev = 1;\n\n //TODO Stop request if listeners return false\n this.emit(this.events.beforeRequest, apiResponse);\n\n context$2$0.next = 5;\n return regeneratorRuntime.awrap(this._loadResponse(request));\n\n case 5:\n apiResponse._response = context$2$0.sent;\n\n if (!(apiResponse._isMultipart() || apiResponse._isJson())) {\n context$2$0.next = 10;\n break;\n }\n\n context$2$0.next = 9;\n return regeneratorRuntime.awrap(apiResponse.response().text());\n\n case 9:\n apiResponse._text = context$2$0.sent;\n\n case 10:\n if (apiResponse.ok()) {\n context$2$0.next = 12;\n break;\n }\n\n throw new Error('Response has unsuccessful status');\n\n case 12:\n\n this.emit(this.events.requestSuccess, apiResponse);\n\n return context$2$0.abrupt('return', apiResponse);\n\n case 16:\n context$2$0.prev = 16;\n context$2$0.t0 = context$2$0['catch'](1);\n\n if (!context$2$0.t0.apiResponse) context$2$0.t0 = this.makeError(context$2$0.t0, apiResponse);\n\n this.emit(this.events.requestError, context$2$0.t0);\n\n throw context$2$0.t0;\n\n case 21:\n case 'end':\n return context$2$0.stop();\n }\n }, null, this, [[1, 16]]);\n };\n\n /**\n * @param {Request} request\n * @return {Promise}\n * @private\n */\n\n Client.prototype._loadResponse = function _loadResponse(request) {\n return regeneratorRuntime.async(function _loadResponse$(context$2$0) {\n while (1) switch (context$2$0.prev = context$2$0.next) {\n case 0:\n context$2$0.next = 2;\n return regeneratorRuntime.awrap(_coreExternals.fetch.call(null, request));\n\n case 2:\n return context$2$0.abrupt('return', context$2$0.sent);\n\n case 3:\n case 'end':\n return context$2$0.stop();\n }\n }, null, this);\n };\n\n /**\n * Wraps the JS Error object with transaction information\n * @param {Error|IApiError} e\n * @param {ApiResponse} apiResponse\n * @return {IApiError}\n */\n\n Client.prototype.makeError = function makeError(e, apiResponse) {\n\n // Wrap only if regular error\n if (!e.hasOwnProperty('apiResponse') && !e.hasOwnProperty('originalMessage')) {\n\n e.apiResponse = apiResponse;\n e.originalMessage = e.message;\n e.message = apiResponse && apiResponse.error(true) || e.originalMessage;\n }\n\n return e;\n };\n\n /**\n *\n * @param {object} init\n * @param {object} [init.url]\n * @param {object} [init.body]\n * @param {string} [init.method]\n * @param {object} [init.query]\n * @param {object} [init.headers]\n * @return {Request}\n */\n\n Client.prototype.createRequest = function createRequest(init) {\n\n init = init || {};\n init.headers = init.headers || {};\n\n // Sanity checks\n if (!init.url) throw new Error('Url is not defined');\n if (!init.method) init.method = 'GET';\n if (init.method && Client._allowedMethods.indexOf(init.method) < 0) throw new Error('Method has wrong value: ' + init.method);\n\n // Defaults\n init.credentials = init.credentials || 'include';\n init.mode = init.mode || 'cors';\n\n // Append Query String\n if (init.query) {\n init.url = init.url + (init.url.indexOf('?') > -1 ? '&' : '?') + _coreUtils.queryStringify(init.query);\n }\n\n if (!_Utils.findHeaderName('Accept', init.headers)) {\n init.headers['Accept'] = _ApiResponse2['default']._jsonContentType;\n }\n\n // Serialize body\n //TODO Check that body is a plain object\n if (typeof init.body !== 'string' || !init.body) {\n\n var contentTypeHeaderName = _Utils.findHeaderName(_ApiResponse2['default']._contentType, init.headers);\n\n if (!contentTypeHeaderName) {\n contentTypeHeaderName = _ApiResponse2['default']._contentType;\n init.headers[contentTypeHeaderName] = _ApiResponse2['default']._jsonContentType;\n }\n\n var contentType = init.headers[contentTypeHeaderName];\n\n // Assign a new encoded body\n if (contentType.indexOf(_ApiResponse2['default']._jsonContentType) > -1) {\n init.body = JSON.stringify(init.body);\n } else if (contentType.indexOf(_ApiResponse2['default']._urlencodedContentType) > -1) {\n init.body = _coreUtils.queryStringify(init.body);\n }\n }\n\n // Create a request with encoded body\n var req = new _coreExternals.Request(init.url, init);\n\n // Keep the original body accessible directly (for mocks)\n req.originalBody = init.body;\n\n return req;\n };\n\n _createClass(Client, null, [{\n key: '_allowedMethods',\n value: ['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'OPTIONS', 'HEAD'],\n enumerable: true\n }]);\n\n return Client;\n})(_coreObservable2['default']);\n\nexports['default'] = Client;\nmodule.exports = exports['default'];\n\n/***/ },\n/* 11 */\n/***/ function(module, exports, __webpack_require__) {\n\n'use strict';\n\nexports.__esModule = true;\nexports.createResponse = createResponse;\nexports.findHeaderName = findHeaderName;\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nvar _coreExternals = __webpack_require__(3);\n\nvar _coreUtils = __webpack_require__(2);\n\nvar utils = _interopRequireWildcard(_coreUtils);\n\n/**\n * Creates a response\n * @param stringBody\n * @param init\n * @return {Response}\n */\n\nfunction createResponse(stringBody, init) {\n\n init = init || {};\n\n var response = new _coreExternals.Response(stringBody, init);\n\n //TODO Wait for https://github.com/bitinn/node-fetch/issues/38\n if (utils.isNodeJS()) {\n\n response._text = stringBody;\n response._decode = function () {\n return this._text;\n };\n }\n\n return response;\n}\n\nfunction findHeaderName(name, headers) {\n name = name.toLowerCase();\n return Object.keys(headers).reduce(function (res, key) {\n if (res) return res;\n if (name == key.toLowerCase()) return key;\n return res;\n }, null);\n}\n\n/***/ },\n/* 12 */\n/***/ function(module, exports, __webpack_require__) {\n\n'use strict';\n\nexports.__esModule = true;\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nvar _coreExternals = __webpack_require__(3);\n\nvar _Utils = __webpack_require__(11);\n\nvar utils = _interopRequireWildcard(_Utils);\n\nvar ApiResponse = (function () {\n _createClass(ApiResponse, null, [{\n key: '_contentType',\n value: 'Content-Type',\n enumerable: true\n }, {\n key: '_jsonContentType',\n value: 'application/json',\n enumerable: true\n }, {\n key: '_multipartContentType',\n value: 'multipart/mixed',\n enumerable: true\n }, {\n key: '_urlencodedContentType',\n value: 'application/x-www-form-urlencoded',\n enumerable: true\n }, {\n key: '_headerSeparator',\n value: ':',\n enumerable: true\n }, {\n key: '_bodySeparator',\n value: '\\n\\n',\n enumerable: true\n }, {\n key: '_boundarySeparator',\n value: '--',\n\n /**\n * @param {Request} request\n * @param {Response} response\n * @param {string} responseText\n */\n enumerable: true\n }]);\n\n function ApiResponse(request, response, responseText) {\n _classCallCheck(this, ApiResponse);\n\n /** @type {Request} */\n this._request = request;\n\n /** @type {Response} */\n this._response = response;\n\n this._text = responseText;\n this._json = null;\n this._multipart = [];\n }\n\n /**\n * @return {Response}\n */\n\n ApiResponse.prototype.response = function response() {\n return this._response;\n };\n\n /**\n * @return {Request}\n */\n\n ApiResponse.prototype.request = function request() {\n return this._request;\n };\n\n /**\n * @return {boolean}\n */\n\n ApiResponse.prototype.ok = function ok() {\n return this._response && this._response.ok;\n };\n\n /**\n * @return {string}\n */\n\n ApiResponse.prototype.text = function text() {\n if (!this._isJson() && !this._isMultipart()) throw new Error('Response is not text');\n return this._text;\n };\n\n /**\n * @return {object}\n */\n\n ApiResponse.prototype.json = function json() {\n if (!this._isJson()) throw new Error('Response is not JSON');\n if (!this._json) {\n this._json = this._text ? JSON.parse(this._text) : null;\n }\n return this._json;\n };\n\n /**\n * @param [skipOKCheck]\n * @return {string}\n */\n\n ApiResponse.prototype.error = function error(skipOKCheck) {\n\n if (this.ok() && !skipOKCheck) return null;\n\n var message = (this._response && this._response.status ? this._response.status + ' ' : '') + (this._response && this._response.statusText ? this._response.statusText : '');\n\n try {\n\n if (this.json().message) message = this.json().message;\n if (this.json().error_description) message = this.json().error_description;\n if (this.json().description) message = this.json().description;\n } catch (e) {}\n\n return message;\n };\n\n /**\n * @return {ApiResponse[]}\n */\n\n ApiResponse.prototype.multipart = function multipart() {\n\n if (!this._isMultipart()) throw new Error('Response is not multipart');\n\n if (!this._multipart.length) {\n\n // Step 1. Split multipart response\n\n var text = this.text();\n\n if (!text) throw new Error('No response body');\n\n var boundary = this._getContentType().match(/boundary=([^;]+)/i)[1];\n\n if (!boundary) throw new Error('Cannot find boundary');\n\n var parts = text.toString().split(ApiResponse._boundarySeparator + boundary);\n\n if (parts[0].trim() === '') parts.shift();\n if (parts[parts.length - 1].trim() == ApiResponse._boundarySeparator) parts.pop();\n\n if (parts.length < 1) throw new Error('No parts in body');\n\n // Step 2. Parse status info\n\n var statusInfo = ApiResponse.create(parts.shift(), this._response.status, this._response.statusText).json();\n\n // Step 3. Parse all other parts\n\n this._multipart = parts.map(function (part, i) {\n\n var status = statusInfo.response[i].status;\n\n return ApiResponse.create(part, status);\n });\n }\n\n return this._multipart;\n };\n\n ApiResponse.prototype._isContentType = function _isContentType(contentType) {\n return this._getContentType().indexOf(contentType) > -1;\n };\n\n ApiResponse.prototype._getContentType = function _getContentType() {\n return this._response.headers.get(ApiResponse._contentType) || '';\n };\n\n ApiResponse.prototype._isMultipart = function _isMultipart() {\n return this._isContentType(ApiResponse._multipartContentType);\n };\n\n ApiResponse.prototype._isUrlEncoded = function _isUrlEncoded() {\n return this._isContentType(ApiResponse._urlencodedContentType);\n };\n\n ApiResponse.prototype._isJson = function _isJson() {\n return this._isContentType(ApiResponse._jsonContentType);\n };\n\n /**\n * Method is used to create ApiResponse object from string parts of multipart/mixed response\n * @param {string} [text]\n * @param {number} [status]\n * @param {string} [statusText]\n * @return {ApiResponse}\n */\n\n ApiResponse.create = function create(text, status, statusText) {\n\n text = text || '';\n status = status || 200;\n statusText = statusText || 'OK';\n\n text = text.replace(/\\r/g, '');\n\n var headers = new _coreExternals.Headers(),\n headersAndBody = text.split(ApiResponse._bodySeparator),\n headersText = headersAndBody.length > 1 ? headersAndBody.shift() : '';\n\n text = headersAndBody.join(ApiResponse._bodySeparator);\n\n (headersText || '').split('\\n').forEach(function (header) {\n\n var split = header.trim().split(ApiResponse._headerSeparator),\n key = split.shift().trim(),\n value = split.join(ApiResponse._headerSeparator).trim();\n\n if (key) headers.append(key, value);\n });\n\n return new ApiResponse(null, utils.createResponse(text, {\n headers: headers,\n status: status,\n statusText: statusText\n }), text);\n };\n\n return ApiResponse;\n})();\n\nexports['default'] = ApiResponse;\nmodule.exports = exports['default'];\n\n/***/ },\n/* 13 */\n/***/ function(module, exports, __webpack_require__) {\n\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _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; }\n\nvar _Registry = __webpack_require__(14);\n\nvar _Registry2 = _interopRequireDefault(_Registry);\n\nvar _httpClient = __webpack_require__(10);\n\nvar _httpClient2 = _interopRequireDefault(_httpClient);\n\nvar Client = (function (_HttpClient) {\n _inherits(Client, _HttpClient);\n\n function Client() {\n _classCallCheck(this, Client);\n\n _HttpClient.call(this);\n this._registry = new _Registry2['default']();\n }\n\n Client.prototype.registry = function registry() {\n return this._registry;\n };\n\n Client.prototype._loadResponse = function _loadResponse(request) {\n var mock;\n return regeneratorRuntime.async(function _loadResponse$(context$2$0) {\n while (1) switch (context$2$0.prev = context$2$0.next) {\n case 0:\n mock = this._registry.find(request);\n context$2$0.next = 3;\n return regeneratorRuntime.awrap(mock.getResponse(request));\n\n case 3:\n return context$2$0.abrupt('return', context$2$0.sent);\n\n case 4:\n case 'end':\n return context$2$0.stop();\n }\n }, null, this);\n };\n\n return Client;\n})(_httpClient2['default']);\n\nexports['default'] = Client;\nmodule.exports = exports['default'];\n\n/***/ },\n/* 14 */\n/***/ function(module, exports, __webpack_require__) {\n\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nvar _Mock = __webpack_require__(15);\n\nvar _Mock2 = _interopRequireDefault(_Mock);\n\nvar Registry = (function () {\n function Registry() {\n _classCallCheck(this, Registry);\n\n this._mocks = [];\n }\n\n Registry.prototype.add = function add(mock) {\n this._mocks.push(mock);\n return this;\n };\n\n Registry.prototype.clear = function clear() {\n this._mocks = [];\n return this;\n };\n\n Registry.prototype.find = function find(request) {\n\n //console.log('Registry is looking for', request);\n\n var mock = this._mocks.shift();\n\n if (!mock) throw new Error('No mock in registry for request ' + request.method + ' ' + request.url);\n\n if (!mock.test(request)) throw new Error('Wrong request ' + request.method + ' ' + request.url + ' for expected mock ' + mock.method() + ' ' + mock.path());\n\n return mock;\n };\n\n Registry.prototype.apiCall = function apiCall(method, path, response, status, statusText) {\n\n this.add(new _Mock2['default'](method, path, response, status, statusText));\n\n return this;\n };\n\n Registry.prototype.authentication = function authentication() {\n\n this.apiCall('POST', '/restapi/oauth/token', {\n 'access_token': 'ACCESS_TOKEN',\n 'token_type': 'bearer',\n 'expires_in': 3600,\n 'refresh_token': 'REFRESH_TOKEN',\n 'refresh_token_expires_in': 60480,\n 'scope': 'SMS RCM Foo Boo',\n 'expireTime': new Date().getTime() + 3600000\n });\n\n return this;\n };\n\n Registry.prototype.logout = function logout() {\n\n this.apiCall('POST', '/restapi/oauth/revoke', {});\n\n return this;\n };\n\n Registry.prototype.presenceLoad = function presenceLoad(id) {\n\n this.apiCall('GET', '/restapi/v1.0/account/~/extension/' + id + '/presence', {\n \"uri\": \"https://platform.ringcentral.com/restapi/v1.0/account/123/extension/\" + id + \"/presence\",\n \"extension\": {\n \"uri\": \"https://platform.ringcentral.com/restapi/v1.0/account/123/extension/\" + id,\n \"id\": id,\n \"extensionNumber\": \"101\"\n },\n \"activeCalls\": [],\n \"presenceStatus\": \"Available\",\n \"telephonyStatus\": \"Ringing\",\n \"userStatus\": \"Available\",\n \"dndStatus\": \"TakeAllCalls\",\n \"extensionId\": id\n });\n\n return this;\n };\n\n Registry.prototype.subscribeGeneric = function subscribeGeneric(expiresIn) {\n\n expiresIn = expiresIn || 15 * 60 * 60;\n\n var date = new Date();\n\n this.apiCall('POST', '/restapi/v1.0/subscription', {\n 'eventFilters': ['/restapi/v1.0/account/~/extension/~/presence'],\n 'expirationTime': new Date(date.getTime() + expiresIn * 1000).toISOString(),\n 'expiresIn': expiresIn,\n 'deliveryMode': {\n 'transportType': 'PubNub',\n 'encryption': false,\n 'address': '123_foo',\n 'subscriberKey': 'sub-c-foo',\n 'secretKey': 'sec-c-bar'\n },\n 'id': 'foo-bar-baz',\n 'creationTime': date.toISOString(),\n 'status': 'Active',\n 'uri': 'https://platform.ringcentral.com/restapi/v1.0/subscription/foo-bar-baz'\n });\n\n return this;\n };\n\n Registry.prototype.subscribeOnPresence = function subscribeOnPresence(id, detailed) {\n\n id = id || '1';\n\n var date = new Date();\n\n this.apiCall('POST', '/restapi/v1.0/subscription', {\n 'eventFilters': ['/restapi/v1.0/account/~/extension/' + id + '/presence' + (detailed ? '?detailedTelephonyState=true' : '')],\n 'expirationTime': new Date(date.getTime() + 15 * 60 * 60 * 1000).toISOString(),\n 'deliveryMode': {\n 'transportType': 'PubNub',\n 'encryption': true,\n 'address': '123_foo',\n 'subscriberKey': 'sub-c-foo',\n 'secretKey': 'sec-c-bar',\n 'encryptionAlgorithm': 'AES',\n 'encryptionKey': 'VQwb6EVNcQPBhE/JgFZ2zw=='\n },\n 'creationTime': date.toISOString(),\n 'id': 'foo-bar-baz',\n 'status': 'Active',\n 'uri': 'https://platform.ringcentral.com/restapi/v1.0/subscription/foo-bar-baz'\n });\n\n return this;\n };\n\n Registry.prototype.tokenRefresh = function tokenRefresh(failure) {\n\n if (!failure) {\n\n this.apiCall('POST', '/restapi/oauth/token', {\n 'access_token': 'ACCESS_TOKEN_FROM_REFRESH',\n 'token_type': 'bearer',\n 'expires_in': 3600,\n 'refresh_token': 'REFRESH_TOKEN_FROM_REFRESH',\n 'refresh_token_expires_in': 60480,\n 'scope': 'SMS RCM Foo Boo'\n });\n } else {\n\n this.apiCall('POST', '/restapi/oauth/token', {\n 'message': 'Wrong token',\n 'error_description': 'Wrong token',\n 'description': 'Wrong token'\n }, 400);\n }\n\n return this;\n };\n\n return Registry;\n})();\n\nexports['default'] = Registry;\nmodule.exports = exports['default'];\n\n/***/ },\n/* 15 */\n/***/ function(module, exports, __webpack_require__) {\n\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nvar _httpApiResponse = __webpack_require__(12);\n\nvar _httpApiResponse2 = _interopRequireDefault(_httpApiResponse);\n\nvar _coreUtils = __webpack_require__(2);\n\nvar _httpUtils = __webpack_require__(11);\n\nvar Mock = (function () {\n function Mock(method, path, json, status, statusText, delay) {\n _classCallCheck(this, Mock);\n\n this._method = method.toUpperCase();\n this._path = path;\n this._json = json || {};\n this._delay = delay || 10;\n this._status = status || 200;\n this._statusText = statusText || 'OK';\n }\n\n Mock.prototype.path = function path() {\n return this._path;\n };\n\n Mock.prototype.method = function method() {\n return this._method;\n };\n\n Mock.prototype.test = function test(request) {\n\n return request.url.indexOf(this._path) > -1 && request.method.toUpperCase() == this._method;\n };\n\n Mock.prototype.getResponse = function getResponse(request) {\n return regeneratorRuntime.async(function getResponse$(context$2$0) {\n while (1) switch (context$2$0.prev = context$2$0.next) {\n case 0:\n context$2$0.next = 2;\n return regeneratorRuntime.awrap(_coreUtils.delay(this._delay));\n\n case 2:\n return context$2$0.abrupt('return', this.createResponse(this._json));\n\n case 3:\n case 'end':\n return context$2$0.stop();\n }\n }, null, this);\n };\n\n Mock.prototype.createResponse = function createResponse(json, init) {\n\n init = init || {};\n\n init.status = init.status || this._status;\n init.statusText = init.statusText || this._statusText;\n\n var str = JSON.stringify(json),\n res = _httpUtils.createResponse(str, init);\n\n res.headers.set(_httpApiResponse2['default']._contentType, _httpApiResponse2['default']._jsonContentType);\n\n return res;\n };\n\n return Mock;\n})();\n\nexports['default'] = Mock;\nmodule.exports = exports['default'];\n\n/***/ },\n/* 16 */\n/***/ function(module, exports, __webpack_require__) {\n\n'use strict';\n\nexports.__esModule = true;\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _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; }\n\nvar _coreObservable = __webpack_require__(8);\n\nvar _coreObservable2 = _interopRequireDefault(_coreObservable);\n\nvar _coreQueue = __webpack_require__(9);\n\nvar _coreQueue2 = _interopRequireDefault(_coreQueue);\n\nvar _Auth = __webpack_require__(17);\n\nvar _Auth2 = _interopRequireDefault(_Auth);\n\nvar _coreExternals = __webpack_require__(3);\n\nvar _coreUtils = __webpack_require__(2);\n\nvar Platform = (function (_Observable) {\n _inherits(Platform, _Observable);\n\n _createClass(Platform, null, [{\n key: '_urlPrefix',\n value: '/restapi',\n enumerable: true\n }, {\n key: '_apiVersion',\n value: 'v1.0',\n enumerable: true\n }, {\n key: '_accessTokenTtl',\n value: null,\n // Platform server by default sets it to 60 * 60 = 1 hour\n enumerable: true\n }, {\n key: '_refreshTokenTtl',\n value: 10 * 60 * 60,\n // 10 hours\n enumerable: true\n }, {\n key: '_refreshTokenTtlRemember',\n value: 7 * 24 * 60 * 60,\n // 1 week\n enumerable: true\n }, {\n key: '_tokenEndpoint',\n value: '/restapi/oauth/token',\n enumerable: true\n }, {\n key: '_revokeEndpoint',\n value: '/restapi/oauth/revoke',\n enumerable: true\n }, {\n key: '_authorizeEndpoint',\n value: '/restapi/oauth/authorize',\n enumerable: true\n }, {\n key: '_refreshDelayMs',\n value: 100,\n enumerable: true\n }, {\n key: '_cacheId',\n value: 'platform',\n enumerable: true\n }, {\n key: '_clearCacheOnRefreshError',\n value: true,\n enumerable: true\n }]);\n\n function Platform(client, cache, server, appKey, appSecret) {\n _classCallCheck(this, Platform);\n\n _Observable.call(this);\n\n this.events = {\n beforeLogin: 'beforeLogin',\n loginSuccess: 'loginSuccess',\n loginError: 'loginError',\n beforeRefresh: 'beforeRefresh',\n refreshSuccess: 'refreshSuccess',\n refreshError: 'refreshError',\n beforeLogout: 'beforeLogout',\n logoutSuccess: 'logoutSuccess',\n logoutError: 'logoutError'\n };\n this._server = server;\n this._appKey = appKey;\n this._appSecret = appSecret;\n\n /** @type {Cache} */\n this._cache = cache;\n\n /** @type {Client} */\n this._client = client;\n\n this._queue = new _coreQueue2['default'](this._cache, Platform._cacheId + '-refresh');\n\n this._auth = new _Auth2['default'](this._cache, Platform._cacheId);\n }\n\n /**\n * @return {Auth}\n */\n\n Platform.prototype.auth = function auth() {\n return this._auth;\n };\n\n /**\n * @return {Client}\n */\n\n Platform.prototype.client = function client() {\n return this._client;\n };\n\n /**\n * @param {string} path\n * @param {object} [options]\n * @param {boolean} [options.addServer]\n * @param {string} [options.addMethod]\n * @param {boolean} [options.addToken]\n * @return {string}\n */\n\n Platform.prototype.createUrl = function createUrl(path, options) {\n\n path = path || '';\n options = options || {};\n\n var builtUrl = '',\n hasHttp = path.indexOf('http://') != -1 || path.indexOf('https://') != -1;\n\n if (options.addServer && !hasHttp) builtUrl += this._server;\n\n if (path.indexOf(Platform._urlPrefix) == -1 && !hasHttp) builtUrl += Platform._urlPrefix + '/' + Platform._apiVersion;\n\n builtUrl += path;\n\n if (options.addMethod || options.addToken) builtUrl += path.indexOf('?') > -1 ? '&' : '?';\n\n if (options.addMethod) builtUrl += '_method=' + options.addMethod;\n if (options.addToken) builtUrl += (options.addMethod ? '&' : '') + 'access_token=' + this._auth.accessToken();\n\n return builtUrl;\n };\n\n /**\n * @param {string} options.redirectUri\n * @param {string} options.state\n * @param {string} options.brandId\n * @param {string} options.display\n * @param {string} options.prompt\n * @return {string}\n */\n\n Platform.prototype.authUrl = function authUrl(options) {\n\n options = options || {};\n\n return this.createUrl(Platform._authorizeEndpoint + '?' + _coreUtils.queryStringify({\n 'response_type': 'code',\n 'redirect_uri': options.redirectUri || '',\n 'client_id': this._appKey,\n 'state': options.state || '',\n 'brand_id': options.brandId || '',\n 'display': options.display || '',\n 'prompt': options.prompt || ''\n }), { addServer: true });\n };\n\n /**\n * @param {string} url\n * @return {Object}\n */\n\n Platform.prototype.parseAuthRedirectUrl = function parseAuthRedirectUrl(url) {\n\n var qs = _coreUtils.parseQueryString(url.split('?').reverse()[0]),\n error = qs.error_description || qs.error;\n\n if (error) {\n var e = new Error(error);\n e.error = qs.error;\n throw e;\n }\n\n return qs;\n };\n\n /**\n * @return {Promise}\n */\n\n Platform.prototype.loggedIn = function loggedIn() {\n return regeneratorRuntime.async(function loggedIn$(context$2$0) {\n while (1) switch (context$2$0.prev = context$2$0.next) {\n case 0:\n context$2$0.prev = 0;\n context$2$0.next = 3;\n return regeneratorRuntime.awrap(this._ensureAuthentication());\n\n case 3:\n return context$2$0.abrupt('return', true);\n\n case 6:\n context$2$0.prev = 6;\n context$2$0.t0 = context$2$0['catch'](0);\n return context$2$0.abrupt('return', false);\n\n case 9:\n case 'end':\n return context$2$0.stop();\n }\n }, null, this, [[0, 6]]);\n };\n\n /**\n * @param {string} options.username\n * @param {string} options.password\n * @param {string} options.extension\n * @param {string} options.code\n * @param {string} options.redirectUri\n * @param {string} options.endpointId\n * @returns {Promise}\n */\n\n Platform.prototype.login = function login(options) {\n var body, apiResponse, json;\n return regeneratorRuntime.async(function login$(context$2$0) {\n while (1) switch (context$2$0.prev = context$2$0.next) {\n case 0:\n context$2$0.prev = 0;\n\n options = options || {};\n\n options.remember = options.remember || false;\n\n this.emit(this.events.beforeLogin);\n\n body = {\n \"access_token_ttl\": Platform._accessTokenTtl,\n \"refresh_token_ttl\": options.remember ? Platform._refreshTokenTtlRemember : Platform._refreshTokenTtl\n };\n\n if (!options.code) {\n\n body.grant_type = 'password';\n body.username = options.username;\n body.password = options.password;\n body.extension = options.extension || '';\n } else if (options.code) {\n\n body.grant_type = 'authorization_code';\n body.code = options.code;\n body.redirect_uri = options.redirectUri;\n //body.client_id = this.getCredentials().key; // not needed\n }\n\n if (options.endpointId) body.endpoint_id = options.endpointId;\n\n context$2$0.next = 9;\n return regeneratorRuntime.awrap(this._tokenRequest(Platform._tokenEndpoint, body));\n\n case 9:\n apiResponse = context$2$0.sent;\n json = apiResponse.json();\n\n this._auth.setData(json).setRemember(options.remember);\n\n this.emit(this.events.loginSuccess, apiResponse);\n\n return context$2$0.abrupt('return', apiResponse);\n\n case 16:\n context$2$0.prev = 16;\n context$2$0.t0 = context$2$0['catch'](0);\n\n this._cache.clean();\n\n this.emit(this.events.loginError, context$2$0.t0);\n\n throw context$2$0.t0;\n\n case 21:\n case 'end':\n return context$2$0.stop();\n }\n }, null, this, [[0, 16]]);\n };\n\n /**\n * @returns {Promise}\n */\n\n Platform.prototype.refresh = function refresh() {\n var res, json;\n return regeneratorRuntime.async(function refresh$(context$2$0) {\n while (1) switch (context$2$0.prev = context$2$0.next) {\n case 0:\n context$2$0.prev = 0;\n\n this.emit(this.events.beforeRefresh);\n\n if (!this._queue.isPaused()) {\n context$2$0.next = 9;\n break;\n }\n\n context$2$0.next = 5;\n return regeneratorRuntime.awrap(this._queue.poll());\n\n case 5:\n if (this._isAccessTokenValid()) {\n context$2$0.next = 7;\n break;\n }\n\n throw new Error('Automatic authentification timeout');\n\n case 7:\n\n this.emit(this.events.refreshSuccess, null);\n\n return context$2$0.abrupt('return', null);\n\n case 9:\n\n this._queue.pause();\n\n // Make sure all existing AJAX calls had a chance to reach the server\n context$2$0.next = 12;\n return regeneratorRuntime.awrap(_coreUtils.delay(Platform._refreshDelayMs));\n\n case 12:\n if (this._auth.refreshToken()) {\n context$2$0.next = 14;\n break;\n }\n\n throw new Error('Refresh token is missing');\n\n case 14:\n if (this._auth.refreshTokenValid()) {\n context$2$0.next = 16;\n break;\n }\n\n throw new Error('Refresh token has expired');\n\n case 16:\n if (this._queue.isPaused()) {\n context$2$0.next = 18;\n break;\n }\n\n throw new Error('Queue was resumed before refresh call');\n\n case 18:\n context$2$0.next = 20;\n return regeneratorRuntime.awrap(this._tokenRequest(Platform._tokenEndpoint, {\n \"grant_type\": \"refresh_token\",\n \"refresh_token\": this._auth.refreshToken(),\n \"access_token_ttl\": Platform._accessTokenTtl,\n \"refresh_token_ttl\": this._auth.remember() ? Platform._refreshTokenTtlRemember : Platform._refreshTokenTtl\n }));\n\n case 20:\n res = context$2$0.sent;\n json = res.json();\n\n if (json.access_token) {\n context$2$0.next = 24;\n break;\n }\n\n throw this._client.makeError(new Error('Malformed OAuth response'), res);\n\n case 24:\n\n this._auth.setData(json);\n this._queue.resume();\n\n this.emit(this.events.refreshSuccess, res);\n\n return context$2$0.abrupt('return', res);\n\n case 30:\n context$2$0.prev = 30;\n context$2$0.t0 = context$2$0['catch'](0);\n\n context$2$0.t0 = this._client.makeError(context$2$0.t0);\n\n if (Platform._clearCacheOnRefreshError) {\n this._cache.clean();\n }\n\n this.emit(this.events.refreshError, context$2$0.t0);\n\n throw context$2$0.t0;\n\n case 36:\n case 'end':\n return context$2$0.stop();\n }\n }, null, this, [[0, 30]]);\n };\n\n /**\n * @returns {Promise}\n */\n\n Platform.prototype.logout = function logout() {\n var res;\n return regeneratorRuntime.async(function logout$(context$2$0) {\n while (1) switch (context$2$0.prev = context$2$0.next) {\n case 0:\n context$2$0.prev = 0;\n\n this.emit(this.events.beforeLogout);\n\n this._queue.pause();\n\n context$2$0.next = 5;\n return regeneratorRuntime.awrap(this._tokenRequest(Platform._revokeEndpoint, {\n token: this._auth.accessToken()\n }));\n\n case 5:\n res = context$2$0.sent;\n\n this._queue.resume();\n this._cache.clean();\n\n this.emit(this.events.logoutSuccess, res);\n\n return context$2$0.abrupt('return', res);\n\n case 12:\n context$2$0.prev = 12;\n context$2$0.t0 = context$2$0['catch'](0);\n\n this._queue.resume();\n\n this.emit(this.events.logoutError, context$2$0.t0);\n\n throw context$2$0.t0;\n\n case 17:\n case 'end':\n return context$2$0.stop();\n }\n }, null, this, [[0, 12]]);\n };\n\n /**\n * @param {Request} request\n * @param {object} [options]\n * @param {boolean} [options.skipAuthCheck]\n * @return {Promise}\n */\n\n Platform.prototype.inflateRequest = function inflateRequest(request, options) {\n return regeneratorRuntime.async(function inflateRequest$(context$2$0) {\n while (1) switch (context$2$0.prev = context$2$0.next) {\n case 0:\n\n options = options || {};\n\n if (!options.skipAuthCheck) {\n context$2$0.next = 3;\n break;\n }\n\n return context$2$0.abrupt('return', request);\n\n case 3:\n context$2$0.next = 5;\n return regeneratorRuntime.awrap(this._ensureAuthentication());\n\n case 5:\n\n request.headers.set('Authorization', this._authHeader());\n //request.url = this.createUrl(request.url, {addServer: true}); //FIXME Spec prevents this...\n\n //TODO Add User-Agent here\n\n return context$2$0.abrupt('return', request);\n\n case 7:\n case 'end':\n return context$2$0.stop();\n }\n }, null, this);\n };\n\n /**\n * @param {Request} request\n * @param {object} [options]\n * @param {boolean} [options.skipAuthCheck]\n * @return {Promise}\n */\n\n Platform.prototype.sendRequest = function sendRequest(request, options) {\n return regeneratorRuntime.async(function sendRequest$(context$2$0) {\n while (1) switch (context$2$0.prev = context$2$0.next) {\n case 0:\n context$2$0.prev = 0;\n context$2$0.next = 3;\n return regeneratorRuntime.awrap(this.inflateRequest(request, options));\n\n case 3:\n request = context$2$0.sent;\n context$2$0.next = 6;\n return regeneratorRuntime.awrap(this._client.sendRequest(request));\n\n case 6:\n return context$2$0.abrupt('return', context$2$0.sent);\n\n case 9:\n context$2$0.prev = 9;\n context$2$0.t0 = context$2$0['catch'](0);\n\n if (!(!context$2$0.t0.apiResponse || !context$2$0.t0.apiResponse.response() || context$2$0.t0.apiResponse.response().status != 401)) {\n context$2$0.next = 13;\n break;\n }\n\n throw context$2$0.t0;\n\n case 13:\n\n this._auth.cancelAccessToken();\n\n context$2$0.next = 16;\n return regeneratorRuntime.awrap(this.sendRequest(request, options));\n\n case 16:\n return context$2$0.abrupt('return', context$2$0.sent);\n\n case 17:\n case 'end':\n return context$2$0.stop();\n }\n }, null, this, [[0, 9]]);\n };\n\n /**\n * General purpose function to send anything to server\n * @param {string} options.url\n * @param {object} [options.body]\n * @param {string} [options.method]\n * @param {object} [options.query]\n * @param {object} [options.headers]\n * @param {boolean} [options.skipAuthCheck]\n * @return {Promise}\n */\n\n Platform.prototype.send = function send() {\n var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];\n return regeneratorRuntime.async(function send$(context$2$0) {\n while (1) switch (context$2$0.prev = context$2$0.next) {\n case 0:\n\n //FIXME https://github.com/bitinn/node-fetch/issues/43\n options.url = this.createUrl(options.url, { addServer: true });\n\n context$2$0.next = 3;\n return regeneratorRuntime.awrap(this.sendRequest(this._client.createRequest(options), options));\n\n case 3:\n return context$2$0.abrupt('return', context$2$0.sent);\n\n case 4:\n case 'end':\n return context$2$0.stop();\n }\n }, null, this);\n };\n\n /**\n * @param {string} url\n * @param {object} [query]\n * @param {object} [options]\n * @param {object} [options.headers]\n * @param {boolean} [options.skipAuthCheck]\n * @return {Promise}\n */\n\n Platform.prototype.get = function get(url, query, options) {\n return regeneratorRuntime.async(function get$(context$2$0) {\n while (1) switch (context$2$0.prev = context$2$0.next) {\n case 0:\n options = options || {};\n options.method = 'GET';\n options.url = url;\n options.query = query;\n context$2$0.next = 6;\n return regeneratorRuntime.awrap(this.send(options));\n\n case 6:\n return context$2$0.abrupt('return', context$2$0.sent);\n\n case 7:\n case 'end':\n return context$2$0.stop();\n }\n }, null, this);\n };\n\n /**\n * @param {string} url\n * @param {object} body\n * @param {object} [query]\n * @param {object} [options]\n * @param {object} [options.headers]\n * @param {boolean} [options.skipAuthCheck]\n * @return {Promise}\n */\n\n Platform.prototype.post = function post(url, body, query, options) {\n return regeneratorRuntime.async(function post$(context$2$0) {\n while (1) switch (context$2$0.prev = context$2$0.next) {\n case 0:\n options = options || {};\n options.method = 'POST';\n options.url = url;\n options.query = query;\n options.body = body;\n context$2$0.next = 7;\n return regeneratorRuntime.awrap(this.send(options));\n\n case 7:\n return context$2$0.abrupt('return', context$2$0.sent);\n\n case 8:\n case 'end':\n return context$2$0.stop();\n }\n }, null, this);\n };\n\n /**\n * @param {string} url\n * @param {object} [body]\n * @param {object} [query]\n * @param {object} [options]\n * @param {object} [options.headers]\n * @param {boolean} [options.skipAuthCheck]\n * @return {Promise}\n */\n\n Platform.prototype.put = function put(url, body, query, options) {\n return regeneratorRuntime.async(function put$(context$2$0) {\n while (1) switch (context$2$0.prev = context$2$0.next) {\n case 0:\n options = options || {};\n options.method = 'PUT';\n options.url = url;\n options.query = query;\n options.body = body;\n context$2$0.next = 7;\n return regeneratorRuntime.awrap(this.send(options));\n\n case 7:\n return context$2$0.abrupt('return', context$2$0.sent);\n\n case 8:\n case 'end':\n return context$2$0.stop();\n }\n }, null, this);\n };\n\n /**\n * @param {string} url\n * @param {string} [query]\n * @param {object} [options]\n * @param {object} [options.headers]\n * @param {boolean} [options.skipAuthCheck]\n * @return {Promise}\n */\n\n Platform.prototype['delete'] = function _delete(url, query, options) {\n return regeneratorRuntime.async(function _delete$(context$2$0) {\n while (1) switch (context$2$0.prev = context$2$0.next) {\n case 0:\n options = options || {};\n options.method = 'DELETE';\n options.url = url;\n options.query = query;\n context$2$0.next = 6;\n return regeneratorRuntime.awrap(this.send(options));\n\n case 6:\n return context$2$0.abrupt('return', context$2$0.sent);\n\n case 7:\n case 'end':\n return context$2$0.stop();\n }\n }, null, this);\n };\n\n Platform.prototype._tokenRequest = function _tokenRequest(path, body) {\n return regeneratorRuntime.async(function _tokenRequest$(context$2$0) {\n while (1) switch (context$2$0.prev = context$2$0.next) {\n case 0:\n context$2$0.next = 2;\n return regeneratorRuntime.awrap(this.send({\n url: path,\n skipAuthCheck: true,\n body: body,\n method: 'POST',\n headers: {\n 'Authorization': 'Basic ' + this._apiKey(),\n 'Content-Type': 'application/x-www-form-urlencoded'\n }\n }));\n\n case 2:\n return context$2$0.abrupt('return', context$2$0.sent);\n\n case 3:\n case 'end':\n return context$2$0.stop();\n }\n }, null, this);\n };\n\n Platform.prototype._ensureAuthentication = function _ensureAuthentication() {\n return regeneratorRuntime.async(function _ensureAuthentication$(context$2$0) {\n while (1) switch (context$2$0.prev = context$2$0.next) {\n case 0:\n if (!this._isAccessTokenValid()) {\n context$2$0.next = 2;\n break;\n }\n\n return context$2$0.abrupt('return', null);\n\n case 2:\n context$2$0.next = 4;\n return regeneratorRuntime.awrap(this.refresh());\n\n case 4:\n return context$2$0.abrupt('return', context$2$0.sent);\n\n case 5:\n case 'end':\n return context$2$0.stop();\n }\n }, null, this);\n };\n\n Platform.prototype._isAccessTokenValid = function _isAccessTokenValid() {\n\n return this._auth.accessTokenValid() && !this._queue.isPaused();\n };\n\n Platform.prototype._apiKey = function _apiKey() {\n var apiKey = this._appKey + ':' + this._appSecret;\n return typeof btoa == 'function' ? btoa(apiKey) : new Buffer(apiKey).toString('base64');\n };\n\n Platform.prototype._authHeader = function _authHeader() {\n var token = this._auth.accessToken();\n return this._auth.tokenType() + (token ? ' ' + token : '');\n };\n\n return Platform;\n})(_coreObservable2['default']);\n\nexports['default'] = Platform;\nmodule.exports = exports['default'];\n\n// Perform sanity checks\n\n/** @type {ApiResponse} */\n\n// Guard is for errors that come from polling\n\n/***/ },\n/* 17 */\n/***/ function(module, exports) {\n\n'use strict';\n\nexports.__esModule = true;\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nvar Auth = (function () {\n _createClass(Auth, null, [{\n key: 'refreshHandicapMs',\n value: 60 * 1000,\n // 1 minute\n enumerable: true\n }, {\n key: 'forcedTokenType',\n value: 'forced',\n enumerable: true\n }]);\n\n function Auth(cache, cacheId) {\n _classCallCheck(this, Auth);\n\n /** @type {Cache} */\n this._cache = cache;\n this._cacheId = cacheId;\n }\n\n //export interface IAuthData {\n // remember?:boolean;\n // token_type?:string;\n // access_token?:string;\n // expires_in?:number; // actually it's string\n // expire_time?:number;\n // refresh_token?:string;\n // refresh_token_expires_in?:number; // actually it's string\n // refresh_token_expire_time?:number;\n // scope?:string;\n //}\n\n Auth.prototype.accessToken = function accessToken() {\n return this.data().access_token;\n };\n\n Auth.prototype.refreshToken = function refreshToken() {\n return this.data().refresh_token;\n };\n\n Auth.prototype.tokenType = function tokenType() {\n return this.data().token_type;\n };\n\n /**\n * @return {{token_type: string, access_token: string, expires_in: number, refresh_token: string, refresh_token_expires_in: number}}\n */\n\n Auth.prototype.data = function data() {\n\n return this._cache.getItem(this._cacheId) || {\n token_type: '',\n access_token: '',\n expires_in: 0,\n refresh_token: '',\n refresh_token_expires_in: 0\n };\n };\n\n /**\n * @param {object} newData\n * @return {Auth}\n */\n\n Auth.prototype.setData = function setData(newData) {\n\n newData = newData || {};\n\n var data = this.data();\n\n Object.keys(newData).forEach(function (key) {\n data[key] = newData[key];\n });\n\n data.expire_time = Date.now() + data.expires_in * 1000;\n data.refresh_token_expire_time = Date.now() + data.refresh_token_expires_in * 1000;\n\n this._cache.setItem(this._cacheId, data);\n\n return this;\n };\n\n /**\n * Check if there is a valid (not expired) access token\n * @return {boolean}\n */\n\n Auth.prototype.accessTokenValid = function accessTokenValid() {\n\n var authData = this.data();\n return authData.token_type === Auth.forcedTokenType || authData.expire_time - Auth.refreshHandicapMs > Date.now();\n };\n\n /**\n * Check if there is a valid (not expired) access token\n * @return {boolean}\n */\n\n Auth.prototype.refreshTokenValid = function refreshTokenValid() {\n\n return this.data().refresh_token_expire_time > Date.now();\n };\n\n /**\n * @return {Auth}\n */\n\n Auth.prototype.cancelAccessToken = function cancelAccessToken() {\n\n return this.setData({\n access_token: '',\n expires_in: 0\n });\n };\n\n /**\n * This method sets a special authentication mode used in Service Web\n * @return {Auth}\n */\n\n Auth.prototype.forceAuthentication = function forceAuthentication() {\n\n this.setData({\n token_type: Auth.forcedTokenType,\n access_token: '',\n expires_in: 0,\n refresh_token: '',\n refresh_token_expires_in: 0\n });\n\n return this;\n };\n\n /**\n * @param remember\n * @return {Auth}\n */\n\n Auth.prototype.setRemember = function setRemember(remember) {\n\n return this.setData({ remember: remember });\n };\n\n /**\n * @return {boolean}\n */\n\n Auth.prototype.remember = function remember() {\n\n return !!this.data().remember;\n };\n\n return Auth;\n})();\n\nexports['default'] = Auth;\nmodule.exports = exports['default'];\n\n/***/ },\n/* 18 */\n/***/ function(module, exports, __webpack_require__) {\n\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nvar _PubnubMockJs = __webpack_require__(19);\n\nvar _PubnubMockJs2 = _interopRequireDefault(_PubnubMockJs);\n\nvar _coreExternals = __webpack_require__(3);\n\nvar PubnubMockFactory = (function () {\n function PubnubMockFactory() {\n _classCallCheck(this, PubnubMockFactory);\n\n this.crypto_obj = _coreExternals.PUBNUB.crypto_obj;\n }\n\n PubnubMockFactory.prototype.init = function init(options) {\n return new _PubnubMockJs2['default'](options);\n };\n\n return PubnubMockFactory;\n})();\n\nexports['default'] = PubnubMockFactory;\nmodule.exports = exports['default'];\n\n/***/ },\n/* 19 */\n/***/ function(module, exports, __webpack_require__) {\n\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _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; }\n\nvar _coreObservable = __webpack_require__(8);\n\nvar _coreObservable2 = _interopRequireDefault(_coreObservable);\n\nvar _coreExternals = __webpack_require__(3);\n\nvar PubnubMock = (function (_Observable) {\n _inherits(PubnubMock, _Observable);\n\n function PubnubMock(options) {\n _classCallCheck(this, PubnubMock);\n\n _Observable.call(this);\n this.options = options;\n this.crypto_obj = _coreExternals.PUBNUB.crypto_obj;\n }\n\n PubnubMock.prototype.ready = function ready() {};\n\n PubnubMock.prototype.subscribe = function subscribe(options) {\n this.on('message-' + options.channel, options.message);\n };\n\n PubnubMock.prototype.unsubscribe = function unsubscribe(options) {\n this.off('message-' + options.channel);\n };\n\n PubnubMock.prototype.receiveMessage = function receiveMessage(msg, channel) {\n this.emit('message-' + channel, msg, 'env', channel);\n };\n\n return PubnubMock;\n})(_coreObservable2['default']);\n\nexports['default'] = PubnubMock;\nmodule.exports = exports['default'];\n\n/***/ },\n/* 20 */\n/***/ function(module, exports, __webpack_require__) {\n\n'use strict';\n\nexports.__esModule = true;\n\nvar _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _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; }\n\nvar _coreObservable = __webpack_require__(8);\n\nvar _coreObservable2 = _interopRequireDefault(_coreObservable);\n\nvar _httpClient = __webpack_require__(10);\n\nvar _httpClient2 = _interopRequireDefault(_httpClient);\n\nvar _coreUtils = __webpack_require__(2);\n\nvar Subscription = (function (_Observable) {\n _inherits(Subscription, _Observable);\n\n _createClass(Subscription, null, [{\n key: '_renewHandicapMs',\n value: 2 * 60 * 1000,\n enumerable: true\n }, {\n key: '_pollInterval',\n value: 10 * 1000,\n enumerable: true\n }]);\n\n function Subscription(pubnubFactory, platform) {\n _classCallCheck(this, Subscription);\n\n _Observable.call(this);\n\n this.events = {\n notification: 'notification',\n removeSuccess: 'removeSuccess',\n removeError: 'removeError',\n renewSuccess: 'renewSuccess',\n renewError: 'renewError',\n subscribeSuccess: 'subscribeSuccess',\n subscribeError: 'subscribeError'\n };\n this._pubnubFactory = pubnubFactory;\n this._platform = platform;\n this._pubnub = null;\n this._timeout = null;\n this._subscription = {};\n }\n\n //export interface ISubscription {\n // id?:string;\n // uri?: string;\n // eventFilters?:string[];\n // expirationTime?:string; // 2014-03-12T19:54:35.613Z\n // expiresIn?:number;\n // deliveryMode?: {\n // transportType?:string;\n // encryption?:boolean;\n // address?:string;\n // subscriberKey?:string;\n // encryptionKey?:string;\n // secretKey?:string;\n // };\n // creationTime?:string; // 2014-03-12T19:54:35.613Z\n // status?:string; // Active\n //}\n\n Subscription.prototype.subscribed = function subscribed() {\n\n return !!(this._subscription.id && this._subscription.deliveryMode && this._subscription.deliveryMode.subscriberKey && this._subscription.deliveryMode.address);\n };\n\n /**\n * @return {boolean}\n */\n\n Subscription.prototype.alive = function alive() {\n\n return this.subscribed() && Date.now() < this.expirationTime();\n };\n\n Subscription.prototype.expirationTime = function expirationTime() {\n return new Date(this._subscription.expirationTime || 0).getTime() - Subscription._renewHandicapMs;\n };\n\n Subscription.prototype.setSubscription = function setSubscription(subscription) {\n\n subscription = subscription || {};\n\n this._clearTimeout();\n\n this._subscription = subscription;\n\n if (!this._pubnub) this._subscribeAtPubnub();\n\n this._setTimeout();\n\n return this;\n };\n\n Subscription.prototype.subscription = function subscription() {\n return this._subscription;\n };\n\n /**\n * Creates or updates subscription if there is an active one\n * @returns {Promise}\n */\n\n Subscription.prototype.register = function register() {\n return regeneratorRuntime.async(function register$(context$2$0) {\n while (1) switch (context$2$0.prev = context$2$0.next) {\n case 0:\n if (!this.alive()) {\n context$2$0.next = 6;\n break;\n }\n\n context$2$0.next = 3;\n return regeneratorRuntime.awrap(this.renew());\n\n case 3:\n return context$2$0.abrupt('return', context$2$0.sent);\n\n case 6:\n context$2$0.next = 8;\n return regeneratorRuntime.awrap(this.subscribe());\n\n case 8:\n return context$2$0.abrupt('return', context$2$0.sent);\n\n case 9:\n case 'end':\n return context$2$0.stop();\n }\n }, null, this);\n };\n\n Subscription.prototype.eventFilters = function eventFilters() {\n return this._subscription.eventFilters || [];\n };\n\n /**\n * @param {string[]} events\n * @return {Subscription}\n */\n\n Subscription.prototype.addEventFilters = function addEventFilters(events) {\n this.setEventFilters(this.eventFilters().concat(events));\n return this;\n };\n\n /**\n * @param {string[]} events\n * @return {Subscription}\n */\n\n Subscription.prototype.setEventFilters = function setEventFilters(events) {\n this._subscription.eventFilters = events;\n return this;\n };\n\n /**\n * @returns {Promise}\n */\n\n Subscription.prototype.subscribe = function subscribe() {\n var response, json;\n return regeneratorRuntime.async(function subscribe$(context$2$0) {\n while (1) switch (context$2$0.prev = context$2$0.next) {\n case 0:\n context$2$0.prev = 0;\n\n this._clearTimeout();\n\n if (this.eventFilters().length) {\n context$2$0.next = 4;\n break;\n }\n\n throw new Error('Events are undefined');\n\n case 4:\n context$2$0.next = 6;\n return regeneratorRuntime.awrap(this._platform.post('/restapi/v1.0/subscription', {\n eventFilters: this._getFullEventFilters(),\n deliveryMode: {\n transportType: 'PubNub'\n }\n }));\n\n case 6:\n response = context$2$0.sent;\n json = response.json();\n\n this.setSubscription(json).emit(this.events.subscribeSuccess, response);\n\n return context$2$0.abrupt('return', response);\n\n case 12:\n context$2$0.prev = 12;\n context$2$0.t0 = context$2$0['catch'](0);\n\n context$2$0.t0 = this._platform.client().makeError(context$2$0.t0);\n\n this.reset().emit(this.events.subscribeError, context$2$0.t0);\n\n throw context$2$0.t0;\n\n case 17:\n case 'end':\n return context$2$0.stop();\n }\n }, null, this, [[0, 12]]);\n };\n\n /**\n * @returns {Promise}\n */\n\n Subscription.prototype.renew = function renew() {\n var response, json;\n return regeneratorRuntime.async(function renew$(context$2$0) {\n while (1) switch (context$2$0.prev = context$2$0.next) {\n case 0:\n context$2$0.prev = 0;\n\n this._clearTimeout();\n\n if (this.alive()) {\n context$2$0.next = 4;\n break;\n }\n\n throw new Error('Subscription is not alive');\n\n case 4:\n if (this.eventFilters().length) {\n context$2$0.next = 6;\n break;\n }\n\n throw new Error('Events are undefined');\n\n case 6:\n context$2$0.next = 8;\n return regeneratorRuntime.awrap(this._platform.put('/restapi/v1.0/subscription/' + this._subscription.id, {\n eventFilters: this._getFullEventFilters()\n }));\n\n case 8:\n response = context$2$0.sent;\n json = response.json();\n\n this.setSubscription(json).emit(this.events.renewSuccess, response);\n\n return context$2$0.abrupt('return', response);\n\n case 14:\n context$2$0.prev = 14;\n context$2$0.t0 = context$2$0['catch'](0);\n\n context$2$0.t0 = this._platform.client().makeError(context$2$0.t0);\n\n this.reset().emit(this.events.renewError, context$2$0.t0);\n\n throw context$2$0.t0;\n\n case 19:\n case 'end':\n return context$2$0.stop();\n }\n }, null, this, [[0, 14]]);\n };\n\n /**\n * @returns {Promise}\n */\n\n Subscription.prototype.remove = function remove() {\n var response;\n return regeneratorRuntime.async(function remove$(context$2$0) {\n while (1) switch (context$2$0.prev = context$2$0.next) {\n case 0:\n context$2$0.prev = 0;\n\n if (this.subscribed()) {\n context$2$0.next = 3;\n break;\n }\n\n throw new Error('No subscription');\n\n case 3:\n context$2$0.next = 5;\n return regeneratorRuntime.awrap(this._platform['delete']('/restapi/v1.0/subscription/' + this._subscription.id));\n\n case 5:\n response = context$2$0.sent;\n\n this.reset().emit(this.events.removeSuccess, response);\n\n return context$2$0.abrupt('return', response);\n\n case 10:\n context$2$0.prev = 10;\n context$2$0.t0 = context$2$0['catch'](0);\n\n context$2$0.t0 = this._platform.client().makeError(context$2$0.t0);\n\n this.emit(this.events.removeError, context$2$0.t0);\n\n throw context$2$0.t0;\n\n case 15:\n case 'end':\n return context$2$0.stop();\n }\n }, null, this, [[0, 10]]);\n };\n\n /**\n * @returns {Promise}\n */\n\n Subscription.prototype.resubscribe = function resubscribe() {\n\n return this.reset().setEventFilters(this.eventFilters()).subscribe();\n };\n\n /**\n * Remove subscription and disconnect from PUBNUB\n * This method resets subscription at client side but backend is not notified\n */\n\n Subscription.prototype.reset = function reset() {\n this._clearTimeout();\n if (this.subscribed() && this._pubnub) this._pubnub.unsubscribe({ channel: this._subscription.deliveryMode.address });\n this._subscription = {};\n return this;\n };\n\n Subscription.prototype._getFullEventFilters = function _getFullEventFilters() {\n var _this = this;\n\n return this.eventFilters().map(function (event) {\n return _this._platform.createUrl(event);\n });\n };\n\n Subscription.prototype._setTimeout = function _setTimeout() {\n var _this2 = this;\n\n this._clearTimeout();\n\n if (!this.alive()) throw new Error('Subscription is not alive');\n\n _coreUtils.poll(function (next) {\n\n if (_this2.alive()) return next();\n\n _this2.renew();\n }, Subscription._pollInterval, this._timeout);\n\n return this;\n };\n\n Subscription.prototype._clearTimeout = function _clearTimeout() {\n\n _coreUtils.stopPolling(this._timeout);\n\n return this;\n };\n\n Subscription.prototype._decrypt = function _decrypt(message) {\n\n if (!this.subscribed()) throw new Error('No subscription');\n\n if (this._subscription.deliveryMode.encryptionKey) {\n\n var PUBNUB = this._pubnubFactory;\n\n message = PUBNUB.crypto_obj.decrypt(message, this._subscription.deliveryMode.encryptionKey, {\n encryptKey: false,\n keyEncoding: 'base64',\n keyLength: 128,\n mode: 'ecb'\n });\n }\n\n return message;\n };\n\n Subscription.prototype._notify = function _notify(message) {\n\n this.emit(this.events.notification, this._decrypt(message));\n\n return this;\n };\n\n Subscription.prototype._subscribeAtPubnub = function _subscribeAtPubnub() {\n\n if (!this.alive()) throw new Error('Subscription is not alive');\n\n var PUBNUB = this._pubnubFactory;\n\n this._pubnub = PUBNUB.init({\n ssl: true,\n subscribe_key: this._subscription.deliveryMode.subscriberKey\n });\n\n this._pubnub.ready();\n\n this._pubnub.subscribe({\n channel: this._subscription.deliveryMode.address,\n message: this._notify.bind(this),\n connect: function connect() {}\n });\n\n return this;\n };\n\n return Subscription;\n})(_coreObservable2['default']);\n\nexports['default'] = Subscription;\nmodule.exports = exports['default'];\n\n/***/ },\n/* 21 */\n/***/ function(module, exports, __webpack_require__) {\n\n'use strict';\n\nexports.__esModule = true;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }\n\nfunction _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; }\n\nvar _Subscription2 = __webpack_require__(20);\n\nvar _Subscription3 = _interopRequireDefault(_Subscription2);\n\nvar _coreQueue = __webpack_require__(9);\n\nvar _coreQueue2 = _interopRequireDefault(_coreQueue);\n\nvar CachedSubscription = (function (_Subscription) {\n _inherits(CachedSubscription, _Subscription);\n\n function CachedSubscription(pubnubFactory, platform, cache, cacheKey) {\n var _this = this;\n\n _classCallCheck(this, CachedSubscription);\n\n _Subscription.call(this, pubnubFactory, platform);\n\n this._cache = cache;\n this._cacheKey = cacheKey;\n this._renewQueue = new _coreQueue2['default'](this._cache, cacheKey + '-renew');\n this._resubscribeQueue = new _coreQueue2['default'](this._cache, cacheKey + '-resubscribe');\n\n this.events = _extends({}, this.events, {\n queuedRenewSuccess: 'queuedRenewSuccess',\n queuedRenewError: 'queuedRenewError',\n queuedResubscribeSuccess: 'queuedResubscribeSuccess',\n queuedResubscribeError: 'queuedResubscribeError'\n });\n\n this.on(this.events.renewError, function () {\n _this.resubscribe();\n });\n\n this.on([this.events.subscribeSuccess, this.events.renewSuccess], function () {\n _this._cache.setItem(_this._cacheKey, _this.subscription());\n });\n\n this.on(this.events.removeSuccess, function () {\n _this._cache.removeItem(_this._cacheKey);\n });\n }\n\n /**\n * TODO Combine with Platform.refresh and move elsewhere\n * @param actionCb\n * @param queue\n * @param successEvent\n * @param errorEvent\n * @param errorMessage\n * @return {*}\n * @private\n */\n\n CachedSubscription.prototype._queue = function _queue(actionCb, queue, successEvent, errorEvent, errorMessage) {\n var res;\n return regeneratorRuntime.async(function _queue$(context$2$0) {\n while (1) switch (context$2$0.prev = context$2$0.next) {\n case 0:\n context$2$0.prev = 0;\n\n if (!queue.isPaused()) {\n context$2$0.next = 8;\n break;\n }\n\n context$2$0.next = 4;\n return regeneratorRuntime.awrap(queue.poll());\n\n case 4:\n if (this.alive()) {\n context$2$0.next = 6;\n break;\n }\n\n throw new Error(errorMessage);\n\n case 6:\n\n this.emit(successEvent, null);\n\n return context$2$0.abrupt('return', null);\n\n case 8:\n\n queue.pause();\n\n context$2$0.next = 11;\n return regeneratorRuntime.awrap(actionCb.call(this));\n\n case 11:\n res = context$2$0.sent;\n\n queue.resume();\n\n this.emit(successEvent, res);\n\n return context$2$0.abrupt('return', res);\n\n case 17:\n context$2$0.prev = 17;\n context$2$0.t0 = context$2$0['catch'](0);\n\n this.emit(errorEvent, context$2$0.t0);\n\n throw context$2$0.t0;\n\n case 21:\n case 'end':\n return context$2$0.stop();\n }\n }, null, this, [[0, 17]]);\n };\n\n /**\n * @returns {Promise}\n */\n\n CachedSubscription.prototype.renew = function renew() {\n\n return this._queue(_Subscription.prototype.renew, this._renewQueue, this.events.queuedRenewSuccess, this.events.queuedRenewError, 'Subscription is not alive after renew timeout');\n };\n\n /**\n * @returns {Promise}\n */\n\n CachedSubscription.prototype.resubscribe = function resubscribe() {\n\n return this._queue(_Subscription.prototype.resubscribe, this._resubscribeQueue, this.events.queuedResubscribeSuccess, this.events.queuedResubscribeError, 'Subscription is not alive after resubscribe timeout');\n };\n\n /**\n * @param {string[]} events\n * @return {CachedSubscription}\n */\n\n CachedSubscription.prototype.restore = function restore(events) {\n\n var cachedSubscriptionData = this._cache.getItem(this._cacheKey);\n\n if (cachedSubscriptionData) {\n try {\n this.setSubscription(cachedSubscriptionData);\n } catch (e) {}\n } else {\n this.setEventFilters(events);\n }\n\n return this;\n };\n\n return CachedSubscription;\n})(_Subscription3['default']);\n\nexports['default'] = CachedSubscription;\nmodule.exports = exports['default'];\n\n/***/ },\n/* 22 */\n/***/ function(module, exports) {\n\n/* WEBPACK VAR INJECTION */(function(global) {/**\n * Copyright (c) 2014, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * https://raw.github.com/facebook/regenerator/master/LICENSE file. An\n * additional grant of patent rights can be found in the PATENTS file in\n * the same directory.\n */\n\n!(function(global) {\n \"use strict\";\n\n var hasOwn = Object.prototype.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n var inModule = typeof module === \"object\";\n var runtime = global.regeneratorRuntime;\n if (runtime) {\n if (inModule) {\n // If regeneratorRuntime is defined globally and we're in a module,\n // make the exports object identical to regeneratorRuntime.\n module.exports = runtime;\n }\n // Don't bother evaluating the rest of this file if the runtime was\n // already defined globally.\n return;\n }\n\n // Define the runtime globally (as expected by generated code) as either\n // module.exports (if we're in a module) or a new, empty object.\n runtime = global.regeneratorRuntime = inModule ? module.exports : {};\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided, then outerFn.prototype instanceof Generator.\n var generator = Object.create((outerFn || Generator).prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n runtime.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype;\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] = GeneratorFunction.displayName = \"GeneratorFunction\";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n runtime.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n runtime.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = \"GeneratorFunction\";\n }\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `value instanceof AwaitArgument` to determine if the yielded value is\n // meant to be awaited. Some may consider the name of this method too\n // cutesy, but they are curmudgeons.\n runtime.awrap = function(arg) {\n return new AwaitArgument(arg);\n };\n\n function AwaitArgument(arg) {\n this.arg = arg;\n }\n\n function AsyncIterator(generator) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value instanceof AwaitArgument) {\n return Promise.resolve(value.arg).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return Promise.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration. If the Promise is rejected, however, the\n // result for this iteration will be rejected with the same\n // reason. Note that rejections of yielded Promises are not\n // thrown back into the generator function, as is the case\n // when an awaited Promise is rejected. This difference in\n // behavior between yield and await is important, because it\n // allows the consumer to decide what to do with the yielded\n // rejection (swallow it and continue, manually .throw it back\n // into the generator, abandon iteration, whatever). With\n // await, by contrast, there is no opportunity to examine the\n // rejection reason outside the generator function, so the\n // only option is to throw it from the await expression, and\n // let the generator function handle the exception.\n result.value = unwrapped;\n resolve(result);\n }, reject);\n }\n }\n\n if (typeof process === \"object\" && process.domain) {\n invoke = process.domain.bind(invoke);\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new Promise(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n runtime.async = function(innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList)\n );\n\n return runtime.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n if (method === \"return\" ||\n (method === \"throw\" && delegate.iterator[method] === undefined)) {\n // A return or throw (when the delegate iterator has no throw\n // method) always terminates the yield* loop.\n context.delegate = null;\n\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n var returnMethod = delegate.iterator[\"return\"];\n if (returnMethod) {\n var record = tryCatch(returnMethod, delegate.iterator, arg);\n if (record.type === \"throw\") {\n // If the return method threw an exception, let that\n // exception prevail over the original return or throw.\n method = \"throw\";\n arg = record.arg;\n continue;\n }\n }\n\n if (method === \"return\") {\n // Continue with the outer return, now that the delegate\n // iterator has been terminated.\n continue;\n }\n }\n\n var record = tryCatch(\n delegate.iterator[method],\n delegate.iterator,\n arg\n );\n\n if (record.type === \"throw\") {\n context.delegate = null;\n\n // Like returning generator.throw(uncaught), but without the\n // overhead of an extra function call.\n method = \"throw\";\n arg = record.arg;\n continue;\n }\n\n // Delegate generator ran and handled its own exceptions so\n // regardless of what the method was, we continue as if it is\n // \"next\" with an undefined arg.\n method = \"next\";\n arg = undefined;\n\n var info = record.arg;\n if (info.done) {\n context[delegate.resultName] = info.value;\n context.next = delegate.nextLoc;\n } else {\n state = GenStateSuspendedYield;\n return info;\n }\n\n context.delegate = null;\n }\n\n if (method === \"next\") {\n if (state === GenStateSuspendedYield) {\n context.sent = arg;\n } else {\n context.sent = undefined;\n }\n\n } else if (method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw arg;\n }\n\n if (context.dispatchException(arg)) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n method = \"next\";\n arg = undefined;\n }\n\n } else if (method === \"return\") {\n context.abrupt(\"return\", arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n var info = {\n value: record.arg,\n done: context.done\n };\n\n if (record.arg === ContinueSentinel) {\n if (context.delegate && method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n arg = undefined;\n }\n } else {\n return info;\n }\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(arg) call above.\n method = \"throw\";\n arg = record.arg;\n }\n }\n };\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp[toStringTagSymbol] = \"Generator\";\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n runtime.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n runtime.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n this.sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n return !!caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.next = finallyEntry.finallyLoc;\n } else {\n this.complete(record);\n }\n\n return ContinueSentinel;\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = record.arg;\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n return ContinueSentinel;\n }\n };\n})(\n // Among the various tricks for obtaining a reference to the global\n // object, this seems to be the most reliable technique that does not\n // use indirect eval (which violates Content Security Policy).\n typeof global === \"object\" ? global :\n typeof window === \"object\" ? window :\n typeof self === \"object\" ? self : this\n);\n\n/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))\n\n/***/ }\n/******/ ])\n});\n;\n"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/build/\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap 5bfcaff1f71afd7618c8\n **/","import * as Utils from './core/Utils';\nimport Cache from './core/Cache';\nimport * as Externals from './core/Externals';\nimport Observable from './core/Observable';\nimport Queue from './core/Queue';\n\nimport Client from './http/Client';\nimport ApiResponse from './http/ApiResponse';\nimport * as HttpUtils from './http/Utils';\n\nimport {default as ClientMock} from './mocks/ClientMock';\nimport Mock from './mocks/Mock';\nimport Registry from './mocks/Registry';\n\nimport Platform from './platform/Platform';\nimport Auth from './platform/Auth';\n\nimport PubnubMockFactory from './pubnub/PubnubFactory';\n\nimport Subscription from './subscription/Subscription';\nimport CachedSubscription from './subscription/CachedSubscription';\n\nrequire(\"regenerator/runtime\");\n\nexport default class SDK {\n\n static version = '2.0.1';\n\n static server = {\n sandbox: 'https://platform.devtest.ringcentral.com',\n production: 'https://platform.ringcentral.com'\n };\n\n /**\n * @constructor\n * @param {object} [options]\n * @param {string} [options.server]\n * @param {string} [options.cachePrefix]\n * @param {string} [options.appSecret]\n * @param {string} [options.appKey]\n * @param {string} [options.appName]\n * @param {string} [options.appVersion]\n * @param {string} [options.pubnubFactory]\n * @param {string} [options.client]\n */\n constructor(options) {\n\n options = options || {};\n\n this._cache = new Cache(Externals.localStorage, options.cachePrefix);\n\n this._client = options.client || new Client();\n\n this._platform = new Platform(this._client, this._cache, options.server, options.appKey, options.appSecret);\n\n this._pubnubFactory = options.pubnubFactory || Externals.PUBNUB;\n\n }\n\n /**\n * @return {Platform}\n */\n platform() {\n return this._platform;\n }\n\n /**\n * @return {Subscription}\n */\n createSubscription() {\n return new Subscription(this._pubnubFactory, this._platform);\n }\n\n /**\n * @return {CachedSubscription}\n */\n createCachedSubscription(cacheKey) {\n return new CachedSubscription(this._pubnubFactory, this._platform, this._cache, cacheKey);\n }\n\n /**\n * @return {Cache}\n */\n cache() {\n return this._cache;\n }\n\n static core = {\n Cache: Cache,\n Observable: Observable,\n Utils: Utils,\n Externals: Externals,\n Queue: Queue\n };\n\n static http = {\n Client: Client,\n ApiResponse: ApiResponse,\n Utils: HttpUtils\n };\n\n static platform = {\n Auth: Auth,\n Platform: Platform\n };\n\n static subscription = {\n Subscription: Subscription\n };\n\n static mocks = {\n Client: ClientMock,\n Registry: Registry,\n Mock: Mock\n };\n\n static pubnub = {\n PubnubMockFactory: PubnubMockFactory\n };\n\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/SDK.js\n **/","import {Promise} from './Externals.js';\n\n/**\n * TODO Replace with something better\n * @see https://github.com/joyent/node/blob/master/lib/querystring.js\n * @param {object} parameters\n * @returns {string}\n */\nexport function queryStringify(parameters) {\n\n var array = [];\n\n parameters = parameters || {};\n\n Object.keys(parameters).forEach((k) => {\n\n var v = parameters[k];\n\n if (isArray(v)) {\n v.forEach((vv) => {\n array.push(encodeURIComponent(k) + '=' + encodeURIComponent(vv));\n });\n } else {\n array.push(encodeURIComponent(k) + '=' + encodeURIComponent(v));\n }\n\n });\n\n return array.join('&');\n\n}\n\n/**\n * TODO Replace with something better\n * @see https://github.com/joyent/node/blob/master/lib/querystring.js\n * @param {string} queryString\n * @returns {object}\n */\nexport function parseQueryString(queryString) {\n\n var argsParsed = {};\n\n queryString.split('&').forEach((arg) => {\n\n arg = decodeURIComponent(arg);\n\n if (arg.indexOf('=') == -1) {\n\n argsParsed[arg.trim()] = true;\n\n } else {\n\n var pair = arg.split('='),\n key = pair[0].trim(),\n value = pair[1].trim();\n\n if (key in argsParsed) {\n if (key in argsParsed && !isArray(argsParsed[key])) argsParsed[key] = [argsParsed[key]];\n argsParsed[key].push(value);\n } else {\n argsParsed[key] = value;\n }\n\n }\n\n });\n\n return argsParsed;\n\n}\n\n/**\n * @param obj\n * @return {boolean}\n */\nexport function isFunction(obj) {\n return typeof obj === \"function\";\n}\n\n/**\n * @param obj\n * @return {boolean}\n */\nexport function isArray(obj) {\n return Array.isArray ? Array.isArray(obj) : typeof obj === \"array\";\n}\n\n/**\n * @param fn\n * @param interval\n * @param timeout\n */\nexport function poll(fn, interval, timeout) { //NodeJS.Timer|number\n\n module.exports.stopPolling(timeout);\n\n interval = interval || 1000;\n\n var next = (delay) => {\n\n delay = delay || interval;\n\n interval = delay;\n\n return setTimeout(() => {\n\n fn(next, delay);\n\n }, delay);\n\n };\n\n return next();\n\n}\n\nexport function stopPolling(timeout) {\n if (timeout) clearTimeout(timeout);\n}\n\nexport function isNodeJS() {\n return (typeof process !== 'undefined');\n}\n\nexport function isBrowser() {\n return (typeof window !== 'undefined');\n}\n\nexport function delay(timeout) {\n return new Promise((resolve, reject) => {\n setTimeout(() => {\n resolve(null);\n }, timeout);\n });\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/core/Utils.js\n **/","import ES6Promise from 'es6-promise';\nimport nodeFetch from 'node-fetch';\nimport pubnub from 'pubnub';\n\nvar root = (new Function('return this'))();\n\nexport var Promise = (ES6Promise && ES6Promise.Promise) || root.Promise;\n\nexport var fetch = root.fetch || nodeFetch;\nexport var Request = root.Request || fetch.Request;\nexport var Response = root.Response || fetch.Response;\nexport var Headers = root.Headers || fetch.Headers;\n\nexport var PUBNUB = root.PUBNUB || pubnub;\n\nexport var localStorage = (typeof root.localStorage !== 'undefined') ? root.localStorage : {};\n\n\n/** WEBPACK FOOTER **\n ** ./src/core/Externals.js\n **/","module.exports = __WEBPACK_EXTERNAL_MODULE_4__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external {\"commonjs\":\"es6-promise\",\"commonjs2\":\"es6-promise\"}\n ** module id = 4\n ** module chunks = 0\n **/","module.exports = __WEBPACK_EXTERNAL_MODULE_5__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external {\"commonjs\":\"node-fetch\",\"commonjs2\":\"node-fetch\"}\n ** module id = 5\n ** module chunks = 0\n **/","module.exports = __WEBPACK_EXTERNAL_MODULE_6__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external {\"commonjs\":\"pubnub\",\"commonjs2\":\"pubnub\",\"amd\":\"pubnub\"}\n ** module id = 6\n ** module chunks = 0\n **/","export default class Cache {\n\n static defaultPrefix = 'rc-';\n\n constructor(storage, prefix) {\n this.setPrefix(prefix);\n this._storage = storage;\n }\n\n setPrefix(prefix) {\n this._prefix = prefix || Cache.defaultPrefix;\n return this;\n }\n\n setItem(key, data) {\n this._storage[this._prefixKey(key)] = JSON.stringify(data);\n return this;\n }\n\n removeItem(key) {\n delete this._storage[this._prefixKey(key)];\n return this;\n }\n\n getItem(key) {\n var item = this._storage[this._prefixKey(key)];\n if (!item) return null;\n return JSON.parse(item);\n }\n\n clean() {\n\n for (var key in this._storage) {\n\n if (!this._storage.hasOwnProperty(key)) continue;\n\n if (key.indexOf(this._prefix) === 0) {\n delete this._storage[key];\n }\n\n }\n\n return this;\n\n }\n\n _prefixKey(key) {\n return this._prefix + key;\n }\n\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/core/Cache.js\n **/","export default class Observable {\n\n constructor() {\n this.off();\n }\n\n hasListeners(event) {\n return (event in this._listeners);\n }\n\n on(events, callback) {\n\n if (typeof events == 'string') events = [events];\n if (!events) throw new Error('No events to subscribe to');\n if (typeof callback !== 'function') throw new Error('Callback must be a function');\n\n events.forEach((event) => {\n\n if (!this.hasListeners(event)) this._listeners[event] = [];\n\n this._listeners[event].push(callback);\n\n });\n\n return this;\n\n }\n\n emit(event, ...args) {\n\n var result = null;\n\n if (!this.hasListeners(event)) return null;\n\n this._listeners[event].some((callback) => {\n\n result = callback.apply(this, args);\n return (result === false);\n\n });\n\n return result;\n\n }\n\n off(event, callback) {\n\n if (!event) {\n\n this._listeners = {};\n\n } else {\n\n if (!callback) {\n\n delete this._listeners[event];\n\n } else {\n\n if (!this.hasListeners(event)) return this;\n\n this._listeners[event].forEach((cb, i) => {\n\n if (cb === callback) delete this._listeners[event][i];\n\n });\n\n }\n\n }\n\n return this;\n\n }\n\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/core/Observable.js\n **/","import {Promise} from '../core/Externals';\nimport {poll, stopPolling} from './Utils';\n\nexport default class Queue {\n\n static _pollInterval = 250;\n static _releaseTimeout = 5000;\n\n constructor(cache, cacheId) {\n\n this._cache = cache;\n this._cacheId = cacheId;\n this._promise = null;\n\n }\n\n isPaused() {\n\n var time = this._cache.getItem(this._cacheId);\n\n return !!time && Date.now() - parseInt(time) < Queue._releaseTimeout;\n }\n\n pause() {\n this._cache.setItem(this._cacheId, Date.now());\n return this;\n }\n\n resume() {\n this._cache.removeItem(this._cacheId);\n return this;\n }\n\n poll() {\n\n if (this._promise) return this._promise;\n\n this._promise = new Promise((resolve, reject) => {\n\n poll((next) => {\n\n if (this.isPaused()) return next();\n\n this._promise = null;\n\n this.resume(); // this is actually not needed but why not\n\n resolve(null);\n\n }, Queue._pollInterval);\n\n });\n\n return this._promise;\n\n }\n\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/core/Queue.js\n **/","import {fetch, Request, Response, Headers, Promise} from '../core/Externals';\nimport {queryStringify} from '../core/Utils';\nimport {findHeaderName} from './Utils';\nimport Observable from '../core/Observable';\nimport ApiResponse from './ApiResponse';\n\nexport default class Client extends Observable {\n\n static _allowedMethods = ['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'OPTIONS', 'HEAD'];\n\n events = {\n beforeRequest: 'beforeRequest',\n requestSuccess: 'requestSuccess',\n requestError: 'requestError'\n };\n\n /**\n * @param {Request} request\n * @return {Promise}\n */\n async sendRequest(request) {\n\n var apiResponse = new ApiResponse(request);\n\n try {\n\n //TODO Stop request if listeners return false\n this.emit(this.events.beforeRequest, apiResponse);\n\n apiResponse._response = await this._loadResponse(request);\n\n if (apiResponse._isMultipart() || apiResponse._isJson()) {\n apiResponse._text = await apiResponse.response().text();\n }\n\n if (!apiResponse.ok()) throw new Error('Response has unsuccessful status');\n\n this.emit(this.events.requestSuccess, apiResponse);\n\n return apiResponse;\n\n } catch (e) {\n\n if (!e.apiResponse) e = this.makeError(e, apiResponse);\n\n this.emit(this.events.requestError, e);\n\n throw e;\n\n }\n\n }\n\n /**\n * @param {Request} request\n * @return {Promise}\n * @private\n */\n async _loadResponse(request) {\n return await fetch.call(null, request);\n }\n\n /**\n * Wraps the JS Error object with transaction information\n * @param {Error|IApiError} e\n * @param {ApiResponse} apiResponse\n * @return {IApiError}\n */\n makeError(e, apiResponse) {\n\n // Wrap only if regular error\n if (!e.hasOwnProperty('apiResponse') && !e.hasOwnProperty('originalMessage')) {\n\n e.apiResponse = apiResponse;\n e.originalMessage = e.message;\n e.message = (apiResponse && apiResponse.error(true)) || e.originalMessage;\n\n }\n\n return e;\n\n }\n\n /**\n *\n * @param {object} init\n * @param {object} [init.url]\n * @param {object} [init.body]\n * @param {string} [init.method]\n * @param {object} [init.query]\n * @param {object} [init.headers]\n * @return {Request}\n */\n createRequest(init) {\n\n init = init || {};\n init.headers = init.headers || {};\n\n // Sanity checks\n if (!init.url) throw new Error('Url is not defined');\n if (!init.method) init.method = 'GET';\n if (init.method && Client._allowedMethods.indexOf(init.method) < 0) throw new Error('Method has wrong value: ' + init.method);\n\n // Defaults\n init.credentials = init.credentials || 'include';\n init.mode = init.mode || 'cors';\n\n // Append Query String\n if (init.query) {\n init.url = init.url + (init.url.indexOf('?') > -1 ? '&' : '?') + queryStringify(init.query);\n }\n\n if (!(findHeaderName('Accept', init.headers))) {\n init.headers['Accept'] = ApiResponse._jsonContentType;\n }\n\n // Serialize body\n //TODO Check that body is a plain object\n if (typeof init.body !== 'string' || !init.body) {\n\n var contentTypeHeaderName = findHeaderName(ApiResponse._contentType, init.headers);\n\n if (!contentTypeHeaderName) {\n contentTypeHeaderName = ApiResponse._contentType;\n init.headers[contentTypeHeaderName] = ApiResponse._jsonContentType;\n }\n\n var contentType = init.headers[contentTypeHeaderName];\n\n // Assign a new encoded body\n if (contentType.indexOf(ApiResponse._jsonContentType) > -1) {\n init.body = JSON.stringify(init.body);\n } else if (contentType.indexOf(ApiResponse._urlencodedContentType) > -1) {\n init.body = queryStringify(init.body);\n }\n\n }\n\n // Create a request with encoded body\n var req = new Request(init.url, init);\n\n // Keep the original body accessible directly (for mocks)\n req.originalBody = init.body;\n\n return req;\n\n }\n\n}\n\n/**\n * @name IApiError\n * @property {string} stack\n * @property {string} originalMessage\n * @property {ApiResponse} apiResponse\n */\n\n\n/** WEBPACK FOOTER **\n ** ./src/http/Client.js\n **/","import {fetch, Request, Response, Headers, Promise} from '../core/Externals';\nimport * as utils from '../core/Utils';\n\n/**\n * Creates a response\n * @param stringBody\n * @param init\n * @return {Response}\n */\nexport function createResponse(stringBody, init) {\n\n init = init || {};\n\n var response = new Response(stringBody, init);\n\n //TODO Wait for https://github.com/bitinn/node-fetch/issues/38\n if (utils.isNodeJS()) {\n\n response._text = stringBody;\n response._decode = function() {\n return this._text;\n };\n\n }\n\n return response;\n\n}\n\nexport function findHeaderName(name, headers) {\n name = name.toLowerCase();\n return Object.keys(headers).reduce(function(res, key) {\n if (res) return res;\n if (name == key.toLowerCase()) return key;\n return res;\n }, null);\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/http/Utils.js\n **/","import {fetch, Request, Response, Headers, Promise} from '../core/Externals';\nimport * as utils from './Utils';\n\nexport default class ApiResponse {\n\n static _contentType = 'Content-Type';\n static _jsonContentType = 'application/json';\n static _multipartContentType = 'multipart/mixed';\n static _urlencodedContentType = 'application/x-www-form-urlencoded';\n static _headerSeparator = ':';\n static _bodySeparator = '\\n\\n';\n static _boundarySeparator = '--';\n\n /**\n * @param {Request} request\n * @param {Response} response\n * @param {string} responseText\n */\n constructor(request, response, responseText) {\n\n /** @type {Request} */\n this._request = request;\n\n /** @type {Response} */\n this._response = response;\n\n this._text = responseText;\n this._json = null;\n this._multipart = [];\n\n }\n\n /**\n * @return {Response}\n */\n response() {\n return this._response;\n }\n\n /**\n * @return {Request}\n */\n request() {\n return this._request;\n }\n\n /**\n * @return {boolean}\n */\n ok() {\n return this._response && this._response.ok;\n }\n\n /**\n * @return {string}\n */\n text() {\n if (!this._isJson() && !this._isMultipart()) throw new Error('Response is not text');\n return this._text;\n }\n\n /**\n * @return {object}\n */\n json() {\n if (!this._isJson()) throw new Error('Response is not JSON');\n if (!this._json) {\n this._json = this._text ? JSON.parse(this._text) : null;\n }\n return this._json;\n }\n\n /**\n * @param [skipOKCheck]\n * @return {string}\n */\n error(skipOKCheck) {\n\n if (this.ok() && !skipOKCheck) return null;\n\n var message = (this._response && this._response.status ? this._response.status + ' ' : '') +\n (this._response && this._response.statusText ? this._response.statusText : '');\n\n try {\n\n if (this.json().message) message = this.json().message;\n if (this.json().error_description) message = this.json().error_description;\n if (this.json().description) message = this.json().description;\n\n } catch (e) {}\n\n return message;\n\n }\n\n /**\n * @return {ApiResponse[]}\n */\n multipart() {\n\n if (!this._isMultipart()) throw new Error('Response is not multipart');\n\n if (!this._multipart.length) {\n\n // Step 1. Split multipart response\n\n var text = this.text();\n\n if (!text) throw new Error('No response body');\n\n var boundary = this._getContentType().match(/boundary=([^;]+)/i)[1];\n\n if (!boundary) throw new Error('Cannot find boundary');\n\n var parts = text.toString().split(ApiResponse._boundarySeparator + boundary);\n\n if (parts[0].trim() === '') parts.shift();\n if (parts[parts.length - 1].trim() == ApiResponse._boundarySeparator) parts.pop();\n\n if (parts.length < 1) throw new Error('No parts in body');\n\n // Step 2. Parse status info\n\n var statusInfo = ApiResponse.create(parts.shift(), this._response.status, this._response.statusText).json();\n\n // Step 3. Parse all other parts\n\n this._multipart = parts.map((part:string, i) => {\n\n var status = statusInfo.response[i].status;\n\n return ApiResponse.create(part, status);\n\n });\n\n }\n\n return this._multipart;\n\n }\n\n _isContentType(contentType) {\n return this._getContentType().indexOf(contentType) > -1;\n }\n\n _getContentType() {\n return this._response.headers.get(ApiResponse._contentType) || '';\n }\n\n _isMultipart() {\n return this._isContentType(ApiResponse._multipartContentType);\n }\n\n _isUrlEncoded() {\n return this._isContentType(ApiResponse._urlencodedContentType);\n }\n\n _isJson() {\n return this._isContentType(ApiResponse._jsonContentType);\n }\n\n /**\n * Method is used to create ApiResponse object from string parts of multipart/mixed response\n * @param {string} [text]\n * @param {number} [status]\n * @param {string} [statusText]\n * @return {ApiResponse}\n */\n static create(text, status, statusText) {\n\n text = text || '';\n status = status || 200;\n statusText = statusText || 'OK';\n\n text = text.replace(/\\r/g, '');\n\n var headers = new Headers(),\n headersAndBody = text.split(ApiResponse._bodySeparator),\n headersText = (headersAndBody.length > 1) ? headersAndBody.shift() : '';\n\n text = headersAndBody.join(ApiResponse._bodySeparator);\n\n (headersText || '')\n .split('\\n')\n .forEach((header:string) => {\n\n var split = header.trim().split(ApiResponse._headerSeparator),\n key = split.shift().trim(),\n value = split.join(ApiResponse._headerSeparator).trim();\n\n if (key) headers.append(key, value);\n\n });\n\n return new ApiResponse(null, utils.createResponse(text, {\n headers: headers,\n status: status,\n statusText: statusText\n }), text);\n\n }\n\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/http/ApiResponse.js\n **/","import Registry from './Registry';\nimport {default as HttpClient} from '../http/Client';\n\nexport default class Client extends HttpClient {\n\n constructor() {\n super();\n this._registry = new Registry();\n }\n\n registry() {\n return this._registry;\n }\n\n async _loadResponse(request) {\n\n var mock = this._registry.find(request);\n\n return await mock.getResponse(request);\n\n }\n\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/mocks/ClientMock.js\n **/","import Mock from './Mock';\n\nexport default class Registry {\n\n constructor() {\n this._mocks = [];\n }\n\n add(mock) {\n this._mocks.push(mock);\n return this;\n }\n\n clear() {\n this._mocks = [];\n return this;\n }\n\n find(request) {\n\n //console.log('Registry is looking for', request);\n\n var mock = this._mocks.shift();\n\n if (!mock) throw new Error('No mock in registry for request ' + request.method + ' ' + request.url);\n\n if (!mock.test(request)) throw new Error('Wrong request ' + request.method + ' ' + request.url +\n ' for expected mock ' + mock.method() + ' ' + mock.path());\n\n return mock;\n\n }\n\n apiCall(method:string, path:string, response:any, status, statusText) {\n\n this.add(new Mock(method, path, response, status, statusText));\n\n return this;\n\n }\n\n authentication() {\n\n this.apiCall('POST', '/restapi/oauth/token', {\n 'access_token': 'ACCESS_TOKEN',\n 'token_type': 'bearer',\n 'expires_in': 3600,\n 'refresh_token': 'REFRESH_TOKEN',\n 'refresh_token_expires_in': 60480,\n 'scope': 'SMS RCM Foo Boo',\n 'expireTime': new Date().getTime() + 3600000\n });\n\n return this;\n\n }\n\n logout() {\n\n this.apiCall('POST', '/restapi/oauth/revoke', {});\n\n return this;\n\n }\n\n presenceLoad(id) {\n\n this.apiCall('GET', '/restapi/v1.0/account/~/extension/' + id + '/presence', {\n \"uri\": \"https://platform.ringcentral.com/restapi/v1.0/account/123/extension/\" + id + \"/presence\",\n \"extension\": {\n \"uri\": \"https://platform.ringcentral.com/restapi/v1.0/account/123/extension/\" + id,\n \"id\": id,\n \"extensionNumber\": \"101\"\n },\n \"activeCalls\": [],\n \"presenceStatus\": \"Available\",\n \"telephonyStatus\": \"Ringing\",\n \"userStatus\": \"Available\",\n \"dndStatus\": \"TakeAllCalls\",\n \"extensionId\": id\n });\n\n return this;\n\n }\n\n subscribeGeneric(expiresIn) {\n\n expiresIn = expiresIn || 15 * 60 * 60;\n\n var date = new Date();\n\n this.apiCall('POST', '/restapi/v1.0/subscription', {\n 'eventFilters': [\n '/restapi/v1.0/account/~/extension/~/presence'\n ],\n 'expirationTime': new Date(date.getTime() + (expiresIn * 1000)).toISOString(),\n 'expiresIn': expiresIn,\n 'deliveryMode': {\n 'transportType': 'PubNub',\n 'encryption': false,\n 'address': '123_foo',\n 'subscriberKey': 'sub-c-foo',\n 'secretKey': 'sec-c-bar'\n },\n 'id': 'foo-bar-baz',\n 'creationTime': date.toISOString(),\n 'status': 'Active',\n 'uri': 'https://platform.ringcentral.com/restapi/v1.0/subscription/foo-bar-baz'\n });\n\n return this;\n\n }\n\n subscribeOnPresence(id, detailed) {\n\n id = id || '1';\n\n var date = new Date();\n\n this.apiCall('POST', '/restapi/v1.0/subscription', {\n 'eventFilters': ['/restapi/v1.0/account/~/extension/' + id + '/presence' + (detailed ? '?detailedTelephonyState=true' : '')],\n 'expirationTime': new Date(date.getTime() + (15 * 60 * 60 * 1000)).toISOString(),\n 'deliveryMode': {\n 'transportType': 'PubNub',\n 'encryption': true,\n 'address': '123_foo',\n 'subscriberKey': 'sub-c-foo',\n 'secretKey': 'sec-c-bar',\n 'encryptionAlgorithm': 'AES',\n 'encryptionKey': 'VQwb6EVNcQPBhE/JgFZ2zw=='\n },\n 'creationTime': date.toISOString(),\n 'id': 'foo-bar-baz',\n 'status': 'Active',\n 'uri': 'https://platform.ringcentral.com/restapi/v1.0/subscription/foo-bar-baz'\n });\n\n return this;\n\n }\n\n tokenRefresh(failure) {\n\n if (!failure) {\n\n this.apiCall('POST', '/restapi/oauth/token', {\n 'access_token': 'ACCESS_TOKEN_FROM_REFRESH',\n 'token_type': 'bearer',\n 'expires_in': 3600,\n 'refresh_token': 'REFRESH_TOKEN_FROM_REFRESH',\n 'refresh_token_expires_in': 60480,\n 'scope': 'SMS RCM Foo Boo'\n });\n\n } else {\n\n this.apiCall('POST', '/restapi/oauth/token', {\n 'message': 'Wrong token',\n 'error_description': 'Wrong token',\n 'description': 'Wrong token'\n }, 400);\n\n }\n\n return this;\n\n }\n\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/mocks/Registry.js\n **/","import ApiResponse from '../http/ApiResponse';\nimport {delay} from '../core/Utils';\nimport {createResponse} from '../http/Utils';\n\nexport default class Mock {\n\n constructor(method, path, json, status, statusText, delay) {\n this._method = method.toUpperCase();\n this._path = path;\n this._json = json || {};\n this._delay = delay || 10;\n this._status = status || 200;\n this._statusText = statusText || 'OK';\n }\n\n path() {\n return this._path;\n }\n\n method() {\n return this._method;\n }\n\n test(request:Request) {\n\n return request.url.indexOf(this._path) > -1 &&\n request.method.toUpperCase() == this._method;\n\n }\n\n async getResponse(request) {\n\n await delay(this._delay);\n\n return this.createResponse(this._json);\n\n }\n\n createResponse(json, init) {\n\n init = init || {};\n\n init.status = init.status || this._status;\n init.statusText = init.statusText || this._statusText;\n\n var str = JSON.stringify(json),\n res = createResponse(str, init);\n\n res.headers.set(ApiResponse._contentType, ApiResponse._jsonContentType);\n\n return res;\n\n }\n\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/mocks/Mock.js\n **/","import Observable from '../core/Observable';\nimport Queue from '../core/Queue';\nimport Auth from './Auth';\nimport {Promise} from '../core/Externals';\nimport {queryStringify, parseQueryString, delay} from '../core/Utils';\n\nexport default class Platform extends Observable {\n\n static _urlPrefix = '/restapi';\n static _apiVersion = 'v1.0';\n static _accessTokenTtl = null; // Platform server by default sets it to 60 * 60 = 1 hour\n static _refreshTokenTtl = 10 * 60 * 60; // 10 hours\n static _refreshTokenTtlRemember = 7 * 24 * 60 * 60; // 1 week\n static _tokenEndpoint = '/restapi/oauth/token';\n static _revokeEndpoint = '/restapi/oauth/revoke';\n static _authorizeEndpoint = '/restapi/oauth/authorize';\n static _refreshDelayMs = 100;\n static _cacheId = 'platform';\n static _clearCacheOnRefreshError = true;\n\n events = {\n beforeLogin: 'beforeLogin',\n loginSuccess: 'loginSuccess',\n loginError: 'loginError',\n beforeRefresh: 'beforeRefresh',\n refreshSuccess: 'refreshSuccess',\n refreshError: 'refreshError',\n beforeLogout: 'beforeLogout',\n logoutSuccess: 'logoutSuccess',\n logoutError: 'logoutError'\n };\n\n constructor(client, cache, server, appKey, appSecret) {\n\n super();\n\n this._server = server;\n this._appKey = appKey;\n this._appSecret = appSecret;\n\n /** @type {Cache} */\n this._cache = cache;\n\n /** @type {Client} */\n this._client = client;\n\n this._queue = new Queue(this._cache, Platform._cacheId + '-refresh');\n\n this._auth = new Auth(this._cache, Platform._cacheId);\n\n }\n\n /**\n * @return {Auth}\n */\n auth() {\n return this._auth;\n }\n\n /**\n * @return {Client}\n */\n client() {\n return this._client;\n }\n\n /**\n * @param {string} path\n * @param {object} [options]\n * @param {boolean} [options.addServer]\n * @param {string} [options.addMethod]\n * @param {boolean} [options.addToken]\n * @return {string}\n */\n createUrl(path, options) {\n\n path = path || '';\n options = options || {};\n\n var builtUrl = '',\n hasHttp = path.indexOf('http://') != -1 || path.indexOf('https://') != -1;\n\n if (options.addServer && !hasHttp) builtUrl += this._server;\n\n if (path.indexOf(Platform._urlPrefix) == -1 && !hasHttp) builtUrl += Platform._urlPrefix + '/' + Platform._apiVersion;\n\n builtUrl += path;\n\n if (options.addMethod || options.addToken) builtUrl += (path.indexOf('?') > -1 ? '&' : '?');\n\n if (options.addMethod) builtUrl += '_method=' + options.addMethod;\n if (options.addToken) builtUrl += (options.addMethod ? '&' : '') + 'access_token=' + this._auth.accessToken();\n\n return builtUrl;\n\n }\n\n /**\n * @param {string} options.redirectUri\n * @param {string} options.state\n * @param {string} options.brandId\n * @param {string} options.display\n * @param {string} options.prompt\n * @return {string}\n */\n authUrl(options) {\n\n options = options || {};\n\n return this.createUrl(Platform._authorizeEndpoint + '?' + queryStringify({\n 'response_type': 'code',\n 'redirect_uri': options.redirectUri || '',\n 'client_id': this._appKey,\n 'state': options.state || '',\n 'brand_id': options.brandId || '',\n 'display': options.display || '',\n 'prompt': options.prompt || ''\n }), {addServer: true})\n\n }\n\n /**\n * @param {string} url\n * @return {Object}\n */\n parseAuthRedirectUrl(url:string) {\n\n var qs = parseQueryString(url.split('?').reverse()[0]),\n error = qs.error_description || qs.error;\n\n if (error) {\n var e = new Error(error);\n e.error = qs.error;\n throw e;\n }\n\n return qs;\n\n }\n\n /**\n * @return {Promise}\n */\n async loggedIn() {\n\n try {\n await this._ensureAuthentication();\n return true;\n } catch (e) {\n return false;\n }\n\n }\n\n /**\n * @param {string} options.username\n * @param {string} options.password\n * @param {string} options.extension\n * @param {string} options.code\n * @param {string} options.redirectUri\n * @param {string} options.endpointId\n * @returns {Promise}\n */\n async login(options) {\n\n try {\n\n options = options || {};\n\n options.remember = options.remember || false;\n\n this.emit(this.events.beforeLogin);\n\n var body = {\n \"access_token_ttl\": Platform._accessTokenTtl,\n \"refresh_token_ttl\": options.remember ? Platform._refreshTokenTtlRemember : Platform._refreshTokenTtl\n };\n\n if (!options.code) {\n\n body.grant_type = 'password';\n body.username = options.username;\n body.password = options.password;\n body.extension = options.extension || '';\n\n } else if (options.code) {\n\n body.grant_type = 'authorization_code';\n body.code = options.code;\n body.redirect_uri = options.redirectUri;\n //body.client_id = this.getCredentials().key; // not needed\n\n }\n\n if (options.endpointId) body.endpoint_id = options.endpointId;\n\n var apiResponse = await this._tokenRequest(Platform._tokenEndpoint, body),\n json = apiResponse.json();\n\n this._auth\n .setData(json)\n .setRemember(options.remember);\n\n this.emit(this.events.loginSuccess, apiResponse);\n\n return apiResponse;\n\n } catch (e) {\n\n this._cache.clean();\n\n this.emit(this.events.loginError, e);\n\n throw e;\n\n }\n\n }\n\n /**\n * @returns {Promise}\n */\n async refresh() {\n\n try {\n\n this.emit(this.events.beforeRefresh);\n\n if (this._queue.isPaused()) {\n\n await this._queue.poll();\n\n if (!this._isAccessTokenValid()) {\n throw new Error('Automatic authentification timeout');\n }\n\n this.emit(this.events.refreshSuccess, null);\n\n return null;\n\n }\n\n this._queue.pause();\n\n // Make sure all existing AJAX calls had a chance to reach the server\n await delay(Platform._refreshDelayMs);\n\n // Perform sanity checks\n if (!this._auth.refreshToken()) throw new Error('Refresh token is missing');\n if (!this._auth.refreshTokenValid()) throw new Error('Refresh token has expired');\n if (!this._queue.isPaused()) throw new Error('Queue was resumed before refresh call');\n\n /** @type {ApiResponse} */\n var res = await this._tokenRequest(Platform._tokenEndpoint, {\n \"grant_type\": \"refresh_token\",\n \"refresh_token\": this._auth.refreshToken(),\n \"access_token_ttl\": Platform._accessTokenTtl,\n \"refresh_token_ttl\": this._auth.remember() ? Platform._refreshTokenTtlRemember : Platform._refreshTokenTtl\n }),\n json = res.json();\n\n if (!json.access_token) {\n throw this._client.makeError(new Error('Malformed OAuth response'), res);\n }\n\n this._auth.setData(json);\n this._queue.resume();\n\n this.emit(this.events.refreshSuccess, res);\n\n return res;\n\n } catch (e) {\n\n e = this._client.makeError(e);\n\n if (Platform._clearCacheOnRefreshError) {\n this._cache.clean();\n }\n\n this.emit(this.events.refreshError, e);\n\n throw e;\n\n }\n\n }\n\n /**\n * @returns {Promise}\n */\n async logout() {\n\n try {\n\n this.emit(this.events.beforeLogout);\n\n this._queue.pause();\n\n var res = await this._tokenRequest(Platform._revokeEndpoint, {\n token: this._auth.accessToken()\n });\n\n this._queue.resume();\n this._cache.clean();\n\n this.emit(this.events.logoutSuccess, res);\n\n return res;\n\n } catch (e) {\n\n this._queue.resume();\n\n this.emit(this.events.logoutError, e);\n\n throw e;\n\n }\n\n }\n\n /**\n * @param {Request} request\n * @param {object} [options]\n * @param {boolean} [options.skipAuthCheck]\n * @return {Promise}\n */\n async inflateRequest(request, options) {\n\n options = options || {};\n\n if (options.skipAuthCheck) return request;\n\n await this._ensureAuthentication();\n\n request.headers.set('Authorization', this._authHeader());\n //request.url = this.createUrl(request.url, {addServer: true}); //FIXME Spec prevents this...\n\n //TODO Add User-Agent here\n\n return request;\n\n }\n\n /**\n * @param {Request} request\n * @param {object} [options]\n * @param {boolean} [options.skipAuthCheck]\n * @return {Promise}\n */\n async sendRequest(request, options) {\n\n try {\n\n request = await this.inflateRequest(request, options);\n\n return (await this._client.sendRequest(request));\n\n } catch (e) {\n\n // Guard is for errors that come from polling\n if (!e.apiResponse || !e.apiResponse.response() || (e.apiResponse.response().status != 401)) throw e;\n\n this._auth.cancelAccessToken();\n\n return (await this.sendRequest(request, options));\n\n }\n\n }\n\n /**\n * General purpose function to send anything to server\n * @param {string} options.url\n * @param {object} [options.body]\n * @param {string} [options.method]\n * @param {object} [options.query]\n * @param {object} [options.headers]\n * @param {boolean} [options.skipAuthCheck]\n * @return {Promise}\n */\n async send(options = {}) {\n\n //FIXME https://github.com/bitinn/node-fetch/issues/43\n options.url = this.createUrl(options.url, {addServer: true});\n\n return await this.sendRequest(this._client.createRequest(options), options);\n\n }\n\n /**\n * @param {string} url\n * @param {object} [query]\n * @param {object} [options]\n * @param {object} [options.headers]\n * @param {boolean} [options.skipAuthCheck]\n * @return {Promise}\n */\n async get(url, query, options) {\n options = options || {};\n options.method = 'GET';\n options.url = url;\n options.query = query;\n return await this.send(options);\n }\n\n /**\n * @param {string} url\n * @param {object} body\n * @param {object} [query]\n * @param {object} [options]\n * @param {object} [options.headers]\n * @param {boolean} [options.skipAuthCheck]\n * @return {Promise}\n */\n async post(url, body, query, options) {\n options = options || {};\n options.method = 'POST';\n options.url = url;\n options.query = query;\n options.body = body;\n return await this.send(options);\n }\n\n /**\n * @param {string} url\n * @param {object} [body]\n * @param {object} [query]\n * @param {object} [options]\n * @param {object} [options.headers]\n * @param {boolean} [options.skipAuthCheck]\n * @return {Promise}\n */\n async put(url, body, query, options) {\n options = options || {};\n options.method = 'PUT';\n options.url = url;\n options.query = query;\n options.body = body;\n return await this.send(options);\n }\n\n /**\n * @param {string} url\n * @param {string} [query]\n * @param {object} [options]\n * @param {object} [options.headers]\n * @param {boolean} [options.skipAuthCheck]\n * @return {Promise}\n */\n async 'delete'(url, query, options) {\n options = options || {};\n options.method = 'DELETE';\n options.url = url;\n options.query = query;\n return await this.send(options);\n }\n\n async _tokenRequest(path, body) {\n\n return await this.send({\n url: path,\n skipAuthCheck: true,\n body: body,\n method: 'POST',\n headers: {\n 'Authorization': 'Basic ' + this._apiKey(),\n 'Content-Type': 'application/x-www-form-urlencoded'\n }\n });\n\n }\n\n async _ensureAuthentication() {\n\n if (this._isAccessTokenValid()) return null;\n return await this.refresh();\n\n }\n\n _isAccessTokenValid() {\n\n return (this._auth.accessTokenValid() && !this._queue.isPaused());\n\n }\n\n _apiKey() {\n var apiKey = this._appKey + ':' + this._appSecret;\n return (typeof btoa == 'function') ? btoa(apiKey) : new Buffer(apiKey).toString('base64');\n }\n\n _authHeader() {\n var token = this._auth.accessToken();\n return this._auth.tokenType() + (token ? ' ' + token : '');\n }\n\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/platform/Platform.js\n **/","export default class Auth {\n\n static refreshHandicapMs:number = 60 * 1000; // 1 minute\n static forcedTokenType = 'forced';\n\n constructor(cache, cacheId:string) {\n\n /** @type {Cache} */\n this._cache = cache;\n this._cacheId = cacheId;\n\n }\n\n accessToken() {\n return this.data().access_token;\n }\n\n refreshToken() {\n return this.data().refresh_token;\n }\n\n tokenType() {\n return this.data().token_type;\n }\n\n /**\n * @return {{token_type: string, access_token: string, expires_in: number, refresh_token: string, refresh_token_expires_in: number}}\n */\n data() {\n\n return this._cache.getItem(this._cacheId) || {\n token_type: '',\n access_token: '',\n expires_in: 0,\n refresh_token: '',\n refresh_token_expires_in: 0\n };\n\n }\n\n /**\n * @param {object} newData\n * @return {Auth}\n */\n setData(newData) {\n\n newData = newData || {};\n\n var data = this.data();\n\n Object.keys(newData).forEach((key) => {\n data[key] = newData[key];\n });\n\n data.expire_time = Date.now() + (data.expires_in * 1000);\n data.refresh_token_expire_time = Date.now() + (data.refresh_token_expires_in * 1000);\n\n this._cache.setItem(this._cacheId, data);\n\n return this;\n\n }\n\n /**\n * Check if there is a valid (not expired) access token\n * @return {boolean}\n */\n accessTokenValid() {\n\n var authData = this.data();\n return (authData.token_type === Auth.forcedTokenType || (authData.expire_time - Auth.refreshHandicapMs > Date.now()));\n\n }\n\n /**\n * Check if there is a valid (not expired) access token\n * @return {boolean}\n */\n refreshTokenValid() {\n\n return (this.data().refresh_token_expire_time > Date.now());\n\n }\n\n /**\n * @return {Auth}\n */\n cancelAccessToken() {\n\n return this.setData({\n access_token: '',\n expires_in: 0\n });\n\n }\n\n /**\n * This method sets a special authentication mode used in Service Web\n * @return {Auth}\n */\n forceAuthentication() {\n\n this.setData({\n token_type: Auth.forcedTokenType,\n access_token: '',\n expires_in: 0,\n refresh_token: '',\n refresh_token_expires_in: 0\n });\n\n return this;\n\n }\n\n /**\n * @param remember\n * @return {Auth}\n */\n setRemember(remember) {\n\n return this.setData({remember: remember});\n\n }\n\n /**\n * @return {boolean}\n */\n remember() {\n\n return !!this.data().remember;\n\n }\n\n}\n\n//export interface IAuthData {\n// remember?:boolean;\n// token_type?:string;\n// access_token?:string;\n// expires_in?:number; // actually it's string\n// expire_time?:number;\n// refresh_token?:string;\n// refresh_token_expires_in?:number; // actually it's string\n// refresh_token_expire_time?:number;\n// scope?:string;\n//}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/platform/Auth.js\n **/","import PubnubMock from './PubnubMock.js';\nimport {PUBNUB} from '../core/Externals';\n\nexport default class PubnubMockFactory {\n\n constructor() {\n this.crypto_obj = PUBNUB.crypto_obj;\n }\n\n init(options:PUBNUBInitOptions) {\n return new PubnubMock(options);\n }\n\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/pubnub/PubnubFactory.js\n **/","import Observable from '../core/Observable';\nimport {PUBNUB} from '../core/Externals';\n\nexport default class PubnubMock extends Observable {\n\n constructor(options) {\n super();\n this.options = options;\n this.crypto_obj = PUBNUB.crypto_obj;\n }\n\n ready() {}\n\n subscribe(options:PUBNUBSubscribeOptions) {\n this.on('message-' + options.channel, options.message);\n }\n\n unsubscribe(options:PUBNUBUnsubscribeOptions) {\n this.off('message-' + options.channel);\n }\n\n receiveMessage(msg, channel) {\n this.emit('message-' + channel, msg, 'env', channel);\n }\n\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/pubnub/PubnubMock.js\n **/","import Observable from '../core/Observable';\nimport Client from '../http/Client';\nimport {poll, stopPolling, delay} from '../core/Utils';\n\nexport default class Subscription extends Observable {\n\n static _renewHandicapMs = 2 * 60 * 1000;\n static _pollInterval = 10 * 1000;\n\n events = {\n notification: 'notification',\n removeSuccess: 'removeSuccess',\n removeError: 'removeError',\n renewSuccess: 'renewSuccess',\n renewError: 'renewError',\n subscribeSuccess: 'subscribeSuccess',\n subscribeError: 'subscribeError'\n };\n\n constructor(pubnubFactory, platform) {\n\n super();\n\n this._pubnubFactory = pubnubFactory;\n this._platform = platform;\n this._pubnub = null;\n this._timeout = null;\n this._subscription = {};\n\n }\n\n subscribed(){\n\n return !!(this._subscription.id &&\n this._subscription.deliveryMode &&\n this._subscription.deliveryMode.subscriberKey &&\n this._subscription.deliveryMode.address);\n\n }\n\n /**\n * @return {boolean}\n */\n alive() {\n\n return this.subscribed() && Date.now() < this.expirationTime();\n\n }\n\n expirationTime() {\n return new Date(this._subscription.expirationTime || 0).getTime() - Subscription._renewHandicapMs;\n }\n\n setSubscription(subscription) {\n\n subscription = subscription || {};\n\n this._clearTimeout();\n\n this._subscription = subscription;\n\n if (!this._pubnub) this._subscribeAtPubnub();\n\n this._setTimeout();\n\n return this;\n\n }\n\n subscription() {\n return this._subscription;\n }\n\n /**\n * Creates or updates subscription if there is an active one\n * @returns {Promise}\n */\n async register() {\n\n if (this.alive()) {\n return await this.renew();\n } else {\n return await this.subscribe();\n }\n\n }\n\n eventFilters() {\n return this._subscription.eventFilters || [];\n }\n\n /**\n * @param {string[]} events\n * @return {Subscription}\n */\n addEventFilters(events) {\n this.setEventFilters(this.eventFilters().concat(events));\n return this;\n }\n\n /**\n * @param {string[]} events\n * @return {Subscription}\n */\n setEventFilters(events) {\n this._subscription.eventFilters = events;\n return this;\n }\n\n /**\n * @returns {Promise}\n */\n async subscribe() {\n\n try {\n\n this._clearTimeout();\n\n if (!this.eventFilters().length) throw new Error('Events are undefined');\n\n var response = await this._platform.post('/restapi/v1.0/subscription', {\n eventFilters: this._getFullEventFilters(),\n deliveryMode: {\n transportType: 'PubNub'\n }\n }),\n json = response.json();\n\n this.setSubscription(json)\n .emit(this.events.subscribeSuccess, response);\n\n return response;\n\n\n } catch (e) {\n\n e = this._platform.client().makeError(e);\n\n this.reset()\n .emit(this.events.subscribeError, e);\n\n throw e;\n\n }\n\n }\n\n /**\n * @returns {Promise}\n */\n async renew() {\n\n try {\n\n this._clearTimeout();\n\n if (!this.alive()) throw new Error('Subscription is not alive');\n\n if (!this.eventFilters().length) throw new Error('Events are undefined');\n\n var response = await this._platform.put('/restapi/v1.0/subscription/' + this._subscription.id, {\n eventFilters: this._getFullEventFilters()\n });\n\n var json = response.json();\n\n this.setSubscription(json)\n .emit(this.events.renewSuccess, response);\n\n return response;\n\n } catch (e) {\n\n e = this._platform.client().makeError(e);\n\n this.reset()\n .emit(this.events.renewError, e);\n\n throw e;\n\n }\n\n }\n\n /**\n * @returns {Promise}\n */\n async remove() {\n\n try {\n\n if (!this.subscribed()) throw new Error('No subscription');\n\n var response = await this._platform.delete('/restapi/v1.0/subscription/' + this._subscription.id);\n\n this.reset()\n .emit(this.events.removeSuccess, response);\n\n return response;\n\n } catch (e) {\n\n e = this._platform.client().makeError(e);\n\n this.emit(this.events.removeError, e);\n\n throw e;\n\n }\n\n }\n\n /**\n * @returns {Promise}\n */\n resubscribe() {\n\n return this.reset().setEventFilters(this.eventFilters()).subscribe();\n\n }\n\n /**\n * Remove subscription and disconnect from PUBNUB\n * This method resets subscription at client side but backend is not notified\n */\n reset() {\n this._clearTimeout();\n if (this.subscribed() && this._pubnub) this._pubnub.unsubscribe({channel: this._subscription.deliveryMode.address});\n this._subscription = {};\n return this;\n }\n\n _getFullEventFilters() {\n\n return this.eventFilters().map((event) => {\n return this._platform.createUrl(event);\n });\n\n }\n\n _setTimeout() {\n\n this._clearTimeout();\n\n if (!this.alive()) throw new Error('Subscription is not alive');\n\n poll((next)=> {\n\n if (this.alive()) return next();\n\n this.renew();\n\n }, Subscription._pollInterval, this._timeout);\n\n return this;\n\n }\n\n _clearTimeout() {\n\n stopPolling(this._timeout);\n\n return this;\n\n }\n\n _decrypt(message:any) {\n\n if (!this.subscribed()) throw new Error('No subscription');\n\n if (this._subscription.deliveryMode.encryptionKey) {\n\n var PUBNUB = this._pubnubFactory;\n\n message = PUBNUB.crypto_obj.decrypt(message, this._subscription.deliveryMode.encryptionKey, {\n encryptKey: false,\n keyEncoding: 'base64',\n keyLength: 128,\n mode: 'ecb'\n });\n\n }\n\n return message;\n\n }\n\n _notify(message:any) {\n\n this.emit(this.events.notification, this._decrypt(message));\n\n return this;\n\n }\n\n _subscribeAtPubnub():Subscription {\n\n if (!this.alive()) throw new Error('Subscription is not alive');\n\n var PUBNUB = this._pubnubFactory;\n\n this._pubnub = PUBNUB.init({\n ssl: true,\n subscribe_key: this._subscription.deliveryMode.subscriberKey\n });\n\n this._pubnub.ready();\n\n this._pubnub.subscribe({\n channel: this._subscription.deliveryMode.address,\n message: this._notify.bind(this),\n connect: () => {}\n });\n\n return this;\n\n }\n\n}\n\n//export interface ISubscription {\n// id?:string;\n// uri?: string;\n// eventFilters?:string[];\n// expirationTime?:string; // 2014-03-12T19:54:35.613Z\n// expiresIn?:number;\n// deliveryMode?: {\n// transportType?:string;\n// encryption?:boolean;\n// address?:string;\n// subscriberKey?:string;\n// encryptionKey?:string;\n// secretKey?:string;\n// };\n// creationTime?:string; // 2014-03-12T19:54:35.613Z\n// status?:string; // Active\n//}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/subscription/Subscription.js\n **/","import Subscription from './Subscription';\nimport Queue from '../core/Queue';\n\nexport default class CachedSubscription extends Subscription {\n\n constructor(pubnubFactory, platform, cache, cacheKey) {\n\n super(pubnubFactory, platform);\n\n this._cache = cache;\n this._cacheKey = cacheKey;\n this._renewQueue = new Queue(this._cache, cacheKey + '-renew');\n this._resubscribeQueue = new Queue(this._cache, cacheKey + '-resubscribe');\n\n this.events = {\n ...this.events,\n queuedRenewSuccess: 'queuedRenewSuccess',\n queuedRenewError: 'queuedRenewError',\n queuedResubscribeSuccess: 'queuedResubscribeSuccess',\n queuedResubscribeError: 'queuedResubscribeError'\n };\n\n this.on(this.events.renewError, () => {\n this.resubscribe();\n });\n\n this.on([this.events.subscribeSuccess, this.events.renewSuccess], () => {\n this._cache.setItem(this._cacheKey, this.subscription());\n });\n\n this.on(this.events.removeSuccess, () => {\n this._cache.removeItem(this._cacheKey);\n });\n\n }\n\n /**\n * TODO Combine with Platform.refresh and move elsewhere\n * @param actionCb\n * @param queue\n * @param successEvent\n * @param errorEvent\n * @param errorMessage\n * @return {*}\n * @private\n */\n async _queue(actionCb, queue, successEvent, errorEvent, errorMessage) {\n\n try {\n\n if (queue.isPaused()) {\n\n await queue.poll();\n\n if (!this.alive()) {\n throw new Error(errorMessage);\n }\n\n this.emit(successEvent, null);\n\n return null;\n\n }\n\n queue.pause();\n\n var res = await actionCb.call(this);\n\n queue.resume();\n\n this.emit(successEvent, res);\n\n return res;\n\n } catch (e) {\n\n this.emit(errorEvent, e);\n\n throw e;\n\n }\n\n }\n\n /**\n * @returns {Promise}\n */\n renew() {\n\n return this._queue(\n super.renew,\n this._renewQueue,\n this.events.queuedRenewSuccess,\n this.events.queuedRenewError,\n 'Subscription is not alive after renew timeout'\n );\n\n }\n\n /**\n * @returns {Promise}\n */\n resubscribe() {\n\n return this._queue(\n super.resubscribe,\n this._resubscribeQueue,\n this.events.queuedResubscribeSuccess,\n this.events.queuedResubscribeError,\n 'Subscription is not alive after resubscribe timeout'\n );\n\n }\n\n /**\n * @param {string[]} events\n * @return {CachedSubscription}\n */\n restore(events) {\n\n var cachedSubscriptionData = this._cache.getItem(this._cacheKey);\n\n if (cachedSubscriptionData) {\n try {\n this.setSubscription(cachedSubscriptionData);\n } catch (e) {}\n } else {\n this.setEventFilters(events);\n }\n\n return this;\n\n }\n\n}\n\n\n/** WEBPACK FOOTER **\n ** ./src/subscription/CachedSubscription.js\n **/","/**\n * Copyright (c) 2014, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * https://raw.github.com/facebook/regenerator/master/LICENSE file. An\n * additional grant of patent rights can be found in the PATENTS file in\n * the same directory.\n */\n\n!(function(global) {\n \"use strict\";\n\n var hasOwn = Object.prototype.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n var inModule = typeof module === \"object\";\n var runtime = global.regeneratorRuntime;\n if (runtime) {\n if (inModule) {\n // If regeneratorRuntime is defined globally and we're in a module,\n // make the exports object identical to regeneratorRuntime.\n module.exports = runtime;\n }\n // Don't bother evaluating the rest of this file if the runtime was\n // already defined globally.\n return;\n }\n\n // Define the runtime globally (as expected by generated code) as either\n // module.exports (if we're in a module) or a new, empty object.\n runtime = global.regeneratorRuntime = inModule ? module.exports : {};\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided, then outerFn.prototype instanceof Generator.\n var generator = Object.create((outerFn || Generator).prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n runtime.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype;\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] = GeneratorFunction.displayName = \"GeneratorFunction\";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n runtime.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n runtime.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = \"GeneratorFunction\";\n }\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `value instanceof AwaitArgument` to determine if the yielded value is\n // meant to be awaited. Some may consider the name of this method too\n // cutesy, but they are curmudgeons.\n runtime.awrap = function(arg) {\n return new AwaitArgument(arg);\n };\n\n function AwaitArgument(arg) {\n this.arg = arg;\n }\n\n function AsyncIterator(generator) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value instanceof AwaitArgument) {\n return Promise.resolve(value.arg).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return Promise.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration. If the Promise is rejected, however, the\n // result for this iteration will be rejected with the same\n // reason. Note that rejections of yielded Promises are not\n // thrown back into the generator function, as is the case\n // when an awaited Promise is rejected. This difference in\n // behavior between yield and await is important, because it\n // allows the consumer to decide what to do with the yielded\n // rejection (swallow it and continue, manually .throw it back\n // into the generator, abandon iteration, whatever). With\n // await, by contrast, there is no opportunity to examine the\n // rejection reason outside the generator function, so the\n // only option is to throw it from the await expression, and\n // let the generator function handle the exception.\n result.value = unwrapped;\n resolve(result);\n }, reject);\n }\n }\n\n if (typeof process === \"object\" && process.domain) {\n invoke = process.domain.bind(invoke);\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new Promise(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n runtime.async = function(innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList)\n );\n\n return runtime.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n if (method === \"return\" ||\n (method === \"throw\" && delegate.iterator[method] === undefined)) {\n // A return or throw (when the delegate iterator has no throw\n // method) always terminates the yield* loop.\n context.delegate = null;\n\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n var returnMethod = delegate.iterator[\"return\"];\n if (returnMethod) {\n var record = tryCatch(returnMethod, delegate.iterator, arg);\n if (record.type === \"throw\") {\n // If the return method threw an exception, let that\n // exception prevail over the original return or throw.\n method = \"throw\";\n arg = record.arg;\n continue;\n }\n }\n\n if (method === \"return\") {\n // Continue with the outer return, now that the delegate\n // iterator has been terminated.\n continue;\n }\n }\n\n var record = tryCatch(\n delegate.iterator[method],\n delegate.iterator,\n arg\n );\n\n if (record.type === \"throw\") {\n context.delegate = null;\n\n // Like returning generator.throw(uncaught), but without the\n // overhead of an extra function call.\n method = \"throw\";\n arg = record.arg;\n continue;\n }\n\n // Delegate generator ran and handled its own exceptions so\n // regardless of what the method was, we continue as if it is\n // \"next\" with an undefined arg.\n method = \"next\";\n arg = undefined;\n\n var info = record.arg;\n if (info.done) {\n context[delegate.resultName] = info.value;\n context.next = delegate.nextLoc;\n } else {\n state = GenStateSuspendedYield;\n return info;\n }\n\n context.delegate = null;\n }\n\n if (method === \"next\") {\n if (state === GenStateSuspendedYield) {\n context.sent = arg;\n } else {\n context.sent = undefined;\n }\n\n } else if (method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw arg;\n }\n\n if (context.dispatchException(arg)) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n method = \"next\";\n arg = undefined;\n }\n\n } else if (method === \"return\") {\n context.abrupt(\"return\", arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n var info = {\n value: record.arg,\n done: context.done\n };\n\n if (record.arg === ContinueSentinel) {\n if (context.delegate && method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n arg = undefined;\n }\n } else {\n return info;\n }\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(arg) call above.\n method = \"throw\";\n arg = record.arg;\n }\n }\n };\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp[toStringTagSymbol] = \"Generator\";\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n runtime.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n runtime.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n this.sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n return !!caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.next = finallyEntry.finallyLoc;\n } else {\n this.complete(record);\n }\n\n return ContinueSentinel;\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = record.arg;\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n return ContinueSentinel;\n }\n };\n})(\n // Among the various tricks for obtaining a reference to the global\n // object, this seems to be the most reliable technique that does not\n // use indirect eval (which violates Content Security Policy).\n typeof global === \"object\" ? global :\n typeof window === \"object\" ? window :\n typeof self === \"object\" ? self : this\n);\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/regenerator/runtime.js\n ** module id = 22\n ** module chunks = 0\n **/"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/package.json b/package.json index 8f484928..03dfb10a 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "version": "2.0.0", + "version": "2.0.1", "name": "ringcentral", "scripts": { "start": "node server.js", diff --git a/src/SDK.js b/src/SDK.js index ff0b71d6..7e761736 100644 --- a/src/SDK.js +++ b/src/SDK.js @@ -24,7 +24,7 @@ require("regenerator/runtime"); export default class SDK { - static version = '2.0.0'; + static version = '2.0.1'; static server = { sandbox: 'https://platform.devtest.ringcentral.com',