diff --git a/dist/keen-analysis.js b/dist/keen-analysis.js index 99f54bb..640f79b 100644 --- a/dist/keen-analysis.js +++ b/dist/keen-analysis.js @@ -76,7 +76,7 @@ return /******/ (function(modules) { // webpackBootstrap /******/ /******/ /******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = 22); +/******/ return __webpack_require__(__webpack_require__.s = 24); /******/ }) /************************************************************************/ /******/ ([ @@ -160,7 +160,7 @@ function extend(target){ "use strict"; __webpack_require__.r(__webpack_exports__); -/* WEBPACK VAR INJECTION */(function(global) {/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(8); +/* WEBPACK VAR INJECTION */(function(global) {/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(9); /* harmony import */ var _finally__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4); @@ -687,12 +687,61 @@ if (!globalNS.Promise) { /* 6 */ /***/ (function(module) { -module.exports = {"name":"keen-analysis","version":"3.3.3","description":"A JavaScript client for Keen.IO","main":"dist/node/keen-analysis.js","browser":"dist/keen-analysis.js","scripts":{"start":"NODE_ENV=development webpack-dev-server","test":"NODE_ENV=test jest && npm run test:node","test:node":"NODE_ENV=test TEST_ENV=node jest","test:watch":"NODE_ENV=test jest --watch","test:node:watch":"NODE_ENV=test TEST_ENV=node jest --watch","build":"NODE_ENV=production webpack -p && NODE_ENV=production OPTIMIZE_MINIMIZE=1 webpack -p && npm run build:node && npm run build:modules && npm run build:modules:node","build:node":"TARGET=node NODE_ENV=production webpack -p","build:modules":"NODE_ENV=production webpack -p --config webpack.modules.config.js","build:modules:node":"NODE_ENV=production TARGET=node webpack -p --config webpack.modules.config.js","profile":"webpack --profile --json > stats.json","analyze":"webpack-bundle-analyzer stats.json /dist","preversion":"npm run build:node && npm run test","version":"npm run build && git add .","postversion":"git push && git push --tags","demo":"node ./test/demo/index.node.js"},"repository":{"type":"git","url":"git+https://github.com/keen/keen-analysis.js.git"},"author":"Keen IO ","homepage":"https://keen.io","contributors":["Dustin Larimer (https://github.com/dustinlarimer)","Adam Kasprowicz (https://github.com/adamkasprowicz)","Dariusz Łacheta (https://github.com/dariuszlacheta)"],"keywords":["Analytics","Analysis","Conversion","Query","Stats","Client","Min","Max","Count","Percentile","Average","Median","Keen","Keen Query"],"license":"MIT","bugs":{"url":"https://github.com/keen/keen-analysis.js/issues"},"dependencies":{"crossfilter2":"^1.4.6","csvtojson":"^2.0.8","keen-core":"^0.2.0","moment":"^2.22.2","promise-polyfill":"^8.0.0","whatwg-fetch":"^2.0.4"},"devDependencies":{"abortcontroller-polyfill":"^1.1.9","babel-loader":"^7.1.4","babel-plugin-transform-es2015-modules-commonjs":"^6.26.2","babel-plugin-transform-object-rest-spread":"^6.26.0","babel-preset-env":"^1.7.0","del":"^2.1.0","eslint":"^4.19.1","eslint-config-airbnb":"^16.1.0","eslint-loader":"^2.0.0","eslint-plugin-import":"^2.11.0","eslint-plugin-jsx-a11y":"^6.0.3","fake-indexeddb":"^2.0.4","html-loader":"^0.5.5","html-webpack-plugin":"^3.2.0","jest":"^22.4.3","jest-fetch-mock":"^1.6.5","merge":"^1.2.1","nock":"^9.2.6","regenerator-runtime":"^0.11.1","requirejs":"^2.1.22","through2":"^2.0.0","url-parse":"^1.4.3","webpack":"^4.5.0","webpack-bundle-analyzer":"^2.11.1","webpack-cli":"^2.0.13","webpack-dev-server":"^3.1.14","xhr-mock":"^2.3.2"}}; +module.exports = {"name":"keen-analysis","version":"3.4.0","description":"A JavaScript client for Keen.IO","main":"dist/node/keen-analysis.js","browser":"dist/keen-analysis.js","scripts":{"start":"NODE_ENV=development webpack-dev-server","test":"NODE_ENV=test jest && npm run test:node","test:node":"NODE_ENV=test TEST_ENV=node jest","test:watch":"NODE_ENV=test jest --watch","test:node:watch":"NODE_ENV=test TEST_ENV=node jest --watch","build":"NODE_ENV=production webpack -p && NODE_ENV=production OPTIMIZE_MINIMIZE=1 webpack -p && npm run build:node && npm run build:modules && npm run build:modules:node","build:node":"TARGET=node NODE_ENV=production webpack -p","build:modules":"NODE_ENV=production webpack -p --config webpack.modules.config.js","build:modules:node":"NODE_ENV=production TARGET=node webpack -p --config webpack.modules.config.js","profile":"webpack --profile --json > stats.json","analyze":"webpack-bundle-analyzer stats.json /dist","preversion":"npm run build:node && npm run test","version":"npm run build && git add .","postversion":"git push && git push --tags","demo":"npm run build:node && node ./test/demo/index.node.js"},"repository":{"type":"git","url":"git+https://github.com/keen/keen-analysis.js.git"},"author":"Keen IO ","homepage":"https://keen.io","contributors":["Dustin Larimer (https://github.com/dustinlarimer)","Adam Kasprowicz (https://github.com/adamkasprowicz)","Dariusz Łacheta (https://github.com/dariuszlacheta)"],"keywords":["Analytics","Analysis","Conversion","Query","Stats","Client","Min","Max","Count","Percentile","Average","Median","Keen","Keen Query"],"license":"MIT","bugs":{"url":"https://github.com/keen/keen-analysis.js/issues"},"dependencies":{"crossfilter2":"^1.4.6","csvtojson":"^2.0.8","keen-core":"^0.2.0","moment":"^2.22.2","promise-polyfill":"^8.0.0","whatwg-fetch":"^2.0.4"},"devDependencies":{"abortcontroller-polyfill":"^1.1.9","babel-loader":"^7.1.4","babel-plugin-transform-es2015-modules-commonjs":"^6.26.2","babel-plugin-transform-object-rest-spread":"^6.26.0","babel-preset-env":"^1.7.0","del":"^2.1.0","eslint":"^4.19.1","eslint-config-airbnb":"^16.1.0","eslint-loader":"^2.0.0","eslint-plugin-import":"^2.11.0","eslint-plugin-jsx-a11y":"^6.0.3","fake-indexeddb":"^2.0.4","html-loader":"^0.5.5","html-webpack-plugin":"^3.2.0","jest":"^22.4.3","jest-fetch-mock":"^1.6.5","merge":"^1.2.1","nock":"^9.2.6","regenerator-runtime":"^0.11.1","requirejs":"^2.1.22","through2":"^2.0.0","url-parse":"^1.4.3","webpack":"^4.5.0","webpack-bundle-analyzer":"^2.11.1","webpack-cli":"^2.0.13","webpack-dev-server":"^3.1.14","xhr-mock":"^2.3.2"}}; /***/ }), /* 7 */ /***/ (function(module, exports, __webpack_require__) { +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + +exports.mapKeysToUnderscore = mapKeysToUnderscore; +function mapKeysToUnderscore(obj) { + var exludedKeys = ['cache']; + + if (!obj || (typeof obj === 'undefined' ? 'undefined' : _typeof(obj)) !== 'object') return obj; + + var keys = Object.keys(obj) || []; + var convertedObj = {}; + keys.forEach(function (key) { + var value = obj[key]; + if (exludedKeys.includes(key)) { + return convertedObj[key] = value; + } + + if (key.match(new RegExp('[A-Z]'))) { + key = key.replace(/[A-Z]/g, function (k) { + return '_' + k.toLowerCase(); + }); + } + + if (Array.isArray(value)) { + return convertedObj[key] = value.map(function (item) { + return mapKeysToUnderscore(item); + }); + } + + if ((typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object') { + return convertedObj[key] = mapKeysToUnderscore(value); + } + + convertedObj[key] = value; + }); + + return convertedObj; +} + +/***/ }), +/* 8 */ +/***/ (function(module, exports, __webpack_require__) { + var each = __webpack_require__(0), extend = __webpack_require__(2); @@ -711,7 +760,7 @@ function serialize(data){ /***/ }), -/* 8 */ +/* 9 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -945,10 +994,10 @@ Promise._unhandledRejectionFn = function _unhandledRejectionFn(err) { /* harmony default export */ __webpack_exports__["a"] = (Promise); -/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(19).setImmediate)) +/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(21).setImmediate)) /***/ }), -/* 9 */ +/* 10 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -999,7 +1048,7 @@ var MD5 = exports.MD5 = function MD5(d) { exports.default = MD5; /***/ }), -/* 10 */ +/* 11 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -1016,7 +1065,7 @@ __webpack_require__(3); __webpack_require__(5); -var _md = __webpack_require__(9); +var _md = __webpack_require__(10); var _md2 = _interopRequireDefault(_md); @@ -1141,7 +1190,7 @@ var getFromCache = exports.getFromCache = function getFromCache(url, fetchOption }; /***/ }), -/* 11 */ +/* 12 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -1162,11 +1211,11 @@ var _each = __webpack_require__(0); var _each2 = _interopRequireDefault(_each); -var _serialize = __webpack_require__(7); +var _serialize = __webpack_require__(8); var _serialize2 = _interopRequireDefault(_serialize); -var _cacheBrowser = __webpack_require__(10); +var _cacheBrowser = __webpack_require__(11); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -1447,7 +1496,7 @@ var DEL = exports.DEL = function DEL(config, options) { }; /***/ }), -/* 12 */ +/* 13 */ /***/ (function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(global) {(function (global, factory) { @@ -1773,7 +1822,7 @@ function abortableFetchDecorator(patchTargets) { /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(1))) /***/ }), -/* 13 */ +/* 14 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -1797,10 +1846,12 @@ var _extend = __webpack_require__(2); var _extend2 = _interopRequireDefault(_extend); -__webpack_require__(12); +__webpack_require__(13); __webpack_require__(3); +var _keysToUnderscore = __webpack_require__(7); + var _package = __webpack_require__(6); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -1867,8 +1918,9 @@ request.prototype.timeout = function (num) { request.prototype.send = function (obj) { var _this = this; + if (this.config && !this.config.api_key) throw new Error('Please provide valid API key'); if (obj) { - this.config.params = obj && (typeof obj === 'undefined' ? 'undefined' : _typeof(obj)) === 'object' ? obj : {}; + this.config.params = obj && (typeof obj === 'undefined' ? 'undefined' : _typeof(obj)) === 'object' ? (0, _keysToUnderscore.mapKeysToUnderscore)(obj) : {}; } var httpRequestType = this.config['method']; if (httpRequestType === 'DELETE') { @@ -1959,7 +2011,28 @@ request.prototype.send = function (obj) { }; /***/ }), -/* 14 */ +/* 15 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + +exports.validateAuthCredentials = validateAuthCredentials; +function validateAuthCredentials(config) { + if ((typeof config === 'undefined' ? 'undefined' : _typeof(config)) !== 'object') return; + if (!config.projectId) throw new Error('Please provide valid project ID'); + if (!config.masterKey && !config.readKey) throw new Error('Please provide valid API key'); + return true; +} + +/***/ }), +/* 16 */ /***/ (function(module, exports, __webpack_require__) { @@ -2128,7 +2201,7 @@ Emitter.prototype.hasListeners = function(event){ /***/ }), -/* 15 */ +/* 17 */ /***/ (function(module, exports) { module.exports = parseParams; @@ -2150,17 +2223,17 @@ function parseParams(str){ /***/ }), -/* 16 */ +/* 18 */ /***/ (function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(global) {(function(env){ var previousKeen = env.Keen || undefined; var each = __webpack_require__(0), extend = __webpack_require__(2), - parseParams = __webpack_require__(15), - serialize = __webpack_require__(7); + parseParams = __webpack_require__(17), + serialize = __webpack_require__(8); - var Emitter = __webpack_require__(14); + var Emitter = __webpack_require__(16); function Client(props){ if (this instanceof Client === false) { @@ -2386,7 +2459,7 @@ function parseParams(str){ /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(1))) /***/ }), -/* 17 */ +/* 19 */ /***/ (function(module, exports) { // shim for using process in browser @@ -2576,7 +2649,7 @@ process.umask = function() { return 0; }; /***/ }), -/* 18 */ +/* 20 */ /***/ (function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(global, process) {(function (global, undefined) { @@ -2766,10 +2839,10 @@ process.umask = function() { return 0; }; attachTo.clearImmediate = clearImmediate; }(typeof self === "undefined" ? typeof global === "undefined" ? this : global : self)); -/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(1), __webpack_require__(17))) +/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(1), __webpack_require__(19))) /***/ }), -/* 19 */ +/* 21 */ /***/ (function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(global) {var scope = (typeof global !== "undefined" && global) || @@ -2825,7 +2898,7 @@ exports._unrefActive = exports.active = function(item) { }; // setimmediate attaches itself to the global object -__webpack_require__(18); +__webpack_require__(20); // On some exotic environments, it's not clear which object `setimmediate` was // able to install onto. Search each possibility in the same order as the // `setimmediate` library. @@ -2839,7 +2912,7 @@ exports.clearImmediate = (typeof self !== "undefined" && self.clearImmediate) || /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(1))) /***/ }), -/* 20 */ +/* 22 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -2856,7 +2929,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol __webpack_require__(3); -var _keenCore = __webpack_require__(16); +var _keenCore = __webpack_require__(18); var _keenCore2 = _interopRequireDefault(_keenCore); @@ -2868,6 +2941,10 @@ var _extend = __webpack_require__(2); var _extend2 = _interopRequireDefault(_extend); +var _validateAuthCredentials = __webpack_require__(15); + +var _keysToUnderscore = __webpack_require__(7); + var _package = __webpack_require__(6); var _package2 = _interopRequireDefault(_package); @@ -2886,17 +2963,23 @@ _keenCore2.default.prototype.query = function (a) { var b = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined; var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + (0, _validateAuthCredentials.validateAuthCredentials)(this.config); // a - analysis type or config object // b - params - var analysisType = a; - var queryParams = b; + var mapObj = { + a: (0, _keysToUnderscore.mapKeysToUnderscore)(a), + b: (0, _keysToUnderscore.mapKeysToUnderscore)(b) + }; + var analysisType = mapObj.a; + var queryParams = mapObj.b; // all this for backward compatibility, remove in next major version if ((typeof a === 'undefined' ? 'undefined' : _typeof(a)) === 'object' && !b) { - // initialized with signle argument - config object - var analysisTypeExtracted = a.analysis_type, - cacheOptionsExtracted = a.cache, - queryParamsExtracted = _objectWithoutProperties(a, ['analysis_type', 'cache']); + // initialized with single argument - config object + var _mapObj$a = mapObj.a, + analysisTypeExtracted = _mapObj$a.analysis_type, + cacheOptionsExtracted = _mapObj$a.cache, + queryParamsExtracted = _objectWithoutProperties(_mapObj$a, ['analysis_type', 'cache']); analysisType = analysisTypeExtracted; queryParams = queryParamsExtracted; @@ -3091,7 +3174,7 @@ var KeenAnalysis = exports.KeenAnalysis = _keenCore2.default; exports.default = KeenAnalysis; /***/ }), -/* 21 */ +/* 23 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -3106,15 +3189,15 @@ var _extend = __webpack_require__(2); var _extend2 = _interopRequireDefault(_extend); -var _index = __webpack_require__(20); +var _index = __webpack_require__(22); var _index2 = _interopRequireDefault(_index); -var _request = __webpack_require__(13); +var _request = __webpack_require__(14); var _request2 = _interopRequireDefault(_request); -var _httpBrowser = __webpack_require__(11); +var _httpBrowser = __webpack_require__(12); var httpHandlers = _interopRequireWildcard(_httpBrowser); @@ -3137,10 +3220,10 @@ var KeenAnalysis = exports.KeenAnalysis = Keen; // backward compatibility - CDN exports.default = Keen; /***/ }), -/* 22 */ +/* 24 */ /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(21); +module.exports = __webpack_require__(23); /***/ }) diff --git a/dist/keen-analysis.js.map b/dist/keen-analysis.js.map index 94ac825..3f8ed88 100644 --- a/dist/keen-analysis.js.map +++ b/dist/keen-analysis.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap","webpack:///./node_modules/keen-core/lib/utils/each.js","webpack:///(webpack)/buildin/global.js","webpack:///./node_modules/keen-core/lib/utils/extend.js","webpack:///./node_modules/promise-polyfill/src/polyfill.js","webpack:///./node_modules/promise-polyfill/src/finally.js","webpack:///./node_modules/whatwg-fetch/fetch.js","webpack:///./node_modules/keen-core/lib/utils/serialize.js","webpack:///./node_modules/promise-polyfill/src/index.js","webpack:///./lib/utils/md5.js","webpack:///./lib/utils/cache-browser.js","webpack:///./lib/utils/http-browser.js","webpack:///./node_modules/abortcontroller-polyfill/dist/polyfill-patch-fetch.js","webpack:///./lib/request.js","webpack:///./node_modules/component-emitter/index.js","webpack:///./node_modules/keen-core/lib/utils/parse-params.js","webpack:///./node_modules/keen-core/lib/index.js","webpack:///./node_modules/process/browser.js","webpack:///./node_modules/setimmediate/setImmediate.js","webpack:///./node_modules/timers-browserify/main.js","webpack:///./lib/index.js","webpack:///./lib/browser.js"],"names":["MD5","d","result","M","V","Y","X","length","toLowerCase","_","m","f","r","charCodeAt","charAt","Array","String","fromCharCode","i","n","h","t","g","e","md5_ii","md5_hh","md5_gg","md5_ff","safe_add","md5_cmn","bit_rol","indexedDBAvailable","self","cachingEnabled","db","cacheConfig","dbName","dbCollectionName","dbCollectionKey","maxAge","initializeIndexedDb","requestCacheConfig","Promise","resolve","reject","dbConnectionRequest","indexedDB","open","onerror","event","onupgradeneeded","target","objectStore","createObjectStore","keyPath","createIndex","unique","onsuccess","urlWithBodyHash","url","fetchOptions","JSON","stringify","body","saveToCache","responseJson","then","transactionSave","transaction","requestSave","add","expiryTime","Date","now","getFromCache","configOptions","cache","transactionCleanUp","indexCleanUp","index","upperBoundOpenKeyRange","IDBKeyRange","upperBound","openCursor","cursor","transactionDelete","delete","value","continue","transactionIndex","responseFromCache","get","sendFetch","method","config","options","headers","indexOf","api_key","params","key","undefined","mode","notFoundInCache","responseJSONFromCache","apiResponse","fetch","signal","catch","connectionError","response","ok","json","responseJSON","error_code","message","status","statusText","xhrObject","root","window","XMLHttpRequest","ActiveXObject","location","protocol","sendXhr","xhr","cb","callback","onreadystatechange","readyState","parse","responseText","setRequestHeader","send","sendJsonp","timestamp","getTime","scriptTag","document","createElement","parent","getElementsByTagName","callbackName","loaded","handleResponse","src","appendChild","a","b","removeChild","GET","POST","PUT","DEL","request","httpHandlers","requestUrlAndOptions","version","bind","prototype","auth","str","obj","timeout","num","httpRequestType","httpHandler","httpOptions","analysis_type","split","pop","fetchAbortController","AbortController","httpHandlerResponse","requestPromise","resultParsers","isArray","interval","group_by","forEach","val","res","func","event_collection","query","abort","emit","KeenLibrary","readKey","arguments","analysisType","queryParams","analysisTypeExtracted","cacheOptionsExtracted","queryParamsExtracted","cacheOptions","masterKey","saved_query_name","savedQueryResultsUrl","name","dataset_name","queryBodyParams","timezone","getTimezoneOffset","post","Query","run","q","output","queries","promises","queryPromise","analysis","push","all","err","set","attributes","v","k","match","RegExp","replace","$1","dv","deepValue","deepKey","_deepKey","attribute","addFilter","property","operator","filters","pkg","KeenAnalysis","KeenAnalysisCore","put","del","keenGlobals","webpackKeenGlobals","Keen","extendLibrary"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,O;ACVA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAK;AACL;AACA;;AAEA;AACA;AACA,yDAAiD,cAAc;AAC/D;;AAEA;AACA;AACA;AACA,mCAA2B,0BAA0B,EAAE;AACvD,yCAAiC,eAAe;AAChD;AACA;AACA;;AAEA;AACA,8DAAsD,+DAA+D;;AAErH;AACA;;;AAGA;AACA;;;;;;;ACnEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,YAAY;AACzB;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AC1BA;;AAEA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;;AAEA;AACA;AACA,4CAA4C;;AAE5C;;;;;;;ACnBA;;AAEA;AACA,iBAAiB,sBAAsB;AACvC;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACTA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA,CAAC;AACD;AACA;;;;;;;;;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;;;;;;ACdA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA,OAAO;AACP;AACA;;AAEA;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;;AAEA;AACA;AACA,wCAAwC,mBAAmB;AAC3D;AACA;;AAEA;AACA;AACA,kCAAkC,oBAAoB;AACtD;AACA;;AAEA;AACA;AACA,wCAAwC,4BAA4B;AACpE;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,mBAAmB,iBAAiB;AACpC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA,uDAAuD;AACvD,SAAS;AACT;AACA,SAAS;AACT,8EAA8E;AAC9E;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;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,8BAA8B,uBAAuB;AACrD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA,uCAAuC,0BAA0B;AACjE;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA,+BAA+B,0BAA0B,eAAe;AACxE;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,OAAO;;AAEP;AACA,KAAK;AACL;AACA;AACA,CAAC;;;;;;;;;;;;;ACjdD;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;;;;;;;;ACdA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA,+CAA+C,SAAS;AACxD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA,mBAAmB,iBAAiB;AACpC;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA,wCAAwC,SAAS;AACjD;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA,+DAA+D;AAC/D;AACA;;AAEA;;;;;;;;;;;;;;ACnOO,IAAMA,oBAAM,SAANA,GAAM,CAASC,CAAT,EAAW;AAAC,MAAMC,SAASC,EAAEC,EAAEC,EAAEC,EAAEL,CAAF,CAAF,EAAO,IAAEA,EAAEM,MAAX,CAAF,CAAF,CAAf,CAAwC,OAAOL,OAAOM,WAAP,EAAP;AAA4B,CAA5F,CAA6F,SAASL,CAAT,CAAWF,CAAX,EAAa;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AG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,uCAAuC,OAAO;AAC9C;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,CAAC;;AAED;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA,CAAC;;AAED;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA,WAAW;AACX,aAAa;AACb;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,iBAAiB;;AAErD;AACA;AACA,cAAc;AACd;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAS,GAAG,aAAa;AACzB,OAAO;;AAEP;AACA;AACA;;AAEA;AACA;;AAEA,UAAU;AACV;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,CAAC;;AAED,CAAC;;;;;;;;;;;;;;;;;;;kBCxTuB+G,O;;AAPxB;;;;AACA;;;;AACA;;AACA;;AAEA;;;;AAEe,SAASA,OAAT,CAAiB9D,MAAjB,EAAyB+D,Y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B,KAA+C,WAD7C,IAEC,OAAO1E,SAAS2E,KAAhB,KAA0B,WAF/B,EAE4C;AACxC,aAAO,sBAAO,EAAEA,OAAOjB,YAAYrE,MAArB,EAAP,EAAsCW,QAAtC,CAAP;AACH;AACD,WAAOA,QAAP;AACD,GAxDsB,CAAvB;;AA0DAiE,iBAAeW,KAAf,GAAuB,YAAM;AAC3B,QAAId,oBAAJ,EAA0B;AACxB;AACA,aAAOA,qBAAqBc,KAArB,EAAP;AACD;;AAED;AACAZ,wBAAoBa,IAApB,CAAyB,OAAzB;AACD,GARD;;AAUA,SAAOZ,cAAP;AACD,CAnGD,C;;;;;;;AClEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,YAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,SAAS;AACpB,YAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,SAAS;AACpB,YAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,SAAS;AACpB,YAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,iBAAiB,sBAAsB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,MAAM;AACjB,YAAY;AACZ;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,2CAA2C,SAAS;AACpD;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,YAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,YAAY;AACZ;AACA;;AAEA;AACA;AACA;;;;;;;AClKA;;AAEA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA,6BAA6B,+CAA+C,EAAE;AAC9E;;AAEA;AACA;AACA;AACA;AACA;;;;;;;ACfA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,SAAS,IAAI,KAAK;AACtC,oBAAoB,SAAS,IAAI,KAAK;AACtC,oBAAoB,SAAS,IAAI,KAAK;AACtC,oBAAoB,SAAS,IAAI,KAAK,eAAe,UAAU;AAC/D,oBAAoB,SAAS,IAAI,KAAK,eAAe,UAAU;AAC/D,oBAAoB,SAAS,IAAI,KAAK,eAAe,UAAU;AAC/D,oBAAoB,SAAS,IAAI,KAAK,eAAe,UAAU;AAC/D,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA,kDAAkD,SAAS,IAAI,KAAK;AACpE;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,8BAA8B,YAAY;AAC1C;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;;AAEL;AACA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA,CAAC,sIAAsI;;;;;;;;ACpOvI;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;;;;AAIA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;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;AACA;AACA;;AAEA,qCAAqC;;AAErC;AACA;AACA;;AAEA,2BAA2B;AAC3B;AACA;AACA;AACA,4BAA4B,UAAU;;;;;;;ACvLtC;AACA;;AAEA;AACA;AACA;;AAEA,uBAAuB;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,iBAAiB;AACtC;AACA;AACA;AACA,kBAAkB;AAClB;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;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,0CAA0C,sBAAsB,EAAE;AAClE;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,UAAU;AACV;AACA;;AAEA,KAAK;AACL;AACA;;AAEA,KAAK;AACL;AACA;;AAEA,KAAK;AACL;AACA;;AAEA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA,CAAC;;;;;;;;ACzLD;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;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","file":"keen-analysis.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 {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 22);\n","module.exports = each;\n\nfunction each(o, cb, s){\n var n;\n if (!o){\n return 0;\n }\n s = !s ? o : s;\n if (o instanceof Array){\n // Indexed arrays, needed for Safari\n for (n=0; n -1\n }\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 // Build a destructive iterator for the value list\n function iteratorFor(items) {\n var iterator = {\n next: function() {\n var value = items.shift()\n return {done: value === undefined, value: value}\n }\n }\n\n if (support.iterable) {\n iterator[Symbol.iterator] = function() {\n return iterator\n }\n }\n\n return iterator\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 } else if (Array.isArray(headers)) {\n headers.forEach(function(header) {\n this.append(header[0], header[1])\n }, this)\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 oldValue = this.map[name]\n this.map[name] = oldValue ? oldValue+','+value : value\n }\n\n Headers.prototype['delete'] = function(name) {\n delete this.map[normalizeName(name)]\n }\n\n Headers.prototype.get = function(name) {\n name = normalizeName(name)\n return this.has(name) ? this.map[name] : null\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 for (var name in this.map) {\n if (this.map.hasOwnProperty(name)) {\n callback.call(thisArg, this.map[name], name, this)\n }\n }\n }\n\n Headers.prototype.keys = function() {\n var items = []\n this.forEach(function(value, name) { items.push(name) })\n return iteratorFor(items)\n }\n\n Headers.prototype.values = function() {\n var items = []\n this.forEach(function(value) { items.push(value) })\n return iteratorFor(items)\n }\n\n Headers.prototype.entries = function() {\n var items = []\n this.forEach(function(value, name) { items.push([name, value]) })\n return iteratorFor(items)\n }\n\n if (support.iterable) {\n Headers.prototype[Symbol.iterator] = Headers.prototype.entries\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 var promise = fileReaderReady(reader)\n reader.readAsArrayBuffer(blob)\n return promise\n }\n\n function readBlobAsText(blob) {\n var reader = new FileReader()\n var promise = fileReaderReady(reader)\n reader.readAsText(blob)\n return promise\n }\n\n function readArrayBufferAsText(buf) {\n var view = new Uint8Array(buf)\n var chars = new Array(view.length)\n\n for (var i = 0; i < view.length; i++) {\n chars[i] = String.fromCharCode(view[i])\n }\n return chars.join('')\n }\n\n function bufferClone(buf) {\n if (buf.slice) {\n return buf.slice(0)\n } else {\n var view = new Uint8Array(buf.byteLength)\n view.set(new Uint8Array(buf))\n return view.buffer\n }\n }\n\n function Body() {\n this.bodyUsed = false\n\n this._initBody = function(body) {\n this._bodyInit = body\n if (!body) {\n this._bodyText = ''\n } else 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 (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n this._bodyText = body.toString()\n } else if (support.arrayBuffer && support.blob && isDataView(body)) {\n this._bodyArrayBuffer = bufferClone(body.buffer)\n // IE 10-11 can't handle a DataView body.\n this._bodyInit = new Blob([this._bodyArrayBuffer])\n } else if (support.arrayBuffer && (ArrayBuffer.prototype.isPrototypeOf(body) || isArrayBufferView(body))) {\n this._bodyArrayBuffer = bufferClone(body)\n } else {\n throw new Error('unsupported BodyInit type')\n }\n\n if (!this.headers.get('content-type')) {\n if (typeof body === 'string') {\n this.headers.set('content-type', 'text/plain;charset=UTF-8')\n } else if (this._bodyBlob && this._bodyBlob.type) {\n this.headers.set('content-type', this._bodyBlob.type)\n } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n this.headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8')\n }\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._bodyArrayBuffer) {\n return Promise.resolve(new Blob([this._bodyArrayBuffer]))\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 if (this._bodyArrayBuffer) {\n return consumed(this) || Promise.resolve(this._bodyArrayBuffer)\n } else {\n return this.blob().then(readBlobAsArrayBuffer)\n }\n }\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._bodyArrayBuffer) {\n return Promise.resolve(readArrayBufferAsText(this._bodyArrayBuffer))\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\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\n if (input instanceof Request) {\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 && input._bodyInit != null) {\n body = input._bodyInit\n input.bodyUsed = true\n }\n } else {\n this.url = String(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 Request.prototype.clone = function() {\n return new Request(this, { body: this._bodyInit })\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 parseHeaders(rawHeaders) {\n var headers = new Headers()\n // Replace instances of \\r\\n and \\n followed by at least one space or horizontal tab with a space\n // https://tools.ietf.org/html/rfc7230#section-3.2\n var preProcessedHeaders = rawHeaders.replace(/\\r?\\n[\\t ]+/g, ' ')\n preProcessedHeaders.split(/\\r?\\n/).forEach(function(line) {\n var parts = line.split(':')\n var key = parts.shift().trim()\n if (key) {\n var value = parts.join(':').trim()\n headers.append(key, value)\n }\n })\n return headers\n }\n\n Body.call(Request.prototype)\n\n function Response(bodyInit, options) {\n if (!options) {\n options = {}\n }\n\n this.type = 'default'\n this.status = options.status === undefined ? 200 : options.status\n this.ok = this.status >= 200 && this.status < 300\n this.statusText = 'statusText' in options ? options.statusText : 'OK'\n this.headers = new Headers(options.headers)\n this.url = options.url || ''\n this._initBody(bodyInit)\n }\n\n Body.call(Response.prototype)\n\n Response.prototype.clone = function() {\n return new Response(this._bodyInit, {\n status: this.status,\n statusText: this.statusText,\n headers: new Headers(this.headers),\n url: this.url\n })\n }\n\n Response.error = function() {\n var response = new Response(null, {status: 0, statusText: ''})\n response.type = 'error'\n return response\n }\n\n var redirectStatuses = [301, 302, 303, 307, 308]\n\n Response.redirect = function(url, status) {\n if (redirectStatuses.indexOf(status) === -1) {\n throw new RangeError('Invalid status code')\n }\n\n return new Response(null, {status: status, headers: {location: url}})\n }\n\n self.Headers = Headers\n self.Request = Request\n self.Response = Response\n\n self.fetch = function(input, init) {\n return new Promise(function(resolve, reject) {\n var request = new Request(input, init)\n var xhr = new XMLHttpRequest()\n\n xhr.onload = function() {\n var options = {\n status: xhr.status,\n statusText: xhr.statusText,\n headers: parseHeaders(xhr.getAllResponseHeaders() || '')\n }\n options.url = 'responseURL' in xhr ? xhr.responseURL : options.headers.get('X-Request-URL')\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.ontimeout = 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 } else if (request.credentials === 'omit') {\n xhr.withCredentials = false\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})(typeof self !== 'undefined' ? self : this);\n","var each = require('./each'),\n extend = require('./extend');\n\nmodule.exports = serialize;\n\nfunction serialize(data){\n var query = [];\n each(data, function(value, key){\n if ('string' !== typeof value) {\n value = JSON.stringify(value);\n }\n query.push(key + '=' + encodeURIComponent(value));\n });\n return query.join('&');\n}\n","import promiseFinally from './finally';\n\n// Store setTimeout reference so promise-polyfill will be unaffected by\n// other code modifying setTimeout (like sinon.useFakeTimers())\nvar setTimeoutFunc = setTimeout;\n\nfunction noop() {}\n\n// Polyfill for Function.prototype.bind\nfunction bind(fn, thisArg) {\n return function() {\n fn.apply(thisArg, arguments);\n };\n}\n\nfunction Promise(fn) {\n if (!(this instanceof Promise))\n throw new TypeError('Promises must be constructed via new');\n if (typeof fn !== 'function') throw new TypeError('not a function');\n this._state = 0;\n this._handled = false;\n this._value = undefined;\n this._deferreds = [];\n\n doResolve(fn, this);\n}\n\nfunction handle(self, deferred) {\n while (self._state === 3) {\n self = self._value;\n }\n if (self._state === 0) {\n self._deferreds.push(deferred);\n return;\n }\n self._handled = true;\n Promise._immediateFn(function() {\n var cb = self._state === 1 ? deferred.onFulfilled : deferred.onRejected;\n if (cb === null) {\n (self._state === 1 ? resolve : reject)(deferred.promise, self._value);\n return;\n }\n var ret;\n try {\n ret = cb(self._value);\n } catch (e) {\n reject(deferred.promise, e);\n return;\n }\n resolve(deferred.promise, ret);\n });\n}\n\nfunction resolve(self, newValue) {\n try {\n // Promise Resolution Procedure: https://github.com/promises-aplus/promises-spec#the-promise-resolution-procedure\n if (newValue === self)\n throw new TypeError('A promise cannot be resolved with itself.');\n if (\n newValue &&\n (typeof newValue === 'object' || typeof newValue === 'function')\n ) {\n var then = newValue.then;\n if (newValue instanceof Promise) {\n self._state = 3;\n self._value = newValue;\n finale(self);\n return;\n } else if (typeof then === 'function') {\n doResolve(bind(then, newValue), self);\n return;\n }\n }\n self._state = 1;\n self._value = newValue;\n finale(self);\n } catch (e) {\n reject(self, e);\n }\n}\n\nfunction reject(self, newValue) {\n self._state = 2;\n self._value = newValue;\n finale(self);\n}\n\nfunction finale(self) {\n if (self._state === 2 && self._deferreds.length === 0) {\n Promise._immediateFn(function() {\n if (!self._handled) {\n Promise._unhandledRejectionFn(self._value);\n }\n });\n }\n\n for (var i = 0, len = self._deferreds.length; i < len; i++) {\n handle(self, self._deferreds[i]);\n }\n self._deferreds = null;\n}\n\nfunction Handler(onFulfilled, onRejected, promise) {\n this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;\n this.onRejected = typeof onRejected === 'function' ? onRejected : null;\n this.promise = promise;\n}\n\n/**\n * Take a potentially misbehaving resolver function and make sure\n * onFulfilled and onRejected are only called once.\n *\n * Makes no guarantees about asynchrony.\n */\nfunction doResolve(fn, self) {\n var done = false;\n try {\n fn(\n function(value) {\n if (done) return;\n done = true;\n resolve(self, value);\n },\n function(reason) {\n if (done) return;\n done = true;\n reject(self, reason);\n }\n );\n } catch (ex) {\n if (done) return;\n done = true;\n reject(self, ex);\n }\n}\n\nPromise.prototype['catch'] = function(onRejected) {\n return this.then(null, onRejected);\n};\n\nPromise.prototype.then = function(onFulfilled, onRejected) {\n var prom = new this.constructor(noop);\n\n handle(this, new Handler(onFulfilled, onRejected, prom));\n return prom;\n};\n\nPromise.prototype['finally'] = promiseFinally;\n\nPromise.all = function(arr) {\n return new Promise(function(resolve, reject) {\n if (!arr || typeof arr.length === 'undefined')\n throw new TypeError('Promise.all accepts an array');\n var args = Array.prototype.slice.call(arr);\n if (args.length === 0) return resolve([]);\n var remaining = args.length;\n\n function res(i, val) {\n try {\n if (val && (typeof val === 'object' || typeof val === 'function')) {\n var then = val.then;\n if (typeof then === 'function') {\n then.call(\n val,\n function(val) {\n res(i, val);\n },\n reject\n );\n return;\n }\n }\n args[i] = val;\n if (--remaining === 0) {\n resolve(args);\n }\n } catch (ex) {\n reject(ex);\n }\n }\n\n for (var i = 0; i < args.length; i++) {\n res(i, args[i]);\n }\n });\n};\n\nPromise.resolve = function(value) {\n if (value && typeof value === 'object' && value.constructor === Promise) {\n return value;\n }\n\n return new Promise(function(resolve) {\n resolve(value);\n });\n};\n\nPromise.reject = function(value) {\n return new Promise(function(resolve, reject) {\n reject(value);\n });\n};\n\nPromise.race = function(values) {\n return new Promise(function(resolve, reject) {\n for (var i = 0, len = values.length; i < len; i++) {\n values[i].then(resolve, reject);\n }\n });\n};\n\n// Use polyfill for setImmediate for performance gains\nPromise._immediateFn =\n (typeof setImmediate === 'function' &&\n function(fn) {\n setImmediate(fn);\n }) ||\n function(fn) {\n setTimeoutFunc(fn, 0);\n };\n\nPromise._unhandledRejectionFn = function _unhandledRejectionFn(err) {\n if (typeof console !== 'undefined' && console) {\n console.warn('Possible Unhandled Promise Rejection:', err); // eslint-disable-line no-console\n }\n};\n\nexport default Promise;\n","export const MD5 = function(d){const result = M(V(Y(X(d),8*d.length)));return result.toLowerCase()};function M(d){for(var _,m=\"0123456789ABCDEF\",f=\"\",r=0;r>>4&15)+m.charAt(15&_);return f}function X(d){for(var _=Array(d.length>>2),m=0;m<_.length;m++)_[m]=0;for(m=0;m<8*d.length;m+=8)_[m>>5]|=(255&d.charCodeAt(m/8))<>5]>>>m%32&255);return _}function Y(d,_){d[_>>5]|=128<<_%32,d[14+(_+64>>>9<<4)]=_;for(var m=1732584193,f=-271733879,r=-1732584194,i=271733878,n=0;n>16)+(_>>16)+(m>>16)<<16|65535&m}function bit_rol(d,_){return d<<_|d>>>32-_}\n\nexport default MD5;\n","import 'promise-polyfill/src/polyfill';\nimport 'whatwg-fetch';\n\nimport MD5 from './md5';\n\nconst indexedDBAvailable = 'indexedDB' in self;\nlet cachingEnabled = true;\n\nif (!indexedDBAvailable) {\n // console.log(\"Your browser doesn't support a stable version of IndexedDB.\");\n cachingEnabled = false; // graceful degradation\n}\n\nlet db;\nlet cacheConfig = {\n dbName: 'keenAnalysisIndexedDB',\n dbCollectionName: 'requests',\n dbCollectionKey: 'url',\n maxAge: 60000\n};\n\nfunction initializeIndexedDb(requestCacheConfig = {}){\n if (db) { return Promise.resolve(); }\n if (!cachingEnabled) { return Promise.resolve(); }\n cacheConfig = {\n ...cacheConfig,\n ...requestCacheConfig\n };\n return new Promise((resolve, reject) => {\n const dbConnectionRequest = self.indexedDB.open(cacheConfig.dbName);\n dbConnectionRequest.onerror = function(event) {\n cachingEnabled = false;\n resolve();\n };\n\n dbConnectionRequest.onupgradeneeded = function(event) {\n const db = event.target.result;\n const objectStore = db\n .createObjectStore(cacheConfig.dbCollectionName,\n { keyPath: cacheConfig.dbCollectionKey });\n objectStore.createIndex(\n cacheConfig.dbCollectionKey,\n cacheConfig.dbCollectionKey,\n { unique: true }\n );\n objectStore.createIndex('expiryTime', 'expiryTime', { unique: false });\n };\n\n dbConnectionRequest.onsuccess = function(event) {\n db = event.target.result;\n db.onerror = function(event) {\n cachingEnabled = false; // graceful degradation\n };\n resolve(db);\n };\n });\n}\n\nconst urlWithBodyHash = (url, fetchOptions) => {\n return MD5(`${url}&body=${JSON.stringify(fetchOptions.body)}`);\n}\n\nexport const saveToCache = (url, fetchOptions, responseJson) => {\n return initializeIndexedDb().then(() => {\n const transactionSave = db\n .transaction(cacheConfig.dbCollectionName, \"readwrite\")\n .objectStore(cacheConfig.dbCollectionName);\n const requestSave = transactionSave.add({\n url: urlWithBodyHash(url, fetchOptions),\n expiryTime: Date.now() + cacheConfig.maxAge,\n responseJson\n });\n requestSave.onsuccess = function(event) {\n };\n requestSave.onerror = function(event) {\n cachingEnabled = false;\n };\n });\n}\n\nexport const getFromCache = (url, fetchOptions, configOptions = {}) => {\n return initializeIndexedDb(configOptions.cache).then(() => {\n return new Promise((resolve, reject) => {\n if (!cachingEnabled) {\n return resolve(null);\n }\n\n const transactionCleanUp = db\n .transaction(cacheConfig.dbCollectionName, \"readwrite\")\n .objectStore(cacheConfig.dbCollectionName);\n const indexCleanUp = transactionCleanUp.index('expiryTime');\n const upperBoundOpenKeyRange = IDBKeyRange.upperBound(Date.now(), true);\n indexCleanUp.openCursor(upperBoundOpenKeyRange).onsuccess = function(event) {\n let cursor = event.target.result;\n if (cursor) {\n let transactionDelete = db\n .transaction(cacheConfig.dbCollectionName, \"readwrite\")\n .objectStore(cacheConfig.dbCollectionName)\n .delete(event.target.result.value[cacheConfig.dbCollectionKey]);\n cursor.continue();\n }\n };\n\n const transactionIndex = db\n .transaction(cacheConfig.dbCollectionName, \"readwrite\")\n .objectStore(cacheConfig.dbCollectionName);\n const index = transactionIndex.index(cacheConfig.dbCollectionKey);\n const responseFromCache = index.get(urlWithBodyHash(url, fetchOptions));\n responseFromCache.onsuccess = function(event) {\n if (!event.target.result ||\n event.target.result.expiryTime < Date.now()\n ) {\n if (event.target.result && event.target.result.expiryTime < Date.now()){\n const transactionDelete = db\n .transaction(cacheConfig.dbCollectionName, \"readwrite\")\n .objectStore(cacheConfig.dbCollectionName)\n .delete(event.target.result[cacheConfig.dbCollectionKey]);\n transactionDelete.onsuccess = (event) => {\n resolve(getFromCache(url, fetchOptions, configOptions));\n };\n transactionDelete.onerror = (event) => {\n cachingEnabled = false;\n resolve(getFromCache(url, fetchOptions, configOptions));\n };\n return resolve(null);\n }\n return resolve(null);\n } else {\n return resolve(event.target.result.responseJson);\n }\n };\n responseFromCache.onerror = function(event) {\n cachingEnabled = false;\n resolve(getFromCache(url, fetchOptions, configOptions));\n };\n });\n });\n}\n","import 'promise-polyfill/src/polyfill';\nimport 'whatwg-fetch';\n\nimport each from 'keen-core/lib/utils/each';\nimport serialize from 'keen-core/lib/utils/serialize';\n\nimport { getFromCache, saveToCache } from './cache-browser';\n\nconst sendFetch = (method, config, options = {}) => {\n const headers = {};\n let url = config.url;\n\n if (method === 'GET' || method === 'DELETE') {\n if(url.indexOf('?') === -1){\n url += '?';\n } else {\n url += '&';\n }\n if (config.api_key) {\n url += 'api_key=' + config.api_key + '&';\n }\n if (config.params) {\n url += serialize(config.params);\n }\n }\n\n each(config.headers, function(value, key){\n if (typeof value === 'string') {\n headers[key] = value;\n }\n });\n\n const fetchOptions = {\n method,\n body: (method !== 'GET' && config.params) ?\n JSON.stringify(config.params) : undefined,\n mode: 'cors',\n headers\n };\n\n if (config.cache\n && method !== 'DELETE'\n && method !== 'PUT'\n && !options.notFoundInCache\n ) {\n return getFromCache(url, fetchOptions, config)\n .then(responseJSONFromCache => {\n if (responseJSONFromCache) {\n return options.resolve(responseJSONFromCache);\n }\n sendFetch(method, config, {...options, notFoundInCache: true});\n });\n }\n\n let apiResponse;\n\n fetch(url, {\n ...fetchOptions,\n signal: options.signal // abort signal\n })\n .catch(connectionError => {\n options.reject(connectionError);\n return;\n })\n .then(response => {\n if (!response) return;\n apiResponse = response;\n if (response.ok && method === 'DELETE'){\n return {};\n }\n return response.json();\n })\n .then(responseJSON => {\n if (!responseJSON) return;\n if (responseJSON.error_code || !apiResponse.ok) {\n return options.reject({\n ok: false,\n error_code: responseJSON.error_code,\n body: responseJSON.message,\n status: apiResponse.status,\n statusText: apiResponse.statusText\n });\n }\n if (config.cache\n && method !== 'DELETE'\n && method !== 'PUT'\n ) {\n saveToCache(url, fetchOptions, responseJSON);\n }\n options.resolve(responseJSON);\n });\n}\n\n// XMLHttpRequest Support\n// ------------------------------\n// DEPRECATED - WILL BE REMOVED\nconst xhrObject = () => {\n const root = window || this;\n if (root.XMLHttpRequest &&\n (\n !root.ActiveXObject ||\n (root.location && root.location.protocol\n && 'file:' !== root.location.protocol)\n )\n ) {\n return new XMLHttpRequest;\n } else {\n try { return new ActiveXObject('Microsoft.XMLHTTP'); } catch(e) {}\n try { return new ActiveXObject('Msxml2.XMLHTTP.6.0'); } catch(e) {}\n try { return new ActiveXObject('Msxml2.XMLHTTP.3.0'); } catch(e) {}\n try { return new ActiveXObject('Msxml2.XMLHTTP'); } catch(e) {}\n }\n return false;\n}\n\nconst sendXhr = (method, config, options = {}) => {\n const xhr = xhrObject();\n const cb = options.callback;\n let url = config.url;\n\n xhr.onreadystatechange = function() {\n let response;\n if (xhr.readyState == 4) {\n if (xhr.status >= 200 && xhr.status < 300) {\n if (xhr.status === 204) {\n if (cb) {\n cb(null, xhr);\n }\n }\n else {\n try {\n response = JSON.parse( xhr.responseText );\n if (cb && response) {\n cb(null, response);\n }\n }\n catch (e) {\n if (cb) {\n cb(xhr, null);\n }\n }\n }\n }\n else {\n try {\n response = JSON.parse( xhr.responseText );\n if (cb && response) {\n cb(response, null);\n }\n }\n catch (e) {\n if (cb) {\n cb(xhr, null);\n }\n }\n }\n }\n };\n\n if (method !== 'GET') {\n xhr.open(method, url, true);\n each(config.headers, function(value, key){\n if (typeof value === 'string') {\n xhr.setRequestHeader(key, value);\n }\n });\n if (config.params) {\n xhr.send( JSON.stringify(config.params) );\n }\n else {\n xhr.send();\n }\n }\n else {\n url += '?';\n if (config.api_key) {\n url += 'api_key=' + config.api_key + '&';\n }\n if (config.params) {\n url += serialize(config.params);\n }\n xhr.open(method, url, true);\n each(config.headers, function(value, key){\n if (typeof value === 'string') {\n xhr.setRequestHeader(key, value);\n }\n });\n xhr.send();\n }\n\n return xhr;\n}\n\n// JSON-P Support\n// DEPRECATED - WILL BE REMOVED\nconst sendJsonp = (config, options = {}) => {\n let url = config.url;\n let cb = options.callback;\n const timestamp = new Date().getTime();\n const scriptTag = document.createElement('script');\n const parent = document.getElementsByTagName('head')[0];\n let callbackName = 'keenJSONPCallback';\n let loaded = false;\n\n callbackName += timestamp;\n while (callbackName in window) {\n callbackName += 'a';\n }\n\n window[callbackName] = function(response) {\n if (loaded === true) {\n return;\n }\n handleResponse(null, response);\n };\n\n if (config.params) {\n url += serialize(config.params);\n }\n\n // Early IE (no onerror event)\n scriptTag.onreadystatechange = function() {\n if (loaded === false && this.readyState === 'loaded') {\n handleResponse('An error occurred', null);\n }\n };\n\n // Not IE\n scriptTag.onerror = function() {\n // on IE9 both onerror and onreadystatechange are called\n if (loaded === false) {\n handleResponse('An error occurred', null);\n }\n };\n\n scriptTag.src = url + '&jsonp=' + callbackName;\n parent.appendChild(scriptTag);\n\n const handleResponse = (a, b) => {\n loaded = true;\n if (cb && typeof cb === 'function') {\n cb(a, b);\n cb = void 0;\n }\n window[callbackName] = undefined;\n try {\n delete window[callbackName];\n } catch(e){};\n parent.removeChild(scriptTag);\n }\n\n}\n\n// HTTP Handlers\n// ------------------------------\n\nexport const GET = (config, options) => {\n if (typeof fetch !== 'undefined') {\n return sendFetch('GET', config, options);\n }\n else if (xhrObject()) {\n return sendXhr('GET', config, options);\n }\n else {\n return sendJsonp(config, options);\n }\n}\n\nexport const POST = (config, options) => {\n if (typeof fetch !== 'undefined') {\n return sendFetch('POST', config, options);\n }\n else if (xhrObject()) {\n return sendXhr('POST', config, options);\n }\n else {\n options.reject('XHR POST not supported');\n }\n}\n\nexport const PUT = (config, options) => {\n if (typeof fetch !== 'undefined') {\n return sendFetch('PUT', config, options);\n }\n else if (xhrObject()) {\n return sendXhr('PUT', config, options);\n }\n else {\n options.reject('XHR PUT not supported');\n }\n}\n\nexport const DEL = (config, options) => {\n if (typeof fetch !== 'undefined') {\n return sendFetch('DELETE', config, options);\n }\n else if (xhrObject()) {\n return sendXhr('DELETE', config, options);\n }\n else {\n options.reject('XHR DELETE not supported');\n }\n}\n","(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory() :\n\ttypeof define === 'function' && define.amd ? define(factory) :\n\t(factory());\n}(this, (function () { 'use strict';\n\nvar classCallCheck = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nvar createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\nvar get = function get(object, property, receiver) {\n if (object === null) object = Function.prototype;\n var desc = Object.getOwnPropertyDescriptor(object, property);\n\n if (desc === undefined) {\n var parent = Object.getPrototypeOf(object);\n\n if (parent === null) {\n return undefined;\n } else {\n return get(parent, property, receiver);\n }\n } else if (\"value\" in desc) {\n return desc.value;\n } else {\n var getter = desc.get;\n\n if (getter === undefined) {\n return undefined;\n }\n\n return getter.call(receiver);\n }\n};\n\nvar inherits = function (subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n};\n\nvar possibleConstructorReturn = function (self, call) {\n if (!self) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n};\n\nvar Emitter = function () {\n function Emitter() {\n classCallCheck(this, Emitter);\n\n this.listeners = {};\n }\n\n createClass(Emitter, [{\n key: 'addEventListener',\n value: function addEventListener(type, callback) {\n if (!(type in this.listeners)) {\n this.listeners[type] = [];\n }\n this.listeners[type].push(callback);\n }\n }, {\n key: 'removeEventListener',\n value: function removeEventListener(type, callback) {\n if (!(type in this.listeners)) {\n return;\n }\n var stack = this.listeners[type];\n for (var i = 0, l = stack.length; i < l; i++) {\n if (stack[i] === callback) {\n stack.splice(i, 1);\n return;\n }\n }\n }\n }, {\n key: 'dispatchEvent',\n value: function dispatchEvent(event) {\n var _this = this;\n\n if (!(event.type in this.listeners)) {\n return;\n }\n var debounce = function debounce(callback) {\n setTimeout(function () {\n return callback.call(_this, event);\n });\n };\n var stack = this.listeners[event.type];\n for (var i = 0, l = stack.length; i < l; i++) {\n debounce(stack[i]);\n }\n return !event.defaultPrevented;\n }\n }]);\n return Emitter;\n}();\n\nvar AbortSignal = function (_Emitter) {\n inherits(AbortSignal, _Emitter);\n\n function AbortSignal() {\n classCallCheck(this, AbortSignal);\n\n var _this2 = possibleConstructorReturn(this, (AbortSignal.__proto__ || Object.getPrototypeOf(AbortSignal)).call(this));\n\n _this2.aborted = false;\n _this2.onabort = null;\n return _this2;\n }\n\n createClass(AbortSignal, [{\n key: 'toString',\n value: function toString() {\n return '[object AbortSignal]';\n }\n }, {\n key: 'dispatchEvent',\n value: function dispatchEvent(event) {\n if (event.type === 'abort') {\n this.aborted = true;\n if (typeof this.onabort === 'function') {\n this.onabort.call(this, event);\n }\n }\n\n get(AbortSignal.prototype.__proto__ || Object.getPrototypeOf(AbortSignal.prototype), 'dispatchEvent', this).call(this, event);\n }\n }]);\n return AbortSignal;\n}(Emitter);\n\nvar AbortController = function () {\n function AbortController() {\n classCallCheck(this, AbortController);\n\n this.signal = new AbortSignal();\n }\n\n createClass(AbortController, [{\n key: 'abort',\n value: function abort() {\n var event = void 0;\n try {\n event = new Event('abort');\n } catch (e) {\n if (typeof document !== 'undefined') {\n // For Internet Explorer 11:\n event = document.createEvent('Event');\n event.initEvent('abort', false, false);\n } else {\n // Fallback where document isn't available:\n event = {\n type: 'abort',\n bubbles: false,\n cancelable: false\n };\n }\n }\n this.signal.dispatchEvent(event);\n }\n }, {\n key: 'toString',\n value: function toString() {\n return '[object AbortController]';\n }\n }]);\n return AbortController;\n}();\n\nif (typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n // These are necessary to make sure that we get correct output for:\n // Object.prototype.toString.call(new AbortController())\n AbortController.prototype[Symbol.toStringTag] = 'AbortController';\n AbortSignal.prototype[Symbol.toStringTag] = 'AbortSignal';\n}\n\n/**\n * Note: the \"fetch.Request\" default value is available for fetch imported from\n * the \"node-fetch\" package and not in browsers. This is OK since browsers\n * will be importing umd-polyfill.js from that path \"self\" is passed the\n * decorator so the default value will not be used (because browsers that define\n * fetch also has Request). One quirky setup where self.fetch exists but\n * self.Request does not is when the \"unfetch\" minimal fetch polyfill is used\n * on top of IE11; for this case the browser will try to use the fetch.Request\n * default value which in turn will be undefined but then then \"if (Request)\"\n * will ensure that you get a patched fetch but still no Request (as expected).\n * @param {fetch, Request = fetch.Request}\n * @returns {fetch: abortableFetch, Request: AbortableRequest}\n */\nfunction abortableFetchDecorator(patchTargets) {\n if ('function' === typeof patchTargets) {\n patchTargets = { fetch: patchTargets };\n }\n var _patchTargets = patchTargets,\n fetch = _patchTargets.fetch,\n _patchTargets$Request = _patchTargets.Request,\n NativeRequest = _patchTargets$Request === undefined ? fetch.Request : _patchTargets$Request,\n _patchTargets$AbortCo = _patchTargets.AbortController,\n NativeAbortController = _patchTargets$AbortCo === undefined ? AbortController : _patchTargets$AbortCo;\n\n\n var Request = NativeRequest;\n // Note that the \"unfetch\" minimal fetch polyfill defines fetch() without\n // defining window.Request, and this polyfill need to work on top of unfetch\n // so the below feature detection is wrapped in if (Request)\n if (Request) {\n // Do feature detecting\n var controller = new NativeAbortController();\n var signal = controller.signal;\n var request = new Request('/', { signal: signal });\n\n // Browser already supports abortable fetch (like FF v57 and fetch-polyfill)\n if (request.signal) {\n return { fetch: fetch, Request: Request };\n }\n\n Request = function Request(input, init) {\n var request = new NativeRequest(input, init);\n if (init && init.signal) {\n request.signal = init.signal;\n }\n return request;\n };\n Request.prototype = NativeRequest.prototype;\n }\n\n var realFetch = fetch;\n var abortableFetch = function abortableFetch(input, init) {\n var signal = Request && Request.prototype.isPrototypeOf(input) ? input.signal : init ? init.signal : undefined;\n\n if (signal) {\n var abortError = void 0;\n try {\n abortError = new DOMException('Aborted', 'AbortError');\n } catch (err) {\n // IE 11 does not support calling the DOMException constructor, use a\n // regular error object on it instead.\n abortError = new Error('Aborted');\n abortError.name = 'AbortError';\n }\n\n // Return early if already aborted, thus avoiding making an HTTP request\n if (signal.aborted) {\n return Promise.reject(abortError);\n }\n\n // Turn an event into a promise, reject it once `abort` is dispatched\n var cancellation = new Promise(function (_, reject) {\n signal.addEventListener('abort', function () {\n return reject(abortError);\n }, { once: true });\n });\n\n // Return the fastest promise (don't need to wait for request to finish)\n return Promise.race([cancellation, realFetch(input, init)]);\n }\n\n return realFetch(input, init);\n };\n\n return { fetch: abortableFetch, Request: Request };\n}\n\n(function (self) {\n\n if (self.AbortController) {\n return;\n }\n\n self.AbortController = AbortController;\n self.AbortSignal = AbortSignal;\n\n if (!self.fetch) {\n console.warn('fetch() is not available, cannot install abortcontroller-polyfill');\n return;\n }\n\n var _abortableFetch = abortableFetchDecorator(self),\n fetch = _abortableFetch.fetch,\n Request = _abortableFetch.Request;\n\n self.fetch = fetch;\n self.Request = Request;\n})(typeof self !== 'undefined' ? self : global);\n\n})));\n","import each from 'keen-core/lib/utils/each';\nimport extend from 'keen-core/lib/utils/extend';\nimport 'abortcontroller-polyfill/dist/polyfill-patch-fetch';\nimport 'promise-polyfill/src/polyfill';\n\nimport { version } from '../package.json';\n\nexport default function request(method, httpHandlers){\n this.httpHandlers = httpHandlers;\n return function(requestUrlAndOptions, options = {}){\n if (typeof requestUrlAndOptions === 'string') {\n // backward compatibility\n this.config = {\n api_key : undefined,\n method,\n params : {},\n url: requestUrlAndOptions,\n headers : {\n 'Authorization' : '',\n 'Content-type' : 'application/json',\n 'keen-sdk': `javascript-${version}`\n },\n ...options\n };\n return this;\n }\n\n this.config = {\n api_key : undefined,\n params : {},\n method,\n headers : {\n 'Authorization' : requestUrlAndOptions.api_key,\n 'Content-type' : 'application/json',\n 'keen-sdk': `javascript-${version}`\n },\n ...requestUrlAndOptions,\n ...options\n };\n return this.send();\n }.bind(this);\n}\n\nrequest.prototype.auth = function(str){\n if (typeof str === 'string') {\n this.config.api_key = typeof str === 'string' ? str : undefined;\n this.headers({\n 'Authorization': str\n });\n }\n return this;\n};\n\nrequest.prototype.headers = function(obj){\n if (typeof obj === 'object') {\n each(obj, function(value, key){\n this.config['headers'][key] = value;\n }.bind(this));\n }\n return this;\n};\n\nrequest.prototype.timeout = function(num){\n this.config.timeout = typeof num === 'number' ? num : 300 * 1000;\n return this;\n};\n\nrequest.prototype.send = function(obj){\n if (obj) {\n this.config.params = (obj && typeof obj === 'object') ? obj : {};\n }\n let httpRequestType = this.config['method'];\n if (httpRequestType === 'DELETE') {\n // delete is a reserved word in JS, so to avoid bugs\n httpRequestType = 'DEL';\n }\n const httpHandler = this.httpHandlers[httpRequestType];\n const httpOptions = extend({}, this.config);\n const self = this;\n\n // Temporary mod to append analysis_type to responses\n // for generic HTTP requests to known query resources\n if (this.config['method'] !== 'DELETE'\n && typeof httpOptions.params.analysis_type === 'undefined') {\n if (httpOptions.url.indexOf('/queries/') > -1\n && httpOptions.url.indexOf('/saved/') < 0) {\n httpOptions.params.analysis_type =\n httpOptions.url.split('/queries/').pop();\n }\n }\n\n let fetchAbortController;\n if (typeof AbortController !== 'undefined') {\n fetchAbortController = new AbortController();\n }\n\n let httpHandlerResponse;\n const requestPromise = new Promise((resolve, reject) => {\n const options = {};\n if (fetchAbortController) {\n options.signal = fetchAbortController.signal;\n }\n options.resolve = resolve;\n options.reject = reject;\n httpHandlerResponse = httpHandler(httpOptions, options);\n return httpHandlerResponse;\n })\n .then(response => {\n //math round values config check\n if(this.config.resultParsers){\n if(Array.isArray(response.result)){\n if(this.config.params.interval){\n if(this.config.params.group_by){\n //interval and group by result\n response.result.forEach((val) => {\n val.value.forEach((res) => {\n this.config.resultParsers.forEach((func) => {\n res.result = func(res.result)\n })\n })\n })\n }\n else {\n //interval result\n response.result.forEach((val) => {\n this.config.resultParsers.forEach((func) => {\n val.value = func(val.value)\n })\n })\n }\n }\n else {\n //group by result\n response.result.forEach((res) => {\n this.config.resultParsers.forEach((func) => {\n res.result = func(res.result)\n })\n })\n }\n }\n else {\n //simple result\n this.config.resultParsers.forEach((func) => {\n response.result = func(response.result)\n })\n }\n }\n if (httpOptions.params &&\n typeof httpOptions.params.event_collection !== 'undefined'\n && typeof response.query === 'undefined') {\n return extend({ query: httpOptions.params }, response);\n }\n return response;\n });\n\n requestPromise.abort = () => {\n if (fetchAbortController) {\n // browser\n return fetchAbortController.abort();\n }\n\n //node\n httpHandlerResponse.emit('abort');\n }\n\n return requestPromise;\n};\n","\r\n/**\r\n * Expose `Emitter`.\r\n */\r\n\r\nif (typeof module !== 'undefined') {\r\n module.exports = Emitter;\r\n}\r\n\r\n/**\r\n * Initialize a new `Emitter`.\r\n *\r\n * @api public\r\n */\r\n\r\nfunction Emitter(obj) {\r\n if (obj) return mixin(obj);\r\n};\r\n\r\n/**\r\n * Mixin the emitter properties.\r\n *\r\n * @param {Object} obj\r\n * @return {Object}\r\n * @api private\r\n */\r\n\r\nfunction mixin(obj) {\r\n for (var key in Emitter.prototype) {\r\n obj[key] = Emitter.prototype[key];\r\n }\r\n return obj;\r\n}\r\n\r\n/**\r\n * Listen on the given `event` with `fn`.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.on =\r\nEmitter.prototype.addEventListener = function(event, fn){\r\n this._callbacks = this._callbacks || {};\r\n (this._callbacks['$' + event] = this._callbacks['$' + event] || [])\r\n .push(fn);\r\n return this;\r\n};\r\n\r\n/**\r\n * Adds an `event` listener that will be invoked a single\r\n * time then automatically removed.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.once = function(event, fn){\r\n function on() {\r\n this.off(event, on);\r\n fn.apply(this, arguments);\r\n }\r\n\r\n on.fn = fn;\r\n this.on(event, on);\r\n return this;\r\n};\r\n\r\n/**\r\n * Remove the given callback for `event` or all\r\n * registered callbacks.\r\n *\r\n * @param {String} event\r\n * @param {Function} fn\r\n * @return {Emitter}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.off =\r\nEmitter.prototype.removeListener =\r\nEmitter.prototype.removeAllListeners =\r\nEmitter.prototype.removeEventListener = function(event, fn){\r\n this._callbacks = this._callbacks || {};\r\n\r\n // all\r\n if (0 == arguments.length) {\r\n this._callbacks = {};\r\n return this;\r\n }\r\n\r\n // specific event\r\n var callbacks = this._callbacks['$' + event];\r\n if (!callbacks) return this;\r\n\r\n // remove all handlers\r\n if (1 == arguments.length) {\r\n delete this._callbacks['$' + event];\r\n return this;\r\n }\r\n\r\n // remove specific handler\r\n var cb;\r\n for (var i = 0; i < callbacks.length; i++) {\r\n cb = callbacks[i];\r\n if (cb === fn || cb.fn === fn) {\r\n callbacks.splice(i, 1);\r\n break;\r\n }\r\n }\r\n return this;\r\n};\r\n\r\n/**\r\n * Emit `event` with the given args.\r\n *\r\n * @param {String} event\r\n * @param {Mixed} ...\r\n * @return {Emitter}\r\n */\r\n\r\nEmitter.prototype.emit = function(event){\r\n this._callbacks = this._callbacks || {};\r\n var args = [].slice.call(arguments, 1)\r\n , callbacks = this._callbacks['$' + event];\r\n\r\n if (callbacks) {\r\n callbacks = callbacks.slice(0);\r\n for (var i = 0, len = callbacks.length; i < len; ++i) {\r\n callbacks[i].apply(this, args);\r\n }\r\n }\r\n\r\n return this;\r\n};\r\n\r\n/**\r\n * Return array of callbacks for `event`.\r\n *\r\n * @param {String} event\r\n * @return {Array}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.listeners = function(event){\r\n this._callbacks = this._callbacks || {};\r\n return this._callbacks['$' + event] || [];\r\n};\r\n\r\n/**\r\n * Check if this emitter has `event` handlers.\r\n *\r\n * @param {String} event\r\n * @return {Boolean}\r\n * @api public\r\n */\r\n\r\nEmitter.prototype.hasListeners = function(event){\r\n return !! this.listeners(event).length;\r\n};\r\n","module.exports = parseParams;\n\nfunction parseParams(str){\n // via: http://stackoverflow.com/a/2880929/2511985\n var urlParams = {},\n match,\n pl = /\\+/g, // Regex for replacing addition symbol with a space\n search = /([^&=]+)=?([^&]*)/g,\n decode = function (s) { return decodeURIComponent(s.replace(pl, \" \")); },\n query = str.split(\"?\")[1];\n\n while (!!(match=search.exec(query))) {\n urlParams[decode(match[1])] = decode(match[2]);\n }\n return urlParams;\n};\n","(function(env){\n var previousKeen = env.Keen || undefined;\n var each = require('./utils/each'),\n extend = require('./utils/extend'),\n parseParams = require('./utils/parse-params'),\n serialize = require('./utils/serialize');\n\n var Emitter = require('component-emitter');\n\n function Client(props){\n if (this instanceof Client === false) {\n return new Client(props);\n }\n this.configure(props);\n\n // Set up event handling\n if (Client.debug) {\n this.on('error', Client.log);\n }\n this.emit('ready');\n Client.emit('client', this);\n }\n\n if (previousKeen && typeof previousKeen.resources === 'undefined') {\n Client.legacyVersion = previousKeen;\n }\n\n Emitter(Client);\n Emitter(Client.prototype);\n\n extend(Client, {\n debug: false,\n enabled: true,\n loaded: false,\n version: '__VERSION__'\n });\n\n // Set or extend helpers\n Client.helpers = Client.helpers || {};\n\n // Set or extend resources\n Client.resources = Client.resources || {};\n extend(Client.resources, {\n 'base' : '{protocol}://{host}',\n 'version' : '{protocol}://{host}/3.0',\n 'projects' : '{protocol}://{host}/3.0/projects',\n 'projectId' : '{protocol}://{host}/3.0/projects/{projectId}',\n 'events' : '{protocol}://{host}/3.0/projects/{projectId}/events',\n 'queries' : '{protocol}://{host}/3.0/projects/{projectId}/queries',\n 'datasets' : '{protocol}://{host}/3.0/projects/{projectId}/datasets'\n });\n\n // Set or extend utils\n Client.utils = Client.utils || {};\n extend(Client.utils, {\n 'each' : each,\n 'extend' : extend,\n 'parseParams' : parseParams,\n 'serialize' : serialize\n });\n\n Client.extendLibrary = function(target, source) {\n var previous = previousKeen || source;\n if (isDefined(previous) && isDefined(previous.resources)) {\n each(previous, function(value, key) {\n if (typeof value === 'object') {\n target[key] = target[key] || {};\n extend(target[key], value);\n }\n else {\n target[key] = target[key] || value;\n }\n });\n extend(target.prototype, previous.prototype);\n }\n return target;\n };\n\n Client.log = function(str){\n if (Client.debug && typeof console === 'object') {\n console.log('[Keen]', str);\n }\n };\n\n Client.noConflict = function(){\n if (typeof env.Keen !== 'undefined') {\n env.Keen = Client.legacyVersion || previousKeen;\n }\n return Client;\n };\n\n Client.ready = function(fn){\n if (Client.loaded) {\n fn();\n }\n else {\n Client.once('ready', fn);\n }\n };\n\n Client.prototype.configure = function(obj){\n var config = obj || {};\n this.config = this.config || {\n projectId : undefined,\n writeKey : undefined,\n host : 'api.keen.io',\n protocol : 'https',\n requestType : 'jsonp',\n resources : extend({}, Client.resources)\n };\n\n // IE<10 request shim\n if (typeof window !== 'undefined' && window.navigator && window.navigator.userAgent && window.navigator.userAgent.indexOf('MSIE') > -1) {\n config.protocol = document.location.protocol.replace(':', '');\n }\n\n if (config.host) {\n config.host.replace(/.*?:\\/\\//g, '');\n }\n\n extend(this.config, config);\n return this;\n };\n\n Client.prototype.masterKey = function(str){\n if (!arguments.length) return this.config.masterKey;\n this.config.masterKey = str ? String(str) : null;\n return this;\n };\n\n Client.prototype.projectId = function(str){\n if (!arguments.length) return this.config.projectId;\n this.config.projectId = (str ? String(str) : null);\n return this;\n };\n\n Client.prototype.resources = function(obj){\n if (!arguments.length) return this.config.resources;\n var self = this;\n if (typeof obj === 'object') {\n each(obj, function(value, key){\n self.config.resources[key] = (value ? value : null);\n });\n }\n return self;\n };\n\n Client.prototype.url = function(name){\n var args = Array.prototype.slice.call(arguments, 1),\n baseUrl = this.config.resources.base || '{protocol}://{host}',\n path;\n\n if (name && typeof name === 'string') {\n if (this.config.resources[name]) {\n path = this.config.resources[name];\n }\n else {\n path = baseUrl + name;\n }\n }\n else {\n path = baseUrl;\n }\n\n each(this.config, function(value, key){\n if (typeof value !== 'object') {\n path = path.replace('{' + key + '}', value);\n }\n });\n\n each(args, function(arg, i){\n if (typeof arg === 'string') {\n path += '/' + arg;\n }\n else if (typeof arg === 'object') {\n path += '?';\n each(arg, function(value, key){\n path += key + '=' + value + '&';\n });\n path = path.slice(0, -1);\n }\n });\n\n return path;\n };\n\n domReady(function(){\n Client.loaded = true;\n Client.emit('ready');\n });\n\n function domReady(fn){\n if (Client.loaded || typeof document === 'undefined') {\n fn();\n return;\n }\n // Firefox 3.5 shim\n if(document.readyState == null && document.addEventListener){\n document.addEventListener('DOMContentLoaded', function DOMContentLoaded(){\n document.removeEventListener('DOMContentLoaded', DOMContentLoaded, false);\n document.readyState = 'complete';\n }, false);\n document.readyState = 'loading';\n }\n testDom(fn);\n }\n\n function testDom(fn){\n if (/in/.test(document.readyState)) {\n setTimeout(function(){\n testDom(fn);\n }, 9);\n }\n else {\n fn();\n }\n }\n\n function isDefined(target) {\n return typeof target !== 'undefined';\n }\n\n function isUndefined(target) {\n return typeof target === 'undefined';\n }\n\n module.exports = Client;\n\n}).call(this, typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {});\n","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\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 = runTimeout(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 runClearTimeout(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 runTimeout(drainQueue);\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;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\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","(function (global, undefined) {\n \"use strict\";\n\n if (global.setImmediate) {\n return;\n }\n\n var nextHandle = 1; // Spec says greater than zero\n var tasksByHandle = {};\n var currentlyRunningATask = false;\n var doc = global.document;\n var registerImmediate;\n\n function setImmediate(callback) {\n // Callback can either be a function or a string\n if (typeof callback !== \"function\") {\n callback = new Function(\"\" + callback);\n }\n // Copy function arguments\n var args = new Array(arguments.length - 1);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i + 1];\n }\n // Store and register the task\n var task = { callback: callback, args: args };\n tasksByHandle[nextHandle] = task;\n registerImmediate(nextHandle);\n return nextHandle++;\n }\n\n function clearImmediate(handle) {\n delete tasksByHandle[handle];\n }\n\n function run(task) {\n var callback = task.callback;\n var args = task.args;\n switch (args.length) {\n case 0:\n callback();\n break;\n case 1:\n callback(args[0]);\n break;\n case 2:\n callback(args[0], args[1]);\n break;\n case 3:\n callback(args[0], args[1], args[2]);\n break;\n default:\n callback.apply(undefined, args);\n break;\n }\n }\n\n function runIfPresent(handle) {\n // From the spec: \"Wait until any invocations of this algorithm started before this one have completed.\"\n // So if we're currently running a task, we'll need to delay this invocation.\n if (currentlyRunningATask) {\n // Delay by doing a setTimeout. setImmediate was tried instead, but in Firefox 7 it generated a\n // \"too much recursion\" error.\n setTimeout(runIfPresent, 0, handle);\n } else {\n var task = tasksByHandle[handle];\n if (task) {\n currentlyRunningATask = true;\n try {\n run(task);\n } finally {\n clearImmediate(handle);\n currentlyRunningATask = false;\n }\n }\n }\n }\n\n function installNextTickImplementation() {\n registerImmediate = function(handle) {\n process.nextTick(function () { runIfPresent(handle); });\n };\n }\n\n function canUsePostMessage() {\n // The test against `importScripts` prevents this implementation from being installed inside a web worker,\n // where `global.postMessage` means something completely different and can't be used for this purpose.\n if (global.postMessage && !global.importScripts) {\n var postMessageIsAsynchronous = true;\n var oldOnMessage = global.onmessage;\n global.onmessage = function() {\n postMessageIsAsynchronous = false;\n };\n global.postMessage(\"\", \"*\");\n global.onmessage = oldOnMessage;\n return postMessageIsAsynchronous;\n }\n }\n\n function installPostMessageImplementation() {\n // Installs an event handler on `global` for the `message` event: see\n // * https://developer.mozilla.org/en/DOM/window.postMessage\n // * http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages\n\n var messagePrefix = \"setImmediate$\" + Math.random() + \"$\";\n var onGlobalMessage = function(event) {\n if (event.source === global &&\n typeof event.data === \"string\" &&\n event.data.indexOf(messagePrefix) === 0) {\n runIfPresent(+event.data.slice(messagePrefix.length));\n }\n };\n\n if (global.addEventListener) {\n global.addEventListener(\"message\", onGlobalMessage, false);\n } else {\n global.attachEvent(\"onmessage\", onGlobalMessage);\n }\n\n registerImmediate = function(handle) {\n global.postMessage(messagePrefix + handle, \"*\");\n };\n }\n\n function installMessageChannelImplementation() {\n var channel = new MessageChannel();\n channel.port1.onmessage = function(event) {\n var handle = event.data;\n runIfPresent(handle);\n };\n\n registerImmediate = function(handle) {\n channel.port2.postMessage(handle);\n };\n }\n\n function installReadyStateChangeImplementation() {\n var html = doc.documentElement;\n registerImmediate = function(handle) {\n // Create a