owtlab-tracking
Version:
A simple Tracking system
1,649 lines (1,321 loc) • 57.1 kB
JavaScript
(function webpackUniversalModuleDefinition(root, factory) {
if(typeof exports === 'object' && typeof module === 'object')
module.exports = factory(require("component-emitter"));
else if(typeof define === 'function' && define.amd)
define(["component-emitter"], factory);
else {
var a = typeof exports === 'object' ? factory(require("component-emitter")) : factory(root["component-emitter"]);
for(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];
}
})(global, function(__WEBPACK_EXTERNAL_MODULE__8__) {
return /******/ (function(modules) { // webpackBootstrap
/******/ // The module cache
/******/ var installedModules = {};
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/
/******/ // Check if module is in cache
/******/ if(installedModules[moduleId]) {
/******/ return installedModules[moduleId].exports;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = installedModules[moduleId] = {
/******/ i: moduleId,
/******/ l: false,
/******/ exports: {}
/******/ };
/******/
/******/ // Execute the module function
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ // Flag the module as loaded
/******/ module.l = true;
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/******/
/******/ // expose the modules object (__webpack_modules__)
/******/ __webpack_require__.m = modules;
/******/
/******/ // expose the module cache
/******/ __webpack_require__.c = installedModules;
/******/
/******/ // define getter function for harmony exports
/******/ __webpack_require__.d = function(exports, name, getter) {
/******/ if(!__webpack_require__.o(exports, name)) {
/******/ Object.defineProperty(exports, name, {
/******/ configurable: false,
/******/ enumerable: true,
/******/ get: getter
/******/ });
/******/ }
/******/ };
/******/
/******/ // define __esModule on exports
/******/ __webpack_require__.r = function(exports) {
/******/ Object.defineProperty(exports, '__esModule', { value: true });
/******/ };
/******/
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = function(module) {
/******/ var getter = module && module.__esModule ?
/******/ function getDefault() { return module['default']; } :
/******/ function getModuleExports() { return module; };
/******/ __webpack_require__.d(getter, 'a', getter);
/******/ return getter;
/******/ };
/******/
/******/ // Object.prototype.hasOwnProperty.call
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/
/******/ // __webpack_public_path__
/******/ __webpack_require__.p = "";
/******/
/******/
/******/ // Load entry module and return exports
/******/ return __webpack_require__(__webpack_require__.s = 28);
/******/ })
/************************************************************************/
/******/ ([
/* 0 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
module.exports = each;
function each(o, cb, s) {
var n = void 0;
if (!o) {
return 0;
}
s = !s ? o : s;
if (o instanceof Array) {
// Indexed arrays, needed for Safari
for (n = 0; n < o.length; n++) {
if (cb.call(s, o[n], n, o) === false) {
return 0;
}
}
} else {
// Hashtables
for (n in o) {
if (o.hasOwnProperty(n)) {
if (cb.call(s, o[n], n, o) === false) {
return 0;
}
}
}
}
return 1;
}
/***/ }),
/* 1 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
// CONCATENATED MODULE: ./node_modules/promise-polyfill/src/finally.js
/* harmony default export */ var src_finally = (function(callback) {
var constructor = this.constructor;
return this.then(
function(value) {
return constructor.resolve(callback()).then(function() {
return value;
});
},
function(reason) {
return constructor.resolve(callback()).then(function() {
return constructor.reject(reason);
});
}
);
});
// CONCATENATED MODULE: ./node_modules/promise-polyfill/src/index.js
// Store setTimeout reference so promise-polyfill will be unaffected by
// other code modifying setTimeout (like sinon.useFakeTimers())
var setTimeoutFunc = setTimeout;
function noop() {}
// Polyfill for Function.prototype.bind
function bind(fn, thisArg) {
return function() {
fn.apply(thisArg, arguments);
};
}
function Promise(fn) {
if (!(this instanceof Promise))
throw new TypeError('Promises must be constructed via new');
if (typeof fn !== 'function') throw new TypeError('not a function');
this._state = 0;
this._handled = false;
this._value = undefined;
this._deferreds = [];
doResolve(fn, this);
}
function handle(self, deferred) {
while (self._state === 3) {
self = self._value;
}
if (self._state === 0) {
self._deferreds.push(deferred);
return;
}
self._handled = true;
Promise._immediateFn(function() {
var cb = self._state === 1 ? deferred.onFulfilled : deferred.onRejected;
if (cb === null) {
(self._state === 1 ? resolve : reject)(deferred.promise, self._value);
return;
}
var ret;
try {
ret = cb(self._value);
} catch (e) {
reject(deferred.promise, e);
return;
}
resolve(deferred.promise, ret);
});
}
function resolve(self, newValue) {
try {
// Promise Resolution Procedure: https://github.com/promises-aplus/promises-spec#the-promise-resolution-procedure
if (newValue === self)
throw new TypeError('A promise cannot be resolved with itself.');
if (
newValue &&
(typeof newValue === 'object' || typeof newValue === 'function')
) {
var then = newValue.then;
if (newValue instanceof Promise) {
self._state = 3;
self._value = newValue;
finale(self);
return;
} else if (typeof then === 'function') {
doResolve(bind(then, newValue), self);
return;
}
}
self._state = 1;
self._value = newValue;
finale(self);
} catch (e) {
reject(self, e);
}
}
function reject(self, newValue) {
self._state = 2;
self._value = newValue;
finale(self);
}
function finale(self) {
if (self._state === 2 && self._deferreds.length === 0) {
Promise._immediateFn(function() {
if (!self._handled) {
Promise._unhandledRejectionFn(self._value);
}
});
}
for (var i = 0, len = self._deferreds.length; i < len; i++) {
handle(self, self._deferreds[i]);
}
self._deferreds = null;
}
function Handler(onFulfilled, onRejected, promise) {
this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;
this.onRejected = typeof onRejected === 'function' ? onRejected : null;
this.promise = promise;
}
/**
* Take a potentially misbehaving resolver function and make sure
* onFulfilled and onRejected are only called once.
*
* Makes no guarantees about asynchrony.
*/
function doResolve(fn, self) {
var done = false;
try {
fn(
function(value) {
if (done) return;
done = true;
resolve(self, value);
},
function(reason) {
if (done) return;
done = true;
reject(self, reason);
}
);
} catch (ex) {
if (done) return;
done = true;
reject(self, ex);
}
}
Promise.prototype['catch'] = function(onRejected) {
return this.then(null, onRejected);
};
Promise.prototype.then = function(onFulfilled, onRejected) {
var prom = new this.constructor(noop);
handle(this, new Handler(onFulfilled, onRejected, prom));
return prom;
};
Promise.prototype['finally'] = src_finally;
Promise.all = function(arr) {
return new Promise(function(resolve, reject) {
if (!arr || typeof arr.length === 'undefined')
throw new TypeError('Promise.all accepts an array');
var args = Array.prototype.slice.call(arr);
if (args.length === 0) return resolve([]);
var remaining = args.length;
function res(i, val) {
try {
if (val && (typeof val === 'object' || typeof val === 'function')) {
var then = val.then;
if (typeof then === 'function') {
then.call(
val,
function(val) {
res(i, val);
},
reject
);
return;
}
}
args[i] = val;
if (--remaining === 0) {
resolve(args);
}
} catch (ex) {
reject(ex);
}
}
for (var i = 0; i < args.length; i++) {
res(i, args[i]);
}
});
};
Promise.resolve = function(value) {
if (value && typeof value === 'object' && value.constructor === Promise) {
return value;
}
return new Promise(function(resolve) {
resolve(value);
});
};
Promise.reject = function(value) {
return new Promise(function(resolve, reject) {
reject(value);
});
};
Promise.race = function(values) {
return new Promise(function(resolve, reject) {
for (var i = 0, len = values.length; i < len; i++) {
values[i].then(resolve, reject);
}
});
};
// Use polyfill for setImmediate for performance gains
Promise._immediateFn =
(typeof setImmediate === 'function' &&
function(fn) {
setImmediate(fn);
}) ||
function(fn) {
setTimeoutFunc(fn, 0);
};
Promise._unhandledRejectionFn = function _unhandledRejectionFn(err) {
if (typeof console !== 'undefined' && console) {
console.warn('Possible Unhandled Promise Rejection:', err); // eslint-disable-line no-console
}
};
/* harmony default export */ var src = (Promise);
// CONCATENATED MODULE: ./node_modules/promise-polyfill/src/polyfill.js
var globalNS = (function() {
// the only reliable means to get the global object is
// `Function('return this')()`
// However, this causes CSP violations in Chrome apps.
if (typeof self !== 'undefined') {
return self;
}
if (typeof window !== 'undefined') {
return window;
}
if (typeof global !== 'undefined') {
return global;
}
throw new Error('unable to locate global object');
})();
if (!globalNS.Promise) {
globalNS.Promise = src;
} else if (!globalNS.Promise.prototype['finally']) {
globalNS.Promise.prototype['finally'] = src_finally;
}
/***/ }),
/* 2 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
var configDefault = exports.configDefault = {
// defer events - queue
// https://github.com/keen/keen-tracking.js/blob/master/docs/defer-events.md
queue: {
capacity: 5000,
interval: 15
},
// connection problems - retry request
retry: {
limit: 10,
initialDelay: 200,
retryOnResponseStatuses: [408, 500, 502, 503, 504]
},
unique: false, // record only unique events?
// if so - store unique events hashes to compare
cache: {
/*
storage: 'indexeddb', // uncomment for persistence
*/
dbName: 'keenTracking', // indexedDB name
dbCollectionName: 'events',
dbCollectionKey: 'hash',
/*
hashingMethod: 'md5', // if undefined - store as stringified JSON
*/
maxAge: 60 * 1000 // store for 1 minute
}
};
exports.default = configDefault;
/***/ }),
/* 3 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
module.exports = extend;
function extend(target) {
for (var i = 1; i < arguments.length; i++) {
for (var prop in arguments[i]) {
target[prop] = arguments[i][prop];
}
}
return target;
}
/***/ }),
/* 4 */
/***/ (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; };
var deepExtend = exports.deepExtend = function deepExtend(target) {
for (var i = 1; i < arguments.length; i++) {
// Copy unique items from incoming array
if (target instanceof Array && arguments[i] instanceof Array) {
for (var j = 0; j < arguments[i].length; j++) {
if (target.indexOf(arguments[i][j]) < 0) {
target.push(arguments[i][j]);
}
}
}
// Blend objects
else {
for (var prop in arguments[i]) {
// Recurse when both contain objects of same name
// and incoming is not a null object
if (typeof target[prop] !== 'undefined' && _typeof(target[prop]) === 'object' && _typeof(arguments[i][prop]) === 'object' && arguments[i][prop] !== null) {
deepExtend(target[prop], clone(arguments[i][prop]));
}
// Otherwise just copy it over...
else if (arguments[i][prop] !== undefined && typeof arguments[i][prop] !== 'function') {
target[prop] = clone(arguments[i][prop]);
}
}
}
}
return target;
};
function clone(input) {
return JSON.parse(JSON.stringify(input));
}
/***/ }),
/* 5 */
/***/ (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.extendEvent = extendEvent;
exports.extendEvents = extendEvents;
exports.getExtendedEventBody = getExtendedEventBody;
var _deepExtend = __webpack_require__(4);
var _each = __webpack_require__(0);
var _each2 = _interopRequireDefault(_each);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function extendEvent(eventCollection, eventModifier) {
if (arguments.length !== 2 || typeof eventCollection !== 'string' || (typeof eventModifier === 'undefined' ? 'undefined' : _typeof(eventModifier)) !== 'object' && typeof eventModifier !== 'function') {
handleValidationError.call(this, 'Incorrect arguments provided to #extendEvent method');
return;
}
this.extensions.collections[eventCollection] = this.extensions.collections[eventCollection] || [];
this.extensions.collections[eventCollection].push(eventModifier);
this.emit('extendEvent', eventCollection, eventModifier);
return this;
}
function extendEvents(eventsModifier) {
if (arguments.length !== 1 || (typeof eventsModifier === 'undefined' ? 'undefined' : _typeof(eventsModifier)) !== 'object' && typeof eventsModifier !== 'function') {
handleValidationError.call(this, 'Incorrect arguments provided to #extendEvents method');
return;
}
this.extensions.events.push(eventsModifier);
this.emit('extendEvents', eventsModifier);
return this;
}
function handleValidationError(message) {
this.emit('error', 'Event(s) not extended: ' + message);
}
function getExtendedEventBody(result, queue) {
if (queue && queue.length > 0) {
(0, _each2.default)(queue, function (eventModifier, i) {
var modifierResult = typeof eventModifier === 'function' ? eventModifier() : eventModifier;
(0, _deepExtend.deepExtend)(result, modifierResult);
});
}
return result;
}
/***/ }),
/* 6 */
/***/ (function(module) {
module.exports = {"name":"owtlab-tracking","version":"1.0.0-rc.3","description":"A simple Tracking system","main":"dist/node/owtlab-tracking.js","browser":"dist/owtlab-tracking.js","repository":{"type":"git","url":"https://github.com/roykesserwani/owtlab-tracking.git"},"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","build:node":"TARGET=node NODE_ENV=production webpack -p","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 && npm publish","demo":"node ./test/demo/index.node.js"},"bugs":"https://github.com/roykesserwani/owtlab-tracking/issues","keywords":["Tracking","Tracker","Event Tracker","Event tracking","Track events","Page tracking","User tracking","Analytics event tracking","Analytics events","Analytics tracking","Custom events","Analytics","Stats","Statistics","Monitoring","Metrics","Pageviews","Segmentation","Funnel","Conversion","Log","Logger","Logging","Javascript events","Universal tracking","Click analytics"],"contributors":["Dustin Larimer <dustin@keen.io> (https://github.com/dustinlarimer)","Eric Anderson <eric@keen.io> (https://github.com/aroc)","Joe Wegner <joe@keen.io> (http://www.wegnerdesign.com)","Alex Kleissner <alex@keen.io> (https://github.com/hex337)","Adam Kasprowicz <adam.kasprowicz@keen.io> (https://github.com/adamkasprowicz)","Dariusz Łacheta <dariusz.lacheta@keen.io> (https://github.com/dariuszlacheta)"],"license":"MIT","dependencies":{"component-emitter":"^1.2.0","eslint-plugin-react":"^7.20.6","js-cookie":"2.1.0","keen-core":"^0.1.3","promise-polyfill":"^8.0.0","whatwg-fetch":"^2.0.4"},"devDependencies":{"babel-core":"^6.26.3","babel-jest":"^23.0.1","babel-loader":"^7.1.5","babel-plugin-transform-es2015-modules-commonjs":"^6.26.2","babel-plugin-transform-object-rest-spread":"^6.26.0","babel-polyfill":"^6.26.0","babel-preset-env":"^1.7.0","babel-preset-es2015":"^6.24.1","babel-preset-stage-0":"^6.24.1","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","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","replace-in-file":"^3.4.0","url-parse":"^1.4.3","webpack":"^4.5.0","webpack-bundle-analyzer":"^3.3.2","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 _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
exports.queue = queue;
var _componentEmitter = __webpack_require__(8);
var _componentEmitter2 = _interopRequireDefault(_componentEmitter);
var _configDefault = __webpack_require__(2);
var _configDefault2 = _interopRequireDefault(_configDefault);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function queue() {
var configQueue = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
if (this instanceof queue === false) {
return new queue(configQueue);
}
this.capacity = 0;
this.config = _extends({}, _configDefault2.default.queue, configQueue);
this.events = {
// "collection-1": [],
// "collection-2": []
};
this.interval = 0;
this.timer = null;
return this;
}
(0, _componentEmitter2.default)(queue.prototype);
queue.prototype.check = function () {
if (shouldFlushQueue(this)) {
this.flush();
}
if (this.config.interval === 0 || this.capacity === 0) {
this.pause();
}
return this;
};
queue.prototype.flush = function () {
this.emit('flush');
this.interval = 0;
return this;
};
queue.prototype.pause = function () {
if (this.timer) {
clearInterval(this.timer);
this.timer = null;
}
return this;
};
queue.prototype.start = function () {
var self = this;
self.pause();
self.timer = setInterval(function () {
self.interval++;
self.check();
}, 1000);
return self;
};
function shouldFlushQueue(props) {
if (props.capacity > 0 && props.interval >= props.config.interval) {
return true;
} else if (props.capacity >= props.config.capacity) {
return true;
}
return false;
}
/***/ }),
/* 8 */
/***/ (function(module, exports) {
module.exports = __WEBPACK_EXTERNAL_MODULE__8__;
/***/ }),
/* 9 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
var _core = __webpack_require__(27);
var _core2 = _interopRequireDefault(_core);
var _queue = __webpack_require__(7);
var _optOut = __webpack_require__(24);
var _package = __webpack_require__(6);
var _package2 = _interopRequireDefault(_package);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
_core2.default.helpers = _core2.default.helpers || {};
_core2.default.prototype.observers = _core2.default.observers || {};
// Install internal queue
_core2.default.on('client', function (client) {
client.extensions = {
events: [],
collections: {}
};
if (!client.config.respectDoNotTrack) {
this.doNotTrack = false;
}
if (typeof client.config.optOut !== 'undefined') {
(0, _optOut.setOptOut)(client.config.optOut);
this.optedOut = client.config.optOut;
}
client.queue = (0, _queue.queue)(client.config.queue);
client.queue.on('flush', function () {
client.recordDeferredEvents();
});
});
// Accessors
_core2.default.prototype.client_secret = function (str) {
if (!arguments.length) return this.config.client_secret;
this.config.client_secret = str ? String(str) : null;
return this;
};
_core2.default.prototype.referrerPolicy = function (str) {
if (!arguments.length) return this.config.referrerPolicy;
this.config.referrerPolicy = str ? String(str) : null;
return this;
};
// DEPRECATED
_core2.default.prototype.setGlobalProperties = function (props) {
_core2.default.log('This method has been removed. Check out #extendEvents: https://github.com/keen/keen-tracking.js#extend-events');
return this;
};
_core2.default.version = _package2.default.version;
exports.default = _core2.default;
/***/ }),
/* 10 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.timer = timer;
function timer(num) {
if (this instanceof timer === false) {
return new timer(num);
}
this.count = num || 0;
return this;
}
timer.prototype.start = function () {
var self = this;
this.pause();
this.interval = setInterval(function () {
self.count++;
}, 1000);
return this;
};
timer.prototype.pause = function () {
clearInterval(this.interval);
return this;
};
timer.prototype.value = function () {
return this.count;
};
timer.prototype.clear = function () {
this.count = 0;
return this;
};
/***/ }),
/* 11 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.getUniqueId = getUniqueId;
function getUniqueId() {
// uuidv4
if (typeof crypto !== 'undefined' && crypto.getRandomValues) {
// browser
return ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, function (c) {
return (c ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> c / 4).toString(16);
});
}
// node & older browsers
var str = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx';
return str.replace(/[xy]/g, function (c) {
var r = Math.random() * 16 | 0;
var v = c == 'x' ? r : r & 0x3 | 0x8;
return v.toString(16);
});
}
/***/ }),
/* 12 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.getDatetimeIndex = getDatetimeIndex;
function getDatetimeIndex(input) {
var date = input || new Date();
return {
hour_of_day: date.getHours(),
day_of_week: parseInt(1 + date.getDay()),
day_of_month: date.getDate(),
month: parseInt(1 + date.getMonth()),
year: date.getFullYear()
};
}
/***/ }),
/* 13 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
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.deferEvent = deferEvent;
exports.deferEvents = deferEvents;
exports.queueCapacity = queueCapacity;
exports.queueInterval = queueInterval;
exports.recordDeferredEvents = recordDeferredEvents;
var _each = __webpack_require__(0);
var _each2 = _interopRequireDefault(_each);
var _queue = __webpack_require__(7);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function deferEvent(eventCollection, eventBody) {
if (arguments.length !== 2 || typeof eventCollection !== 'string') {
handleValidationError.call(this, 'Incorrect arguments provided to #deferEvent method');
return;
}
this.queue.events[eventCollection] = this.queue.events[eventCollection] || [];
this.queue.events[eventCollection].push(eventBody);
this.queue.capacity++;
if (!this.queue.timer) {
this.queue.start();
}
this.emit('deferEvent', eventCollection, eventBody);
return this;
}
function deferEvents(eventsHash) {
var self = this;
if (arguments.length !== 1 || (typeof eventsHash === 'undefined' ? 'undefined' : _typeof(eventsHash)) !== 'object') {
handleValidationError.call(this, 'Incorrect arguments provided to #deferEvents method');
return;
}
(0, _each2.default)(eventsHash, function (eventList, eventCollection) {
self.queue.events[eventCollection] = self.queue.events[eventCollection] || [];
self.queue.events[eventCollection] = self.queue.events[eventCollection].concat(eventList);
self.queue.capacity = self.queue.capacity + eventList.length;
if (!self.queue.timer) {
self.queue.start();
}
});
self.emit('deferEvents', eventsHash);
return self;
}
function queueCapacity(num) {
if (!arguments.length) return this.queue.config.capacity;
this.queue.config.capacity = num ? Number(num) : 0;
this.queue.check();
return this;
}
function queueInterval(num) {
if (!arguments.length) return this.queue.config.interval;
this.queue.config.interval = num ? Number(num) : 0;
this.queue.check();
return this;
}
function recordDeferredEvents() {
var self = this;
if (self.queue.capacity > 0) {
self.queue.pause();
var clonedQueueConfig = _extends({}, self.queue.config);
var clonedQueueEvents = _extends({}, self.queue.events);
self.queue = (0, _queue.queue)();
self.queue.config = clonedQueueConfig;
self.queue.on('flush', function () {
self.recordDeferredEvents();
});
self.emit('recordDeferredEvents', clonedQueueEvents);
self.recordEvents(clonedQueueEvents, function (err, res) {
if (err) {
self.emit('recordDeferredEventsError', err, clonedQueueEvents);
}
});
}
return self;
}
function handleValidationError(message) {
this.emit('error', 'Event(s) not deferred: ' + message);
}
/***/ }),
/* 14 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
// placeholder for future implementation
module.exports = {
getFromCache: function getFromCache() {},
saveToCache: function saveToCache() {}
};
/***/ }),
/* 15 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
var MD5 = exports.MD5 = function MD5(d) {
var result = M(V(Y(X(d), 8 * d.length)));
return result.toLowerCase();
};
function M(d) {
for (var _, m = '0123456789ABCDEF', f = '', r = 0; r < d.length; r++) {
_ = d.charCodeAt(r), f += m.charAt(_ >>> 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)) << m % 32;
}
return _;
}
function V(d) {
for (var _ = '', m = 0; m < 32 * d.length; m += 8) {
_ += String.fromCharCode(d[m >> 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 < d.length; n += 16) {
var h = m;
var t = f;
var g = r;
var e = i;
f = md5_ii(f = md5_ii(f = md5_ii(f = md5_ii(f = md5_hh(f = md5_hh(f = md5_hh(f = md5_hh(f = md5_gg(f = md5_gg(f = md5_gg(f = md5_gg(f = md5_ff(f = md5_ff(f = md5_ff(f = md5_ff(f, r = md5_ff(r, i = md5_ff(i, m = md5_ff(m, f, r, i, d[n + 0], 7, -680876936), f, r, d[n + 1], 12, -389564586), m, f, d[n + 2], 17, 606105819), i, m, d[n + 3], 22, -1044525330), r = md5_ff(r, i = md5_ff(i, m = md5_ff(m, f, r, i, d[n + 4], 7, -176418897), f, r, d[n + 5], 12, 1200080426), m, f, d[n + 6], 17, -1473231341), i, m, d[n + 7], 22, -45705983), r = md5_ff(r, i = md5_ff(i, m = md5_ff(m, f, r, i, d[n + 8], 7, 1770035416), f, r, d[n + 9], 12, -1958414417), m, f, d[n + 10], 17, -42063), i, m, d[n + 11], 22, -1990404162), r = md5_ff(r, i = md5_ff(i, m = md5_ff(m, f, r, i, d[n + 12], 7, 1804603682), f, r, d[n + 13], 12, -40341101), m, f, d[n + 14], 17, -1502002290), i, m, d[n + 15], 22, 1236535329), r = md5_gg(r, i = md5_gg(i, m = md5_gg(m, f, r, i, d[n + 1], 5, -165796510), f, r, d[n + 6], 9, -1069501632), m, f, d[n + 11], 14, 643717713), i, m, d[n + 0], 20, -373897302), r = md5_gg(r, i = md5_gg(i, m = md5_gg(m, f, r, i, d[n + 5], 5, -701558691), f, r, d[n + 10], 9, 38016083), m, f, d[n + 15], 14, -660478335), i, m, d[n + 4], 20, -405537848), r = md5_gg(r, i = md5_gg(i, m = md5_gg(m, f, r, i, d[n + 9], 5, 568446438), f, r, d[n + 14], 9, -1019803690), m, f, d[n + 3], 14, -187363961), i, m, d[n + 8], 20, 1163531501), r = md5_gg(r, i = md5_gg(i, m = md5_gg(m, f, r, i, d[n + 13], 5, -1444681467), f, r, d[n + 2], 9, -51403784), m, f, d[n + 7], 14, 1735328473), i, m, d[n + 12], 20, -1926607734), r = md5_hh(r, i = md5_hh(i, m = md5_hh(m, f, r, i, d[n + 5], 4, -378558), f, r, d[n + 8], 11, -2022574463), m, f, d[n + 11], 16, 1839030562), i, m, d[n + 14], 23, -35309556), r = md5_hh(r, i = md5_hh(i, m = md5_hh(m, f, r, i, d[n + 1], 4, -1530992060), f, r, d[n + 4], 11, 1272893353), m, f, d[n + 7], 16, -155497632), i, m, d[n + 10], 23, -1094730640), r = md5_hh(r, i = md5_hh(i, m = md5_hh(m, f, r, i, d[n + 13], 4, 681279174), f, r, d[n + 0], 11, -358537222), m, f, d[n + 3], 16, -722521979), i, m, d[n + 6], 23, 76029189), r = md5_hh(r, i = md5_hh(i, m = md5_hh(m, f, r, i, d[n + 9], 4, -640364487), f, r, d[n + 12], 11, -421815835), m, f, d[n + 15], 16, 530742520), i, m, d[n + 2], 23, -995338651), r = md5_ii(r, i = md5_ii(i, m = md5_ii(m, f, r, i, d[n + 0], 6, -198630844), f, r, d[n + 7], 10, 1126891415), m, f, d[n + 14], 15, -1416354905), i, m, d[n + 5], 21, -57434055), r = md5_ii(r, i = md5_ii(i, m = md5_ii(m, f, r, i, d[n + 12], 6, 1700485571), f, r, d[n + 3], 10, -1894986606), m, f, d[n + 10], 15, -1051523), i, m, d[n + 1], 21, -2054922799), r = md5_ii(r, i = md5_ii(i, m = md5_ii(m, f, r, i, d[n + 8], 6, 1873313359), f, r, d[n + 15], 10, -30611744), m, f, d[n + 6], 15, -1560198380), i, m, d[n + 13], 21, 1309151649), r = md5_ii(r, i = md5_ii(i, m = md5_ii(m, f, r, i, d[n + 4], 6, -145523070), f, r, d[n + 11], 10, -1120210379), m, f, d[n + 2], 15, 718787259), i, m, d[n + 9], 21, -343485551), m = safe_add(m, h), f = safe_add(f, t), r = safe_add(r, g), i = safe_add(i, e);
}
return Array(m, f, r, i);
}
function md5_cmn(d, _, m, f, r, i) {
return safe_add(bit_rol(safe_add(safe_add(_, d), safe_add(f, i)), r), m);
}
function md5_ff(d, _, m, f, r, i, n) {
return md5_cmn(_ & m | ~_ & f, d, _, r, i, n);
}
function md5_gg(d, _, m, f, r, i, n) {
return md5_cmn(_ & f | m & ~f, d, _, r, i, n);
}
function md5_hh(d, _, m, f, r, i, n) {
return md5_cmn(_ ^ m ^ f, d, _, r, i, n);
}
function md5_ii(d, _, m, f, r, i, n) {
return md5_cmn(m ^ (_ | ~f), d, _, r, i, n);
}
function safe_add(d, _) {
var m = (65535 & d) + (65535 & _);
return (d >> 16) + (_ >> 16) + (m >> 16) << 16 | 65535 & m;
}
function bit_rol(d, _) {
return d << _ | d >>> 32 - _;
}
exports.default = MD5;
/***/ }),
/* 16 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.isUnique = undefined;
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
__webpack_require__(1);
var _md = __webpack_require__(15);
var _md2 = _interopRequireDefault(_md);
var _cacheBrowser = __webpack_require__(14);
var _configDefault = __webpack_require__(2);
var _configDefault2 = _interopRequireDefault(_configDefault);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var uniqueIds = [];
var isUnique = exports.isUnique = function isUnique(customCacheConfig, extendedEventBody) {
var configCache = _extends({}, _configDefault2.default.cache, customCacheConfig.cache);
var stringifiedEvent = JSON.stringify(extendedEventBody);
var hashingMethod = configCache.hashingMethod;
var hash = hashingMethod && hashingMethod.toLowerCase() === 'md5' ? (0, _md2.default)(stringifiedEvent) : stringifiedEvent;
var expiryTime = configCache.maxAge ? Date.now() + configCache.maxAge : undefined;
var item = {
hash: hash,
expiryTime: expiryTime
};
if (expiryTime) {
var now = Date.now();
uniqueIds = uniqueIds.filter(function (item) {
return item.expiryTime > now;
});
}
var alreadySentEvent = uniqueIds.find(function (item) {
return item.hash === hash;
});
if (alreadySentEvent) {
if (alreadySentEvent.expiryTime && alreadySentEvent.expiryTime < Date.now()) {
uniqueIds = uniqueIds.filter(function (item) {
return item.hash !== hash;
});
} else {
return Promise.resolve(false);
}
}
uniqueIds.push(item);
if (configCache.storage && configCache.storage.toLowerCase() === 'indexeddb') {
return (0, _cacheBrowser.getFromCache)(hash, configCache).then(function (alreadySentEvent) {
if (alreadySentEvent) {
return false;
}
(0, _cacheBrowser.saveToCache)(hash, configCache);
return true;
});
}
return Promise.resolve(true);
};
exports.default = isUnique;
/***/ }),
/* 17 */
/***/ (function(module, exports) {
module.exports = require("https");
/***/ }),
/* 18 */
/***/ (function(module, exports) {
module.exports = require("http");
/***/ }),
/* 19 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
exports.default = function (options) {
var configRetry = _extends({}, _configDefault2.default.retry, options.retry || {});
var retriesLimit = configRetry.limit;
var retryInitialDelay = configRetry.initialDelay;
var retryOn = configRetry.retryOnResponseStatuses;
var callback = options.callback;
var retriesCount = 0;
if (retryOn && !(retryOn instanceof Array)) {
throw {
name: 'ArgumentError',
message: 'retryOn property expects an array'
};
}
var protocol = options.protocol === 'http' ? _http2.default : _https2.default;
var parseBody = function parseBody(responseBody) {
return new Promise(function (resolve, reject) {
var response = void 0;
var error = void 0;
try {
response = JSON.parse(responseBody);
} catch (e) {
// Parsing Error
error = e;
}
if (!error && response.error_code) {
// API Error
error = new Error(response.message || 'Unknown error occurred');
error.code = response.error_code;
reject(error);
}
resolve(response);
});
};
return new Promise(function (resolve, reject) {
var wrappedRequest = function wrappedRequest(n) {
var req = protocol.request(options.config, function (response) {
var body = '';
response.on('data', function (d) {
body += d;
});
response.on('end', function () {
if (retryOn.indexOf(response.statusCode) === -1) {
parseBody(body).then(function (parsedBody) {
resolve(parsedBody);
if (callback) callback(null, parsedBody);
}).catch(function (err) {
reject(err);
if (callback) callback(err, null);
});
} else if (n > 0) {
retry();
} else {
if (callback) callback(body, null);
reject(body);
}
});
});
req.on('error', function (err) {
if (n > 0) {
retry();
} else {
if (callback) callback(body, null);
reject(err);
}
});
req.write(options.data);
req.end();
};
function retry() {
retriesCount += 1;
setTimeout(function () {
wrappedRequest(retriesLimit - retriesCount);
}, 2 ^ retriesCount * retryInitialDelay);
}
wrappedRequest(retriesLimit - retriesCount);
});
};
__webpack_require__(1);
var _http = __webpack_require__(18);
var _http2 = _interopRequireDefault(_http);
var _https = __webpack_require__(17);
var _https2 = _interopRequireDefault(_https);
var _configDefault = __webpack_require__(2);
var _configDefault2 = _interopRequireDefault(_configDefault);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/***/ }),
/* 20 */
/***/ (function(module, exports) {
module.exports = extend;
function extend(target){
for (var i = 1; i < arguments.length; i++) {
for (var prop in arguments[i]){
target[prop] = arguments[i][prop];
}
}
return target;
};
/***/ }),
/* 21 */
/***/ (function(module, exports) {
module.exports = each;
function each(o, cb, s){
var n;
if (!o){
return 0;
}
s = !s ? o : s;
if (o instanceof Array){
// Indexed arrays, needed for Safari
for (n=0; n<o.length; n++) {
if (cb.call(s, o[n], n, o) === false){
return 0;
}
}
} else {
// Hashtables
for (n in o){
if (o.hasOwnProperty(n)) {
if (cb.call(s, o[n], n, o) === false){
return 0;
}
}
}
}
return 1;
}
/***/ }),
/* 22 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
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.recordEvent = recordEvent;
exports.recordEvents = recordEvents;
__webpack_require__(1);
var _index = __webpack_require__(9);
var _index2 = _interopRequireDefault(_index);
var _package = __webpack_require__(6);
var _each = __webpack_require__(21);
var _each2 = _interopRequireDefault(_each);
var _extend = __webpack_require__(20);
var _extend2 = _interopRequireDefault(_extend);
var _extendEvents = __webpack_require__(5);
var _nodeRequestRetry = __webpack_require__(19);
var _nodeRequestRetry2 = _interopRequireDefault(_nodeRequestRetry);
var _unique = __webpack_require__(16);
var _unique2 = _interopRequireDefault(_unique);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
// ------------------------------
// .recordEvent
// ------------------------------
function recordEvent(eventCollectionOrConfigObject, eventBody, callback) {
var _this = this;
var eventCollection = eventCollectionOrConfigObject;
var unique = void 0;
var configObject = void 0;
var clientConfig = this.config;
if ((typeof eventCollectionOrConfigObject === 'undefined' ? 'undefined' : _typeof(eventCollectionOrConfigObject)) === 'object' && eventCollectionOrConfigObject) {
// slowly but surely we migrate to one object with all args
configObject = eventCollectionOrConfigObject;
eventCollection = eventCollectionOrConfigObject.collection || eventCollectionOrConfigObject.event_collection;
eventBody = eventCollectionOrConfigObject.event;
callback = eventCollectionOrConfigObject.callback;
unique = eventCollectionOrConfigObject.unique;
}
var data = {};
var extendedEventBody = {};
if (!checkValidation.call(this, callback)) {
return;
}
if (!eventCollection || typeof eventCollection !== 'string') {
handleValidationError.call(this, 'Collection name must be a string.', callback);
return;
}
(0, _extend2.default)(data, eventBody);
// ------------------------------
// Run extendEvent(s) transforms
// ------------------------------
(0, _extendEvents.getExtendedEventBody)(extendedEventBody, this.extensions.events);
(0, _extendEvents.getExtendedEventBody)(extendedEventBody, this.extensions.collections[eventCollection]);
(0, _extendEvents.getExtendedEventBody)(extendedEventBody, [data]);
if (unique) {
return (0, _unique2.default)(configObject, extendedEventBody).then(function (isUniqueResult) {
if (!isUniqueResult) {
return Promise.resolve({
created: false,
message: '[NOT_UNIQUE] This event has already been recorded'
});
}
return recordEvent.call(_this, _extends({}, eventCollectionOrConfigObject, {
unique: undefined
}));
});
}
this.emit('recordEvent', eventCollection, extendedEventBody);
if (!_index2.default.enabled) {
handleValidationError.call(this, 'Owtlab.enabled is set to false.', callback);
return false;
}
return sendEventData.call(this, encodeURIComponent(eventCollection), extendedEventBody, callback);
}
// ------------------------------
// .recordEvents
// ------------------------------
function recordEvents(eventsHash, callback) {
var self = this;
var extendedEventsHash = {};
if (!checkValidation.call(this, callback)) {
return;
}
if (arguments.length > 2) {
handleValidationError.call(this, 'Incorrect arguments provided to #recordEvents method', callback);
return;
}
// ------------------------------
// Run extendEvent(s) transforms
// ------------------------------
(0, _each2.default)(eventsHash, function (eventList, eventCollection) {
// Find or create collection on new hash
extendedEventsHash[eventCollection] = extendedEventsHash[eventCollection] || [];
// Loop over each eventBody in the existing hash
(0, _each2.default)(eventList, function (eventBody, index) {
// Create a new data object
var extendedEventBody = {};
// Process "events" transform pipeline
(0, _extendEvents.getExtendedEventBody)(extendedEventBody, self.extensions.events);
// Process "collection" transform pipeline
(0, _extendEvents.getExtendedEventBody)(extendedEventBody, self.extensions.collections[eventCollection]);
// Blend existing eventBody data into the result
(0, _extendEvents.getExtendedEventBody)(extendedEventBody, [eventBody]);
// Push extendedEventBody into new hash
extendedEventsHash[eventCollection].push(extendedEventBody);
});
});
this.emit('recordEvents', extendedEventsHash);
if (!_index2.default.enabled) {
handleValidationError.call(this, 'Owtlab.enabled is set to false.', callback);
return false;
}
return sendEventData.call(this, undefined, extendedEventsHash, callback);
}
// ------------------------------
// Validation
// ------------------------------
function checkValidation(callback) {
if (!this.client_id()) {
handleValidationError.call(this, 'Owtlab.Client is missing a client_id property.', callback);
return false;
}
if (!this.client_secret()) {
handleValidationError.call(this, 'Owtlab.Client is missing a client_secret property.', callback);
return false;
}
return true;
}
function handleValidationError(message, cb) {
var err = 'Event(s) not recorded: ' + message;
this.emit('error', err);
if (cb) {
cb.call(this, err, null);
}
}
function sendEventData(path, eventData, callback) {
var data = JSON.stringify(eventData);
var urlPath = this.url('events', path).replace(this.config.protocol + '://' + this.config.host, '');
var config = _extends({
host: this.config.host,
path: urlPath,
method: 'POST',
headers: {
Authorization: this.client_secret(),
'Content-Type': 'application/json',
'Content-Length': Buffer.byteLength(data),
'keen-sdk': 'javascript-' + _package.version
}
}, this.config.nodeRequestConfig);
return (0, _nodeRequestRetry2.default)({
retry: this.config.retry,
protocol: this.config.protocol,
config: config,
data: data,
callback: callback
});
}
/***/ }),
/* 23 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
function lsTest() {
var test = 'test';
try {
localStorage.setItem(test, test);
localStorage.removeItem(test);
return true;
} catch (e) {
return false;
}
}
var isLocalStorageAvailable = exports.isLocalStorageAvailable = lsTest();
/***/ }),
/* 24 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.setOptOut = setOptOut;
var _localStorage = __webpack_require__(23);
function setOptOut() {
var optOut = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
if (!_localStorage.isLocalStorageAvailable) return;
if (optOut) {
localStorage.setItem('optout', optOut);
return;
}
localStorage.removeItem('optout');
}
/***/ }),
/* 25 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
var each = __webpack_require__(0);
var extend = __webpack_require__(3);
module.exports = serialize;
function serialize(data) {
var query = [];
each(data, function (value, key) {
if (typeof value !== 'string') {
value = JSON.stringify(value);
}
query.push(key + '=' + encodeURIComponent(value));
});
return query.join('&');
}
/***/ }),
/* 26 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
module.exports = parseParams;
function parseParams(str) {
// via: http://stackoverflow.com/a/2880929/2511985
var urlParams = {};
var match = void 0;
var pl = /\+/g; // Regex for replacing addition symbol with a space
var search = /([^&=]+)=?([^&]*)/g;
var decode = function decode(s) {
return decodeURIComponent(s.replace(pl, ' '));
};
var query = str.split('?')[1];
while (match = search.exec(query)) {
urlParams[decode(match[1])] = decode(match[2]);
}
return urlParams;
}
/***/ }),
/* 27 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
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; };
var _componentEmitter = __webpack_require__(8);
var _componentEmitter2 = _interopRequireDefault(_componentEmitter);
var _each = __webpack_require__(0);
var _each2 = _interopRequireDefault(_each);
var _extend = __webpack_require__(3);
var _extend2 = _interopRequireDefault(_extend);
var _parseParams = __webpack_require__(26);
var _parseParams2 = _interopRequireDefault(_parseParams);
var _serialize = __webpack_require__(25);
var _serialize2 = _interopRequireDefault(_serialize);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
(function (env) {
var previousOwtlab = env.Owtlab || undefined;
function Client(props) {
if (this instanceof Client === false) {
return new Client(props);
}
this.configure(props);
// Set up event handling
if (Client.debug) {
this.on('error', Client.log);
}
this.emit('ready');
Client.emit('client', this);
}
if (previousOwtlab && typeof previousOwtlab.resources === 'undefined') {
Client.legacyVersion = previousOwtlab;
}
(0, _componentEmitter2.default)(Client);
(0, _componentEmitter2.default)(Client.prototype);
(0, _extend2.default)(Client, {
d